summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--apworld/player_logic.py8
-rw-r--r--apworld/static_logic.py9
-rw-r--r--data/maps/four_rooms/rooms/A2 Room.txtpb2
-rw-r--r--data/maps/the_bearer/rooms/Q2 Room.txtpb2
-rw-r--r--data/maps/the_between/rooms/B2 Room.txtpb2
-rw-r--r--data/maps/the_colorful/rooms/P2 Room.txtpb2
-rw-r--r--data/maps/the_congruent/rooms/C2 Room.txtpb2
-rw-r--r--data/maps/the_congruent/rooms/G2 Room.txtpb2
-rw-r--r--proto/CMakeLists.txt2
-rw-r--r--proto/common.proto38
-rw-r--r--proto/data.proto173
-rw-r--r--proto/human.proto112
-rw-r--r--tools/assign_ids/main.cpp3
-rw-r--r--tools/datapacker/container.cpp10
-rw-r--r--tools/datapacker/container.h2
-rw-r--r--tools/datapacker/main.cpp16
-rw-r--r--tools/util/naming.cpp4
-rw-r--r--tools/util/naming.h2
18 files changed, 192 insertions, 199 deletions
diff --git a/apworld/player_logic.py b/apworld/player_logic.py index 958abc5..8b240b5 100644 --- a/apworld/player_logic.py +++ b/apworld/player_logic.py
@@ -1,4 +1,4 @@
1from .generated import common_pb2 as common_pb2 1from .generated import data_pb2 as data_pb2
2from typing import TYPE_CHECKING, NamedTuple 2from typing import TYPE_CHECKING, NamedTuple
3 3
4if TYPE_CHECKING: 4if TYPE_CHECKING:
@@ -79,11 +79,11 @@ class Lingo2PlayerLogic:
79 self.real_items = list() 79 self.real_items = list()
80 80
81 for door in world.static_logic.objects.doors: 81 for door in world.static_logic.objects.doors:
82 if door.type in [common_pb2.DoorType.STANDARD, common_pb2.DoorType.LOCATION_ONLY]: 82 if door.type in [data_pb2.DoorType.STANDARD, data_pb2.DoorType.LOCATION_ONLY]:
83 self.locations_by_room.setdefault(door.room_id, []).append(PlayerLocation(door.ap_id, 83 self.locations_by_room.setdefault(door.room_id, []).append(PlayerLocation(door.ap_id,
84 self.get_door_reqs(door.id))) 84 self.get_door_reqs(door.id)))
85 85
86 if door.type in [common_pb2.DoorType.STANDARD, common_pb2.DoorType.ITEM_ONLY] and self.world.options.shuffle_doors: 86 if door.type in [data_pb2.DoorType.STANDARD, data_pb2.DoorType.ITEM_ONLY] and self.world.options.shuffle_doors:
87 self.real_items.append(self.world.static_logic.get_door_item_name(door.id)) 87 self.real_items.append(self.world.static_logic.get_door_item_name(door.id))
88 88
89 for letter in world.static_logic.objects.letters: 89 for letter in world.static_logic.objects.letters:
@@ -146,7 +146,7 @@ class Lingo2PlayerLogic:
146 reqs = AccessRequirements() 146 reqs = AccessRequirements()
147 147
148 use_item = False 148 use_item = False
149 if door.type in [common_pb2.DoorType.STANDARD, common_pb2.DoorType.ITEM_ONLY] and self.world.options.shuffle_doors: 149 if door.type in [data_pb2.DoorType.STANDARD, data_pb2.DoorType.ITEM_ONLY] and self.world.options.shuffle_doors:
150 use_item = True 150 use_item = True
151 151
152 if use_item: 152 if use_item:
diff --git a/apworld/static_logic.py b/apworld/static_logic.py index ff58e96..6a05f3d 100644 --- a/apworld/static_logic.py +++ b/apworld/static_logic.py
@@ -1,4 +1,3 @@
1from .generated import common_pb2 as common_pb2
2from .generated import data_pb2 as data_pb2 1from .generated import data_pb2 as data_pb2
3import pkgutil 2import pkgutil
4 3
@@ -18,20 +17,20 @@ class Lingo2StaticLogic:
18 self.objects.ParseFromString(bytearray(file)) 17 self.objects.ParseFromString(bytearray(file))
19 18
20 for door in self.objects.doors: 19 for door in self.objects.doors:
21 if door.type in [common_pb2.DoorType.STANDARD, common_pb2.DoorType.LOCATION_ONLY]: 20 if door.type in [data_pb2.DoorType.STANDARD, data_pb2.DoorType.LOCATION_ONLY]:
22 location_name = f"{self.objects.maps[door.map_id].name} - {door.name}" 21 location_name = f"{self.objects.maps[door.map_id].name} - {door.name}"
23 self.location_id_to_name[door.ap_id] = location_name 22 self.location_id_to_name[door.ap_id] = location_name
24 23
25 if door.type not in [common_pb2.DoorType.EVENT, common_pb2.DoorType.LOCATION_ONLY]: 24 if door.type not in [data_pb2.DoorType.EVENT, data_pb2.DoorType.LOCATION_ONLY]:
26 item_name = self.get_door_item_name(door.id) 25 item_name = self.get_door_item_name(door.id)
27 self.item_id_to_name[door.ap_id] = item_name 26 self.item_id_to_name[door.ap_id] = item_name
28 27
29 for letter in self.objects.letters: 28 for letter in self.objects.letters:
30 letter_name = f"{letter.key.upper()}{'' if letter.double else '2'}" 29 letter_name = f"{letter.key.upper()}{'' if letter.level2 else '2'}"
31 location_name = f"{self.objects.maps[self.objects.rooms[letter.room_id].map_id].name} - {letter_name}" 30 location_name = f"{self.objects.maps[self.objects.rooms[letter.room_id].map_id].name} - {letter_name}"
32 self.location_id_to_name[letter.ap_id] = location_name 31 self.location_id_to_name[letter.ap_id] = location_name
33 32
34 if not letter.double: 33 if not letter.level2:
35 self.item_id_to_name[letter.ap_id] = letter_name 34 self.item_id_to_name[letter.ap_id] = letter_name
36 35
37 for mastery in self.objects.masteries: 36 for mastery in self.objects.masteries:
diff --git a/data/maps/four_rooms/rooms/A2 Room.txtpb b/data/maps/four_rooms/rooms/A2 Room.txtpb index 20c9838..236ce01 100644 --- a/data/maps/four_rooms/rooms/A2 Room.txtpb +++ b/data/maps/four_rooms/rooms/A2 Room.txtpb
@@ -2,6 +2,6 @@ name: "A2 Room"
2display_name: "Hallway" 2display_name: "Hallway"
3letters { 3letters {
4 key: "a" 4 key: "a"
5 double: true 5 level2: true
6 path: "Components/Collectables/a2" 6 path: "Components/Collectables/a2"
7} 7}
diff --git a/data/maps/the_bearer/rooms/Q2 Room.txtpb b/data/maps/the_bearer/rooms/Q2 Room.txtpb index 2c0c276..ab5032a 100644 --- a/data/maps/the_bearer/rooms/Q2 Room.txtpb +++ b/data/maps/the_bearer/rooms/Q2 Room.txtpb
@@ -2,6 +2,6 @@ name: "Q2 Room"
2display_name: "Back Area" 2display_name: "Back Area"
3letters { 3letters {
4 key: "q" 4 key: "q"
5 double: true 5 level2: true
6 path: "Components/Collectables/collectable" 6 path: "Components/Collectables/collectable"
7} 7}
diff --git a/data/maps/the_between/rooms/B2 Room.txtpb b/data/maps/the_between/rooms/B2 Room.txtpb index 97b4684..aad5d15 100644 --- a/data/maps/the_between/rooms/B2 Room.txtpb +++ b/data/maps/the_between/rooms/B2 Room.txtpb
@@ -2,7 +2,7 @@ name: "B2 Room"
2display_name: "B2 Room" 2display_name: "B2 Room"
3letters { 3letters {
4 key: "b" 4 key: "b"
5 double: true 5 level2: true
6 path: "Components/Collectables/collectable" 6 path: "Components/Collectables/collectable"
7} 7}
8# Uhh idk if the paintings and door in here should be randomized. 8# Uhh idk if the paintings and door in here should be randomized.
diff --git a/data/maps/the_colorful/rooms/P2 Room.txtpb b/data/maps/the_colorful/rooms/P2 Room.txtpb index 8c7e0f1..85dbf20 100644 --- a/data/maps/the_colorful/rooms/P2 Room.txtpb +++ b/data/maps/the_colorful/rooms/P2 Room.txtpb
@@ -2,6 +2,6 @@ name: "P2 Room"
2display_name: "Cyan Room" 2display_name: "Cyan Room"
3letters { 3letters {
4 key: "p" 4 key: "p"
5 double: true 5 level2: true
6 path: "Components/Collectables/p2" 6 path: "Components/Collectables/p2"
7} 7}
diff --git a/data/maps/the_congruent/rooms/C2 Room.txtpb b/data/maps/the_congruent/rooms/C2 Room.txtpb index 69c9a46..852d4e2 100644 --- a/data/maps/the_congruent/rooms/C2 Room.txtpb +++ b/data/maps/the_congruent/rooms/C2 Room.txtpb
@@ -2,6 +2,6 @@ name: "C2 Room"
2display_name: "Main Area" 2display_name: "Main Area"
3letters { 3letters {
4 key: "c" 4 key: "c"
5 double: true 5 level2: true
6 path: "Components/Collectables/collectable2" 6 path: "Components/Collectables/collectable2"
7} 7}
diff --git a/data/maps/the_congruent/rooms/G2 Room.txtpb b/data/maps/the_congruent/rooms/G2 Room.txtpb index ba9d772..80a23cb 100644 --- a/data/maps/the_congruent/rooms/G2 Room.txtpb +++ b/data/maps/the_congruent/rooms/G2 Room.txtpb
@@ -2,6 +2,6 @@ name: "G2 Room"
2display_name: "Main Area" 2display_name: "Main Area"
3letters { 3letters {
4 key: "g" 4 key: "g"
5 double: true 5 level2: true
6 path: "Components/Collectables/collectable" 6 path: "Components/Collectables/collectable"
7} 7}
diff --git a/proto/CMakeLists.txt b/proto/CMakeLists.txt index c5abd46..95687d7 100644 --- a/proto/CMakeLists.txt +++ b/proto/CMakeLists.txt
@@ -5,7 +5,7 @@ add_library(protos)
5protobuf_generate( 5protobuf_generate(
6 LANGUAGE cpp 6 LANGUAGE cpp
7 TARGET protos 7 TARGET protos
8 PROTOS human.proto data.proto common.proto 8 PROTOS human.proto data.proto
9) 9)
10 10
11target_link_libraries(protos PUBLIC protobuf::libprotobuf) 11target_link_libraries(protos PUBLIC protobuf::libprotobuf)
diff --git a/proto/common.proto b/proto/common.proto deleted file mode 100644 index e37f670..0000000 --- a/proto/common.proto +++ /dev/null
@@ -1,38 +0,0 @@
1edition = "2023";
2
3package com.fourisland.lingo2_archipelago;
4
5message Proxy {
6 string answer = 1;
7 string path = 2;
8}
9
10enum DoorType {
11 DOOR_TYPE_UNKNOWN = 0;
12
13 // This door is a location unless panelsanity is on, and it is an item as long as door shuffle is on.
14 STANDARD = 1;
15
16 // This door is never an item or a location.
17 EVENT = 2;
18
19 // This door is never a location, and is an item as long as door shuffle is on.
20 ITEM_ONLY = 3;
21
22 // This door is never a location, and is an item as long as control center color shuffle is on.
23 CONTROL_CENTER_COLOR = 4;
24
25 // This door is never an item, and is a location as long as panelsanity is not on.
26 LOCATION_ONLY = 5;
27}
28
29enum AxisDirection {
30 AXIS_DIRECTION_UNKNOWN = 0;
31
32 X_PLUS = 1;
33 X_MINUS = 2;
34 Y_PLUS = 3;
35 Y_MINUS = 4;
36 Z_PLUS = 5;
37 Z_MINUS = 6;
38}
diff --git a/proto/data.proto b/proto/data.proto index b590454..f60d54f 100644 --- a/proto/data.proto +++ b/proto/data.proto
@@ -1,23 +1,56 @@
1edition = "2023"; 1syntax = "proto2";
2
3import "common.proto";
4 2
5package com.fourisland.lingo2_archipelago; 3package com.fourisland.lingo2_archipelago;
6 4
5message Proxy {
6 optional string answer = 1;
7 optional string path = 2;
8}
9
10enum DoorType {
11 DOOR_TYPE_UNKNOWN = 0;
12
13 // This door is a location unless panelsanity is on, and it is an item as long as door shuffle is on.
14 STANDARD = 1;
15
16 // This door is never an item or a location.
17 EVENT = 2;
18
19 // This door is never a location, and is an item as long as door shuffle is on.
20 ITEM_ONLY = 3;
21
22 // This door is never a location, and is an item as long as control center color shuffle is on.
23 CONTROL_CENTER_COLOR = 4;
24
25 // This door is never an item, and is a location as long as panelsanity is not on.
26 LOCATION_ONLY = 5;
27}
28
29enum AxisDirection {
30 AXIS_DIRECTION_UNKNOWN = 0;
31
32 X_PLUS = 1;
33 X_MINUS = 2;
34 Y_PLUS = 3;
35 Y_MINUS = 4;
36 Z_PLUS = 5;
37 Z_MINUS = 6;
38}
39
7message ProxyIdentifier { 40message ProxyIdentifier {
8 uint64 panel = 1; 41 optional uint64 panel = 1;
9 string answer = 2; 42 optional string answer = 2;
10} 43}
11 44
12message KeyholderAnswer { 45message KeyholderAnswer {
13 uint64 keyholder = 1; 46 optional uint64 keyholder = 1;
14 string key = 2; 47 optional string key = 2;
15} 48}
16 49
17message Connection { 50message Connection {
18 uint64 from_room = 1; 51 optional uint64 from_room = 1;
19 uint64 to_room = 2; 52 optional uint64 to_room = 2;
20 uint64 required_door = 3; 53 optional uint64 required_door = 3;
21 54
22 oneof trigger { 55 oneof trigger {
23 uint64 port = 4; 56 uint64 port = 4;
@@ -27,105 +60,105 @@ message Connection {
27} 60}
28 61
29message Door { 62message Door {
30 uint64 id = 1; 63 optional uint64 id = 1;
31 uint64 ap_id = 11; 64 optional uint64 ap_id = 11;
32 uint64 map_id = 9; 65 optional uint64 map_id = 9;
33 uint64 room_id = 10; 66 optional uint64 room_id = 10;
34 string name = 2; 67 optional string name = 2;
35 68
36 repeated string receivers = 3; 69 repeated string receivers = 3;
37 repeated uint64 move_paintings = 4; 70 repeated uint64 move_paintings = 4;
38 71
39 repeated ProxyIdentifier panels = 5; 72 repeated ProxyIdentifier panels = 5;
40 uint64 complete_at = 12; 73 optional uint64 complete_at = 12;
41 74
42 string control_center_color = 6; 75 optional string control_center_color = 6;
43 repeated string switches = 7; 76 repeated string switches = 7;
44 repeated KeyholderAnswer keyholders = 13; 77 repeated KeyholderAnswer keyholders = 13;
45 repeated uint64 rooms = 14; 78 repeated uint64 rooms = 14;
46 79
47 DoorType type = 8; 80 optional DoorType type = 8;
48} 81}
49 82
50message Panel { 83message PanelData {
51 uint64 id = 1; 84 optional uint64 id = 1;
52 uint64 ap_id = 10; 85 optional uint64 ap_id = 10;
53 uint64 room_id = 2; 86 optional uint64 room_id = 2;
54 string name = 3; 87 optional string name = 3;
55 88
56 string path = 4; 89 optional string path = 4;
57 string clue = 5; 90 optional string clue = 5;
58 string answer = 6; 91 optional string answer = 6;
59 repeated string symbols = 7; 92 repeated string symbols = 7;
60 93
61 repeated Proxy proxies = 8; 94 repeated Proxy proxies = 8;
62 95
63 uint64 required_door = 9; 96 optional uint64 required_door = 9;
64 uint64 required_room = 11; 97 optional uint64 required_room = 11;
65} 98}
66 99
67message Painting { 100message Painting {
68 uint64 id = 1; 101 optional uint64 id = 1;
69 uint64 room_id = 2; 102 optional uint64 room_id = 2;
70 string name = 9; 103 optional string name = 9;
71 104
72 string path = 10; 105 optional string path = 10;
73 string display_name = 4; 106 optional string display_name = 4;
74 107
75 string orientation = 3; 108 optional string orientation = 3;
76 bool move = 6; 109 optional bool move = 6;
77 bool enter_only = 7; 110 optional bool enter_only = 7;
78 AxisDirection gravity = 8 [default = Y_MINUS]; 111 optional AxisDirection gravity = 8;
79 bool exit_only = 11; 112 optional bool exit_only = 11;
80 113
81 uint64 required_door = 5; 114 optional uint64 required_door = 5;
82} 115}
83 116
84message Port { 117message Port {
85 uint64 id = 1; 118 optional uint64 id = 1;
86 uint64 room_id = 2; 119 optional uint64 room_id = 2;
87 string name = 3; 120 optional string name = 3;
88 121
89 string path = 4; 122 optional string path = 4;
90 string orientation = 5; 123 optional string orientation = 5;
91 AxisDirection gravity = 7 [default = Y_MINUS]; 124 optional AxisDirection gravity = 7;
92 125
93 uint64 required_door = 6; 126 optional uint64 required_door = 6;
94} 127}
95 128
96message Keyholder { 129message Keyholder {
97 uint64 id = 1; 130 optional uint64 id = 1;
98 uint64 room_id = 2; 131 optional uint64 room_id = 2;
99 132
100 string name = 3; 133 optional string name = 3;
101 string path = 4; 134 optional string path = 4;
102} 135}
103 136
104message Letter { 137message Letter {
105 uint64 id = 3; 138 optional uint64 id = 3;
106 uint64 ap_id = 5; 139 optional uint64 ap_id = 5;
107 uint64 room_id = 4; 140 optional uint64 room_id = 4;
108 141
109 string key = 1; 142 optional string key = 1;
110 bool double = 2; 143 optional bool level2 = 2;
111 144
112 string path = 6; 145 optional string path = 6;
113} 146}
114 147
115message Mastery { 148message Mastery {
116 uint64 id = 1; 149 optional uint64 id = 1;
117 uint64 ap_id = 2; 150 optional uint64 ap_id = 2;
118 uint64 room_id = 3; 151 optional uint64 room_id = 3;
119 152
120 string name = 4; 153 optional string name = 4;
121 string path = 5; 154 optional string path = 5;
122} 155}
123 156
124message Room { 157message Room {
125 uint64 id = 1; 158 optional uint64 id = 1;
126 uint64 map_id = 8; 159 optional uint64 map_id = 8;
127 string name = 2; 160 optional string name = 2;
128 string display_name = 3; 161 optional string display_name = 3;
129 162
130 repeated uint64 panels = 4; 163 repeated uint64 panels = 4;
131 repeated uint64 paintings = 5; 164 repeated uint64 paintings = 5;
@@ -137,15 +170,15 @@ message Room {
137} 170}
138 171
139message Map { 172message Map {
140 uint64 id = 1; 173 optional uint64 id = 1;
141 string name = 2; 174 optional string name = 2;
142} 175}
143 176
144message AllObjects { 177message AllObjects {
145 repeated Map maps = 7; 178 repeated Map maps = 7;
146 repeated Room rooms = 1; 179 repeated Room rooms = 1;
147 repeated Door doors = 2; 180 repeated Door doors = 2;
148 repeated Panel panels = 3; 181 repeated PanelData panels = 3;
149 repeated Painting paintings = 4; 182 repeated Painting paintings = 4;
150 repeated Port ports = 5; 183 repeated Port ports = 5;
151 repeated Keyholder keyholders = 11; 184 repeated Keyholder keyholders = 11;
diff --git a/proto/human.proto b/proto/human.proto index 858c88f..b420cb4 100644 --- a/proto/human.proto +++ b/proto/human.proto
@@ -1,43 +1,43 @@
1edition = "2023"; 1syntax = "proto2";
2 2
3import "common.proto"; 3import "data.proto";
4 4
5package com.fourisland.lingo2_archipelago; 5package com.fourisland.lingo2_archipelago;
6 6
7message RoomIdentifier { 7message RoomIdentifier {
8 string map = 1; 8 optional string map = 1;
9 string name = 2; 9 optional string name = 2;
10} 10}
11 11
12message DoorIdentifier { 12message DoorIdentifier {
13 string map = 1; 13 optional string map = 1;
14 string name = 2; 14 optional string name = 2;
15} 15}
16 16
17message PortIdentifier { 17message PortIdentifier {
18 string map = 1; 18 optional string map = 1;
19 string room = 2; 19 optional string room = 2;
20 string name = 3; 20 optional string name = 3;
21} 21}
22 22
23message PaintingIdentifier { 23message PaintingIdentifier {
24 string map = 1; 24 optional string map = 1;
25 string room = 2; 25 optional string room = 2;
26 string name = 3; 26 optional string name = 3;
27} 27}
28 28
29message PanelIdentifier { 29message PanelIdentifier {
30 string map = 1; 30 optional string map = 1;
31 string room = 2; 31 optional string room = 2;
32 string name = 3; 32 optional string name = 3;
33 string answer = 4; 33 optional string answer = 4;
34} 34}
35 35
36message KeyholderIdentifier { 36message KeyholderIdentifier {
37 string map = 1; 37 optional string map = 1;
38 string room = 2; 38 optional string room = 2;
39 string name = 3; 39 optional string name = 3;
40 string key = 4; 40 optional string key = 4;
41} 41}
42 42
43message HumanConnection { 43message HumanConnection {
@@ -60,8 +60,8 @@ message HumanConnection {
60 string to_room = 6; 60 string to_room = 6;
61 } 61 }
62 62
63 bool oneway = 3; 63 optional bool oneway = 3;
64 DoorIdentifier door = 4; 64 optional DoorIdentifier door = 4;
65} 65}
66 66
67message HumanConnections { 67message HumanConnections {
@@ -69,7 +69,7 @@ message HumanConnections {
69} 69}
70 70
71message HumanDoor { 71message HumanDoor {
72 string name = 1; 72 optional string name = 1;
73 73
74 repeated string receivers = 2; 74 repeated string receivers = 2;
75 repeated PaintingIdentifier move_paintings = 8; 75 repeated PaintingIdentifier move_paintings = 8;
@@ -79,15 +79,15 @@ message HumanDoor {
79 79
80 // If set, the number of panels from the above set that need to be solved. 80 // If set, the number of panels from the above set that need to be solved.
81 // Warning: this is a messy kind of OR logic! Consider if there's another way. 81 // Warning: this is a messy kind of OR logic! Consider if there's another way.
82 uint64 complete_at = 9; 82 optional uint64 complete_at = 9;
83 83
84 string control_center_color = 6; 84 optional string control_center_color = 6;
85 repeated string switches = 7; 85 repeated string switches = 7;
86 repeated KeyholderIdentifier keyholders = 10; 86 repeated KeyholderIdentifier keyholders = 10;
87 repeated RoomIdentifier rooms = 11; 87 repeated RoomIdentifier rooms = 11;
88 88
89 DoorType type = 4; 89 optional DoorType type = 4;
90 string location_room = 5; 90 optional string location_room = 5;
91} 91}
92 92
93message HumanDoors { 93message HumanDoors {
@@ -95,64 +95,64 @@ message HumanDoors {
95} 95}
96 96
97message HumanPanel { 97message HumanPanel {
98 string name = 1; 98 optional string name = 1;
99 string path = 5; 99 optional string path = 5;
100 100
101 string clue = 2; 101 optional string clue = 2;
102 string answer = 3; 102 optional string answer = 3;
103 repeated string symbols = 4; 103 repeated string symbols = 4;
104 104
105 repeated Proxy proxies = 6; 105 repeated Proxy proxies = 6;
106 106
107 DoorIdentifier required_door = 7; 107 optional DoorIdentifier required_door = 7;
108 RoomIdentifier required_room = 8; 108 optional RoomIdentifier required_room = 8;
109} 109}
110 110
111message HumanPainting { 111message HumanPainting {
112 string name = 1; 112 optional string name = 1;
113 string path = 2; 113 optional string path = 2;
114 114
115 string display_name = 4; 115 optional string display_name = 4;
116 116
117 string orientation = 3; 117 optional string orientation = 3;
118 bool move = 6; 118 optional bool move = 6;
119 bool enter_only = 7; 119 optional bool enter_only = 7;
120 AxisDirection gravity = 8 [default = Y_MINUS]; 120 optional AxisDirection gravity = 8 [default = Y_MINUS];
121 bool exit_only = 9; 121 optional bool exit_only = 9;
122 122
123 DoorIdentifier required_door = 5; 123 optional DoorIdentifier required_door = 5;
124} 124}
125 125
126message HumanPort { 126message HumanPort {
127 string name = 1; 127 optional string name = 1;
128 string path = 2; 128 optional string path = 2;
129 129
130 string orientation = 3; 130 optional string orientation = 3;
131 AxisDirection gravity = 5 [default = Y_MINUS]; 131 optional AxisDirection gravity = 5 [default = Y_MINUS];
132 132
133 DoorIdentifier required_door = 4; 133 optional DoorIdentifier required_door = 4;
134} 134}
135 135
136message HumanKeyholder { 136message HumanKeyholder {
137 string name = 1; 137 optional string name = 1;
138 string path = 2; 138 optional string path = 2;
139} 139}
140 140
141message HumanLetter { 141message HumanLetter {
142 string key = 1; 142 optional string key = 1;
143 bool double = 2; 143 optional bool level2 = 2;
144 144
145 string path = 3; 145 optional string path = 3;
146} 146}
147 147
148message HumanMastery { 148message HumanMastery {
149 string name = 1; 149 optional string name = 1;
150 string path = 2; 150 optional string path = 2;
151} 151}
152 152
153message HumanRoom { 153message HumanRoom {
154 string name = 1; 154 optional string name = 1;
155 string display_name = 2; 155 optional string display_name = 2;
156 156
157 repeated HumanPanel panels = 3; 157 repeated HumanPanel panels = 3;
158 repeated HumanPainting paintings = 4; 158 repeated HumanPainting paintings = 4;
diff --git a/tools/assign_ids/main.cpp b/tools/assign_ids/main.cpp index 349c258..2617cf7 100644 --- a/tools/assign_ids/main.cpp +++ b/tools/assign_ids/main.cpp
@@ -170,8 +170,7 @@ class AssignIds {
170 } 170 }
171 171
172 for (const HumanLetter& h_letter : h_room.letters()) { 172 for (const HumanLetter& h_letter : h_room.letters()) {
173 std::string lettername = 173 std::string lettername = GetLetterName(h_letter.key(), h_letter.level2());
174 GetLetterName(h_letter.key(), h_letter.double_());
175 174
176 if (!id_mappings_.letters().contains(lettername)) { 175 if (!id_mappings_.letters().contains(lettername)) {
177 auto& letters = *id_mappings_.mutable_letters(); 176 auto& letters = *id_mappings_.mutable_letters();
diff --git a/tools/datapacker/container.cpp b/tools/datapacker/container.cpp index bb58ec5..ffcb75a 100644 --- a/tools/datapacker/container.cpp +++ b/tools/datapacker/container.cpp
@@ -160,7 +160,7 @@ uint64_t Container::FindOrAddPanel(std::optional<std::string> map_name,
160 auto it = room_container.find(panel_name); 160 auto it = room_container.find(panel_name);
161 if (it == room_container.end()) { 161 if (it == room_container.end()) {
162 uint64_t new_id = all_objects_.panels_size(); 162 uint64_t new_id = all_objects_.panels_size();
163 Panel* panel = all_objects_.add_panels(); 163 PanelData* panel = all_objects_.add_panels();
164 panel->set_id(new_id); 164 panel->set_id(new_id);
165 panel->set_room_id(FindOrAddRoom(map_name, *room_name, std::nullopt)); 165 panel->set_room_id(FindOrAddRoom(map_name, *room_name, std::nullopt));
166 panel->set_name(panel_name); 166 panel->set_name(panel_name);
@@ -173,8 +173,8 @@ uint64_t Container::FindOrAddPanel(std::optional<std::string> map_name,
173 } 173 }
174} 174}
175 175
176uint64_t Container::FindOrAddLetter(std::string key, bool double_) { 176uint64_t Container::FindOrAddLetter(std::string key, bool level2) {
177 std::string letter_name = GetLetterName(key, double_); 177 std::string letter_name = GetLetterName(key, level2);
178 178
179 auto it = letter_id_by_name_.find(letter_name); 179 auto it = letter_id_by_name_.find(letter_name);
180 if (it == letter_id_by_name_.end()) { 180 if (it == letter_id_by_name_.end()) {
@@ -183,8 +183,8 @@ uint64_t Container::FindOrAddLetter(std::string key, bool double_) {
183 letter->set_id(new_id); 183 letter->set_id(new_id);
184 letter->set_key(key); 184 letter->set_key(key);
185 185
186 if (double_) { 186 if (level2) {
187 letter->set_double_(double_); 187 letter->set_level2(level2);
188 } 188 }
189 189
190 letter_id_by_name_[letter_name] = new_id; 190 letter_id_by_name_[letter_name] = new_id;
diff --git a/tools/datapacker/container.h b/tools/datapacker/container.h index 7ee5b5b..e1a84d8 100644 --- a/tools/datapacker/container.h +++ b/tools/datapacker/container.h
@@ -36,7 +36,7 @@ class Container {
36 std::optional<std::string> map_fallback, 36 std::optional<std::string> map_fallback,
37 std::optional<std::string> room_fallback); 37 std::optional<std::string> room_fallback);
38 38
39 uint64_t FindOrAddLetter(std::string key, bool double_); 39 uint64_t FindOrAddLetter(std::string key, bool level2);
40 40
41 uint64_t FindLetterByName(std::string letter_name); 41 uint64_t FindLetterByName(std::string letter_name);
42 42
diff --git a/tools/datapacker/main.cpp b/tools/datapacker/main.cpp index d3908b4..8b87ab1 100644 --- a/tools/datapacker/main.cpp +++ b/tools/datapacker/main.cpp
@@ -122,7 +122,7 @@ class DataPacker {
122 uint64_t panel_id = 122 uint64_t panel_id =
123 container_.FindOrAddPanel(current_map_name, current_room_name, 123 container_.FindOrAddPanel(current_map_name, current_room_name,
124 h_panel.name(), std::nullopt, std::nullopt); 124 h_panel.name(), std::nullopt, std::nullopt);
125 Panel& panel = *container_.all_objects().mutable_panels(panel_id); 125 PanelData& panel = *container_.all_objects().mutable_panels(panel_id);
126 126
127 panel.set_path(h_panel.path()); 127 panel.set_path(h_panel.path());
128 panel.set_clue(h_panel.clue()); 128 panel.set_clue(h_panel.clue());
@@ -169,9 +169,9 @@ class DataPacker {
169 painting.set_display_name(h_painting.display_name()); 169 painting.set_display_name(h_painting.display_name());
170 painting.set_orientation(h_painting.orientation()); 170 painting.set_orientation(h_painting.orientation());
171 171
172 if (h_painting.has_gravity()) { 172 // Setting this explicitly because the Godot protobuf doesn't support
173 painting.set_gravity(h_painting.gravity()); 173 // custom defaults.
174 } 174 painting.set_gravity(h_painting.gravity());
175 175
176 if (h_painting.has_move()) { 176 if (h_painting.has_move()) {
177 painting.set_move(h_painting.move()); 177 painting.set_move(h_painting.move());
@@ -208,9 +208,9 @@ class DataPacker {
208 port.set_path(h_port.path()); 208 port.set_path(h_port.path());
209 port.set_orientation(h_port.orientation()); 209 port.set_orientation(h_port.orientation());
210 210
211 if (h_port.has_gravity()) { 211 // Setting this explicitly because the Godot protobuf doesn't support
212 port.set_gravity(h_port.gravity()); 212 // custom defaults.
213 } 213 port.set_gravity(h_port.gravity());
214 214
215 if (h_port.has_required_door()) { 215 if (h_port.has_required_door()) {
216 std::optional<std::string> map_name = 216 std::optional<std::string> map_name =
@@ -228,7 +228,7 @@ class DataPacker {
228 const std::string& current_map_name, 228 const std::string& current_map_name,
229 const std::string& current_room_name) { 229 const std::string& current_room_name) {
230 uint64_t letter_id = 230 uint64_t letter_id =
231 container_.FindOrAddLetter(h_letter.key(), h_letter.double_()); 231 container_.FindOrAddLetter(h_letter.key(), h_letter.level2());
232 Letter& letter = *container_.all_objects().mutable_letters(letter_id); 232 Letter& letter = *container_.all_objects().mutable_letters(letter_id);
233 233
234 letter.set_room_id(container_.FindOrAddRoom( 234 letter.set_room_id(container_.FindOrAddRoom(
diff --git a/tools/util/naming.cpp b/tools/util/naming.cpp index 12594c5..0ae99f6 100644 --- a/tools/util/naming.cpp +++ b/tools/util/naming.cpp
@@ -2,10 +2,10 @@
2 2
3#include <sstream> 3#include <sstream>
4 4
5std::string GetLetterName(std::string key, bool double_) { 5std::string GetLetterName(std::string key, bool level2) {
6 std::ostringstream lettername_s; 6 std::ostringstream lettername_s;
7 lettername_s << key; 7 lettername_s << key;
8 lettername_s << (double_ ? "2" : "1"); 8 lettername_s << (level2 ? "2" : "1");
9 9
10 return lettername_s.str(); 10 return lettername_s.str();
11} 11}
diff --git a/tools/util/naming.h b/tools/util/naming.h index 7d61309..9a68851 100644 --- a/tools/util/naming.h +++ b/tools/util/naming.h
@@ -3,6 +3,6 @@
3 3
4#include <string> 4#include <string>
5 5
6std::string GetLetterName(std::string key, bool double_); 6std::string GetLetterName(std::string key, bool level2);
7 7
8#endif /* TOOLS_UTIL_NAMING_H_ */ 8#endif /* TOOLS_UTIL_NAMING_H_ */