about summary refs log tree commit diff stats
path: root/README.md
blob: 8b1a4256742903f5848d3dc0e8065926351c2c4a (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
# lingo2-archipelago

[Archipelago](https://archipelago.gg/) is an open-source project that supports
randomizing a number of different games and combining them into one cooperative
experience. Items from each game are hidden in other games. For more information
about Archipelago, you can look at their website.

This is a project that modifies the game
[Lingo 2](https://www.lingothegame.com/lingo2.html) so that it can be played as
part of an Archipelago multiworld game.

## Installation

1. Download the Lingo 2 Apworld from
   [the releases page](https://code.fourisland.com/lingo2-archipelago/about/CHANGELOG.md).
2. If you do not already have it, download and install the
   [Archipelago software](https://github.com/ArchipelagoMW/Archipelago/releases/).
3. Double click on `lingo2.apworld` to install it, or copy it manually to the
   `custom_worlds` folder of your Archipelago installation.

## Joining a Multiworld game

1. Open the Archipelago Launcher.
2. Select "Lingo 2 Client".
3. The first time you do this, Archipelago will prompt you for the location of
   the Lingo 2 executable file ("Lingo2.exe"). You can find this by
   right-clicking on Lingo 2 in Steam, going to "Manage", and clicking "Browse
   local files".
4. Lingo 2 will open, and you will see a form asking for your connection
   details. Enter the Archipelago address, slot name, and password into the
   fields.
5. Press Connect.
6. Enjoy!

To continue an earlier game, you can perform the exact same steps as above.

**Note**: Running the randomizer modifies the game's memory. If you want to play
the base game after playing the randomizer, you need to restart Lingo 2 first.

## Frequently Asked Questions

### Why aren't the starting room letters shuffled?

The letter requirements for solving puzzles are very restrictive, especially in
the early game. It is possible for the generator to find some subset of letters
and doors to place in the starting room such that you are not trapped, but this
places a lot of strain on generation and leads to significantly more generation
failures.

As a result, the starting room letters (H1, I1, N1, and T1) are always present
in the starting room, even when remote letter shuffle is enabled. These letters
will _also_ count as clearing a check, so you will send out another item at the
same time as collecting the letter.

### What areas are randomized?

Almost all maps that you can access from the base game are randomized. The
exceptions are:

- Icarus (this will be randomized at some point, although it will be optional)
- Demo
- The Hinterlands (this will probably be repurposed)
- The beta tester gift maps

### Is my progress saved locally?

Lingo 2 autosaves your progress every time you solve a puzzle, get a
collectable, or interact with a keyholder. The randomizer generates a savefile
name based on your Multiworld seed and slot number, so you should be able to
seamlessly switch between multiworlds and even slots within a multiworld.

The exception to this is different rooms created from the same multiworld seed.
The client is unable to tell rooms in a seed apart (this is a limitation of the
Archipelago API), so the client will use the same save file for the same slot in
different rooms on the same seed. You can work around this by manually moving or
removing the save folder from the users directory in Lingo 2's game files.

If you play the base game again, you will see one or more save files with a long
name that begins with "zzAP\_". These are the saves for your multiworlds. They
can be safely deleted after you have completed the associated multiworld. It is
not recommended to load these save files outside of the randomizer.

A connection to Archipelago is required to resume playing a multiworld. This is
because the set of items you have received is not stored locally.

### What about wall snipes?

"Wall sniping" refers to the fact that you are able to solve puzzles on the
other side of opaque walls. The player is never expected to or required to do
this in normal gameplay. This randomizer does not change how wall snipes work,
but it will likewise never require the use of them.

### How do cyan doors work?

In the base game, there are a number of cyan-colored doors that ordinarily open
once you collect H2 in The Repetitive. There are also a handful of panels that
only appear upon getting H2 as well, which the apworld treats the same as the
cyan doors.

There is an option that lets you choose how these doors and panels behave. By
default, they act the same as in the base game: they only open or appear after
collecting H2. Note that this means the actual H2 collectable in The Repetitive.
Receiving H2 via remote letter shuffle does not count for this requirement.
However, you can also make cyan doors activate upon collecting or receiving your
first double letter, regardless of what it is or if it's remote. Finally, you
can lock cyan doors behind an item called "Cyan Doors".

It is important to note, however, that the Cyan Door Behavior option only
applies to cyan doors that are not already affected by another type of
shuffling. When door shuffle is on, the following cyan doors are activated by
individual items and are not impacted by your choice of Cyan Door Behavior:

- The entrance to The Tower from The Great (The Great - Tower Entrance)
- The entrance to The Butterfly from The Bearer (The Bearer - Butterfly
  Entrance)
- The entrance to The Repetitive from The Entry (The Entry - Repetitive
  Entrance)
- The eye painting near the yellow color hallway in Daedalus (Daedalus - Eye
  Painting)
- The Red I room in The Repetitive (The Repetitive - Anti Collectable Room)

Additionally, when control center color shuffle is enabled, the orange door in
The Unkempt (which ordinarily doubles as a cyan door) opens upon receiving the
Control Center Orange Doors item, instead of following the Cyan Door Behavior
option.

### Help! I lost C/G in The Congruent!

If you place C or G into the relevant keyholders in The Congruent, the keyholder
disappears. You can retrieve your letter immediately by pressing C or G again
before leaving solve mode, as the keyholder will still be considered to be
"focused", even though it has moved. If you have already moved, though, there is
another way to get your letters back: just use the Key Return in The Entry.

## Running from source

The randomizer is mostly written in Python and GDScript, which do not need to be
compiled. However, there are three files that need to be generated before the
apworld can be used.

The first file is `data.binpb`, the datafile containing the randomizer logic.
You can read about how to generate it on
[its own README page](https://code.fourisland.com/lingo2-archipelago/about/data/README.md).
Once you have it, put it in a subfolder of `apworld` called `generated`.

The second generated file is `data_pb2.py`. This file allows Archipelago to read
the datafile. We use `protoc`, the Protocol Buffer compiler, to generate it. As
of 0.6.3, Archipelago has protobuf 3.20.3 packaged with it, which means we need
to compile our proto file with a similar version.

If you followed the steps to generate `data.binpb` and compiled the `datapacker`
tool yourself, you will already have protobuf version 3.21.12 installed through
vcpkg. You can then run a command similar to this in order to generate the
python file.

```shell
.\out\build\x64-Debug\vcpkg_installed\x64-windows\tools\protobuf\protoc.exe -Iproto\ ^
  --python_out=apworld\generated\ .\proto\data.proto
```

The exact path to `protoc.exe` is going to depend on where vcpkg installed its
packages. The above location is where Visual Studio will probably put it.

The third generated file is `proto.gd`. This is the GDScript version of the
previous file. We use a Godot script to generate it, which means
[the Godot Editor](https://godotengine.org/download/) is required. From the root
of the repository:

```shell
cd vendor\godobuf
godot --headless -s addons\protobuf\protobuf_cmdln.gd --input=..\..\proto\data.proto ^
  --output=..\..\apworld\generated\proto.gd
```

If you are not on Windows, replace the forward slashes with backslashes as
appropriate (and the caret with a forward slash). You will also probably need to
replace "godot" at the start of the second line with a path to a Godot Editor
executable.

After generating those three files, the apworld should be functional. You can
copy it into an Archipelago source tree (rename the folder `apworld` to `lingo2`
if you do so) if you want to edit/debug the code. Otherwise, you can zip up the
folder and rename it to `lingo2.apworld` in order to package it for
distribution.
previous revision' href='/lingo-archipelago/blame/README.md?h=v5.0.1&id=5c924e6705c05806324a5083e1accd26a6751857'>^
5c924e6 ^




21c179e ^





fb05af1 ^
21c179e ^



a07d747 ^


21c179e ^





























1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
                          
 






                                                                                


               











                                                                                         

                                                                          


                                                                               




                                                                       

                                                                             



                                                                          


                                                                               
 




                                                                                
 

                                                                                
 
                      
 

                                                                              
 








                                                                                             
 
           
 


















                                                                                
 

                             

                                          



                                                                               

                                   
                                









                                                                        


                                                                                
 

                                 



                                                                               
 




                                                                                
 



                                                                                
 


                                                                               
 
                                                     




                                                     





                                                                               
 



                                                                              


                              





























                                                                                
# Lingo Archipelago Client

[Archipelago](https://archipelago.gg/) is an open-source project that supports
randomizing a number of different games and combining them into one cooperative
experience. Items from each game are hidden in other games. For more information
about Archipelago, you can look at their website.

This is a project that modifies the game [Lingo](https://lingothegame.com/) so
that it can be played as part of an Archipelago multiworld game.

## Installation

The Lingo Archipelago client is available on
[Steam Workshop](https://steamcommunity.com/sharedfiles/filedetails/?id=3092505110).
If you click Subscribe on that page, Lingo will automatically download the map,
and it will download any updates as they are posted.

If you don't want to / can't use Steam Workshop, you can install the mod
manually:

1. Download the Lingo Archipelago Randomizer from
   [the releases page](https://code.fourisland.com/lingo-archipelago/about/CHANGELOG.md).
2. Open up Lingo, go to settings, and click View Game Data. This should open up
   a folder in Windows Explorer.
3. Unzip the randomizer into the "maps" folder. You may need to create the
   "maps" folder if you have not played a custom Lingo map before.
4. Installation complete! You may have to click Return to go back to the main
   menu and then click Settings again in order to get the randomizer to show up
   in the level selection list.

## Joining a Multiworld game

1. Launch Lingo
2. Click on Settings, and then Level. Choose Archipelago from the list.
3. Start a new game. Leave the name field blank (anything you type in will be
   ignored).
4. Enter the Archipelago address, slot name, and password into the fields.
5. Press Connect.
6. Enjoy!

To continue an earlier game, you can perform the exact same steps as above. You
do not have to re-select Archipelago in the level selection screen if you were
using Archipelago the last time you launched the game.

In order to play the base game again, simply return to the level selection
screen and choose Level 1 (or whatever else you want to play). The randomizer
will not affect gameplay unless you launch it by starting a new game while it is
selected in the level selection screen, so it is safe to play the game normally
while the client is installed.

**Note**: Running the randomizer modifies the game's memory. If you want to play
the base game after playing the randomizer, you need to restart Lingo first.

## Running from source

If you are not testing local changes to the source code, skip this section and
read the Installation section instead.

The randomizer is almost ready to run from source. The only step that is
required is to compile the gamedata.gd file, which is generated from the
[LL1.yaml](https://github.com/ArchipelagoMW/Archipelago/blob/main/worlds/lingo/data/LL1.yaml)
and
[ids.yaml](https://github.com/ArchipelagoMW/Archipelago/blob/main/worlds/lingo/data/ids.yaml)
datafiles from the Archipelago source tree. The generate_gamedata.rb script in
the util folder can do this for you. The first argument is the path to the
LL1.yaml datafile, the second is the path to the ids.yaml datafile, and the
third argument is the path to the output file.

## Features

There are a couple of modes of randomization currently available, and you can
pick and choose which ones you would like to use.

- **Door shuffle**: There are many doors in the game, which are opened by
  completing a set of panels. With door shuffle on, the doors become items and
  only open up once you receive the corresponding item. The panel sets that
  would ordinarily open the doors become locations.
- **Color shuffle**: There are ten different colours of puzzle in the game, each
  representing a different mechanic. With color shuffle on, you would start with
  only access to white puzzles. Puzzles of other colours will require you to
  receive an item in order to solve them (e.g. you can't solve any red puzzles
  until you receive the "Red" item).
- **Panel shuffle**: Panel shuffling replaces the puzzles on each panel with
  different ones. So far, the only mode of panel shuffling is "rearrange" mode,
  which simply shuffles the already-existing puzzles from the base game onto
  different panels.
- **Painting shuffle**: This randomizes the appearance of the paintings in the
  game, as well as which of them are warps, and the locations that they warp you
  to. It is the equivalent of an entrance randomizer in another game.

## Frequently Asked Questions

### What are location checks in this game?

Puzzle sets that ordinarily open doors in the base game are almost always
location checks, even if you do not have door shuffle on. Achievement panels
(ones starting with "THE", including "THE END") are also checks. There are also
a few other panels that are location checks:

- THE EYES / THEY SEE in Crossroads
- HIDE / SEEK (x4) in Hedge Maze
- OUT / OUT in the Wheelbarrow Hallway
- UNDISTRACTED / UNDISTRACTED in the Wheelbarrow Hallway
- CLOCKWISE / COUNTERCLOCKWISE in the Welcome Back Area
- RAINY / RAINBOW in the rainbow room next to The Undeterred (blue room)
- PARANOID / PARANOID in the Directional Gallery
- WADED + WEE / WARTS in the Directional Gallery
- YOU / \[your name\] in Champion's Rest

These may change in the future.

**Note**: In the second room, you ordinarily only have to solve HI / HIGH to
open the door. This is modified in the randomizer so that you have to solve both
puzzles to receive a location check.

### Is my progress saved locally?

Lingo autosaves your progress every time you solve a puzzle. The randomizer
generates a savefile name based on your Multiworld seed and slot number, so you
should be able to seamlessly switch between multiworlds and even slots within a
multiworld.

The exception to this is different rooms created from the same multiworld seed.
The client is unable to tell rooms in a seed apart (this is a limitation of the
Archipelago API), so the client will use the same save file for the same slot in
different rooms on the same seed. You can work around this by manually moving or
removing the save file from the level1 save file directory.

If you play the base game again, you will see one or more save files with a long
name that begins with "zzAP\_". These are the saves for your multiworlds. They
can be safely deleted after you have completed the associated multiworld. It is
not recommended to load these save files outside of the randomizer.

A connection to Archipelago is required to resume playing a multiworld. This is
because the set of items you have received is not stored locally. This may be
changed in the future.

### How do I solve the YOU puzzle in Champion's Rest?

The solution to this puzzle is set to your slot name.

### What about wall snipes?

"Wall sniping" refers to the fact that you are able to solve puzzles on the
other side of opaque walls. This randomizer does not change how wall snipes
work, but it will never require the use of them. There are three puzzles from
the base game that you would ordinarily be expected to wall snipe. The
randomizer moves these panels out of the wall or otherwise reveals them so that
a snipe is not necessary.

Because of this, all wall snipes are considered out of logic. This includes
sniping The Bearer's MIDDLE while standing outside The Bold, sniping The
Colorful without opening all of the color doors, and sniping WELCOME from next
to WELCOME BACK.

### What about the pilgrimage?

The intended method of reaching the Pilgrim Room in the base game is known as
"doing a pilgrimage". It involves entering each sunwarp in order without using
any non-painting warps in between. This is difficult to map out properly in AP
logic, so we only consider one specific path through the map to be the canonical
pilgrimage route. Accessing the Pilgrim Room by pilgrimage is only in logic if
this specific route is available to you:

- From the Starting Room, proceed through the Second Room and into the Hub Room.
  Enter the first sunwarp.
- From the Crossroads, use the front tower entrance (the one nearest The
  Discerning; not the one next to Sword/Words). Go through the Hot Crusts Door
  and enter the second sunwarp.
- Enter the third sunwarp immediately after.
- Proceed past The Initiated and through the shortcut door back to the Hub Room.
  Go through the shortcut door to the tower's first floor and enter the fourth
  sunwarp.
- Use the shortcut to the Directional Gallery (the one outside The Undeterred;
  not the one further down the hallway where the Number Hunt is), pass through
  the Salt Pepper Door, and return to the Hub Room. Use the nearby entrance to
  the Crossroads and proceed to the fifth sunwarp.
- Use the door that takes you to The Steady, and then the one that takes you to
  The Bearer, and then the one that takes you to The Initiated. Return to the
  Hub Room once more, and enter The Tenacious via the shortcut that opens upon
  solving the palindromes. Use the top-right door to access the area Outside the
  Agreeable, and enter the final sunwarp.

This route can be seen
[starting at 2:47 in this video](https://youtu.be/8GfuDRRswdA?t=167). Note that
this will almost never be required if door shuffle is enabled, as one of the
other entrances to the room will usually be available sooner.