dfhack-remote-node 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js ADDED
@@ -0,0 +1,4762 @@
1
+ // src/connection.ts
2
+ import net from "net";
3
+
4
+ // src/errors.ts
5
+ var ProtocolError = class extends Error {
6
+ constructor(message) {
7
+ super(message);
8
+ this.name = "ProtocolError";
9
+ }
10
+ };
11
+ var RpcError = class extends Error {
12
+ code;
13
+ text;
14
+ constructor(message, code, text = "") {
15
+ super(message);
16
+ this.name = "RpcError";
17
+ this.code = code;
18
+ this.text = text;
19
+ }
20
+ };
21
+
22
+ // src/codec.ts
23
+ var REQUEST_MAGIC = Buffer.from([68, 70, 72, 97, 99, 107, 63, 10, 1, 0, 0, 0]);
24
+ var RESPONSE_MAGIC = Buffer.from([68, 70, 72, 97, 99, 107, 33, 10]);
25
+ var HANDSHAKE_LEN = 12;
26
+ var RPC_REPLY = { RESULT: -1, FAIL: -2, TEXT: -3 };
27
+ var CR = {
28
+ LINK_FAILURE: -3,
29
+ NEEDS_CONSOLE: -2,
30
+ NOT_IMPLEMENTED: -1,
31
+ OK: 0,
32
+ FAILURE: 1,
33
+ WRONG_USAGE: 2,
34
+ NOT_FOUND: 3
35
+ };
36
+ var HEADER_LEN = 8;
37
+ var MAX_BODY = 64 * 1024 * 1024;
38
+ function encodeMessage(id, body) {
39
+ const buf = Buffer.allocUnsafe(HEADER_LEN + body.length);
40
+ buf.writeInt16LE(id, 0);
41
+ buf.writeUInt16LE(0, 2);
42
+ buf.writeInt32LE(body.length, 4);
43
+ Buffer.from(body).copy(buf, HEADER_LEN);
44
+ return buf;
45
+ }
46
+ function readHandshake(buf) {
47
+ if (buf.length < HANDSHAKE_LEN) return 0;
48
+ if (!buf.subarray(0, 8).equals(RESPONSE_MAGIC)) {
49
+ throw new ProtocolError("invalid DFHack handshake response");
50
+ }
51
+ return HANDSHAKE_LEN;
52
+ }
53
+ function readFrame(buf) {
54
+ if (buf.length < HEADER_LEN) return null;
55
+ const id = buf.readInt16LE(0);
56
+ const size = buf.readInt32LE(4);
57
+ if (id === RPC_REPLY.FAIL) {
58
+ return { frame: { id, size, body: null }, consumed: HEADER_LEN };
59
+ }
60
+ if (id === RPC_REPLY.RESULT || id === RPC_REPLY.TEXT) {
61
+ if (size < 0 || size > MAX_BODY) {
62
+ throw new ProtocolError(`invalid frame body size ${size}`);
63
+ }
64
+ if (buf.length < HEADER_LEN + size) return null;
65
+ const body = Buffer.from(buf.subarray(HEADER_LEN, HEADER_LEN + size));
66
+ return { frame: { id, size, body }, consumed: HEADER_LEN + size };
67
+ }
68
+ throw new ProtocolError(`unexpected reply id ${id}`);
69
+ }
70
+
71
+ // src/connection.ts
72
+ var DEFAULT_HOST = "127.0.0.1";
73
+ var DEFAULT_PORT = 5e3;
74
+ var DfConnection = class {
75
+ host;
76
+ port;
77
+ decodeText;
78
+ sock = null;
79
+ ready = null;
80
+ buf = Buffer.alloc(0);
81
+ shookHands = false;
82
+ queue = [];
83
+ active = null;
84
+ textFrames = [];
85
+ constructor({ host = DEFAULT_HOST, port = DEFAULT_PORT, textDecoder } = {}) {
86
+ this.host = host;
87
+ this.port = port;
88
+ this.decodeText = textDecoder ?? ((body) => body.toString("utf8"));
89
+ }
90
+ /** True once connected and past the handshake. */
91
+ get connected() {
92
+ return this.shookHands;
93
+ }
94
+ /** Connect and complete the handshake. Resolves once ready for calls. */
95
+ connect() {
96
+ if (this.ready) return this.ready;
97
+ this.ready = new Promise((resolve, reject) => {
98
+ const sock = net.createConnection({ host: this.host, port: this.port });
99
+ this.sock = sock;
100
+ sock.on("connect", () => sock.write(REQUEST_MAGIC));
101
+ sock.on("data", (chunk) => {
102
+ try {
103
+ this.onData(chunk, resolve);
104
+ } catch (err) {
105
+ this.fail(err);
106
+ reject(err);
107
+ }
108
+ });
109
+ sock.on("error", (err) => {
110
+ this.fail(err);
111
+ reject(err);
112
+ });
113
+ sock.on("close", () => this.fail(new Error("connection closed")));
114
+ });
115
+ return this.ready;
116
+ }
117
+ onData(chunk, onHandshake) {
118
+ this.buf = this.buf.length ? Buffer.concat([this.buf, chunk]) : chunk;
119
+ if (!this.shookHands) {
120
+ const consumed = readHandshake(this.buf);
121
+ if (consumed === 0) return;
122
+ this.buf = this.buf.subarray(consumed);
123
+ this.shookHands = true;
124
+ onHandshake();
125
+ this.pump();
126
+ }
127
+ for (; ; ) {
128
+ const parsed = readFrame(this.buf);
129
+ if (!parsed) break;
130
+ this.buf = this.buf.subarray(parsed.consumed);
131
+ this.handleFrame(parsed.frame);
132
+ }
133
+ }
134
+ handleFrame(frame) {
135
+ if (frame.id === RPC_REPLY.TEXT) {
136
+ if (frame.body) this.textFrames.push(frame.body);
137
+ return;
138
+ }
139
+ const call = this.active;
140
+ this.active = null;
141
+ const text = this.textFrames.map((b) => this.decodeText(b)).join("");
142
+ this.textFrames = [];
143
+ if (!call) {
144
+ this.fail(new ProtocolError("reply frame with no pending call"));
145
+ return;
146
+ }
147
+ if (frame.id === RPC_REPLY.FAIL) {
148
+ const detail = text.trim();
149
+ call.reject(
150
+ new RpcError(
151
+ `RPC call failed (${frame.size})${detail ? `: ${detail}` : ""}`,
152
+ frame.size,
153
+ text
154
+ )
155
+ );
156
+ } else if (frame.id === RPC_REPLY.RESULT) {
157
+ call.resolve({ result: frame.body ?? Buffer.alloc(0), text });
158
+ } else {
159
+ call.reject(new ProtocolError(`unexpected frame id ${frame.id}`));
160
+ }
161
+ this.pump();
162
+ }
163
+ /** Send the next queued call if the socket is idle. */
164
+ pump() {
165
+ if (!this.shookHands || this.active || this.queue.length === 0 || !this.sock) return;
166
+ const call = this.queue.shift();
167
+ this.active = call;
168
+ this.textFrames = [];
169
+ this.sock.write(encodeMessage(call.id, call.body));
170
+ }
171
+ /**
172
+ * Send one RPC call. `id` is the bound method id (0 for BindMethod).
173
+ * Returns { result: Buffer, text: string }.
174
+ */
175
+ call(id, body) {
176
+ return new Promise((resolve, reject) => {
177
+ this.queue.push({ id, body, resolve, reject });
178
+ this.pump();
179
+ });
180
+ }
181
+ fail(err) {
182
+ const pending = this.active ? [this.active, ...this.queue] : [...this.queue];
183
+ this.active = null;
184
+ this.queue = [];
185
+ for (const call of pending) call.reject(err);
186
+ }
187
+ close() {
188
+ if (this.sock) {
189
+ this.sock.end();
190
+ this.sock = null;
191
+ }
192
+ this.shookHands = false;
193
+ this.ready = null;
194
+ }
195
+ };
196
+
197
+ // src/methods.ts
198
+ var METHODS = {
199
+ // core (dfproto package)
200
+ BindMethod: { plugin: null, input: "dfproto.CoreBindRequest", output: "dfproto.CoreBindReply" },
201
+ RunCommand: {
202
+ plugin: null,
203
+ input: "dfproto.CoreRunCommandRequest",
204
+ output: "dfproto.EmptyMessage"
205
+ },
206
+ RunLua: { plugin: null, input: "dfproto.CoreRunLuaRequest", output: "dfproto.StringListMessage" },
207
+ GetVersion: { plugin: null, input: "dfproto.EmptyMessage", output: "dfproto.StringMessage" },
208
+ GetDFVersion: { plugin: null, input: "dfproto.EmptyMessage", output: "dfproto.StringMessage" },
209
+ GetWorldInfo: { plugin: null, input: "dfproto.EmptyMessage", output: "dfproto.GetWorldInfoOut" },
210
+ ListUnits: { plugin: null, input: "dfproto.ListUnitsIn", output: "dfproto.ListUnitsOut" },
211
+ ListSquads: { plugin: null, input: "dfproto.ListSquadsIn", output: "dfproto.ListSquadsOut" },
212
+ // RemoteFortressReader plugin: dfproto.EmptyMessage in, RemoteFortressReader.* out.
213
+ GetMapInfo: {
214
+ plugin: "RemoteFortressReader",
215
+ input: "dfproto.EmptyMessage",
216
+ output: "RemoteFortressReader.MapInfo"
217
+ },
218
+ GetUnitList: {
219
+ plugin: "RemoteFortressReader",
220
+ input: "dfproto.EmptyMessage",
221
+ output: "RemoteFortressReader.UnitList"
222
+ },
223
+ GetViewInfo: {
224
+ plugin: "RemoteFortressReader",
225
+ input: "dfproto.EmptyMessage",
226
+ output: "RemoteFortressReader.ViewInfo"
227
+ },
228
+ GetWorldMapCenter: {
229
+ plugin: "RemoteFortressReader",
230
+ input: "dfproto.EmptyMessage",
231
+ output: "RemoteFortressReader.WorldMap"
232
+ }
233
+ };
234
+
235
+ // src/proto.ts
236
+ import protobuf from "protobufjs";
237
+
238
+ // build/proto.json
239
+ var proto_default = {
240
+ nested: {
241
+ AdventureControl: {
242
+ options: {
243
+ optimize_for: "LITE_RUNTIME"
244
+ },
245
+ nested: {
246
+ AdvmodeMenu: {
247
+ edition: "proto2",
248
+ values: {
249
+ Default: 0,
250
+ Look: 1,
251
+ ConversationAddress: 2,
252
+ ConversationSelect: 3,
253
+ ConversationSpeak: 4,
254
+ Inventory: 5,
255
+ Drop: 6,
256
+ ThrowItem: 7,
257
+ Wear: 8,
258
+ Remove: 9,
259
+ Interact: 10,
260
+ Put: 11,
261
+ PutContainer: 12,
262
+ Eat: 13,
263
+ ThrowAim: 14,
264
+ Fire: 15,
265
+ Get: 16,
266
+ Unk17: 17,
267
+ CombatPrefs: 18,
268
+ Companions: 19,
269
+ MovementPrefs: 20,
270
+ SpeedPrefs: 21,
271
+ InteractAction: 22,
272
+ MoveCarefully: 23,
273
+ Announcements: 24,
274
+ UseBuilding: 25,
275
+ Travel: 26,
276
+ Unk27: 27,
277
+ Unk28: 28,
278
+ SleepConfirm: 29,
279
+ SelectInteractionTarget: 30,
280
+ Unk31: 31,
281
+ Unk32: 32,
282
+ FallAction: 33,
283
+ ViewTracks: 34,
284
+ Jump: 35,
285
+ Unk36: 36,
286
+ AttackConfirm: 37,
287
+ AttackType: 38,
288
+ AttackBodypart: 39,
289
+ AttackStrike: 40,
290
+ Unk41: 41,
291
+ Unk42: 42,
292
+ DodgeDirection: 43,
293
+ Unk44: 44,
294
+ Unk45: 45,
295
+ Build: 46
296
+ }
297
+ },
298
+ CarefulMovementType: {
299
+ edition: "proto2",
300
+ values: {
301
+ DEFAULT_MOVEMENT: 0,
302
+ RELEASE_ITEM_HOLD: 1,
303
+ RELEASE_TILE_HOLD: 2,
304
+ ATTACK_CREATURE: 3,
305
+ HOLD_TILE: 4,
306
+ MOVE: 5,
307
+ CLIMB: 6,
308
+ HOLD_ITEM: 7,
309
+ BUILDING_INTERACT: 8,
310
+ ITEM_INTERACT: 9,
311
+ ITEM_INTERACT_GUIDE: 10,
312
+ ITEM_INTERACT_RIDE: 11,
313
+ ITEM_INTERACT_PUSH: 12
314
+ }
315
+ },
316
+ MiscMoveType: {
317
+ edition: "proto2",
318
+ values: {
319
+ SET_CLIMB: 0,
320
+ SET_STAND: 1,
321
+ SET_CANCEL: 2
322
+ }
323
+ },
324
+ MoveCommandParams: {
325
+ edition: "proto2",
326
+ fields: {
327
+ direction: {
328
+ type: "RemoteFortressReader.Coord",
329
+ id: 1
330
+ }
331
+ }
332
+ },
333
+ MovementOption: {
334
+ edition: "proto2",
335
+ fields: {
336
+ dest: {
337
+ type: "RemoteFortressReader.Coord",
338
+ id: 1
339
+ },
340
+ source: {
341
+ type: "RemoteFortressReader.Coord",
342
+ id: 2
343
+ },
344
+ grab: {
345
+ type: "RemoteFortressReader.Coord",
346
+ id: 3
347
+ },
348
+ movementType: {
349
+ type: "CarefulMovementType",
350
+ id: 4
351
+ }
352
+ }
353
+ },
354
+ MenuContents: {
355
+ edition: "proto2",
356
+ fields: {
357
+ currentMenu: {
358
+ type: "AdvmodeMenu",
359
+ id: 1
360
+ },
361
+ movements: {
362
+ rule: "repeated",
363
+ type: "MovementOption",
364
+ id: 2
365
+ }
366
+ }
367
+ },
368
+ MiscMoveParams: {
369
+ edition: "proto2",
370
+ fields: {
371
+ type: {
372
+ type: "MiscMoveType",
373
+ id: 1
374
+ }
375
+ }
376
+ }
377
+ }
378
+ },
379
+ RemoteFortressReader: {
380
+ options: {
381
+ optimize_for: "LITE_RUNTIME"
382
+ },
383
+ nested: {
384
+ TiletypeShape: {
385
+ edition: "proto2",
386
+ values: {
387
+ NO_SHAPE: -1,
388
+ EMPTY: 0,
389
+ FLOOR: 1,
390
+ BOULDER: 2,
391
+ PEBBLES: 3,
392
+ WALL: 4,
393
+ FORTIFICATION: 5,
394
+ STAIR_UP: 6,
395
+ STAIR_DOWN: 7,
396
+ STAIR_UPDOWN: 8,
397
+ RAMP: 9,
398
+ RAMP_TOP: 10,
399
+ BROOK_BED: 11,
400
+ BROOK_TOP: 12,
401
+ TREE_SHAPE: 13,
402
+ SAPLING: 14,
403
+ SHRUB: 15,
404
+ ENDLESS_PIT: 16,
405
+ BRANCH: 17,
406
+ TRUNK_BRANCH: 18,
407
+ TWIG: 19
408
+ }
409
+ },
410
+ TiletypeSpecial: {
411
+ edition: "proto2",
412
+ values: {
413
+ NO_SPECIAL: -1,
414
+ NORMAL: 0,
415
+ RIVER_SOURCE: 1,
416
+ WATERFALL: 2,
417
+ SMOOTH: 3,
418
+ FURROWED: 4,
419
+ WET: 5,
420
+ DEAD: 6,
421
+ WORN_1: 7,
422
+ WORN_2: 8,
423
+ WORN_3: 9,
424
+ TRACK: 10,
425
+ SMOOTH_DEAD: 11
426
+ }
427
+ },
428
+ TiletypeMaterial: {
429
+ edition: "proto2",
430
+ values: {
431
+ NO_MATERIAL: -1,
432
+ AIR: 0,
433
+ SOIL: 1,
434
+ STONE: 2,
435
+ FEATURE: 3,
436
+ LAVA_STONE: 4,
437
+ MINERAL: 5,
438
+ FROZEN_LIQUID: 6,
439
+ CONSTRUCTION: 7,
440
+ GRASS_LIGHT: 8,
441
+ GRASS_DARK: 9,
442
+ GRASS_DRY: 10,
443
+ GRASS_DEAD: 11,
444
+ PLANT: 12,
445
+ HFS: 13,
446
+ CAMPFIRE: 14,
447
+ FIRE: 15,
448
+ ASHES: 16,
449
+ MAGMA: 17,
450
+ DRIFTWOOD: 18,
451
+ POOL: 19,
452
+ BROOK: 20,
453
+ RIVER: 21,
454
+ ROOT: 22,
455
+ TREE_MATERIAL: 23,
456
+ MUSHROOM: 24,
457
+ UNDERWORLD_GATE: 25
458
+ }
459
+ },
460
+ TiletypeVariant: {
461
+ edition: "proto2",
462
+ values: {
463
+ NO_VARIANT: -1,
464
+ VAR_1: 0,
465
+ VAR_2: 1,
466
+ VAR_3: 2,
467
+ VAR_4: 3
468
+ }
469
+ },
470
+ WorldPoles: {
471
+ edition: "proto2",
472
+ values: {
473
+ NO_POLES: 0,
474
+ NORTH_POLE: 1,
475
+ SOUTH_POLE: 2,
476
+ BOTH_POLES: 3
477
+ }
478
+ },
479
+ BuildingDirection: {
480
+ edition: "proto2",
481
+ values: {
482
+ NORTH: 0,
483
+ EAST: 1,
484
+ SOUTH: 2,
485
+ WEST: 3,
486
+ NORTHEAST: 4,
487
+ SOUTHEAST: 5,
488
+ SOUTHWEST: 6,
489
+ NORTHWEST: 7,
490
+ NONE: 8
491
+ }
492
+ },
493
+ TileDigDesignation: {
494
+ edition: "proto2",
495
+ values: {
496
+ NO_DIG: 0,
497
+ DEFAULT_DIG: 1,
498
+ UP_DOWN_STAIR_DIG: 2,
499
+ CHANNEL_DIG: 3,
500
+ RAMP_DIG: 4,
501
+ DOWN_STAIR_DIG: 5,
502
+ UP_STAIR_DIG: 6
503
+ }
504
+ },
505
+ HairStyle: {
506
+ edition: "proto2",
507
+ values: {
508
+ UNKEMPT: -1,
509
+ NEATLY_COMBED: 0,
510
+ BRAIDED: 1,
511
+ DOUBLE_BRAID: 2,
512
+ PONY_TAILS: 3,
513
+ CLEAN_SHAVEN: 4
514
+ }
515
+ },
516
+ InventoryMode: {
517
+ edition: "proto2",
518
+ values: {
519
+ Hauled: 0,
520
+ Weapon: 1,
521
+ Worn: 2,
522
+ Piercing: 3,
523
+ Flask: 4,
524
+ WrappedAround: 5,
525
+ StuckIn: 6,
526
+ InMouth: 7,
527
+ Pet: 8,
528
+ SewnInto: 9,
529
+ Strapped: 10
530
+ }
531
+ },
532
+ ArmorLayer: {
533
+ edition: "proto2",
534
+ values: {
535
+ LAYER_UNDER: 0,
536
+ LAYER_OVER: 1,
537
+ LAYER_ARMOR: 2,
538
+ LAYER_COVER: 3
539
+ }
540
+ },
541
+ Coord: {
542
+ edition: "proto2",
543
+ fields: {
544
+ x: {
545
+ type: "int32",
546
+ id: 1
547
+ },
548
+ y: {
549
+ type: "int32",
550
+ id: 2
551
+ },
552
+ z: {
553
+ type: "int32",
554
+ id: 3
555
+ }
556
+ }
557
+ },
558
+ Tiletype: {
559
+ edition: "proto2",
560
+ fields: {
561
+ id: {
562
+ rule: "required",
563
+ type: "int32",
564
+ id: 1
565
+ },
566
+ name: {
567
+ type: "string",
568
+ id: 2
569
+ },
570
+ caption: {
571
+ type: "string",
572
+ id: 3
573
+ },
574
+ shape: {
575
+ type: "TiletypeShape",
576
+ id: 4
577
+ },
578
+ special: {
579
+ type: "TiletypeSpecial",
580
+ id: 5
581
+ },
582
+ material: {
583
+ type: "TiletypeMaterial",
584
+ id: 6
585
+ },
586
+ variant: {
587
+ type: "TiletypeVariant",
588
+ id: 7
589
+ },
590
+ direction: {
591
+ type: "string",
592
+ id: 8
593
+ }
594
+ }
595
+ },
596
+ TiletypeList: {
597
+ edition: "proto2",
598
+ fields: {
599
+ tiletypeList: {
600
+ rule: "repeated",
601
+ type: "Tiletype",
602
+ id: 1
603
+ }
604
+ }
605
+ },
606
+ BuildingExtents: {
607
+ edition: "proto2",
608
+ fields: {
609
+ posX: {
610
+ rule: "required",
611
+ type: "int32",
612
+ id: 1
613
+ },
614
+ posY: {
615
+ rule: "required",
616
+ type: "int32",
617
+ id: 2
618
+ },
619
+ width: {
620
+ rule: "required",
621
+ type: "int32",
622
+ id: 3
623
+ },
624
+ height: {
625
+ rule: "required",
626
+ type: "int32",
627
+ id: 4
628
+ },
629
+ extents: {
630
+ rule: "repeated",
631
+ type: "int32",
632
+ id: 5
633
+ }
634
+ }
635
+ },
636
+ BuildingItem: {
637
+ edition: "proto2",
638
+ fields: {
639
+ item: {
640
+ type: "Item",
641
+ id: 1
642
+ },
643
+ mode: {
644
+ type: "int32",
645
+ id: 2
646
+ }
647
+ }
648
+ },
649
+ BuildingInstance: {
650
+ edition: "proto2",
651
+ fields: {
652
+ index: {
653
+ rule: "required",
654
+ type: "int32",
655
+ id: 1
656
+ },
657
+ posXMin: {
658
+ type: "int32",
659
+ id: 2
660
+ },
661
+ posYMin: {
662
+ type: "int32",
663
+ id: 3
664
+ },
665
+ posZMin: {
666
+ type: "int32",
667
+ id: 4
668
+ },
669
+ posXMax: {
670
+ type: "int32",
671
+ id: 5
672
+ },
673
+ posYMax: {
674
+ type: "int32",
675
+ id: 6
676
+ },
677
+ posZMax: {
678
+ type: "int32",
679
+ id: 7
680
+ },
681
+ buildingType: {
682
+ type: "BuildingType",
683
+ id: 8
684
+ },
685
+ material: {
686
+ type: "MatPair",
687
+ id: 9
688
+ },
689
+ buildingFlags: {
690
+ type: "uint32",
691
+ id: 10
692
+ },
693
+ isRoom: {
694
+ type: "bool",
695
+ id: 11
696
+ },
697
+ room: {
698
+ type: "BuildingExtents",
699
+ id: 12
700
+ },
701
+ direction: {
702
+ type: "BuildingDirection",
703
+ id: 13
704
+ },
705
+ items: {
706
+ rule: "repeated",
707
+ type: "BuildingItem",
708
+ id: 14
709
+ },
710
+ active: {
711
+ type: "int32",
712
+ id: 15
713
+ }
714
+ }
715
+ },
716
+ RiverEdge: {
717
+ edition: "proto2",
718
+ fields: {
719
+ minPos: {
720
+ type: "int32",
721
+ id: 1
722
+ },
723
+ maxPos: {
724
+ type: "int32",
725
+ id: 2
726
+ },
727
+ active: {
728
+ type: "int32",
729
+ id: 3
730
+ },
731
+ elevation: {
732
+ type: "int32",
733
+ id: 4
734
+ }
735
+ }
736
+ },
737
+ RiverTile: {
738
+ edition: "proto2",
739
+ fields: {
740
+ north: {
741
+ type: "RiverEdge",
742
+ id: 1
743
+ },
744
+ south: {
745
+ type: "RiverEdge",
746
+ id: 2
747
+ },
748
+ east: {
749
+ type: "RiverEdge",
750
+ id: 3
751
+ },
752
+ west: {
753
+ type: "RiverEdge",
754
+ id: 4
755
+ }
756
+ }
757
+ },
758
+ MatterState: {
759
+ edition: "proto2",
760
+ values: {
761
+ Solid: 0,
762
+ Liquid: 1,
763
+ Gas: 2,
764
+ Powder: 3,
765
+ Paste: 4,
766
+ Pressed: 5
767
+ }
768
+ },
769
+ Spatter: {
770
+ edition: "proto2",
771
+ fields: {
772
+ material: {
773
+ type: "MatPair",
774
+ id: 1
775
+ },
776
+ amount: {
777
+ type: "int32",
778
+ id: 2
779
+ },
780
+ state: {
781
+ type: "MatterState",
782
+ id: 3
783
+ },
784
+ item: {
785
+ type: "MatPair",
786
+ id: 4
787
+ }
788
+ }
789
+ },
790
+ SpatterPile: {
791
+ edition: "proto2",
792
+ fields: {
793
+ spatters: {
794
+ rule: "repeated",
795
+ type: "Spatter",
796
+ id: 1
797
+ }
798
+ }
799
+ },
800
+ Item: {
801
+ edition: "proto2",
802
+ fields: {
803
+ id: {
804
+ type: "int32",
805
+ id: 1
806
+ },
807
+ pos: {
808
+ type: "Coord",
809
+ id: 2
810
+ },
811
+ flags1: {
812
+ type: "uint32",
813
+ id: 3
814
+ },
815
+ flags2: {
816
+ type: "uint32",
817
+ id: 4
818
+ },
819
+ type: {
820
+ type: "MatPair",
821
+ id: 5
822
+ },
823
+ material: {
824
+ type: "MatPair",
825
+ id: 6
826
+ },
827
+ dye: {
828
+ type: "ColorDefinition",
829
+ id: 7
830
+ },
831
+ stackSize: {
832
+ type: "int32",
833
+ id: 8
834
+ },
835
+ subposX: {
836
+ type: "float",
837
+ id: 9
838
+ },
839
+ subposY: {
840
+ type: "float",
841
+ id: 10
842
+ },
843
+ subposZ: {
844
+ type: "float",
845
+ id: 11
846
+ },
847
+ projectile: {
848
+ type: "bool",
849
+ id: 12
850
+ },
851
+ velocityX: {
852
+ type: "float",
853
+ id: 13
854
+ },
855
+ velocityY: {
856
+ type: "float",
857
+ id: 14
858
+ },
859
+ velocityZ: {
860
+ type: "float",
861
+ id: 15
862
+ },
863
+ volume: {
864
+ type: "int32",
865
+ id: 16
866
+ },
867
+ improvements: {
868
+ rule: "repeated",
869
+ type: "ItemImprovement",
870
+ id: 17
871
+ },
872
+ image: {
873
+ type: "ArtImage",
874
+ id: 18
875
+ }
876
+ }
877
+ },
878
+ PlantTile: {
879
+ edition: "proto2",
880
+ fields: {
881
+ trunk: {
882
+ type: "bool",
883
+ id: 1
884
+ },
885
+ connectionEast: {
886
+ type: "bool",
887
+ id: 2
888
+ },
889
+ connectionSouth: {
890
+ type: "bool",
891
+ id: 3
892
+ },
893
+ connectionWest: {
894
+ type: "bool",
895
+ id: 4
896
+ },
897
+ connectionNorth: {
898
+ type: "bool",
899
+ id: 5
900
+ },
901
+ branches: {
902
+ type: "bool",
903
+ id: 6
904
+ },
905
+ twigs: {
906
+ type: "bool",
907
+ id: 7
908
+ },
909
+ tileType: {
910
+ type: "TiletypeSpecial",
911
+ id: 8
912
+ }
913
+ }
914
+ },
915
+ TreeInfo: {
916
+ edition: "proto2",
917
+ fields: {
918
+ size: {
919
+ type: "Coord",
920
+ id: 1
921
+ },
922
+ tiles: {
923
+ rule: "repeated",
924
+ type: "PlantTile",
925
+ id: 2
926
+ }
927
+ }
928
+ },
929
+ PlantInstance: {
930
+ edition: "proto2",
931
+ fields: {
932
+ plantType: {
933
+ type: "int32",
934
+ id: 1
935
+ },
936
+ pos: {
937
+ type: "Coord",
938
+ id: 2
939
+ },
940
+ treeInfo: {
941
+ type: "TreeInfo",
942
+ id: 3
943
+ }
944
+ }
945
+ },
946
+ MapBlock: {
947
+ edition: "proto2",
948
+ fields: {
949
+ mapX: {
950
+ rule: "required",
951
+ type: "int32",
952
+ id: 1
953
+ },
954
+ mapY: {
955
+ rule: "required",
956
+ type: "int32",
957
+ id: 2
958
+ },
959
+ mapZ: {
960
+ rule: "required",
961
+ type: "int32",
962
+ id: 3
963
+ },
964
+ tiles: {
965
+ rule: "repeated",
966
+ type: "int32",
967
+ id: 4
968
+ },
969
+ materials: {
970
+ rule: "repeated",
971
+ type: "MatPair",
972
+ id: 5
973
+ },
974
+ layerMaterials: {
975
+ rule: "repeated",
976
+ type: "MatPair",
977
+ id: 6
978
+ },
979
+ veinMaterials: {
980
+ rule: "repeated",
981
+ type: "MatPair",
982
+ id: 7
983
+ },
984
+ baseMaterials: {
985
+ rule: "repeated",
986
+ type: "MatPair",
987
+ id: 8
988
+ },
989
+ magma: {
990
+ rule: "repeated",
991
+ type: "int32",
992
+ id: 9
993
+ },
994
+ water: {
995
+ rule: "repeated",
996
+ type: "int32",
997
+ id: 10
998
+ },
999
+ hidden: {
1000
+ rule: "repeated",
1001
+ type: "bool",
1002
+ id: 11
1003
+ },
1004
+ light: {
1005
+ rule: "repeated",
1006
+ type: "bool",
1007
+ id: 12
1008
+ },
1009
+ subterranean: {
1010
+ rule: "repeated",
1011
+ type: "bool",
1012
+ id: 13
1013
+ },
1014
+ outside: {
1015
+ rule: "repeated",
1016
+ type: "bool",
1017
+ id: 14
1018
+ },
1019
+ aquifer: {
1020
+ rule: "repeated",
1021
+ type: "bool",
1022
+ id: 15
1023
+ },
1024
+ waterStagnant: {
1025
+ rule: "repeated",
1026
+ type: "bool",
1027
+ id: 16
1028
+ },
1029
+ waterSalt: {
1030
+ rule: "repeated",
1031
+ type: "bool",
1032
+ id: 17
1033
+ },
1034
+ constructionItems: {
1035
+ rule: "repeated",
1036
+ type: "MatPair",
1037
+ id: 18
1038
+ },
1039
+ buildings: {
1040
+ rule: "repeated",
1041
+ type: "BuildingInstance",
1042
+ id: 19
1043
+ },
1044
+ treePercent: {
1045
+ rule: "repeated",
1046
+ type: "int32",
1047
+ id: 20
1048
+ },
1049
+ treeX: {
1050
+ rule: "repeated",
1051
+ type: "int32",
1052
+ id: 21
1053
+ },
1054
+ treeY: {
1055
+ rule: "repeated",
1056
+ type: "int32",
1057
+ id: 22
1058
+ },
1059
+ treeZ: {
1060
+ rule: "repeated",
1061
+ type: "int32",
1062
+ id: 23
1063
+ },
1064
+ tileDigDesignation: {
1065
+ rule: "repeated",
1066
+ type: "TileDigDesignation",
1067
+ id: 24
1068
+ },
1069
+ spatterPile: {
1070
+ rule: "repeated",
1071
+ type: "SpatterPile",
1072
+ id: 25
1073
+ },
1074
+ items: {
1075
+ rule: "repeated",
1076
+ type: "Item",
1077
+ id: 26
1078
+ },
1079
+ tileDigDesignationMarker: {
1080
+ rule: "repeated",
1081
+ type: "bool",
1082
+ id: 27
1083
+ },
1084
+ tileDigDesignationAuto: {
1085
+ rule: "repeated",
1086
+ type: "bool",
1087
+ id: 28
1088
+ },
1089
+ grassPercent: {
1090
+ rule: "repeated",
1091
+ type: "int32",
1092
+ id: 29
1093
+ },
1094
+ flows: {
1095
+ rule: "repeated",
1096
+ type: "FlowInfo",
1097
+ id: 30
1098
+ }
1099
+ }
1100
+ },
1101
+ MatPair: {
1102
+ edition: "proto2",
1103
+ fields: {
1104
+ matType: {
1105
+ rule: "required",
1106
+ type: "int32",
1107
+ id: 1
1108
+ },
1109
+ matIndex: {
1110
+ rule: "required",
1111
+ type: "int32",
1112
+ id: 2
1113
+ }
1114
+ }
1115
+ },
1116
+ ColorDefinition: {
1117
+ edition: "proto2",
1118
+ fields: {
1119
+ red: {
1120
+ rule: "required",
1121
+ type: "int32",
1122
+ id: 1
1123
+ },
1124
+ green: {
1125
+ rule: "required",
1126
+ type: "int32",
1127
+ id: 2
1128
+ },
1129
+ blue: {
1130
+ rule: "required",
1131
+ type: "int32",
1132
+ id: 3
1133
+ }
1134
+ }
1135
+ },
1136
+ MaterialDefinition: {
1137
+ edition: "proto2",
1138
+ fields: {
1139
+ matPair: {
1140
+ rule: "required",
1141
+ type: "MatPair",
1142
+ id: 1
1143
+ },
1144
+ id: {
1145
+ type: "string",
1146
+ id: 2
1147
+ },
1148
+ name: {
1149
+ type: "string",
1150
+ id: 3
1151
+ },
1152
+ stateColor: {
1153
+ type: "ColorDefinition",
1154
+ id: 4
1155
+ },
1156
+ instrument: {
1157
+ type: "ItemdefInstrument.InstrumentDef",
1158
+ id: 5
1159
+ },
1160
+ upStep: {
1161
+ type: "int32",
1162
+ id: 6
1163
+ },
1164
+ downStep: {
1165
+ type: "int32",
1166
+ id: 7
1167
+ },
1168
+ layer: {
1169
+ type: "ArmorLayer",
1170
+ id: 8
1171
+ }
1172
+ }
1173
+ },
1174
+ BuildingType: {
1175
+ edition: "proto2",
1176
+ fields: {
1177
+ buildingType: {
1178
+ rule: "required",
1179
+ type: "int32",
1180
+ id: 1
1181
+ },
1182
+ buildingSubtype: {
1183
+ rule: "required",
1184
+ type: "int32",
1185
+ id: 2
1186
+ },
1187
+ buildingCustom: {
1188
+ rule: "required",
1189
+ type: "int32",
1190
+ id: 3
1191
+ }
1192
+ }
1193
+ },
1194
+ BuildingDefinition: {
1195
+ edition: "proto2",
1196
+ fields: {
1197
+ buildingType: {
1198
+ rule: "required",
1199
+ type: "BuildingType",
1200
+ id: 1
1201
+ },
1202
+ id: {
1203
+ type: "string",
1204
+ id: 2
1205
+ },
1206
+ name: {
1207
+ type: "string",
1208
+ id: 3
1209
+ }
1210
+ }
1211
+ },
1212
+ BuildingList: {
1213
+ edition: "proto2",
1214
+ fields: {
1215
+ buildingList: {
1216
+ rule: "repeated",
1217
+ type: "BuildingDefinition",
1218
+ id: 1
1219
+ }
1220
+ }
1221
+ },
1222
+ MaterialList: {
1223
+ edition: "proto2",
1224
+ fields: {
1225
+ materialList: {
1226
+ rule: "repeated",
1227
+ type: "MaterialDefinition",
1228
+ id: 1
1229
+ }
1230
+ }
1231
+ },
1232
+ Hair: {
1233
+ edition: "proto2",
1234
+ fields: {
1235
+ length: {
1236
+ type: "int32",
1237
+ id: 1
1238
+ },
1239
+ style: {
1240
+ type: "HairStyle",
1241
+ id: 2
1242
+ }
1243
+ }
1244
+ },
1245
+ BodySizeInfo: {
1246
+ edition: "proto2",
1247
+ fields: {
1248
+ sizeCur: {
1249
+ type: "int32",
1250
+ id: 1
1251
+ },
1252
+ sizeBase: {
1253
+ type: "int32",
1254
+ id: 2
1255
+ },
1256
+ areaCur: {
1257
+ type: "int32",
1258
+ id: 3
1259
+ },
1260
+ areaBase: {
1261
+ type: "int32",
1262
+ id: 4
1263
+ },
1264
+ lengthCur: {
1265
+ type: "int32",
1266
+ id: 5
1267
+ },
1268
+ lengthBase: {
1269
+ type: "int32",
1270
+ id: 6
1271
+ }
1272
+ }
1273
+ },
1274
+ UnitAppearance: {
1275
+ edition: "proto2",
1276
+ fields: {
1277
+ bodyModifiers: {
1278
+ rule: "repeated",
1279
+ type: "int32",
1280
+ id: 1
1281
+ },
1282
+ bpModifiers: {
1283
+ rule: "repeated",
1284
+ type: "int32",
1285
+ id: 2
1286
+ },
1287
+ sizeModifier: {
1288
+ type: "int32",
1289
+ id: 3
1290
+ },
1291
+ colors: {
1292
+ rule: "repeated",
1293
+ type: "int32",
1294
+ id: 4
1295
+ },
1296
+ hair: {
1297
+ type: "Hair",
1298
+ id: 5
1299
+ },
1300
+ beard: {
1301
+ type: "Hair",
1302
+ id: 6
1303
+ },
1304
+ moustache: {
1305
+ type: "Hair",
1306
+ id: 7
1307
+ },
1308
+ sideburns: {
1309
+ type: "Hair",
1310
+ id: 8
1311
+ },
1312
+ physicalDescription: {
1313
+ type: "string",
1314
+ id: 9
1315
+ }
1316
+ }
1317
+ },
1318
+ InventoryItem: {
1319
+ edition: "proto2",
1320
+ fields: {
1321
+ mode: {
1322
+ type: "InventoryMode",
1323
+ id: 1
1324
+ },
1325
+ item: {
1326
+ type: "Item",
1327
+ id: 2
1328
+ },
1329
+ bodyPartId: {
1330
+ type: "int32",
1331
+ id: 3
1332
+ }
1333
+ }
1334
+ },
1335
+ WoundPart: {
1336
+ edition: "proto2",
1337
+ fields: {
1338
+ globalLayerIdx: {
1339
+ type: "int32",
1340
+ id: 1
1341
+ },
1342
+ bodyPartId: {
1343
+ type: "int32",
1344
+ id: 2
1345
+ },
1346
+ layerIdx: {
1347
+ type: "int32",
1348
+ id: 3
1349
+ }
1350
+ }
1351
+ },
1352
+ UnitWound: {
1353
+ edition: "proto2",
1354
+ fields: {
1355
+ parts: {
1356
+ rule: "repeated",
1357
+ type: "WoundPart",
1358
+ id: 1
1359
+ },
1360
+ severedPart: {
1361
+ type: "bool",
1362
+ id: 2
1363
+ }
1364
+ }
1365
+ },
1366
+ UnitDefinition: {
1367
+ edition: "proto2",
1368
+ fields: {
1369
+ id: {
1370
+ rule: "required",
1371
+ type: "int32",
1372
+ id: 1
1373
+ },
1374
+ isValid: {
1375
+ type: "bool",
1376
+ id: 2
1377
+ },
1378
+ posX: {
1379
+ type: "int32",
1380
+ id: 3
1381
+ },
1382
+ posY: {
1383
+ type: "int32",
1384
+ id: 4
1385
+ },
1386
+ posZ: {
1387
+ type: "int32",
1388
+ id: 5
1389
+ },
1390
+ race: {
1391
+ type: "MatPair",
1392
+ id: 6
1393
+ },
1394
+ professionColor: {
1395
+ type: "ColorDefinition",
1396
+ id: 7
1397
+ },
1398
+ flags1: {
1399
+ type: "uint32",
1400
+ id: 8
1401
+ },
1402
+ flags2: {
1403
+ type: "uint32",
1404
+ id: 9
1405
+ },
1406
+ flags3: {
1407
+ type: "uint32",
1408
+ id: 10
1409
+ },
1410
+ isSoldier: {
1411
+ type: "bool",
1412
+ id: 11
1413
+ },
1414
+ sizeInfo: {
1415
+ type: "BodySizeInfo",
1416
+ id: 12
1417
+ },
1418
+ name: {
1419
+ type: "string",
1420
+ id: 13
1421
+ },
1422
+ bloodMax: {
1423
+ type: "int32",
1424
+ id: 14
1425
+ },
1426
+ bloodCount: {
1427
+ type: "int32",
1428
+ id: 15
1429
+ },
1430
+ appearance: {
1431
+ type: "UnitAppearance",
1432
+ id: 16
1433
+ },
1434
+ professionId: {
1435
+ type: "int32",
1436
+ id: 17
1437
+ },
1438
+ noblePositions: {
1439
+ rule: "repeated",
1440
+ type: "string",
1441
+ id: 18
1442
+ },
1443
+ riderId: {
1444
+ type: "int32",
1445
+ id: 19
1446
+ },
1447
+ inventory: {
1448
+ rule: "repeated",
1449
+ type: "InventoryItem",
1450
+ id: 20
1451
+ },
1452
+ subposX: {
1453
+ type: "float",
1454
+ id: 21
1455
+ },
1456
+ subposY: {
1457
+ type: "float",
1458
+ id: 22
1459
+ },
1460
+ subposZ: {
1461
+ type: "float",
1462
+ id: 23
1463
+ },
1464
+ facing: {
1465
+ type: "Coord",
1466
+ id: 24
1467
+ },
1468
+ age: {
1469
+ type: "int32",
1470
+ id: 25
1471
+ },
1472
+ wounds: {
1473
+ rule: "repeated",
1474
+ type: "UnitWound",
1475
+ id: 26
1476
+ }
1477
+ }
1478
+ },
1479
+ UnitList: {
1480
+ edition: "proto2",
1481
+ fields: {
1482
+ creatureList: {
1483
+ rule: "repeated",
1484
+ type: "UnitDefinition",
1485
+ id: 1
1486
+ }
1487
+ }
1488
+ },
1489
+ BlockRequest: {
1490
+ edition: "proto2",
1491
+ fields: {
1492
+ blocksNeeded: {
1493
+ type: "int32",
1494
+ id: 1
1495
+ },
1496
+ minX: {
1497
+ type: "int32",
1498
+ id: 2
1499
+ },
1500
+ maxX: {
1501
+ type: "int32",
1502
+ id: 3
1503
+ },
1504
+ minY: {
1505
+ type: "int32",
1506
+ id: 4
1507
+ },
1508
+ maxY: {
1509
+ type: "int32",
1510
+ id: 5
1511
+ },
1512
+ minZ: {
1513
+ type: "int32",
1514
+ id: 6
1515
+ },
1516
+ maxZ: {
1517
+ type: "int32",
1518
+ id: 7
1519
+ },
1520
+ forceReload: {
1521
+ type: "bool",
1522
+ id: 8
1523
+ }
1524
+ }
1525
+ },
1526
+ BlockList: {
1527
+ edition: "proto2",
1528
+ fields: {
1529
+ mapBlocks: {
1530
+ rule: "repeated",
1531
+ type: "MapBlock",
1532
+ id: 1
1533
+ },
1534
+ mapX: {
1535
+ type: "int32",
1536
+ id: 2
1537
+ },
1538
+ mapY: {
1539
+ type: "int32",
1540
+ id: 3
1541
+ },
1542
+ engravings: {
1543
+ rule: "repeated",
1544
+ type: "Engraving",
1545
+ id: 4
1546
+ },
1547
+ oceanWaves: {
1548
+ rule: "repeated",
1549
+ type: "Wave",
1550
+ id: 5
1551
+ }
1552
+ }
1553
+ },
1554
+ PlantDef: {
1555
+ edition: "proto2",
1556
+ fields: {
1557
+ posX: {
1558
+ rule: "required",
1559
+ type: "int32",
1560
+ id: 1
1561
+ },
1562
+ posY: {
1563
+ rule: "required",
1564
+ type: "int32",
1565
+ id: 2
1566
+ },
1567
+ posZ: {
1568
+ rule: "required",
1569
+ type: "int32",
1570
+ id: 3
1571
+ },
1572
+ index: {
1573
+ rule: "required",
1574
+ type: "int32",
1575
+ id: 4
1576
+ }
1577
+ }
1578
+ },
1579
+ PlantList: {
1580
+ edition: "proto2",
1581
+ fields: {
1582
+ plantList: {
1583
+ rule: "repeated",
1584
+ type: "PlantDef",
1585
+ id: 1
1586
+ }
1587
+ }
1588
+ },
1589
+ ViewInfo: {
1590
+ edition: "proto2",
1591
+ fields: {
1592
+ viewPosX: {
1593
+ type: "int32",
1594
+ id: 1
1595
+ },
1596
+ viewPosY: {
1597
+ type: "int32",
1598
+ id: 2
1599
+ },
1600
+ viewPosZ: {
1601
+ type: "int32",
1602
+ id: 3
1603
+ },
1604
+ viewSizeX: {
1605
+ type: "int32",
1606
+ id: 4
1607
+ },
1608
+ viewSizeY: {
1609
+ type: "int32",
1610
+ id: 5
1611
+ },
1612
+ cursorPosX: {
1613
+ type: "int32",
1614
+ id: 6
1615
+ },
1616
+ cursorPosY: {
1617
+ type: "int32",
1618
+ id: 7
1619
+ },
1620
+ cursorPosZ: {
1621
+ type: "int32",
1622
+ id: 8
1623
+ },
1624
+ followUnitId: {
1625
+ type: "int32",
1626
+ id: 9,
1627
+ options: {
1628
+ default: -1
1629
+ }
1630
+ },
1631
+ followItemId: {
1632
+ type: "int32",
1633
+ id: 10,
1634
+ options: {
1635
+ default: -1
1636
+ }
1637
+ }
1638
+ }
1639
+ },
1640
+ MapInfo: {
1641
+ edition: "proto2",
1642
+ fields: {
1643
+ blockSizeX: {
1644
+ type: "int32",
1645
+ id: 1
1646
+ },
1647
+ blockSizeY: {
1648
+ type: "int32",
1649
+ id: 2
1650
+ },
1651
+ blockSizeZ: {
1652
+ type: "int32",
1653
+ id: 3
1654
+ },
1655
+ blockPosX: {
1656
+ type: "int32",
1657
+ id: 4
1658
+ },
1659
+ blockPosY: {
1660
+ type: "int32",
1661
+ id: 5
1662
+ },
1663
+ blockPosZ: {
1664
+ type: "int32",
1665
+ id: 6
1666
+ },
1667
+ worldName: {
1668
+ type: "string",
1669
+ id: 7
1670
+ },
1671
+ worldNameEnglish: {
1672
+ type: "string",
1673
+ id: 8
1674
+ },
1675
+ saveName: {
1676
+ type: "string",
1677
+ id: 9
1678
+ }
1679
+ }
1680
+ },
1681
+ FrontType: {
1682
+ edition: "proto2",
1683
+ values: {
1684
+ FRONT_NONE: 0,
1685
+ FRONT_WARM: 1,
1686
+ FRONT_COLD: 2,
1687
+ FRONT_OCCLUDED: 3
1688
+ }
1689
+ },
1690
+ CumulusType: {
1691
+ edition: "proto2",
1692
+ values: {
1693
+ CUMULUS_NONE: 0,
1694
+ CUMULUS_MEDIUM: 1,
1695
+ CUMULUS_MULTI: 2,
1696
+ CUMULUS_NIMBUS: 3
1697
+ }
1698
+ },
1699
+ StratusType: {
1700
+ edition: "proto2",
1701
+ values: {
1702
+ STRATUS_NONE: 0,
1703
+ STRATUS_ALTO: 1,
1704
+ STRATUS_PROPER: 2,
1705
+ STRATUS_NIMBUS: 3
1706
+ }
1707
+ },
1708
+ FogType: {
1709
+ edition: "proto2",
1710
+ values: {
1711
+ FOG_NONE: 0,
1712
+ FOG_MIST: 1,
1713
+ FOG_NORMAL: 2,
1714
+ F0G_THICK: 3
1715
+ }
1716
+ },
1717
+ Cloud: {
1718
+ edition: "proto2",
1719
+ fields: {
1720
+ front: {
1721
+ type: "FrontType",
1722
+ id: 1
1723
+ },
1724
+ cumulus: {
1725
+ type: "CumulusType",
1726
+ id: 2
1727
+ },
1728
+ cirrus: {
1729
+ type: "bool",
1730
+ id: 3
1731
+ },
1732
+ stratus: {
1733
+ type: "StratusType",
1734
+ id: 4
1735
+ },
1736
+ fog: {
1737
+ type: "FogType",
1738
+ id: 5
1739
+ }
1740
+ }
1741
+ },
1742
+ WorldMap: {
1743
+ edition: "proto2",
1744
+ fields: {
1745
+ worldWidth: {
1746
+ rule: "required",
1747
+ type: "int32",
1748
+ id: 1
1749
+ },
1750
+ worldHeight: {
1751
+ rule: "required",
1752
+ type: "int32",
1753
+ id: 2
1754
+ },
1755
+ name: {
1756
+ type: "string",
1757
+ id: 3
1758
+ },
1759
+ nameEnglish: {
1760
+ type: "string",
1761
+ id: 4
1762
+ },
1763
+ elevation: {
1764
+ rule: "repeated",
1765
+ type: "int32",
1766
+ id: 5
1767
+ },
1768
+ rainfall: {
1769
+ rule: "repeated",
1770
+ type: "int32",
1771
+ id: 6
1772
+ },
1773
+ vegetation: {
1774
+ rule: "repeated",
1775
+ type: "int32",
1776
+ id: 7
1777
+ },
1778
+ temperature: {
1779
+ rule: "repeated",
1780
+ type: "int32",
1781
+ id: 8
1782
+ },
1783
+ evilness: {
1784
+ rule: "repeated",
1785
+ type: "int32",
1786
+ id: 9
1787
+ },
1788
+ drainage: {
1789
+ rule: "repeated",
1790
+ type: "int32",
1791
+ id: 10
1792
+ },
1793
+ volcanism: {
1794
+ rule: "repeated",
1795
+ type: "int32",
1796
+ id: 11
1797
+ },
1798
+ savagery: {
1799
+ rule: "repeated",
1800
+ type: "int32",
1801
+ id: 12
1802
+ },
1803
+ clouds: {
1804
+ rule: "repeated",
1805
+ type: "Cloud",
1806
+ id: 13
1807
+ },
1808
+ salinity: {
1809
+ rule: "repeated",
1810
+ type: "int32",
1811
+ id: 14
1812
+ },
1813
+ mapX: {
1814
+ type: "int32",
1815
+ id: 15
1816
+ },
1817
+ mapY: {
1818
+ type: "int32",
1819
+ id: 16
1820
+ },
1821
+ centerX: {
1822
+ type: "int32",
1823
+ id: 17
1824
+ },
1825
+ centerY: {
1826
+ type: "int32",
1827
+ id: 18
1828
+ },
1829
+ centerZ: {
1830
+ type: "int32",
1831
+ id: 19
1832
+ },
1833
+ curYear: {
1834
+ type: "int32",
1835
+ id: 20
1836
+ },
1837
+ curYearTick: {
1838
+ type: "int32",
1839
+ id: 21
1840
+ },
1841
+ worldPoles: {
1842
+ type: "WorldPoles",
1843
+ id: 22
1844
+ },
1845
+ riverTiles: {
1846
+ rule: "repeated",
1847
+ type: "RiverTile",
1848
+ id: 23
1849
+ },
1850
+ waterElevation: {
1851
+ rule: "repeated",
1852
+ type: "int32",
1853
+ id: 24
1854
+ },
1855
+ regionTiles: {
1856
+ rule: "repeated",
1857
+ type: "RegionTile",
1858
+ id: 25
1859
+ }
1860
+ }
1861
+ },
1862
+ SiteRealizationBuildingWall: {
1863
+ edition: "proto2",
1864
+ fields: {
1865
+ startX: {
1866
+ type: "int32",
1867
+ id: 1
1868
+ },
1869
+ startY: {
1870
+ type: "int32",
1871
+ id: 2
1872
+ },
1873
+ startZ: {
1874
+ type: "int32",
1875
+ id: 3
1876
+ },
1877
+ endX: {
1878
+ type: "int32",
1879
+ id: 4
1880
+ },
1881
+ endY: {
1882
+ type: "int32",
1883
+ id: 5
1884
+ },
1885
+ endZ: {
1886
+ type: "int32",
1887
+ id: 6
1888
+ }
1889
+ }
1890
+ },
1891
+ SiteRealizationBuildingTower: {
1892
+ edition: "proto2",
1893
+ fields: {
1894
+ roofZ: {
1895
+ type: "int32",
1896
+ id: 1
1897
+ },
1898
+ round: {
1899
+ type: "bool",
1900
+ id: 2
1901
+ },
1902
+ goblin: {
1903
+ type: "bool",
1904
+ id: 3
1905
+ }
1906
+ }
1907
+ },
1908
+ TrenchSpoke: {
1909
+ edition: "proto2",
1910
+ fields: {
1911
+ moundStart: {
1912
+ type: "int32",
1913
+ id: 1
1914
+ },
1915
+ trenchStart: {
1916
+ type: "int32",
1917
+ id: 2
1918
+ },
1919
+ trenchEnd: {
1920
+ type: "int32",
1921
+ id: 3
1922
+ },
1923
+ moundEnd: {
1924
+ type: "int32",
1925
+ id: 4
1926
+ }
1927
+ }
1928
+ },
1929
+ SiteRealizationBuildingTrenches: {
1930
+ edition: "proto2",
1931
+ fields: {
1932
+ spokes: {
1933
+ rule: "repeated",
1934
+ type: "TrenchSpoke",
1935
+ id: 1
1936
+ }
1937
+ }
1938
+ },
1939
+ SiteRealizationBuilding: {
1940
+ edition: "proto2",
1941
+ fields: {
1942
+ id: {
1943
+ type: "int32",
1944
+ id: 1
1945
+ },
1946
+ minX: {
1947
+ type: "int32",
1948
+ id: 3
1949
+ },
1950
+ minY: {
1951
+ type: "int32",
1952
+ id: 4
1953
+ },
1954
+ maxX: {
1955
+ type: "int32",
1956
+ id: 5
1957
+ },
1958
+ maxY: {
1959
+ type: "int32",
1960
+ id: 6
1961
+ },
1962
+ material: {
1963
+ type: "MatPair",
1964
+ id: 7
1965
+ },
1966
+ wallInfo: {
1967
+ type: "SiteRealizationBuildingWall",
1968
+ id: 8
1969
+ },
1970
+ towerInfo: {
1971
+ type: "SiteRealizationBuildingTower",
1972
+ id: 9
1973
+ },
1974
+ trenchInfo: {
1975
+ type: "SiteRealizationBuildingTrenches",
1976
+ id: 10
1977
+ },
1978
+ type: {
1979
+ type: "int32",
1980
+ id: 11
1981
+ }
1982
+ }
1983
+ },
1984
+ RegionTile: {
1985
+ edition: "proto2",
1986
+ fields: {
1987
+ elevation: {
1988
+ type: "int32",
1989
+ id: 1
1990
+ },
1991
+ rainfall: {
1992
+ type: "int32",
1993
+ id: 2
1994
+ },
1995
+ vegetation: {
1996
+ type: "int32",
1997
+ id: 3
1998
+ },
1999
+ temperature: {
2000
+ type: "int32",
2001
+ id: 4
2002
+ },
2003
+ evilness: {
2004
+ type: "int32",
2005
+ id: 5
2006
+ },
2007
+ drainage: {
2008
+ type: "int32",
2009
+ id: 6
2010
+ },
2011
+ volcanism: {
2012
+ type: "int32",
2013
+ id: 7
2014
+ },
2015
+ savagery: {
2016
+ type: "int32",
2017
+ id: 8
2018
+ },
2019
+ salinity: {
2020
+ type: "int32",
2021
+ id: 9
2022
+ },
2023
+ riverTiles: {
2024
+ type: "RiverTile",
2025
+ id: 10
2026
+ },
2027
+ waterElevation: {
2028
+ type: "int32",
2029
+ id: 11
2030
+ },
2031
+ surfaceMaterial: {
2032
+ type: "MatPair",
2033
+ id: 12
2034
+ },
2035
+ plantMaterials: {
2036
+ rule: "repeated",
2037
+ type: "MatPair",
2038
+ id: 13
2039
+ },
2040
+ buildings: {
2041
+ rule: "repeated",
2042
+ type: "SiteRealizationBuilding",
2043
+ id: 14
2044
+ },
2045
+ stoneMaterials: {
2046
+ rule: "repeated",
2047
+ type: "MatPair",
2048
+ id: 15
2049
+ },
2050
+ treeMaterials: {
2051
+ rule: "repeated",
2052
+ type: "MatPair",
2053
+ id: 16
2054
+ },
2055
+ snow: {
2056
+ type: "int32",
2057
+ id: 17
2058
+ }
2059
+ }
2060
+ },
2061
+ RegionMap: {
2062
+ edition: "proto2",
2063
+ fields: {
2064
+ mapX: {
2065
+ type: "int32",
2066
+ id: 1
2067
+ },
2068
+ mapY: {
2069
+ type: "int32",
2070
+ id: 2
2071
+ },
2072
+ name: {
2073
+ type: "string",
2074
+ id: 3
2075
+ },
2076
+ nameEnglish: {
2077
+ type: "string",
2078
+ id: 4
2079
+ },
2080
+ tiles: {
2081
+ rule: "repeated",
2082
+ type: "RegionTile",
2083
+ id: 5
2084
+ }
2085
+ }
2086
+ },
2087
+ RegionMaps: {
2088
+ edition: "proto2",
2089
+ fields: {
2090
+ worldMaps: {
2091
+ rule: "repeated",
2092
+ type: "WorldMap",
2093
+ id: 1
2094
+ },
2095
+ regionMaps: {
2096
+ rule: "repeated",
2097
+ type: "RegionMap",
2098
+ id: 2
2099
+ }
2100
+ }
2101
+ },
2102
+ PatternType: {
2103
+ edition: "proto2",
2104
+ values: {
2105
+ MONOTONE: 0,
2106
+ STRIPES: 1,
2107
+ IRIS_EYE: 2,
2108
+ SPOTS: 3,
2109
+ PUPIL_EYE: 4,
2110
+ MOTTLED: 5
2111
+ }
2112
+ },
2113
+ PatternDescriptor: {
2114
+ edition: "proto2",
2115
+ fields: {
2116
+ id: {
2117
+ type: "string",
2118
+ id: 1
2119
+ },
2120
+ colors: {
2121
+ rule: "repeated",
2122
+ type: "ColorDefinition",
2123
+ id: 2
2124
+ },
2125
+ pattern: {
2126
+ type: "PatternType",
2127
+ id: 3
2128
+ }
2129
+ }
2130
+ },
2131
+ ColorModifierRaw: {
2132
+ edition: "proto2",
2133
+ fields: {
2134
+ patterns: {
2135
+ rule: "repeated",
2136
+ type: "PatternDescriptor",
2137
+ id: 1
2138
+ },
2139
+ bodyPartId: {
2140
+ rule: "repeated",
2141
+ type: "int32",
2142
+ id: 2
2143
+ },
2144
+ tissueLayerId: {
2145
+ rule: "repeated",
2146
+ type: "int32",
2147
+ id: 3
2148
+ },
2149
+ startDate: {
2150
+ type: "int32",
2151
+ id: 4
2152
+ },
2153
+ endDate: {
2154
+ type: "int32",
2155
+ id: 5
2156
+ },
2157
+ part: {
2158
+ type: "string",
2159
+ id: 6
2160
+ }
2161
+ }
2162
+ },
2163
+ BodyPartLayerRaw: {
2164
+ edition: "proto2",
2165
+ fields: {
2166
+ layerName: {
2167
+ type: "string",
2168
+ id: 1
2169
+ },
2170
+ tissueId: {
2171
+ type: "int32",
2172
+ id: 2
2173
+ },
2174
+ layerDepth: {
2175
+ type: "int32",
2176
+ id: 3
2177
+ },
2178
+ bpModifiers: {
2179
+ rule: "repeated",
2180
+ type: "int32",
2181
+ id: 4
2182
+ }
2183
+ }
2184
+ },
2185
+ BodyPartRaw: {
2186
+ edition: "proto2",
2187
+ fields: {
2188
+ token: {
2189
+ type: "string",
2190
+ id: 1
2191
+ },
2192
+ category: {
2193
+ type: "string",
2194
+ id: 2
2195
+ },
2196
+ parent: {
2197
+ type: "int32",
2198
+ id: 3
2199
+ },
2200
+ flags: {
2201
+ rule: "repeated",
2202
+ type: "bool",
2203
+ id: 4
2204
+ },
2205
+ layers: {
2206
+ rule: "repeated",
2207
+ type: "BodyPartLayerRaw",
2208
+ id: 5
2209
+ },
2210
+ relsize: {
2211
+ type: "int32",
2212
+ id: 6
2213
+ }
2214
+ }
2215
+ },
2216
+ BpAppearanceModifier: {
2217
+ edition: "proto2",
2218
+ fields: {
2219
+ type: {
2220
+ type: "string",
2221
+ id: 1
2222
+ },
2223
+ modMin: {
2224
+ type: "int32",
2225
+ id: 2
2226
+ },
2227
+ modMax: {
2228
+ type: "int32",
2229
+ id: 3
2230
+ }
2231
+ }
2232
+ },
2233
+ TissueRaw: {
2234
+ edition: "proto2",
2235
+ fields: {
2236
+ id: {
2237
+ type: "string",
2238
+ id: 1
2239
+ },
2240
+ name: {
2241
+ type: "string",
2242
+ id: 2
2243
+ },
2244
+ material: {
2245
+ type: "MatPair",
2246
+ id: 3
2247
+ },
2248
+ subordinateToTissue: {
2249
+ type: "string",
2250
+ id: 4
2251
+ }
2252
+ }
2253
+ },
2254
+ CasteRaw: {
2255
+ edition: "proto2",
2256
+ fields: {
2257
+ index: {
2258
+ type: "int32",
2259
+ id: 1
2260
+ },
2261
+ casteId: {
2262
+ type: "string",
2263
+ id: 2
2264
+ },
2265
+ casteName: {
2266
+ rule: "repeated",
2267
+ type: "string",
2268
+ id: 3
2269
+ },
2270
+ babyName: {
2271
+ rule: "repeated",
2272
+ type: "string",
2273
+ id: 4
2274
+ },
2275
+ childName: {
2276
+ rule: "repeated",
2277
+ type: "string",
2278
+ id: 5
2279
+ },
2280
+ gender: {
2281
+ type: "int32",
2282
+ id: 6
2283
+ },
2284
+ bodyParts: {
2285
+ rule: "repeated",
2286
+ type: "BodyPartRaw",
2287
+ id: 7
2288
+ },
2289
+ totalRelsize: {
2290
+ type: "int32",
2291
+ id: 8
2292
+ },
2293
+ modifiers: {
2294
+ rule: "repeated",
2295
+ type: "BpAppearanceModifier",
2296
+ id: 9
2297
+ },
2298
+ modifierIdx: {
2299
+ rule: "repeated",
2300
+ type: "int32",
2301
+ id: 10
2302
+ },
2303
+ partIdx: {
2304
+ rule: "repeated",
2305
+ type: "int32",
2306
+ id: 11
2307
+ },
2308
+ layerIdx: {
2309
+ rule: "repeated",
2310
+ type: "int32",
2311
+ id: 12
2312
+ },
2313
+ bodyAppearanceModifiers: {
2314
+ rule: "repeated",
2315
+ type: "BpAppearanceModifier",
2316
+ id: 13
2317
+ },
2318
+ colorModifiers: {
2319
+ rule: "repeated",
2320
+ type: "ColorModifierRaw",
2321
+ id: 14
2322
+ },
2323
+ description: {
2324
+ type: "string",
2325
+ id: 15
2326
+ },
2327
+ adultSize: {
2328
+ type: "int32",
2329
+ id: 16
2330
+ }
2331
+ }
2332
+ },
2333
+ CreatureRaw: {
2334
+ edition: "proto2",
2335
+ fields: {
2336
+ index: {
2337
+ type: "int32",
2338
+ id: 1
2339
+ },
2340
+ creatureId: {
2341
+ type: "string",
2342
+ id: 2
2343
+ },
2344
+ name: {
2345
+ rule: "repeated",
2346
+ type: "string",
2347
+ id: 3
2348
+ },
2349
+ generalBabyName: {
2350
+ rule: "repeated",
2351
+ type: "string",
2352
+ id: 4
2353
+ },
2354
+ generalChildName: {
2355
+ rule: "repeated",
2356
+ type: "string",
2357
+ id: 5
2358
+ },
2359
+ creatureTile: {
2360
+ type: "int32",
2361
+ id: 6
2362
+ },
2363
+ creatureSoldierTile: {
2364
+ type: "int32",
2365
+ id: 7
2366
+ },
2367
+ color: {
2368
+ type: "ColorDefinition",
2369
+ id: 8
2370
+ },
2371
+ adultsize: {
2372
+ type: "int32",
2373
+ id: 9
2374
+ },
2375
+ caste: {
2376
+ rule: "repeated",
2377
+ type: "CasteRaw",
2378
+ id: 10
2379
+ },
2380
+ tissues: {
2381
+ rule: "repeated",
2382
+ type: "TissueRaw",
2383
+ id: 11
2384
+ },
2385
+ flags: {
2386
+ rule: "repeated",
2387
+ type: "bool",
2388
+ id: 12
2389
+ }
2390
+ }
2391
+ },
2392
+ CreatureRawList: {
2393
+ edition: "proto2",
2394
+ fields: {
2395
+ creatureRaws: {
2396
+ rule: "repeated",
2397
+ type: "CreatureRaw",
2398
+ id: 1
2399
+ }
2400
+ }
2401
+ },
2402
+ Army: {
2403
+ edition: "proto2",
2404
+ fields: {
2405
+ id: {
2406
+ type: "int32",
2407
+ id: 1
2408
+ },
2409
+ posX: {
2410
+ type: "int32",
2411
+ id: 2
2412
+ },
2413
+ posY: {
2414
+ type: "int32",
2415
+ id: 3
2416
+ },
2417
+ posZ: {
2418
+ type: "int32",
2419
+ id: 4
2420
+ },
2421
+ leader: {
2422
+ type: "UnitDefinition",
2423
+ id: 5
2424
+ },
2425
+ members: {
2426
+ rule: "repeated",
2427
+ type: "UnitDefinition",
2428
+ id: 6
2429
+ },
2430
+ flags: {
2431
+ type: "uint32",
2432
+ id: 7
2433
+ }
2434
+ }
2435
+ },
2436
+ ArmyList: {
2437
+ edition: "proto2",
2438
+ fields: {
2439
+ armies: {
2440
+ rule: "repeated",
2441
+ type: "Army",
2442
+ id: 1
2443
+ }
2444
+ }
2445
+ },
2446
+ GrowthPrint: {
2447
+ edition: "proto2",
2448
+ fields: {
2449
+ priority: {
2450
+ type: "int32",
2451
+ id: 1
2452
+ },
2453
+ color: {
2454
+ type: "int32",
2455
+ id: 2
2456
+ },
2457
+ timingStart: {
2458
+ type: "int32",
2459
+ id: 3
2460
+ },
2461
+ timingEnd: {
2462
+ type: "int32",
2463
+ id: 4
2464
+ },
2465
+ tile: {
2466
+ type: "int32",
2467
+ id: 5
2468
+ }
2469
+ }
2470
+ },
2471
+ TreeGrowth: {
2472
+ edition: "proto2",
2473
+ fields: {
2474
+ index: {
2475
+ type: "int32",
2476
+ id: 1
2477
+ },
2478
+ id: {
2479
+ type: "string",
2480
+ id: 2
2481
+ },
2482
+ name: {
2483
+ type: "string",
2484
+ id: 3
2485
+ },
2486
+ mat: {
2487
+ type: "MatPair",
2488
+ id: 4
2489
+ },
2490
+ prints: {
2491
+ rule: "repeated",
2492
+ type: "GrowthPrint",
2493
+ id: 5
2494
+ },
2495
+ timingStart: {
2496
+ type: "int32",
2497
+ id: 6
2498
+ },
2499
+ timingEnd: {
2500
+ type: "int32",
2501
+ id: 7
2502
+ },
2503
+ twigs: {
2504
+ type: "bool",
2505
+ id: 8
2506
+ },
2507
+ lightBranches: {
2508
+ type: "bool",
2509
+ id: 9
2510
+ },
2511
+ heavyBranches: {
2512
+ type: "bool",
2513
+ id: 10
2514
+ },
2515
+ trunk: {
2516
+ type: "bool",
2517
+ id: 11
2518
+ },
2519
+ roots: {
2520
+ type: "bool",
2521
+ id: 12
2522
+ },
2523
+ cap: {
2524
+ type: "bool",
2525
+ id: 13
2526
+ },
2527
+ sapling: {
2528
+ type: "bool",
2529
+ id: 14
2530
+ },
2531
+ trunkHeightStart: {
2532
+ type: "int32",
2533
+ id: 15
2534
+ },
2535
+ trunkHeightEnd: {
2536
+ type: "int32",
2537
+ id: 16
2538
+ }
2539
+ }
2540
+ },
2541
+ PlantRaw: {
2542
+ edition: "proto2",
2543
+ fields: {
2544
+ index: {
2545
+ type: "int32",
2546
+ id: 1
2547
+ },
2548
+ id: {
2549
+ type: "string",
2550
+ id: 2
2551
+ },
2552
+ name: {
2553
+ type: "string",
2554
+ id: 3
2555
+ },
2556
+ growths: {
2557
+ rule: "repeated",
2558
+ type: "TreeGrowth",
2559
+ id: 4
2560
+ },
2561
+ tile: {
2562
+ type: "int32",
2563
+ id: 5
2564
+ }
2565
+ }
2566
+ },
2567
+ PlantRawList: {
2568
+ edition: "proto2",
2569
+ fields: {
2570
+ plantRaws: {
2571
+ rule: "repeated",
2572
+ type: "PlantRaw",
2573
+ id: 1
2574
+ }
2575
+ }
2576
+ },
2577
+ ScreenTile: {
2578
+ edition: "proto2",
2579
+ fields: {
2580
+ character: {
2581
+ type: "uint32",
2582
+ id: 1
2583
+ },
2584
+ foreground: {
2585
+ type: "uint32",
2586
+ id: 2
2587
+ },
2588
+ background: {
2589
+ type: "uint32",
2590
+ id: 3
2591
+ }
2592
+ }
2593
+ },
2594
+ ScreenCapture: {
2595
+ edition: "proto2",
2596
+ fields: {
2597
+ width: {
2598
+ type: "uint32",
2599
+ id: 1
2600
+ },
2601
+ height: {
2602
+ type: "uint32",
2603
+ id: 2
2604
+ },
2605
+ tiles: {
2606
+ rule: "repeated",
2607
+ type: "ScreenTile",
2608
+ id: 3
2609
+ }
2610
+ }
2611
+ },
2612
+ KeyboardEvent: {
2613
+ edition: "proto2",
2614
+ fields: {
2615
+ type: {
2616
+ type: "uint32",
2617
+ id: 1
2618
+ },
2619
+ which: {
2620
+ type: "uint32",
2621
+ id: 2
2622
+ },
2623
+ state: {
2624
+ type: "uint32",
2625
+ id: 3
2626
+ },
2627
+ scancode: {
2628
+ type: "uint32",
2629
+ id: 4
2630
+ },
2631
+ sym: {
2632
+ type: "uint32",
2633
+ id: 5
2634
+ },
2635
+ mod: {
2636
+ type: "uint32",
2637
+ id: 6
2638
+ },
2639
+ unicode: {
2640
+ type: "uint32",
2641
+ id: 7
2642
+ }
2643
+ }
2644
+ },
2645
+ DigCommand: {
2646
+ edition: "proto2",
2647
+ fields: {
2648
+ designation: {
2649
+ type: "TileDigDesignation",
2650
+ id: 1
2651
+ },
2652
+ locations: {
2653
+ rule: "repeated",
2654
+ type: "Coord",
2655
+ id: 2
2656
+ }
2657
+ }
2658
+ },
2659
+ SingleBool: {
2660
+ edition: "proto2",
2661
+ fields: {
2662
+ Value: {
2663
+ type: "bool",
2664
+ id: 1
2665
+ }
2666
+ }
2667
+ },
2668
+ VersionInfo: {
2669
+ edition: "proto2",
2670
+ fields: {
2671
+ dwarfFortressVersion: {
2672
+ type: "string",
2673
+ id: 1
2674
+ },
2675
+ dfhackVersion: {
2676
+ type: "string",
2677
+ id: 2
2678
+ },
2679
+ remoteFortressReaderVersion: {
2680
+ type: "string",
2681
+ id: 3
2682
+ }
2683
+ }
2684
+ },
2685
+ ListRequest: {
2686
+ edition: "proto2",
2687
+ fields: {
2688
+ listStart: {
2689
+ type: "int32",
2690
+ id: 1
2691
+ },
2692
+ listEnd: {
2693
+ type: "int32",
2694
+ id: 2
2695
+ }
2696
+ }
2697
+ },
2698
+ Report: {
2699
+ edition: "proto2",
2700
+ fields: {
2701
+ type: {
2702
+ type: "int32",
2703
+ id: 1
2704
+ },
2705
+ text: {
2706
+ type: "string",
2707
+ id: 2
2708
+ },
2709
+ color: {
2710
+ type: "ColorDefinition",
2711
+ id: 3
2712
+ },
2713
+ duration: {
2714
+ type: "int32",
2715
+ id: 4
2716
+ },
2717
+ continuation: {
2718
+ type: "bool",
2719
+ id: 5
2720
+ },
2721
+ unconscious: {
2722
+ type: "bool",
2723
+ id: 6
2724
+ },
2725
+ announcement: {
2726
+ type: "bool",
2727
+ id: 7
2728
+ },
2729
+ repeatCount: {
2730
+ type: "int32",
2731
+ id: 8
2732
+ },
2733
+ pos: {
2734
+ type: "Coord",
2735
+ id: 9
2736
+ },
2737
+ id: {
2738
+ type: "int32",
2739
+ id: 10
2740
+ },
2741
+ year: {
2742
+ type: "int32",
2743
+ id: 11
2744
+ },
2745
+ time: {
2746
+ type: "int32",
2747
+ id: 12
2748
+ }
2749
+ }
2750
+ },
2751
+ Status: {
2752
+ edition: "proto2",
2753
+ fields: {
2754
+ reports: {
2755
+ rule: "repeated",
2756
+ type: "Report",
2757
+ id: 1
2758
+ }
2759
+ }
2760
+ },
2761
+ ShapeDescriptior: {
2762
+ edition: "proto2",
2763
+ fields: {
2764
+ id: {
2765
+ type: "string",
2766
+ id: 1
2767
+ },
2768
+ tile: {
2769
+ type: "int32",
2770
+ id: 2
2771
+ }
2772
+ }
2773
+ },
2774
+ Language: {
2775
+ edition: "proto2",
2776
+ fields: {
2777
+ shapes: {
2778
+ rule: "repeated",
2779
+ type: "ShapeDescriptior",
2780
+ id: 1
2781
+ }
2782
+ }
2783
+ },
2784
+ ItemImprovement: {
2785
+ edition: "proto2",
2786
+ fields: {
2787
+ material: {
2788
+ type: "MatPair",
2789
+ id: 1
2790
+ },
2791
+ shape: {
2792
+ type: "int32",
2793
+ id: 3
2794
+ },
2795
+ specificType: {
2796
+ type: "int32",
2797
+ id: 4
2798
+ },
2799
+ image: {
2800
+ type: "ArtImage",
2801
+ id: 5
2802
+ },
2803
+ type: {
2804
+ type: "int32",
2805
+ id: 6
2806
+ }
2807
+ }
2808
+ },
2809
+ ArtImageElementType: {
2810
+ edition: "proto2",
2811
+ values: {
2812
+ IMAGE_CREATURE: 0,
2813
+ IMAGE_PLANT: 1,
2814
+ IMAGE_TREE: 2,
2815
+ IMAGE_SHAPE: 3,
2816
+ IMAGE_ITEM: 4
2817
+ }
2818
+ },
2819
+ ArtImageElement: {
2820
+ edition: "proto2",
2821
+ fields: {
2822
+ count: {
2823
+ type: "int32",
2824
+ id: 1
2825
+ },
2826
+ type: {
2827
+ type: "ArtImageElementType",
2828
+ id: 2
2829
+ },
2830
+ creatureItem: {
2831
+ type: "MatPair",
2832
+ id: 3
2833
+ },
2834
+ material: {
2835
+ type: "MatPair",
2836
+ id: 5
2837
+ },
2838
+ id: {
2839
+ type: "int32",
2840
+ id: 6
2841
+ }
2842
+ }
2843
+ },
2844
+ ArtImagePropertyType: {
2845
+ edition: "proto2",
2846
+ values: {
2847
+ TRANSITIVE_VERB: 0,
2848
+ INTRANSITIVE_VERB: 1
2849
+ }
2850
+ },
2851
+ ArtImageProperty: {
2852
+ edition: "proto2",
2853
+ fields: {
2854
+ subject: {
2855
+ type: "int32",
2856
+ id: 1
2857
+ },
2858
+ object: {
2859
+ type: "int32",
2860
+ id: 2
2861
+ },
2862
+ verb: {
2863
+ type: "ArtImageVerb",
2864
+ id: 3
2865
+ },
2866
+ type: {
2867
+ type: "ArtImagePropertyType",
2868
+ id: 4
2869
+ }
2870
+ }
2871
+ },
2872
+ ArtImage: {
2873
+ edition: "proto2",
2874
+ fields: {
2875
+ elements: {
2876
+ rule: "repeated",
2877
+ type: "ArtImageElement",
2878
+ id: 1
2879
+ },
2880
+ id: {
2881
+ type: "MatPair",
2882
+ id: 2
2883
+ },
2884
+ properties: {
2885
+ rule: "repeated",
2886
+ type: "ArtImageProperty",
2887
+ id: 3
2888
+ }
2889
+ }
2890
+ },
2891
+ Engraving: {
2892
+ edition: "proto2",
2893
+ fields: {
2894
+ pos: {
2895
+ type: "Coord",
2896
+ id: 1
2897
+ },
2898
+ quality: {
2899
+ type: "int32",
2900
+ id: 2
2901
+ },
2902
+ tile: {
2903
+ type: "int32",
2904
+ id: 3
2905
+ },
2906
+ image: {
2907
+ type: "ArtImage",
2908
+ id: 4
2909
+ },
2910
+ floor: {
2911
+ type: "bool",
2912
+ id: 5
2913
+ },
2914
+ west: {
2915
+ type: "bool",
2916
+ id: 6
2917
+ },
2918
+ east: {
2919
+ type: "bool",
2920
+ id: 7
2921
+ },
2922
+ north: {
2923
+ type: "bool",
2924
+ id: 8
2925
+ },
2926
+ south: {
2927
+ type: "bool",
2928
+ id: 9
2929
+ },
2930
+ hidden: {
2931
+ type: "bool",
2932
+ id: 10
2933
+ },
2934
+ northwest: {
2935
+ type: "bool",
2936
+ id: 11
2937
+ },
2938
+ northeast: {
2939
+ type: "bool",
2940
+ id: 12
2941
+ },
2942
+ southwest: {
2943
+ type: "bool",
2944
+ id: 13
2945
+ },
2946
+ southeast: {
2947
+ type: "bool",
2948
+ id: 14
2949
+ }
2950
+ }
2951
+ },
2952
+ ArtImageVerb: {
2953
+ edition: "proto2",
2954
+ values: {
2955
+ VERB_WITHERING: 0,
2956
+ VERB_SURROUNDEDBY: 1,
2957
+ VERB_MASSACRING: 2,
2958
+ VERB_FIGHTING: 3,
2959
+ VERB_LABORING: 4,
2960
+ VERB_GREETING: 5,
2961
+ VERB_REFUSING: 6,
2962
+ VERB_SPEAKING: 7,
2963
+ VERB_EMBRACING: 8,
2964
+ VERB_STRIKINGDOWN: 9,
2965
+ VERB_MENACINGPOSE: 10,
2966
+ VERB_TRAVELING: 11,
2967
+ VERB_RAISING: 12,
2968
+ VERB_HIDING: 13,
2969
+ VERB_LOOKINGCONFUSED: 14,
2970
+ VERB_LOOKINGTERRIFIED: 15,
2971
+ VERB_DEVOURING: 16,
2972
+ VERB_ADMIRING: 17,
2973
+ VERB_BURNING: 18,
2974
+ VERB_WEEPING: 19,
2975
+ VERB_LOOKINGDEJECTED: 20,
2976
+ VERB_CRINGING: 21,
2977
+ VERB_SCREAMING: 22,
2978
+ VERB_SUBMISSIVEGESTURE: 23,
2979
+ VERB_FETALPOSITION: 24,
2980
+ VERB_SMEAREDINTOSPIRAL: 25,
2981
+ VERB_FALLING: 26,
2982
+ VERB_DEAD: 27,
2983
+ VERB_LAUGHING: 28,
2984
+ VERB_LOOKINGOFFENDED: 29,
2985
+ VERB_BEINGSHOT: 30,
2986
+ VERB_PLAINTIVEGESTURE: 31,
2987
+ VERB_MELTING: 32,
2988
+ VERB_SHOOTING: 33,
2989
+ VERB_TORTURING: 34,
2990
+ VERB_COMMITTINGDEPRAVEDACT: 35,
2991
+ VERB_PRAYING: 36,
2992
+ VERB_CONTEMPLATING: 37,
2993
+ VERB_COOKING: 38,
2994
+ VERB_ENGRAVING: 39,
2995
+ VERB_PROSTRATING: 40,
2996
+ VERB_SUFFERING: 41,
2997
+ VERB_BEINGIMPALED: 42,
2998
+ VERB_BEINGCONTORTED: 43,
2999
+ VERB_BEINGFLAYED: 44,
3000
+ VERB_HANGINGFROM: 45,
3001
+ VERB_BEINGMUTILATED: 46,
3002
+ VERB_TRIUMPHANTPOSE: 47
3003
+ }
3004
+ },
3005
+ FlowType: {
3006
+ edition: "proto2",
3007
+ values: {
3008
+ Miasma: 0,
3009
+ Steam: 1,
3010
+ Mist: 2,
3011
+ MaterialDust: 3,
3012
+ MagmaMist: 4,
3013
+ Smoke: 5,
3014
+ Dragonfire: 6,
3015
+ Fire: 7,
3016
+ Web: 8,
3017
+ MaterialGas: 9,
3018
+ MaterialVapor: 10,
3019
+ OceanWave: 11,
3020
+ SeaFoam: 12,
3021
+ ItemCloud: 13,
3022
+ CampFire: -1
3023
+ }
3024
+ },
3025
+ FlowInfo: {
3026
+ edition: "proto2",
3027
+ fields: {
3028
+ index: {
3029
+ type: "int32",
3030
+ id: 1
3031
+ },
3032
+ type: {
3033
+ type: "FlowType",
3034
+ id: 2
3035
+ },
3036
+ density: {
3037
+ type: "int32",
3038
+ id: 3
3039
+ },
3040
+ pos: {
3041
+ type: "Coord",
3042
+ id: 4
3043
+ },
3044
+ dest: {
3045
+ type: "Coord",
3046
+ id: 5
3047
+ },
3048
+ expanding: {
3049
+ type: "bool",
3050
+ id: 6
3051
+ },
3052
+ reuse: {
3053
+ type: "bool",
3054
+ id: 7,
3055
+ options: {
3056
+ deprecated: true
3057
+ }
3058
+ },
3059
+ guideId: {
3060
+ type: "int32",
3061
+ id: 8
3062
+ },
3063
+ material: {
3064
+ type: "MatPair",
3065
+ id: 9
3066
+ },
3067
+ item: {
3068
+ type: "MatPair",
3069
+ id: 10
3070
+ },
3071
+ dead: {
3072
+ type: "bool",
3073
+ id: 11
3074
+ },
3075
+ fast: {
3076
+ type: "bool",
3077
+ id: 12
3078
+ },
3079
+ creeping: {
3080
+ type: "bool",
3081
+ id: 13
3082
+ }
3083
+ }
3084
+ },
3085
+ Wave: {
3086
+ edition: "proto2",
3087
+ fields: {
3088
+ dest: {
3089
+ type: "Coord",
3090
+ id: 1
3091
+ },
3092
+ pos: {
3093
+ type: "Coord",
3094
+ id: 2
3095
+ }
3096
+ }
3097
+ }
3098
+ }
3099
+ },
3100
+ ItemdefInstrument: {
3101
+ options: {
3102
+ optimize_for: "LITE_RUNTIME"
3103
+ },
3104
+ nested: {
3105
+ InstrumentFlags: {
3106
+ edition: "proto2",
3107
+ fields: {
3108
+ indefinitePitch: {
3109
+ type: "bool",
3110
+ id: 1
3111
+ },
3112
+ placedAsBuilding: {
3113
+ type: "bool",
3114
+ id: 2
3115
+ },
3116
+ metalMat: {
3117
+ type: "bool",
3118
+ id: 3
3119
+ },
3120
+ stoneMat: {
3121
+ type: "bool",
3122
+ id: 4
3123
+ },
3124
+ woodMat: {
3125
+ type: "bool",
3126
+ id: 5
3127
+ },
3128
+ glassMat: {
3129
+ type: "bool",
3130
+ id: 6
3131
+ },
3132
+ ceramicMat: {
3133
+ type: "bool",
3134
+ id: 7
3135
+ },
3136
+ shellMat: {
3137
+ type: "bool",
3138
+ id: 8
3139
+ },
3140
+ boneMat: {
3141
+ type: "bool",
3142
+ id: 9
3143
+ }
3144
+ }
3145
+ },
3146
+ PitchChoiceType: {
3147
+ edition: "proto2",
3148
+ values: {
3149
+ MEMBRANE_POSITION: 0,
3150
+ SUBPART_CHOICE: 1,
3151
+ KEYBOARD: 2,
3152
+ STOPPING_FRET: 3,
3153
+ STOPPING_AGAINST_BODY: 4,
3154
+ STOPPING_HOLE: 5,
3155
+ STOPPING_HOLE_KEY: 6,
3156
+ SLIDE: 7,
3157
+ HARMONIC_SERIES: 8,
3158
+ VALVE_ROUTES_AIR: 9,
3159
+ BP_IN_BELL: 10,
3160
+ FOOT_PEDALS: 11
3161
+ }
3162
+ },
3163
+ SoundProductionType: {
3164
+ edition: "proto2",
3165
+ values: {
3166
+ PLUCKED_BY_BP: 0,
3167
+ PLUCKED: 1,
3168
+ BOWED: 2,
3169
+ STRUCK_BY_BP: 3,
3170
+ STRUCK: 4,
3171
+ VIBRATE_BP_AGAINST_OPENING: 5,
3172
+ BLOW_AGAINST_FIPPLE: 6,
3173
+ BLOW_OVER_OPENING_SIDE: 7,
3174
+ BLOW_OVER_OPENING_END: 8,
3175
+ BLOW_OVER_SINGLE_REED: 9,
3176
+ BLOW_OVER_DOUBLE_REED: 10,
3177
+ BLOW_OVER_FREE_REED: 11,
3178
+ STRUCK_TOGETHER: 12,
3179
+ SHAKEN: 13,
3180
+ SCRAPED: 14,
3181
+ FRICTION: 15,
3182
+ RESONATOR: 16,
3183
+ BAG_OVER_REED: 17,
3184
+ AIR_OVER_REED: 18,
3185
+ AIR_OVER_FREE_REED: 19,
3186
+ AIR_AGAINST_FIPPLE: 20
3187
+ }
3188
+ },
3189
+ TuningType: {
3190
+ edition: "proto2",
3191
+ values: {
3192
+ PEGS: 0,
3193
+ ADJUSTABLE_BRIDGES: 1,
3194
+ CROOKS: 2,
3195
+ TIGHTENING: 3,
3196
+ LEVERS: 4
3197
+ }
3198
+ },
3199
+ InstrumentPiece: {
3200
+ edition: "proto2",
3201
+ fields: {
3202
+ type: {
3203
+ type: "string",
3204
+ id: 1
3205
+ },
3206
+ id: {
3207
+ type: "string",
3208
+ id: 2
3209
+ },
3210
+ name: {
3211
+ type: "string",
3212
+ id: 3
3213
+ },
3214
+ namePlural: {
3215
+ type: "string",
3216
+ id: 4
3217
+ }
3218
+ }
3219
+ },
3220
+ InstrumentRegister: {
3221
+ edition: "proto2",
3222
+ fields: {
3223
+ pitchRangeMin: {
3224
+ type: "int32",
3225
+ id: 1
3226
+ },
3227
+ pitchRangeMax: {
3228
+ type: "int32",
3229
+ id: 2
3230
+ }
3231
+ }
3232
+ },
3233
+ InstrumentDef: {
3234
+ edition: "proto2",
3235
+ fields: {
3236
+ flags: {
3237
+ type: "InstrumentFlags",
3238
+ id: 1
3239
+ },
3240
+ size: {
3241
+ type: "int32",
3242
+ id: 2
3243
+ },
3244
+ value: {
3245
+ type: "int32",
3246
+ id: 3
3247
+ },
3248
+ materialSize: {
3249
+ type: "int32",
3250
+ id: 4
3251
+ },
3252
+ pieces: {
3253
+ rule: "repeated",
3254
+ type: "InstrumentPiece",
3255
+ id: 5
3256
+ },
3257
+ pitchRangeMin: {
3258
+ type: "int32",
3259
+ id: 6
3260
+ },
3261
+ pitchRangeMax: {
3262
+ type: "int32",
3263
+ id: 7
3264
+ },
3265
+ volumeMbMin: {
3266
+ type: "int32",
3267
+ id: 8
3268
+ },
3269
+ volumeMbMax: {
3270
+ type: "int32",
3271
+ id: 9
3272
+ },
3273
+ soundProduction: {
3274
+ rule: "repeated",
3275
+ type: "SoundProductionType",
3276
+ id: 10
3277
+ },
3278
+ soundProductionParm1: {
3279
+ rule: "repeated",
3280
+ type: "string",
3281
+ id: 11
3282
+ },
3283
+ soundProductionParm2: {
3284
+ rule: "repeated",
3285
+ type: "string",
3286
+ id: 12
3287
+ },
3288
+ pitchChoice: {
3289
+ rule: "repeated",
3290
+ type: "PitchChoiceType",
3291
+ id: 13
3292
+ },
3293
+ pitchChoiceParm1: {
3294
+ rule: "repeated",
3295
+ type: "string",
3296
+ id: 14
3297
+ },
3298
+ pitchChoiceParm2: {
3299
+ rule: "repeated",
3300
+ type: "string",
3301
+ id: 15
3302
+ },
3303
+ tuning: {
3304
+ rule: "repeated",
3305
+ type: "TuningType",
3306
+ id: 16
3307
+ },
3308
+ tuningParm: {
3309
+ rule: "repeated",
3310
+ type: "string",
3311
+ id: 17
3312
+ },
3313
+ registers: {
3314
+ rule: "repeated",
3315
+ type: "InstrumentRegister",
3316
+ id: 18
3317
+ },
3318
+ description: {
3319
+ type: "string",
3320
+ id: 19
3321
+ }
3322
+ }
3323
+ }
3324
+ }
3325
+ },
3326
+ dfproto: {
3327
+ options: {
3328
+ optimize_for: "LITE_RUNTIME"
3329
+ },
3330
+ nested: {
3331
+ EnumItemName: {
3332
+ edition: "proto2",
3333
+ fields: {
3334
+ value: {
3335
+ rule: "required",
3336
+ type: "int32",
3337
+ id: 1
3338
+ },
3339
+ name: {
3340
+ type: "string",
3341
+ id: 2
3342
+ },
3343
+ bitSize: {
3344
+ type: "int32",
3345
+ id: 3,
3346
+ options: {
3347
+ default: 1
3348
+ }
3349
+ }
3350
+ }
3351
+ },
3352
+ BasicMaterialId: {
3353
+ edition: "proto2",
3354
+ fields: {
3355
+ type: {
3356
+ rule: "required",
3357
+ type: "int32",
3358
+ id: 1
3359
+ },
3360
+ index: {
3361
+ rule: "required",
3362
+ type: "sint32",
3363
+ id: 2
3364
+ }
3365
+ }
3366
+ },
3367
+ BasicMaterialInfo: {
3368
+ edition: "proto2",
3369
+ fields: {
3370
+ type: {
3371
+ rule: "required",
3372
+ type: "int32",
3373
+ id: 1
3374
+ },
3375
+ index: {
3376
+ rule: "required",
3377
+ type: "sint32",
3378
+ id: 2
3379
+ },
3380
+ token: {
3381
+ rule: "required",
3382
+ type: "string",
3383
+ id: 3
3384
+ },
3385
+ flags: {
3386
+ rule: "repeated",
3387
+ type: "int32",
3388
+ id: 4
3389
+ },
3390
+ subtype: {
3391
+ type: "int32",
3392
+ id: 5,
3393
+ options: {
3394
+ default: -1
3395
+ }
3396
+ },
3397
+ creatureId: {
3398
+ type: "int32",
3399
+ id: 6,
3400
+ options: {
3401
+ default: -1
3402
+ }
3403
+ },
3404
+ plantId: {
3405
+ type: "int32",
3406
+ id: 7,
3407
+ options: {
3408
+ default: -1
3409
+ }
3410
+ },
3411
+ histfigId: {
3412
+ type: "int32",
3413
+ id: 8,
3414
+ options: {
3415
+ default: -1
3416
+ }
3417
+ },
3418
+ namePrefix: {
3419
+ type: "string",
3420
+ id: 9,
3421
+ options: {
3422
+ default: ""
3423
+ }
3424
+ },
3425
+ stateColor: {
3426
+ rule: "repeated",
3427
+ type: "fixed32",
3428
+ id: 10
3429
+ },
3430
+ stateName: {
3431
+ rule: "repeated",
3432
+ type: "string",
3433
+ id: 11
3434
+ },
3435
+ stateAdj: {
3436
+ rule: "repeated",
3437
+ type: "string",
3438
+ id: 12
3439
+ },
3440
+ reactionClass: {
3441
+ rule: "repeated",
3442
+ type: "string",
3443
+ id: 13
3444
+ },
3445
+ reactionProduct: {
3446
+ rule: "repeated",
3447
+ type: "Product",
3448
+ id: 14
3449
+ },
3450
+ inorganicFlags: {
3451
+ rule: "repeated",
3452
+ type: "int32",
3453
+ id: 15
3454
+ }
3455
+ },
3456
+ nested: {
3457
+ Product: {
3458
+ fields: {
3459
+ id: {
3460
+ rule: "required",
3461
+ type: "string",
3462
+ id: 1
3463
+ },
3464
+ type: {
3465
+ rule: "required",
3466
+ type: "int32",
3467
+ id: 2
3468
+ },
3469
+ index: {
3470
+ rule: "required",
3471
+ type: "sint32",
3472
+ id: 3
3473
+ }
3474
+ }
3475
+ }
3476
+ }
3477
+ },
3478
+ BasicMaterialInfoMask: {
3479
+ edition: "proto2",
3480
+ fields: {
3481
+ states: {
3482
+ rule: "repeated",
3483
+ type: "StateType",
3484
+ id: 1
3485
+ },
3486
+ temperature: {
3487
+ type: "int32",
3488
+ id: 4,
3489
+ options: {
3490
+ default: 10015
3491
+ }
3492
+ },
3493
+ flags: {
3494
+ type: "bool",
3495
+ id: 2,
3496
+ options: {
3497
+ default: false
3498
+ }
3499
+ },
3500
+ reaction: {
3501
+ type: "bool",
3502
+ id: 3,
3503
+ options: {
3504
+ default: false
3505
+ }
3506
+ }
3507
+ },
3508
+ nested: {
3509
+ StateType: {
3510
+ values: {
3511
+ Solid: 0,
3512
+ Liquid: 1,
3513
+ Gas: 2,
3514
+ Powder: 3,
3515
+ Paste: 4,
3516
+ Pressed: 5
3517
+ }
3518
+ }
3519
+ }
3520
+ },
3521
+ JobSkillAttr: {
3522
+ edition: "proto2",
3523
+ fields: {
3524
+ id: {
3525
+ rule: "required",
3526
+ type: "int32",
3527
+ id: 1
3528
+ },
3529
+ key: {
3530
+ rule: "required",
3531
+ type: "string",
3532
+ id: 2
3533
+ },
3534
+ caption: {
3535
+ type: "string",
3536
+ id: 3
3537
+ },
3538
+ captionNoun: {
3539
+ type: "string",
3540
+ id: 4
3541
+ },
3542
+ profession: {
3543
+ type: "int32",
3544
+ id: 5
3545
+ },
3546
+ labor: {
3547
+ type: "int32",
3548
+ id: 6
3549
+ },
3550
+ type: {
3551
+ type: "string",
3552
+ id: 7
3553
+ }
3554
+ }
3555
+ },
3556
+ ProfessionAttr: {
3557
+ edition: "proto2",
3558
+ fields: {
3559
+ id: {
3560
+ rule: "required",
3561
+ type: "int32",
3562
+ id: 1
3563
+ },
3564
+ key: {
3565
+ rule: "required",
3566
+ type: "string",
3567
+ id: 2
3568
+ },
3569
+ caption: {
3570
+ type: "string",
3571
+ id: 3
3572
+ },
3573
+ military: {
3574
+ type: "bool",
3575
+ id: 4
3576
+ },
3577
+ canAssignLabor: {
3578
+ type: "bool",
3579
+ id: 5
3580
+ },
3581
+ parent: {
3582
+ type: "int32",
3583
+ id: 6
3584
+ }
3585
+ }
3586
+ },
3587
+ UnitLaborAttr: {
3588
+ edition: "proto2",
3589
+ fields: {
3590
+ id: {
3591
+ rule: "required",
3592
+ type: "int32",
3593
+ id: 1
3594
+ },
3595
+ key: {
3596
+ rule: "required",
3597
+ type: "string",
3598
+ id: 2
3599
+ },
3600
+ caption: {
3601
+ type: "string",
3602
+ id: 3
3603
+ }
3604
+ }
3605
+ },
3606
+ NameInfo: {
3607
+ edition: "proto2",
3608
+ fields: {
3609
+ firstName: {
3610
+ type: "string",
3611
+ id: 1
3612
+ },
3613
+ nickname: {
3614
+ type: "string",
3615
+ id: 2
3616
+ },
3617
+ languageId: {
3618
+ type: "int32",
3619
+ id: 3,
3620
+ options: {
3621
+ default: -1
3622
+ }
3623
+ },
3624
+ lastName: {
3625
+ type: "string",
3626
+ id: 4
3627
+ },
3628
+ englishName: {
3629
+ type: "string",
3630
+ id: 5
3631
+ }
3632
+ }
3633
+ },
3634
+ NameTriple: {
3635
+ edition: "proto2",
3636
+ fields: {
3637
+ normal: {
3638
+ rule: "required",
3639
+ type: "string",
3640
+ id: 1
3641
+ },
3642
+ plural: {
3643
+ type: "string",
3644
+ id: 2
3645
+ },
3646
+ adjective: {
3647
+ type: "string",
3648
+ id: 3
3649
+ }
3650
+ }
3651
+ },
3652
+ UnitCurseInfo: {
3653
+ edition: "proto2",
3654
+ fields: {
3655
+ addTags1: {
3656
+ rule: "required",
3657
+ type: "fixed32",
3658
+ id: 1
3659
+ },
3660
+ remTags1: {
3661
+ rule: "required",
3662
+ type: "fixed32",
3663
+ id: 2
3664
+ },
3665
+ addTags2: {
3666
+ rule: "required",
3667
+ type: "fixed32",
3668
+ id: 3
3669
+ },
3670
+ remTags2: {
3671
+ rule: "required",
3672
+ type: "fixed32",
3673
+ id: 4
3674
+ },
3675
+ name: {
3676
+ type: "NameTriple",
3677
+ id: 5
3678
+ }
3679
+ }
3680
+ },
3681
+ SkillInfo: {
3682
+ edition: "proto2",
3683
+ fields: {
3684
+ id: {
3685
+ rule: "required",
3686
+ type: "int32",
3687
+ id: 1
3688
+ },
3689
+ level: {
3690
+ rule: "required",
3691
+ type: "int32",
3692
+ id: 2
3693
+ },
3694
+ experience: {
3695
+ rule: "required",
3696
+ type: "int32",
3697
+ id: 3
3698
+ }
3699
+ }
3700
+ },
3701
+ UnitMiscTrait: {
3702
+ edition: "proto2",
3703
+ fields: {
3704
+ id: {
3705
+ rule: "required",
3706
+ type: "int32",
3707
+ id: 1
3708
+ },
3709
+ value: {
3710
+ rule: "required",
3711
+ type: "int32",
3712
+ id: 2
3713
+ }
3714
+ }
3715
+ },
3716
+ BasicUnitInfo: {
3717
+ edition: "proto2",
3718
+ fields: {
3719
+ unitId: {
3720
+ rule: "required",
3721
+ type: "int32",
3722
+ id: 1
3723
+ },
3724
+ posX: {
3725
+ rule: "required",
3726
+ type: "int32",
3727
+ id: 13
3728
+ },
3729
+ posY: {
3730
+ rule: "required",
3731
+ type: "int32",
3732
+ id: 14
3733
+ },
3734
+ posZ: {
3735
+ rule: "required",
3736
+ type: "int32",
3737
+ id: 15
3738
+ },
3739
+ name: {
3740
+ type: "NameInfo",
3741
+ id: 2
3742
+ },
3743
+ flags1: {
3744
+ rule: "required",
3745
+ type: "fixed32",
3746
+ id: 3
3747
+ },
3748
+ flags2: {
3749
+ rule: "required",
3750
+ type: "fixed32",
3751
+ id: 4
3752
+ },
3753
+ flags3: {
3754
+ rule: "required",
3755
+ type: "fixed32",
3756
+ id: 5
3757
+ },
3758
+ race: {
3759
+ rule: "required",
3760
+ type: "int32",
3761
+ id: 6
3762
+ },
3763
+ caste: {
3764
+ rule: "required",
3765
+ type: "int32",
3766
+ id: 7
3767
+ },
3768
+ gender: {
3769
+ type: "int32",
3770
+ id: 8,
3771
+ options: {
3772
+ default: -1
3773
+ }
3774
+ },
3775
+ civId: {
3776
+ type: "int32",
3777
+ id: 9,
3778
+ options: {
3779
+ default: -1
3780
+ }
3781
+ },
3782
+ histfigId: {
3783
+ type: "int32",
3784
+ id: 10,
3785
+ options: {
3786
+ default: -1
3787
+ }
3788
+ },
3789
+ deathId: {
3790
+ type: "int32",
3791
+ id: 17,
3792
+ options: {
3793
+ default: -1
3794
+ }
3795
+ },
3796
+ deathFlags: {
3797
+ type: "uint32",
3798
+ id: 18
3799
+ },
3800
+ squadId: {
3801
+ type: "int32",
3802
+ id: 19,
3803
+ options: {
3804
+ default: -1
3805
+ }
3806
+ },
3807
+ squadPosition: {
3808
+ type: "int32",
3809
+ id: 20,
3810
+ options: {
3811
+ default: -1
3812
+ }
3813
+ },
3814
+ profession: {
3815
+ type: "int32",
3816
+ id: 22,
3817
+ options: {
3818
+ default: -1
3819
+ }
3820
+ },
3821
+ customProfession: {
3822
+ type: "string",
3823
+ id: 23
3824
+ },
3825
+ labors: {
3826
+ rule: "repeated",
3827
+ type: "int32",
3828
+ id: 11
3829
+ },
3830
+ skills: {
3831
+ rule: "repeated",
3832
+ type: "SkillInfo",
3833
+ id: 12
3834
+ },
3835
+ miscTraits: {
3836
+ rule: "repeated",
3837
+ type: "UnitMiscTrait",
3838
+ id: 24
3839
+ },
3840
+ curse: {
3841
+ type: "UnitCurseInfo",
3842
+ id: 16
3843
+ },
3844
+ burrows: {
3845
+ rule: "repeated",
3846
+ type: "int32",
3847
+ id: 21
3848
+ }
3849
+ }
3850
+ },
3851
+ BasicUnitInfoMask: {
3852
+ edition: "proto2",
3853
+ fields: {
3854
+ labors: {
3855
+ type: "bool",
3856
+ id: 1,
3857
+ options: {
3858
+ default: false
3859
+ }
3860
+ },
3861
+ skills: {
3862
+ type: "bool",
3863
+ id: 2,
3864
+ options: {
3865
+ default: false
3866
+ }
3867
+ },
3868
+ profession: {
3869
+ type: "bool",
3870
+ id: 3,
3871
+ options: {
3872
+ default: false
3873
+ }
3874
+ },
3875
+ miscTraits: {
3876
+ type: "bool",
3877
+ id: 4,
3878
+ options: {
3879
+ default: false
3880
+ }
3881
+ }
3882
+ }
3883
+ },
3884
+ BasicSquadInfo: {
3885
+ edition: "proto2",
3886
+ fields: {
3887
+ squadId: {
3888
+ rule: "required",
3889
+ type: "int32",
3890
+ id: 1
3891
+ },
3892
+ name: {
3893
+ type: "NameInfo",
3894
+ id: 2
3895
+ },
3896
+ alias: {
3897
+ type: "string",
3898
+ id: 3
3899
+ },
3900
+ members: {
3901
+ rule: "repeated",
3902
+ type: "sint32",
3903
+ id: 4
3904
+ }
3905
+ }
3906
+ },
3907
+ UnitLaborState: {
3908
+ edition: "proto2",
3909
+ fields: {
3910
+ unitId: {
3911
+ rule: "required",
3912
+ type: "int32",
3913
+ id: 1
3914
+ },
3915
+ labor: {
3916
+ rule: "required",
3917
+ type: "int32",
3918
+ id: 2
3919
+ },
3920
+ value: {
3921
+ rule: "required",
3922
+ type: "bool",
3923
+ id: 3
3924
+ }
3925
+ }
3926
+ },
3927
+ GetWorldInfoOut: {
3928
+ edition: "proto2",
3929
+ fields: {
3930
+ mode: {
3931
+ rule: "required",
3932
+ type: "Mode",
3933
+ id: 1
3934
+ },
3935
+ saveDir: {
3936
+ rule: "required",
3937
+ type: "string",
3938
+ id: 2
3939
+ },
3940
+ worldName: {
3941
+ type: "NameInfo",
3942
+ id: 3
3943
+ },
3944
+ civId: {
3945
+ type: "int32",
3946
+ id: 4
3947
+ },
3948
+ siteId: {
3949
+ type: "int32",
3950
+ id: 5
3951
+ },
3952
+ groupId: {
3953
+ type: "int32",
3954
+ id: 6
3955
+ },
3956
+ raceId: {
3957
+ type: "int32",
3958
+ id: 7
3959
+ },
3960
+ playerUnitId: {
3961
+ type: "int32",
3962
+ id: 8
3963
+ },
3964
+ playerHistfigId: {
3965
+ type: "int32",
3966
+ id: 9
3967
+ },
3968
+ companionHistfigIds: {
3969
+ rule: "repeated",
3970
+ type: "int32",
3971
+ id: 10
3972
+ }
3973
+ },
3974
+ nested: {
3975
+ Mode: {
3976
+ values: {
3977
+ MODE_DWARF: 1,
3978
+ MODE_ADVENTURE: 2,
3979
+ MODE_LEGENDS: 3
3980
+ }
3981
+ }
3982
+ }
3983
+ },
3984
+ ListEnumsOut: {
3985
+ edition: "proto2",
3986
+ fields: {
3987
+ materialFlags: {
3988
+ rule: "repeated",
3989
+ type: "EnumItemName",
3990
+ id: 1
3991
+ },
3992
+ inorganicFlags: {
3993
+ rule: "repeated",
3994
+ type: "EnumItemName",
3995
+ id: 2
3996
+ },
3997
+ unitFlags1: {
3998
+ rule: "repeated",
3999
+ type: "EnumItemName",
4000
+ id: 3
4001
+ },
4002
+ unitFlags2: {
4003
+ rule: "repeated",
4004
+ type: "EnumItemName",
4005
+ id: 4
4006
+ },
4007
+ unitFlags3: {
4008
+ rule: "repeated",
4009
+ type: "EnumItemName",
4010
+ id: 5
4011
+ },
4012
+ unitLabor: {
4013
+ rule: "repeated",
4014
+ type: "EnumItemName",
4015
+ id: 6
4016
+ },
4017
+ jobSkill: {
4018
+ rule: "repeated",
4019
+ type: "EnumItemName",
4020
+ id: 7
4021
+ },
4022
+ cieAddTagMask1: {
4023
+ rule: "repeated",
4024
+ type: "EnumItemName",
4025
+ id: 8
4026
+ },
4027
+ cieAddTagMask2: {
4028
+ rule: "repeated",
4029
+ type: "EnumItemName",
4030
+ id: 9
4031
+ },
4032
+ deathInfoFlags: {
4033
+ rule: "repeated",
4034
+ type: "EnumItemName",
4035
+ id: 10
4036
+ },
4037
+ profession: {
4038
+ rule: "repeated",
4039
+ type: "EnumItemName",
4040
+ id: 11
4041
+ }
4042
+ }
4043
+ },
4044
+ ListJobSkillsOut: {
4045
+ edition: "proto2",
4046
+ fields: {
4047
+ skill: {
4048
+ rule: "repeated",
4049
+ type: "JobSkillAttr",
4050
+ id: 1
4051
+ },
4052
+ profession: {
4053
+ rule: "repeated",
4054
+ type: "ProfessionAttr",
4055
+ id: 2
4056
+ },
4057
+ labor: {
4058
+ rule: "repeated",
4059
+ type: "UnitLaborAttr",
4060
+ id: 3
4061
+ }
4062
+ }
4063
+ },
4064
+ ListMaterialsIn: {
4065
+ edition: "proto2",
4066
+ fields: {
4067
+ mask: {
4068
+ type: "BasicMaterialInfoMask",
4069
+ id: 1
4070
+ },
4071
+ idList: {
4072
+ rule: "repeated",
4073
+ type: "BasicMaterialId",
4074
+ id: 2
4075
+ },
4076
+ builtin: {
4077
+ type: "bool",
4078
+ id: 3
4079
+ },
4080
+ inorganic: {
4081
+ type: "bool",
4082
+ id: 4
4083
+ },
4084
+ creatures: {
4085
+ type: "bool",
4086
+ id: 5
4087
+ },
4088
+ plants: {
4089
+ type: "bool",
4090
+ id: 6
4091
+ }
4092
+ }
4093
+ },
4094
+ ListMaterialsOut: {
4095
+ edition: "proto2",
4096
+ fields: {
4097
+ value: {
4098
+ rule: "repeated",
4099
+ type: "BasicMaterialInfo",
4100
+ id: 1
4101
+ }
4102
+ }
4103
+ },
4104
+ ListUnitsIn: {
4105
+ edition: "proto2",
4106
+ fields: {
4107
+ mask: {
4108
+ type: "BasicUnitInfoMask",
4109
+ id: 1
4110
+ },
4111
+ idList: {
4112
+ rule: "repeated",
4113
+ type: "int32",
4114
+ id: 2
4115
+ },
4116
+ scanAll: {
4117
+ type: "bool",
4118
+ id: 5
4119
+ },
4120
+ race: {
4121
+ type: "int32",
4122
+ id: 3
4123
+ },
4124
+ civId: {
4125
+ type: "int32",
4126
+ id: 4
4127
+ },
4128
+ dead: {
4129
+ type: "bool",
4130
+ id: 6
4131
+ },
4132
+ alive: {
4133
+ type: "bool",
4134
+ id: 7
4135
+ },
4136
+ sane: {
4137
+ type: "bool",
4138
+ id: 8
4139
+ }
4140
+ }
4141
+ },
4142
+ ListUnitsOut: {
4143
+ edition: "proto2",
4144
+ fields: {
4145
+ value: {
4146
+ rule: "repeated",
4147
+ type: "BasicUnitInfo",
4148
+ id: 1
4149
+ }
4150
+ }
4151
+ },
4152
+ ListSquadsIn: {
4153
+ edition: "proto2",
4154
+ fields: {}
4155
+ },
4156
+ ListSquadsOut: {
4157
+ edition: "proto2",
4158
+ fields: {
4159
+ value: {
4160
+ rule: "repeated",
4161
+ type: "BasicSquadInfo",
4162
+ id: 1
4163
+ }
4164
+ }
4165
+ },
4166
+ SetUnitLaborsIn: {
4167
+ edition: "proto2",
4168
+ fields: {
4169
+ change: {
4170
+ rule: "repeated",
4171
+ type: "UnitLaborState",
4172
+ id: 1
4173
+ }
4174
+ }
4175
+ },
4176
+ CoreTextFragment: {
4177
+ edition: "proto2",
4178
+ fields: {
4179
+ text: {
4180
+ rule: "required",
4181
+ type: "string",
4182
+ id: 1
4183
+ },
4184
+ color: {
4185
+ type: "Color",
4186
+ id: 2
4187
+ }
4188
+ },
4189
+ nested: {
4190
+ Color: {
4191
+ values: {
4192
+ COLOR_BLACK: 0,
4193
+ COLOR_BLUE: 1,
4194
+ COLOR_GREEN: 2,
4195
+ COLOR_CYAN: 3,
4196
+ COLOR_RED: 4,
4197
+ COLOR_MAGENTA: 5,
4198
+ COLOR_BROWN: 6,
4199
+ COLOR_GREY: 7,
4200
+ COLOR_DARKGREY: 8,
4201
+ COLOR_LIGHTBLUE: 9,
4202
+ COLOR_LIGHTGREEN: 10,
4203
+ COLOR_LIGHTCYAN: 11,
4204
+ COLOR_LIGHTRED: 12,
4205
+ COLOR_LIGHTMAGENTA: 13,
4206
+ COLOR_YELLOW: 14,
4207
+ COLOR_WHITE: 15
4208
+ }
4209
+ }
4210
+ }
4211
+ },
4212
+ CoreTextNotification: {
4213
+ edition: "proto2",
4214
+ fields: {
4215
+ fragments: {
4216
+ rule: "repeated",
4217
+ type: "CoreTextFragment",
4218
+ id: 1
4219
+ }
4220
+ }
4221
+ },
4222
+ CoreErrorNotification: {
4223
+ edition: "proto2",
4224
+ fields: {
4225
+ code: {
4226
+ rule: "required",
4227
+ type: "ErrorCode",
4228
+ id: 1
4229
+ }
4230
+ },
4231
+ nested: {
4232
+ ErrorCode: {
4233
+ values: {
4234
+ CR_LINK_FAILURE: -3,
4235
+ CR_WOULD_BREAK: -2,
4236
+ CR_NOT_IMPLEMENTED: -1,
4237
+ CR_OK: 0,
4238
+ CR_FAILURE: 1,
4239
+ CR_WRONG_USAGE: 2,
4240
+ CR_NOT_FOUND: 3
4241
+ }
4242
+ }
4243
+ }
4244
+ },
4245
+ EmptyMessage: {
4246
+ edition: "proto2",
4247
+ fields: {}
4248
+ },
4249
+ IntMessage: {
4250
+ edition: "proto2",
4251
+ fields: {
4252
+ value: {
4253
+ rule: "required",
4254
+ type: "int32",
4255
+ id: 1
4256
+ }
4257
+ }
4258
+ },
4259
+ IntListMessage: {
4260
+ edition: "proto2",
4261
+ fields: {
4262
+ value: {
4263
+ rule: "repeated",
4264
+ type: "int32",
4265
+ id: 1
4266
+ }
4267
+ }
4268
+ },
4269
+ StringMessage: {
4270
+ edition: "proto2",
4271
+ fields: {
4272
+ value: {
4273
+ rule: "required",
4274
+ type: "string",
4275
+ id: 1
4276
+ }
4277
+ }
4278
+ },
4279
+ StringListMessage: {
4280
+ edition: "proto2",
4281
+ fields: {
4282
+ value: {
4283
+ rule: "repeated",
4284
+ type: "string",
4285
+ id: 1
4286
+ }
4287
+ }
4288
+ },
4289
+ CoreBindRequest: {
4290
+ edition: "proto2",
4291
+ fields: {
4292
+ method: {
4293
+ rule: "required",
4294
+ type: "string",
4295
+ id: 1
4296
+ },
4297
+ inputMsg: {
4298
+ rule: "required",
4299
+ type: "string",
4300
+ id: 2
4301
+ },
4302
+ outputMsg: {
4303
+ rule: "required",
4304
+ type: "string",
4305
+ id: 3
4306
+ },
4307
+ plugin: {
4308
+ type: "string",
4309
+ id: 4
4310
+ }
4311
+ }
4312
+ },
4313
+ CoreBindReply: {
4314
+ edition: "proto2",
4315
+ fields: {
4316
+ assignedId: {
4317
+ rule: "required",
4318
+ type: "int32",
4319
+ id: 1
4320
+ }
4321
+ }
4322
+ },
4323
+ CoreRunCommandRequest: {
4324
+ edition: "proto2",
4325
+ fields: {
4326
+ command: {
4327
+ rule: "required",
4328
+ type: "string",
4329
+ id: 1
4330
+ },
4331
+ arguments: {
4332
+ rule: "repeated",
4333
+ type: "string",
4334
+ id: 2
4335
+ }
4336
+ }
4337
+ },
4338
+ CoreRunLuaRequest: {
4339
+ edition: "proto2",
4340
+ fields: {
4341
+ module: {
4342
+ rule: "required",
4343
+ type: "string",
4344
+ id: 1
4345
+ },
4346
+ function: {
4347
+ rule: "required",
4348
+ type: "string",
4349
+ id: 2
4350
+ },
4351
+ arguments: {
4352
+ rule: "repeated",
4353
+ type: "string",
4354
+ id: 3
4355
+ }
4356
+ }
4357
+ }
4358
+ }
4359
+ },
4360
+ DwarfControl: {
4361
+ options: {
4362
+ optimize_for: "LITE_RUNTIME"
4363
+ },
4364
+ nested: {
4365
+ BuildCategory: {
4366
+ edition: "proto2",
4367
+ values: {
4368
+ NotCategory: 0,
4369
+ SiegeEngines: 1,
4370
+ Traps: 2,
4371
+ Workshops: 3,
4372
+ Furnaces: 4,
4373
+ Constructions: 5,
4374
+ MachineComponents: 6,
4375
+ Track: 7
4376
+ }
4377
+ },
4378
+ MenuAction: {
4379
+ edition: "proto2",
4380
+ values: {
4381
+ MenuNone: 0,
4382
+ MenuSelect: 1,
4383
+ MenuCancel: 2,
4384
+ MenuSelectAll: 3
4385
+ }
4386
+ },
4387
+ BuildSelectorStage: {
4388
+ edition: "proto2",
4389
+ values: {
4390
+ StageNoMat: 0,
4391
+ StagePlace: 1,
4392
+ StageItemSelect: 2
4393
+ }
4394
+ },
4395
+ SidebarState: {
4396
+ edition: "proto2",
4397
+ fields: {
4398
+ mode: {
4399
+ type: "proto.enums.ui_sidebar_mode.ui_sidebar_mode",
4400
+ id: 1
4401
+ },
4402
+ menuItems: {
4403
+ rule: "repeated",
4404
+ type: "MenuItem",
4405
+ id: 2
4406
+ },
4407
+ buildSelector: {
4408
+ type: "BuildSelector",
4409
+ id: 3
4410
+ }
4411
+ }
4412
+ },
4413
+ MenuItem: {
4414
+ edition: "proto2",
4415
+ fields: {
4416
+ buildingType: {
4417
+ type: "RemoteFortressReader.BuildingType",
4418
+ id: 1
4419
+ },
4420
+ existingCount: {
4421
+ type: "int32",
4422
+ id: 2
4423
+ },
4424
+ buildCategory: {
4425
+ type: "BuildCategory",
4426
+ id: 3
4427
+ }
4428
+ }
4429
+ },
4430
+ SidebarCommand: {
4431
+ edition: "proto2",
4432
+ fields: {
4433
+ mode: {
4434
+ type: "proto.enums.ui_sidebar_mode.ui_sidebar_mode",
4435
+ id: 1
4436
+ },
4437
+ menuIndex: {
4438
+ type: "int32",
4439
+ id: 2
4440
+ },
4441
+ action: {
4442
+ type: "MenuAction",
4443
+ id: 3
4444
+ },
4445
+ selectionCoord: {
4446
+ type: "RemoteFortressReader.Coord",
4447
+ id: 4
4448
+ }
4449
+ }
4450
+ },
4451
+ BuiildReqChoice: {
4452
+ edition: "proto2",
4453
+ fields: {
4454
+ distance: {
4455
+ type: "int32",
4456
+ id: 1
4457
+ },
4458
+ name: {
4459
+ type: "string",
4460
+ id: 2
4461
+ },
4462
+ numCandidates: {
4463
+ type: "int32",
4464
+ id: 3
4465
+ },
4466
+ usedCount: {
4467
+ type: "int32",
4468
+ id: 4
4469
+ }
4470
+ }
4471
+ },
4472
+ BuildItemReq: {
4473
+ edition: "proto2",
4474
+ fields: {
4475
+ countRequired: {
4476
+ type: "int32",
4477
+ id: 2
4478
+ },
4479
+ countMax: {
4480
+ type: "int32",
4481
+ id: 3
4482
+ },
4483
+ countProvided: {
4484
+ type: "int32",
4485
+ id: 4
4486
+ }
4487
+ }
4488
+ },
4489
+ BuildSelector: {
4490
+ edition: "proto2",
4491
+ fields: {
4492
+ buildingType: {
4493
+ type: "RemoteFortressReader.BuildingType",
4494
+ id: 1
4495
+ },
4496
+ stage: {
4497
+ type: "BuildSelectorStage",
4498
+ id: 2
4499
+ },
4500
+ choices: {
4501
+ rule: "repeated",
4502
+ type: "BuiildReqChoice",
4503
+ id: 3
4504
+ },
4505
+ selIndex: {
4506
+ type: "int32",
4507
+ id: 4
4508
+ },
4509
+ requirements: {
4510
+ rule: "repeated",
4511
+ type: "BuildItemReq",
4512
+ id: 5
4513
+ },
4514
+ reqIndex: {
4515
+ type: "int32",
4516
+ id: 6
4517
+ },
4518
+ errors: {
4519
+ rule: "repeated",
4520
+ type: "string",
4521
+ id: 7
4522
+ },
4523
+ radiusXLow: {
4524
+ type: "int32",
4525
+ id: 8
4526
+ },
4527
+ radiusYLow: {
4528
+ type: "int32",
4529
+ id: 9
4530
+ },
4531
+ radiusXHigh: {
4532
+ type: "int32",
4533
+ id: 10
4534
+ },
4535
+ radiusYHigh: {
4536
+ type: "int32",
4537
+ id: 11
4538
+ },
4539
+ cursor: {
4540
+ type: "RemoteFortressReader.Coord",
4541
+ id: 12
4542
+ },
4543
+ tiles: {
4544
+ rule: "repeated",
4545
+ type: "int32",
4546
+ id: 13
4547
+ }
4548
+ }
4549
+ }
4550
+ }
4551
+ },
4552
+ proto: {
4553
+ nested: {
4554
+ enums: {
4555
+ nested: {
4556
+ ui_sidebar_mode: {
4557
+ options: {
4558
+ optimize_for: "LITE_RUNTIME"
4559
+ },
4560
+ nested: {
4561
+ ui_sidebar_mode: {
4562
+ edition: "proto2",
4563
+ values: {
4564
+ Default: 0,
4565
+ Squads: 1,
4566
+ DesignateMine: 2,
4567
+ DesignateRemoveRamps: 3,
4568
+ DesignateUpStair: 4,
4569
+ DesignateDownStair: 5,
4570
+ DesignateUpDownStair: 6,
4571
+ DesignateUpRamp: 7,
4572
+ DesignateChannel: 8,
4573
+ DesignateGatherPlants: 9,
4574
+ DesignateRemoveDesignation: 10,
4575
+ DesignateSmooth: 11,
4576
+ DesignateCarveTrack: 12,
4577
+ DesignateEngrave: 13,
4578
+ DesignateCarveFortification: 14,
4579
+ Stockpiles: 15,
4580
+ Build: 16,
4581
+ QueryBuilding: 17,
4582
+ Orders: 18,
4583
+ OrdersForbid: 19,
4584
+ OrdersRefuse: 20,
4585
+ OrdersWorkshop: 21,
4586
+ OrdersZone: 22,
4587
+ BuildingItems: 23,
4588
+ ViewUnits: 24,
4589
+ LookAround: 25,
4590
+ DesignateItemsClaim: 26,
4591
+ DesignateItemsForbid: 27,
4592
+ DesignateItemsMelt: 28,
4593
+ DesignateItemsUnmelt: 29,
4594
+ DesignateItemsDump: 30,
4595
+ DesignateItemsUndump: 31,
4596
+ DesignateItemsHide: 32,
4597
+ DesignateItemsUnhide: 33,
4598
+ DesignateChopTrees: 34,
4599
+ DesignateToggleEngravings: 35,
4600
+ DesignateToggleMarker: 36,
4601
+ Hotkeys: 37,
4602
+ DesignateTrafficHigh: 38,
4603
+ DesignateTrafficNormal: 39,
4604
+ DesignateTrafficLow: 40,
4605
+ DesignateTrafficRestricted: 41,
4606
+ Zones: 42,
4607
+ ZonesPenInfo: 43,
4608
+ ZonesPitInfo: 44,
4609
+ ZonesHospitalInfo: 45,
4610
+ ZonesGatherInfo: 46,
4611
+ DesignateRemoveConstruction: 47,
4612
+ DepotAccess: 48,
4613
+ NotesPoints: 49,
4614
+ NotesRoutes: 50,
4615
+ Burrows: 51,
4616
+ Hauling: 52,
4617
+ ArenaWeather: 53,
4618
+ ArenaTrees: 54
4619
+ }
4620
+ }
4621
+ }
4622
+ }
4623
+ }
4624
+ }
4625
+ }
4626
+ }
4627
+ }
4628
+ };
4629
+
4630
+ // src/proto.ts
4631
+ function loadRoot() {
4632
+ const root = protobuf.Root.fromJSON(proto_default);
4633
+ relaxMapBlock(root);
4634
+ return root;
4635
+ }
4636
+ function relaxMapBlock(root) {
4637
+ const mapBlock = root.lookup("RemoteFortressReader.MapBlock");
4638
+ if (!mapBlock?.fields) return;
4639
+ for (const name of ["mapX", "mapY", "mapZ"]) {
4640
+ const field = mapBlock.fields[name];
4641
+ if (field && field.rule === "required") field.rule = "optional";
4642
+ }
4643
+ }
4644
+
4645
+ // src/client.ts
4646
+ var DwarfClient = class {
4647
+ root;
4648
+ conn;
4649
+ textNotification;
4650
+ boundIds = /* @__PURE__ */ new Map();
4651
+ constructor({ host, port } = {}) {
4652
+ this.root = loadRoot();
4653
+ this.textNotification = this.root.lookupType("dfproto.CoreTextNotification");
4654
+ this.conn = new DfConnection({ host, port, textDecoder: (body) => this.decodeText(body) });
4655
+ }
4656
+ decodeText(body) {
4657
+ try {
4658
+ const msg = this.textNotification.decode(body);
4659
+ const obj = this.textNotification.toObject(msg, { defaults: true });
4660
+ return (obj.fragments ?? []).map((f) => f.text ?? "").join("");
4661
+ } catch {
4662
+ return body.toString("utf8");
4663
+ }
4664
+ }
4665
+ /** True once connected and past the handshake. */
4666
+ get connected() {
4667
+ return this.conn.connected;
4668
+ }
4669
+ async connect() {
4670
+ await this.conn.connect();
4671
+ return this;
4672
+ }
4673
+ close() {
4674
+ this.conn.close();
4675
+ }
4676
+ /** Resolve (and cache) a method's runtime id via BindMethod. */
4677
+ async bind(name) {
4678
+ const cached = this.boundIds.get(name);
4679
+ if (cached !== void 0) return cached;
4680
+ const def = METHODS[name];
4681
+ const BindReq = this.root.lookupType("dfproto.CoreBindRequest");
4682
+ const BindReply = this.root.lookupType("dfproto.CoreBindReply");
4683
+ const reqBody = BindReq.encode(
4684
+ BindReq.create({
4685
+ method: name,
4686
+ inputMsg: def.input,
4687
+ outputMsg: def.output,
4688
+ plugin: def.plugin ?? void 0
4689
+ })
4690
+ ).finish();
4691
+ const { result } = await this.conn.call(0, reqBody);
4692
+ const reply = BindReply.toObject(BindReply.decode(result));
4693
+ const id = reply.assignedId ?? null;
4694
+ this.boundIds.set(name, id);
4695
+ return id;
4696
+ }
4697
+ /** Call a bound method by name; returns the decoded reply with `_text` attached. */
4698
+ async call(name, input = {}) {
4699
+ const def = METHODS[name];
4700
+ const id = await this.bind(name);
4701
+ if (id == null) throw new Error(`method ${name} is not available on this DFHack`);
4702
+ const InputType = this.root.lookupType(def.input);
4703
+ const OutputType = this.root.lookupType(def.output);
4704
+ const body = InputType.encode(InputType.create(input)).finish();
4705
+ const { result, text } = await this.conn.call(id, body);
4706
+ const out = OutputType.toObject(OutputType.decode(result), {
4707
+ longs: Number,
4708
+ enums: String,
4709
+ defaults: false
4710
+ });
4711
+ out._text = text;
4712
+ return out;
4713
+ }
4714
+ // Convenience wrappers for common methods.
4715
+ async getVersion() {
4716
+ return (await this.call("GetVersion")).value ?? "";
4717
+ }
4718
+ async getDFVersion() {
4719
+ return (await this.call("GetDFVersion")).value ?? "";
4720
+ }
4721
+ async getWorldInfo() {
4722
+ return await this.call("GetWorldInfo");
4723
+ }
4724
+ /** Run a DFHack command; returns its console (TEXT) output as a string. */
4725
+ async runCommand(command, args = []) {
4726
+ const out = await this.call("RunCommand", { command, arguments: args });
4727
+ return out._text ?? "";
4728
+ }
4729
+ /**
4730
+ * Run an arbitrary Lua snippet and return whatever it prints.
4731
+ * The DFHack `lua` command joins its arguments and runs them as a chunk (the
4732
+ * console-only `-e` flag is NOT accepted over RPC — it gets parsed as code),
4733
+ * so the snippet is passed as the argument directly. Console output is captured
4734
+ * via TEXT frames. This is the workhorse for semantic tools: the snippet builds
4735
+ * JSON and prints it.
4736
+ */
4737
+ async runLuaSnippet(snippet) {
4738
+ return this.runCommand("lua", [snippet]);
4739
+ }
4740
+ /**
4741
+ * Invoke a named Lua function via the core RunLua RPC: `module.function(...args)`.
4742
+ * Returns the function's string-list result. (Distinct from runLuaSnippet: this
4743
+ * calls an existing function, not code.)
4744
+ */
4745
+ async callLua(module, fn, args = []) {
4746
+ const out = await this.call("RunLua", { module, function: fn, arguments: args });
4747
+ return out.value ?? [];
4748
+ }
4749
+ };
4750
+ export {
4751
+ CR,
4752
+ DfConnection,
4753
+ DwarfClient,
4754
+ METHODS,
4755
+ ProtocolError,
4756
+ RPC_REPLY,
4757
+ RpcError,
4758
+ encodeMessage,
4759
+ readFrame,
4760
+ readHandshake
4761
+ };
4762
+ //# sourceMappingURL=index.js.map