summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--.gitignore2
-rw-r--r--apworld/__init__.py38
-rw-r--r--apworld/locations.py5
-rw-r--r--apworld/options.py8
-rw-r--r--apworld/player_logic.py24
-rw-r--r--apworld/regions.py28
-rw-r--r--apworld/requirements.txt1
-rw-r--r--apworld/static_logic.py9
-rw-r--r--data/maps/the_entry/doors.txtpb34
-rw-r--r--proto/data.proto2
-rw-r--r--proto/human.proto1
-rw-r--r--tools/datapacker/main.cpp8
-rw-r--r--vcpkg.json8
13 files changed, 167 insertions, 1 deletions
diff --git a/.gitignore b/.gitignore index bf52fcf..84ef9bb 100644 --- a/.gitignore +++ b/.gitignore
@@ -1,3 +1,5 @@
1build/ 1build/
2generated/ 2generated/
3.vscode/ 3.vscode/
4apworld/generated/
5__pycache__
diff --git a/apworld/__init__.py b/apworld/__init__.py new file mode 100644 index 0000000..013910e --- /dev/null +++ b/apworld/__init__.py
@@ -0,0 +1,38 @@
1"""
2Archipelago init file for Lingo 2
3"""
4from worlds.AutoWorld import WebWorld, World
5from .options import Lingo2Options
6from .player_logic import Lingo2PlayerLogic
7from .regions import create_regions
8from .static_logic import Lingo2StaticLogic
9
10
11class Lingo2WebWorld(WebWorld):
12 rich_text_options_doc = True
13 theme = "grass"
14
15
16class Lingo2World(World):
17 """
18 Lingo 2 is a first person indie puzzle game where you solve word puzzles in a labyrinthe world. Compared to its
19 predecessor, Lingo 2 has new mechanics, more areas, and a unique progression system where you have to unlock letters
20 before using them in puzzle solutions.
21 """
22 game = "Lingo 2"
23 web = Lingo2WebWorld()
24
25 options_dataclass = Lingo2Options
26 options: Lingo2Options
27
28 item_name_to_id = {}
29 location_name_to_id = {}
30
31 static_logic = Lingo2StaticLogic()
32 player_logic: Lingo2PlayerLogic
33
34 def generate_early(self):
35 self.player_logic = Lingo2PlayerLogic(self)
36
37 def create_regions(self):
38 create_regions(self)
diff --git a/apworld/locations.py b/apworld/locations.py new file mode 100644 index 0000000..818be39 --- /dev/null +++ b/apworld/locations.py
@@ -0,0 +1,5 @@
1from BaseClasses import Location
2
3
4class Lingo2Location(Location):
5 game: str = "Lingo 2" \ No newline at end of file
diff --git a/apworld/options.py b/apworld/options.py new file mode 100644 index 0000000..f33f5af --- /dev/null +++ b/apworld/options.py
@@ -0,0 +1,8 @@
1from dataclasses import dataclass
2
3from Options import PerGameCommonOptions
4
5
6@dataclass
7class Lingo2Options(PerGameCommonOptions):
8 pass
diff --git a/apworld/player_logic.py b/apworld/player_logic.py new file mode 100644 index 0000000..f54573f --- /dev/null +++ b/apworld/player_logic.py
@@ -0,0 +1,24 @@
1from typing import TYPE_CHECKING, NamedTuple
2
3if TYPE_CHECKING:
4 from . import Lingo2World
5
6
7class PlayerLocation(NamedTuple):
8 name: str
9 code: int | None
10
11
12class Lingo2PlayerLogic:
13 locations_by_room: dict[int, list[PlayerLocation]]
14
15 def __init__(self, world: "Lingo2World"):
16 self.locations_by_room = {}
17
18 code = 1
19 for door in world.static_logic.objects.doors:
20 if not door.HasField("room_id"):
21 continue
22
23 self.locations_by_room.setdefault(door.room_id, []).append(PlayerLocation(door.name, code))
24 code += 1
diff --git a/apworld/regions.py b/apworld/regions.py new file mode 100644 index 0000000..24c2281 --- /dev/null +++ b/apworld/regions.py
@@ -0,0 +1,28 @@
1from typing import TYPE_CHECKING
2
3from BaseClasses import Region
4from .locations import Lingo2Location
5
6if TYPE_CHECKING:
7 from . import Lingo2World
8
9
10def create_region(room, world: "Lingo2World") -> Region:
11 new_region = Region(room.name, world.player, world.multiworld)
12
13 for location in world.player_logic.locations_by_room.get(room.id, {}):
14 new_location = Lingo2Location(world.player, location.name, location.code, new_region)
15 new_region.locations.append(new_location)
16
17 return new_region
18
19
20def create_regions(world: "Lingo2World"):
21 regions = {
22 "Menu": Region("Menu", world.player, world.multiworld)
23 }
24
25 for room in world.static_logic.objects.rooms:
26 regions[room.name] = create_region(room, world)
27
28 world.multiworld.regions += regions.values()
diff --git a/apworld/requirements.txt b/apworld/requirements.txt new file mode 100644 index 0000000..b701d11 --- /dev/null +++ b/apworld/requirements.txt
@@ -0,0 +1 @@
protobuf>=5.29.3 \ No newline at end of file
diff --git a/apworld/static_logic.py b/apworld/static_logic.py new file mode 100644 index 0000000..6c38f1f --- /dev/null +++ b/apworld/static_logic.py
@@ -0,0 +1,9 @@
1from .generated import data_pb2 as data_pb2
2import pkgutil
3
4class Lingo2StaticLogic:
5 def __init__(self):
6 file = pkgutil.get_data(__name__, "generated/data.binpb")
7
8 self.objects = data_pb2.AllObjects()
9 self.objects.ParseFromString(bytearray(file))
diff --git a/data/maps/the_entry/doors.txtpb b/data/maps/the_entry/doors.txtpb index c43020c..0ff0797 100644 --- a/data/maps/the_entry/doors.txtpb +++ b/data/maps/the_entry/doors.txtpb
@@ -3,12 +3,14 @@ doors {
3 type: STANDARD 3 type: STANDARD
4 receivers: "Components/Doors/side_1" 4 receivers: "Components/Doors/side_1"
5 panels { room: "Starting Room" name: "TRICK" } 5 panels { room: "Starting Room" name: "TRICK" }
6 location_room: "Starting Room"
6} 7}
7doors { 8doors {
8 name: "Link Area Entrance" 9 name: "Link Area Entrance"
9 type: STANDARD 10 type: STANDARD
10 receivers: "Components/Doors/side_2" 11 receivers: "Components/Doors/side_2"
11 panels { room: "Trick Room" name: "INK" answer: "link" } 12 panels { room: "Trick Room" name: "INK" answer: "link" }
13 location_room: "Trick Room"
12} 14}
13# side_3 is vanilla because I don't think it's real? 15# side_3 is vanilla because I don't think it's real?
14doors { 16doors {
@@ -16,12 +18,14 @@ doors {
16 type: STANDARD 18 type: STANDARD
17 receivers: "Components/Doors/side_4" 19 receivers: "Components/Doors/side_4"
18 panels { room: "Starting Room" name: "TRICK" answer: "treat" } 20 panels { room: "Starting Room" name: "TRICK" answer: "treat" }
21 location_room: "Starting Room"
19} 22}
20doors { 23doors {
21 name: "Second Room Right Door" 24 name: "Second Room Right Door"
22 type: STANDARD 25 type: STANDARD
23 receivers: "Components/Doors/second_right" 26 receivers: "Components/Doors/second_right"
24 panels { room: "Starting Room" name: "HINT" } 27 panels { room: "Starting Room" name: "HINT" }
28 location_room: "Starting Room"
25} 29}
26doors { 30doors {
27 name: "Red Alcove Exit" 31 name: "Red Alcove Exit"
@@ -29,6 +33,7 @@ doors {
29 receivers: "Components/Doors/second_right2" 33 receivers: "Components/Doors/second_right2"
30 panels { room: "Red Alcove" name: "DEAD" } 34 panels { room: "Red Alcove" name: "DEAD" }
31 panels { room: "Red Alcove" name: "BROW" } 35 panels { room: "Red Alcove" name: "BROW" }
36 location_room: "Red Alcove"
32} 37}
33doors { 38doors {
34 name: "Four Corner Panels" 39 name: "Four Corner Panels"
@@ -43,6 +48,7 @@ doors {
43 type: STANDARD 48 type: STANDARD
44 receivers: "Components/Doors/second_right11" 49 receivers: "Components/Doors/second_right11"
45 panels { room: "Least Blue Last" name: "CORNERS" } 50 panels { room: "Least Blue Last" name: "CORNERS" }
51 location_room: "Least Blue Last"
46} 52}
47doors { 53doors {
48 name: "Blue Alcove Exit" 54 name: "Blue Alcove Exit"
@@ -50,6 +56,7 @@ doors {
50 receivers: "Components/Doors/second_right3" 56 receivers: "Components/Doors/second_right3"
51 panels { room: "Blue Alcove" name: "BLUE" } 57 panels { room: "Blue Alcove" name: "BLUE" }
52 panels { room: "Blue Alcove" name: "ARMY" } 58 panels { room: "Blue Alcove" name: "ARMY" }
59 location_room: "Blue Alcove"
53} 60}
54doors { 61doors {
55 name: "Rabbithole Door" 62 name: "Rabbithole Door"
@@ -57,6 +64,7 @@ doors {
57 receivers: "Components/Doors/second_right8" 64 receivers: "Components/Doors/second_right8"
58 panels { room: "Wrath Room" name: "RABBIT" } 65 panels { room: "Wrath Room" name: "RABBIT" }
59 panels { room: "Wrath Room" name: "HOLE" } 66 panels { room: "Wrath Room" name: "HOLE" }
67 location_room: "Wrath Room"
60} 68}
61# second_right is vanilla because it's like LOST door. 69# second_right is vanilla because it's like LOST door.
62doors { 70doors {
@@ -65,18 +73,21 @@ doors {
65 receivers: "Components/Doors/second_right5" 73 receivers: "Components/Doors/second_right5"
66 receivers: "Components/Doors/second_right10" 74 receivers: "Components/Doors/second_right10"
67 panels { room: "Red Blue Halls" name: "CENTER DAY" } 75 panels { room: "Red Blue Halls" name: "CENTER DAY" }
76 location_room: "Red Blue Halls"
68} 77}
69doors { 78doors {
70 name: "Scarf Door" 79 name: "Scarf Door"
71 type: STANDARD 80 type: STANDARD
72 receivers: "Components/Doors/second_right6" 81 receivers: "Components/Doors/second_right6"
73 panels { room: "Red Blue Halls" name: "RAIN WOMAN" } 82 panels { room: "Red Blue Halls" name: "RAIN WOMAN" }
83 location_room: "Red Blue Halls"
74} 84}
75doors { 85doors {
76 name: "Blue Alcove Entrance" 86 name: "Blue Alcove Entrance"
77 type: STANDARD 87 type: STANDARD
78 receivers: "Components/Doors/second_right9" 88 receivers: "Components/Doors/second_right9"
79 panels { room: "Wrath Room" name: "CORN" } 89 panels { room: "Wrath Room" name: "CORN" }
90 location_room: "Wrath Room"
80} 91}
81doors { 92doors {
82 name: "Second Room Left Door" 93 name: "Second Room Left Door"
@@ -84,36 +95,42 @@ doors {
84 receivers: "Components/Doors/second_left" 95 receivers: "Components/Doors/second_left"
85 # There's also the special behavior with returning from The Digital. 96 # There's also the special behavior with returning from The Digital.
86 panels { room: "Starting Room" name: "THIN" } 97 panels { room: "Starting Room" name: "THIN" }
98 location_room: "Starting Room"
87} 99}
88doors { 100doors {
89 name: "Flipped Second Room Right Door" 101 name: "Flipped Second Room Right Door"
90 type: STANDARD 102 type: STANDARD
91 receivers: "Components/Doors/second_left_top" 103 receivers: "Components/Doors/second_left_top"
92 panels { room: "Flipped Second Room" name: "SLENDER" } 104 panels { room: "Flipped Second Room" name: "SLENDER" }
105 location_room: "Flipped Second Room"
93} 106}
94doors { 107doors {
95 name: "Flipped Second Room Left Door" 108 name: "Flipped Second Room Left Door"
96 type: STANDARD 109 type: STANDARD
97 receivers: "Components/Doors/second_right_top" 110 receivers: "Components/Doors/second_right_top"
98 panels { room: "Flipped Second Room" name: "CLUE" } 111 panels { room: "Flipped Second Room" name: "CLUE" }
112 location_room: "Flipped Second Room"
99} 113}
100doors { 114doors {
101 name: "Right Eye Entrance" 115 name: "Right Eye Entrance"
102 type: STANDARD 116 type: STANDARD
103 receivers: "Components/Doors/third_right" 117 receivers: "Components/Doors/third_right"
104 panels { room: "Trick Room" name: "INK" } 118 panels { room: "Trick Room" name: "INK" }
119 location_room: "Trick Room"
105} 120}
106doors { 121doors {
107 name: "Red Blue Area Left Door" 122 name: "Red Blue Area Left Door"
108 type: STANDARD 123 type: STANDARD
109 receivers: "Components/Doors/fourth_right" 124 receivers: "Components/Doors/fourth_right"
110 panels { room: "Right Eye" name: "WANDER" } 125 panels { room: "Right Eye" name: "WANDER" }
126 location_room: "Right Eye"
111} 127}
112doors { 128doors {
113 name: "Red Blue Area Right Door" 129 name: "Red Blue Area Right Door"
114 type: ITEM_ONLY 130 type: ITEM_ONLY
115 receivers: "Components/Doors/fifth_right" 131 receivers: "Components/Doors/fifth_right"
116 panels { room: "Right Eye" name: "WANDER" } 132 panels { room: "Right Eye" name: "WANDER" }
133 location_room: "Right Eye"
117} 134}
118# Components/Doors/back_left_1, _3, _4, _6 are vanilla because they're nothing. 135# Components/Doors/back_left_1, _3, _4, _6 are vanilla because they're nothing.
119doors { 136doors {
@@ -122,12 +139,14 @@ doors {
122 receivers: "Components/Doors/back_left_2" 139 receivers: "Components/Doors/back_left_2"
123 panels { room: "Colored Doors Area" name: "OPEN" answer: "orange" } 140 panels { room: "Colored Doors Area" name: "OPEN" answer: "orange" }
124 # "wall" is supposed to also work. idk man 141 # "wall" is supposed to also work. idk man
142 location_room: "Colored Doors Area"
125} 143}
126doors { 144doors {
127 name: "Lime Room Entrance" 145 name: "Lime Room Entrance"
128 type: STANDARD 146 type: STANDARD
129 receivers: "Components/Doors/back_left_5" 147 receivers: "Components/Doors/back_left_5"
130 panels { room: "Ctrl Tutorial" name: "RIGHT" } 148 panels { room: "Ctrl Tutorial" name: "RIGHT" }
149 location_room: "Ctrl Tutorial"
131} 150}
132doors { 151doors {
133 name: "Revitalized Entrance" 152 name: "Revitalized Entrance"
@@ -136,6 +155,7 @@ doors {
136 receivers: "Components/Doors/back_left_9" 155 receivers: "Components/Doors/back_left_9"
137 panels { room: "Lime Room" name: "HIDE" } 156 panels { room: "Lime Room" name: "HIDE" }
138 panels { room: "Lime Room" name: "SEEK" } 157 panels { room: "Lime Room" name: "SEEK" }
158 location_room: "Lime Room"
139} 159}
140doors { 160doors {
141 name: "Control Center White Door" 161 name: "Control Center White Door"
@@ -150,24 +170,28 @@ doors {
150 type: STANDARD 170 type: STANDARD
151 receivers: "Components/Doors/Entry/entry_proxied_2" 171 receivers: "Components/Doors/Entry/entry_proxied_2"
152 panels { room: "Starting Room" name: "HI" answer: "bye" } 172 panels { room: "Starting Room" name: "HI" answer: "bye" }
173 location_room: "Starting Room"
153} 174}
154doors { 175doors {
155 name: "Composite Room Entrance" 176 name: "Composite Room Entrance"
156 type: STANDARD 177 type: STANDARD
157 receivers: "Components/Doors/Entry/entry_proxied_3" 178 receivers: "Components/Doors/Entry/entry_proxied_3"
158 panels { room: "Starting Room" name: "HI" answer: "hidden" } 179 panels { room: "Starting Room" name: "HI" answer: "hidden" }
180 location_room: "Starting Room"
159} 181}
160doors { 182doors {
161 name: "Flip Area Entrance" 183 name: "Flip Area Entrance"
162 type: STANDARD 184 type: STANDARD
163 receivers: "Components/Doors/Entry/entry_proxied_4" 185 receivers: "Components/Doors/Entry/entry_proxied_4"
164 panels { room: "Starting Room" name: "HI" answer: "high" } 186 panels { room: "Starting Room" name: "HI" answer: "high" }
187 location_room: "Starting Room"
165} 188}
166doors { 189doors {
167 name: "Daedalus Entrance" 190 name: "Daedalus Entrance"
168 type: STANDARD 191 type: STANDARD
169 receivers: "Components/Doors/Entry/entry_proxied_5" 192 receivers: "Components/Doors/Entry/entry_proxied_5"
170 panels { room: "Starting Room" name: "HI" answer: "hide" } 193 panels { room: "Starting Room" name: "HI" answer: "hide" }
194 location_room: "Starting Room"
171} 195}
172doors { 196doors {
173 name: "Repetitive Entrance" 197 name: "Repetitive Entrance"
@@ -180,12 +204,14 @@ doors {
180 type: STANDARD 204 type: STANDARD
181 receivers: "Components/Doors/Entry/entry_proxied_6" 205 receivers: "Components/Doors/Entry/entry_proxied_6"
182 panels { room: "Shop Entrance" name: "TURN" } 206 panels { room: "Shop Entrance" name: "TURN" }
207 location_room: "Shop Entrance"
183} 208}
184doors { 209doors {
185 name: "Liberated Entrance" 210 name: "Liberated Entrance"
186 type: STANDARD 211 type: STANDARD
187 receivers: "Components/Doors/Entry/entry_proxied_10" 212 receivers: "Components/Doors/Entry/entry_proxied_10"
188 panels { room: "Flipped Pyramid Area" name: "TURN (1)" } 213 panels { room: "Flipped Pyramid Area" name: "TURN (1)" }
214 location_room: "Flipped Pyramid Area"
189} 215}
190doors { 216doors {
191 name: "Flipped Pyramid Area Entrance" 217 name: "Flipped Pyramid Area Entrance"
@@ -198,24 +224,28 @@ doors {
198 type: STANDARD 224 type: STANDARD
199 receivers: "Components/Doors/Entry/entry_proxied_11" 225 receivers: "Components/Doors/Entry/entry_proxied_11"
200 panels { room: "Flipped Pyramid Area" name: "TURN (2)" } 226 panels { room: "Flipped Pyramid Area" name: "TURN (2)" }
227 location_room: "Flipped Pyramid Area"
201} 228}
202doors { 229doors {
203 name: "Parthenon Entrance" 230 name: "Parthenon Entrance"
204 type: STANDARD 231 type: STANDARD
205 receivers: "Components/Doors/Entry/entry_proxied_7" 232 receivers: "Components/Doors/Entry/entry_proxied_7"
206 panels { room: "Parthenon Return" name: "RETURN" } 233 panels { room: "Parthenon Return" name: "RETURN" }
234 location_room: "Parthenon Return"
207} 235}
208doors { 236doors {
209 name: "Colored Doors Area Entrance" 237 name: "Colored Doors Area Entrance"
210 type: ITEM_ONLY 238 type: ITEM_ONLY
211 receivers: "Components/Doors/Entry/entry_proxied_8" 239 receivers: "Components/Doors/Entry/entry_proxied_8"
212 panels { room: "Parthenon Return" name: "RETURN" } 240 panels { room: "Parthenon Return" name: "RETURN" }
241 location_room: "Parthenon Return"
213} 242}
214doors { 243doors {
215 name: "D Room Entrance" 244 name: "D Room Entrance"
216 type: STANDARD 245 type: STANDARD
217 receivers: "Components/Doors/Entry/d_1" 246 receivers: "Components/Doors/Entry/d_1"
218 panels { room: "Starting Room" name: "THAN" } 247 panels { room: "Starting Room" name: "THAN" }
248 location_room: "Starting Room"
219} 249}
220doors { 250doors {
221 name: "Near D Room Painting" 251 name: "Near D Room Painting"
@@ -243,6 +273,7 @@ doors {
243 type: STANDARD 273 type: STANDARD
244 receivers: "Components/Doors/Entry/entry_return_1" 274 receivers: "Components/Doors/Entry/entry_return_1"
245 panels { room: "Gallery Return" name: "RETURN" } 275 panels { room: "Gallery Return" name: "RETURN" }
276 location_room: "Gallery Return"
246} 277}
247# entry_front_1 - _6 are part of the vanilla intro. 278# entry_front_1 - _6 are part of the vanilla intro.
248doors { 279doors {
@@ -251,6 +282,7 @@ doors {
251 receivers: "Components/Doors/Entry/entry_front_7" 282 receivers: "Components/Doors/Entry/entry_front_7"
252 receivers: "Components/Doors/Entry/entry_front_8" 283 receivers: "Components/Doors/Entry/entry_front_8"
253 panels { room: "Trick Room" name: "INK" } 284 panels { room: "Trick Room" name: "INK" }
285 location_room: "Trick Room"
254} 286}
255doors { 287doors {
256 name: "Least Blue Last Panels" 288 name: "Least Blue Last Panels"
@@ -271,10 +303,12 @@ doors {
271 type: STANDARD 303 type: STANDARD
272 move_paintings { room: "Right Eye" name: "PSYCHIC" } 304 move_paintings { room: "Right Eye" name: "PSYCHIC" }
273 panels { room: "Right Eye" name: "FAINT" } 305 panels { room: "Right Eye" name: "FAINT" }
306 location_room: "Right Eye"
274} 307}
275doors { 308doors {
276 name: "Third Eye Painting" 309 name: "Third Eye Painting"
277 type: STANDARD 310 type: STANDARD
278 move_paintings { room: "Eye Room" name: "GALLERY" } 311 move_paintings { room: "Eye Room" name: "GALLERY" }
279 panels { room: "Eye Room" name: "I" } 312 panels { room: "Eye Room" name: "I" }
313 location_room: "Eye Room"
280} \ No newline at end of file 314} \ No newline at end of file
diff --git a/proto/data.proto b/proto/data.proto index 37d59f3..3417c4c 100644 --- a/proto/data.proto +++ b/proto/data.proto
@@ -24,6 +24,7 @@ message Connection {
24message Door { 24message Door {
25 uint64 id = 1; 25 uint64 id = 1;
26 uint64 map_id = 9; 26 uint64 map_id = 9;
27 uint64 room_id = 10;
27 string name = 2; 28 string name = 2;
28 29
29 repeated string receivers = 3; 30 repeated string receivers = 3;
@@ -88,6 +89,7 @@ message Room {
88 repeated uint64 paintings = 5; 89 repeated uint64 paintings = 5;
89 repeated Letter letters = 6; 90 repeated Letter letters = 6;
90 repeated uint64 ports = 7; 91 repeated uint64 ports = 7;
92 repeated uint64 doors = 9;
91} 93}
92 94
93message Map { 95message Map {
diff --git a/proto/human.proto b/proto/human.proto index 49eaccd..d5d03ff 100644 --- a/proto/human.proto +++ b/proto/human.proto
@@ -72,6 +72,7 @@ message HumanDoor {
72 repeated string switches = 7; 72 repeated string switches = 7;
73 73
74 DoorType type = 4; 74 DoorType type = 4;
75 string location_room = 5;
75} 76}
76 77
77message HumanDoors { 78message HumanDoors {
diff --git a/tools/datapacker/main.cpp b/tools/datapacker/main.cpp index e63f940..1dcd109 100644 --- a/tools/datapacker/main.cpp +++ b/tools/datapacker/main.cpp
@@ -215,6 +215,14 @@ class DataPacker {
215 container_.FindOrAddDoor(current_map_name, h_door.name(), std::nullopt); 215 container_.FindOrAddDoor(current_map_name, h_door.name(), std::nullopt);
216 Door& door = *container_.all_objects().mutable_doors(door_id); 216 Door& door = *container_.all_objects().mutable_doors(door_id);
217 217
218 if (h_door.has_location_room()) {
219 door.set_room_id(container_.FindOrAddRoom(
220 current_map_name, h_door.location_room(), std::nullopt));
221
222 Room& room = *container_.all_objects().mutable_rooms(door.room_id());
223 room.add_doors(door_id);
224 }
225
218 std::copy( 226 std::copy(
219 h_door.receivers().begin(), h_door.receivers().end(), 227 h_door.receivers().begin(), h_door.receivers().end(),
220 google::protobuf::RepeatedFieldBackInserter(door.mutable_receivers())); 228 google::protobuf::RepeatedFieldBackInserter(door.mutable_receivers()));
diff --git a/vcpkg.json b/vcpkg.json index 4b3fb5d..cd12788 100644 --- a/vcpkg.json +++ b/vcpkg.json
@@ -1,5 +1,11 @@
1{ 1{
2 "dependencies": [ 2 "dependencies": [
3 "protobuf" 3 "protobuf"
4 ],
5 "overrides": [
6 {
7 "name": "protobuf",
8 "version": "5.29.3"
9 }
4 ] 10 ]
5} 11} \ No newline at end of file