Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4a37546835 | ||
|
|
b32b0abbe6 | ||
|
|
ed015e72d0 | ||
|
|
f1ec63a2f7 | ||
|
|
1911f52281 | ||
|
|
0c547d12d5 | ||
|
|
34ec1719ad | ||
|
|
210da0cca1 | ||
|
|
2889160bed | ||
|
|
051a2b6548 | ||
|
|
dfd08a8b69 | ||
|
|
3f40a4a63d | ||
|
|
a782e23e57 | ||
|
|
b74a466157 | ||
|
|
c7e7f7e58c | ||
|
|
760440fd24 | ||
|
|
856ea50676 | ||
|
|
dbd90bf843 | ||
|
|
8daf0a6619 | ||
|
|
6a9d23a2ef | ||
|
|
4d3cb54f7e | ||
|
|
22444e2d8e | ||
|
|
11a2016412 | ||
|
|
39588af3e4 | ||
|
|
99faf69fca | ||
|
|
0eec03c366 | ||
|
|
950e46e360 | ||
|
|
489d3d4777 | ||
|
|
07f17b1538 | ||
|
|
f42ba5adc8 | ||
|
|
6313b5b589 | ||
|
|
77d15c71cc | ||
|
|
5ffc3aca6a | ||
|
|
ffe6d8b356 | ||
|
|
13ee5512b2 | ||
|
|
3c36fccdf4 | ||
|
|
cd626b5718 | ||
|
|
a684e5b864 | ||
|
|
e919f0d60a | ||
|
|
35b883c065 | ||
|
|
fe95be6bd2 | ||
|
|
2bec423fd7 | ||
|
|
5ddbc7d25e | ||
|
|
7b829e3c3f | ||
|
|
e9c0648240 | ||
|
|
8a2b01fb27 | ||
|
|
3fa77d326c | ||
|
|
651886db35 | ||
|
|
0a4e5ca80e | ||
|
|
ef6a54580d | ||
|
|
ff3907d6f4 | ||
|
|
d36e7e5e45 | ||
|
|
e9cb036af1 | ||
|
|
ed8fc1fa1b | ||
|
|
c9b1c3f5ff | ||
|
|
3f16c75e06 | ||
|
|
9ab30eda4a | ||
|
|
467327b5b0 | ||
|
|
32da99fcc1 | ||
|
|
178cd16010 | ||
|
|
7357cef274 | ||
|
|
033e489904 | ||
|
|
6de284f6eb | ||
|
|
776c5bcb82 | ||
|
|
8779326e78 | ||
|
|
4dfa4a2348 | ||
|
|
39cc6cfd6d | ||
|
|
98ef75a581 | ||
|
|
ab69f947ef | ||
|
|
a9bc173016 | ||
|
|
72181c154d | ||
|
|
acc8eda33f | ||
|
|
a5ea0ee39e | ||
|
|
ee44bc3143 | ||
|
|
c9106ef256 | ||
|
|
d44b9ae317 | ||
|
|
dd29c202ef | ||
|
|
1ed80c59fd | ||
|
|
17d8aa5dc2 | ||
|
|
dc490696ac | ||
|
|
8764208045 | ||
|
|
536e460fce | ||
|
|
b1dc1513e5 | ||
|
|
fdef57d38f | ||
|
|
e11ada7ef2 | ||
|
|
4a925237ae | ||
|
|
62ee68679d | ||
|
|
01d1d3adf0 | ||
|
|
67c9b2d276 | ||
|
|
eae56c4230 | ||
|
|
d02fcfad46 | ||
|
|
317fef8887 | ||
|
|
7ecec5548e | ||
|
|
f42b6d58ec | ||
|
|
bce8c14efb | ||
|
|
c68ca5ee87 | ||
|
|
8e21f0a113 | ||
|
|
03dc7b0ac5 | ||
|
|
5afb043fb2 | ||
|
|
389b748395 | ||
|
|
6103e5b664 | ||
|
|
ac10d2b082 | ||
|
|
47c398f744 | ||
|
|
b192b13250 | ||
|
|
ae0c0966d3 | ||
|
|
a1330c444c | ||
|
|
f4f7f3cc1d | ||
|
|
8927383d7b | ||
|
|
506647e70b | ||
|
|
ed9ad45332 | ||
|
|
07ded59fb8 | ||
|
|
c2e1e97862 | ||
|
|
66257c15af | ||
|
|
d6ecbcdf11 | ||
|
|
52da06729b | ||
|
|
c04a67bc85 | ||
|
|
47a477dedd | ||
|
|
45ae083eea | ||
|
|
4040d1995a | ||
|
|
a620647376 | ||
|
|
3d970138ca | ||
|
|
385c147975 | ||
|
|
29f67110be | ||
|
|
0eb8dd5170 | ||
|
|
3b85f6a499 | ||
|
|
b907b839bf | ||
|
|
16fb1154ef | ||
|
|
c4622772f8 | ||
|
|
c994662b97 | ||
|
|
017b6e86f7 | ||
|
|
a86146faa2 | ||
|
|
05b2ecd4eb | ||
|
|
430a4ce59e | ||
|
|
4fff0f9af7 | ||
|
|
e830e65247 | ||
|
|
990fe2bdf8 | ||
|
|
0358038b71 | ||
|
|
9ad195b68b | ||
|
|
ed54566a14 | ||
|
|
13b549d4b1 | ||
|
|
512fa38e38 | ||
|
|
865536ebf4 | ||
|
|
c634488b6e | ||
|
|
9fde5f1a64 | ||
|
|
4058485677 | ||
|
|
8a6ee5b440 | ||
|
|
06f557409f | ||
|
|
e4a3574155 | ||
|
|
3f649aea1f | ||
|
|
1f355cb662 | ||
|
|
fac37627aa | ||
|
|
eaee988a0f | ||
|
|
51b22124bb | ||
|
|
469a392936 | ||
|
|
9053f1ea9e | ||
|
|
8b045667a6 | ||
|
|
6d1caaf4d8 | ||
|
|
837aa17e03 | ||
|
|
9f9d5ea45b | ||
|
|
d4cbf1252b | ||
|
|
c55ac244b7 | ||
|
|
5911a7a0f5 | ||
|
|
d2dbc5e7d5 | ||
|
|
a052b8bd30 | ||
|
|
050848932f | ||
|
|
9c6f00e585 | ||
|
|
9d48c430e5 | ||
|
|
986e99a4c5 | ||
|
|
c457c3023b | ||
|
|
0c7d763464 | ||
|
|
9350cf230f | ||
|
|
8d576eb58c | ||
|
|
7b541c72c9 | ||
|
|
302a25cfe0 | ||
|
|
2135bb15c0 | ||
|
|
16b6f6b018 | ||
|
|
5def371c61 | ||
|
|
ed0906e39d | ||
|
|
26e653766f | ||
|
|
04441ad3a7 | ||
|
|
f52b2fc78d | ||
|
|
fa8ed48a7c | ||
|
|
1095b26251 | ||
|
|
ab1b941c8f | ||
|
|
2b8788935d | ||
|
|
667368f00d | ||
|
|
7d7d32d157 | ||
|
|
47a66fed5f | ||
|
|
e328491f45 | ||
|
|
a6e7f11d6a | ||
|
|
78e782becf | ||
|
|
9c811a604a | ||
|
|
0c06e0488c | ||
|
|
d70f3e9dd7 | ||
|
|
c713117d97 | ||
|
|
282cf043c2 | ||
|
|
48ca2c29fd | ||
|
|
a278d4db32 | ||
|
|
b6bf978a1f | ||
|
|
e0c5c816d0 | ||
|
|
bb2524c296 | ||
|
|
de2202eb1c | ||
|
|
1678613135 | ||
|
|
622c449a55 | ||
|
|
18db37cb68 | ||
|
|
aa7d4270a7 | ||
|
|
0d129b2b9b | ||
|
|
d13afc1439 | ||
|
|
54443b9517 | ||
|
|
51b1a4c97f | ||
|
|
f3ad7b8570 | ||
|
|
15c9ea4cc9 | ||
|
|
a0153214dd | ||
|
|
ff4d02ec8d | ||
|
|
4bd8fcc495 | ||
|
|
d9d072e2c1 | ||
|
|
68f32020f6 | ||
|
|
d9cf2cf8bc | ||
|
|
92f09adbe3 | ||
|
|
af8983ea88 | ||
|
|
325e4aa576 | ||
|
|
fe487fbbcf | ||
|
|
72da0c492d | ||
|
|
6a1f6c295b | ||
|
|
f323fc323e | ||
|
|
164971c257 | ||
|
|
83a6edeed1 | ||
|
|
2525a68e5f | ||
|
|
e56f9fbfff | ||
|
|
347ca2ffcb | ||
|
|
d60bffb712 | ||
|
|
c4b4630b5a | ||
|
|
bab236b421 | ||
|
|
3da84f7ad5 | ||
|
|
f0a472359e | ||
|
|
a31e812cd3 | ||
|
|
623678d885 | ||
|
|
e787b36a4b | ||
|
|
8c81bdbe50 | ||
|
|
3f7d81b563 | ||
|
|
24d04ddebf | ||
|
|
327464ba82 | ||
|
|
ea730cd91e | ||
|
|
12a9ced070 | ||
|
|
3d6947b94b | ||
|
|
04ce31c5ff | ||
|
|
0526a69901 | ||
|
|
11febe49cd | ||
|
|
7fb278cbbc | ||
|
|
a4f29c749f | ||
|
|
d095d526b2 | ||
|
|
ccfb280293 | ||
|
|
ecc873096e | ||
|
|
b69eb3cb1a | ||
|
|
f8d13af736 | ||
|
|
4fed863744 | ||
|
|
b77b0039cf | ||
|
|
d859e2badf | ||
|
|
071dfb6ddb | ||
|
|
68145c1bac | ||
|
|
be7180af39 | ||
|
|
6442f9ebe9 | ||
|
|
caf6658dcd | ||
|
|
c2b6ce9135 | ||
|
|
e20857bb0c | ||
|
|
c1562c3236 | ||
|
|
3956e888f6 | ||
|
|
2c6a17644d | ||
|
|
68f909c868 | ||
|
|
6c2c1fdf1a | ||
|
|
213c108634 | ||
|
|
45ea60b0d3 | ||
|
|
b0d670ac4c | ||
|
|
5b399eee49 | ||
|
|
ece51a1bdb | ||
|
|
a4103c83b5 | ||
|
|
de540655bb | ||
|
|
453bcb06aa | ||
|
|
c8cb70ee8e | ||
|
|
c462d228ae | ||
|
|
afc6aece47 | ||
|
|
df32347c4d | ||
|
|
9b55f270db | ||
|
|
07e0291685 | ||
|
|
aa8339d45f | ||
|
|
732866c98d | ||
|
|
2ddf32f718 | ||
|
|
5b0ab3ebb4 | ||
|
|
37f2a2d893 | ||
|
|
c64823b85b | ||
|
|
b345322ee3 | ||
|
|
d6d9073fd2 | ||
|
|
587e0f56e7 | ||
|
|
08edc135d6 | ||
|
|
80dd28e26c | ||
|
|
0e01c36c63 | ||
|
|
fd261d5007 | ||
|
|
7efa8596c1 | ||
|
|
f0ee7c4a15 | ||
|
|
3b670ba348 | ||
|
|
a1a871028f | ||
|
|
caa6a16b67 | ||
|
|
c93c48831d | ||
|
|
3d691529dd | ||
|
|
c8ab4f5cf8 | ||
|
|
4aa5908180 | ||
|
|
621f3a8fd0 | ||
|
|
24ff2de2da | ||
|
|
c5e57683c9 | ||
|
|
92459d89ac | ||
|
|
80174768ec | ||
|
|
18905691a6 | ||
|
|
53b0408e0d | ||
|
|
774a2d7afe | ||
|
|
a77afab556 | ||
|
|
3c583d9126 | ||
|
|
c8b0d6a245 | ||
|
|
378ab92a91 | ||
|
|
b7f990b353 | ||
|
|
3e6d6c2cb4 | ||
|
|
3193fd8168 | ||
|
|
a5ecc2fc92 | ||
|
|
2a29653e99 | ||
|
|
9464c7b743 | ||
|
|
3273a15f52 | ||
|
|
f5be90867f | ||
|
|
a31eccff18 | ||
|
|
be70941529 | ||
|
|
d480021fac | ||
|
|
5fe879da5d | ||
|
|
b7e5ac5784 | ||
|
|
59a72ba22e | ||
|
|
2639b2efbc | ||
|
|
cf12dfd4d3 | ||
|
|
8d64ef63e6 | ||
|
|
4988f68b6b | ||
|
|
6bfc716325 | ||
|
|
a4c27722bd | ||
|
|
b3c1a5441a | ||
|
|
a131df1669 | ||
|
|
7c0564c0d1 | ||
|
|
478c5cf240 | ||
|
|
8a450f5b2c | ||
|
|
67c06d167d | ||
|
|
5be35858b1 | ||
|
|
656f2554f5 | ||
|
|
a66764afee | ||
|
|
9b41c38503 | ||
|
|
0b8733a956 | ||
|
|
627e2fc5a5 | ||
|
|
e53aaa6b52 | ||
|
|
ed3635dd40 | ||
|
|
b64be10500 | ||
|
|
14f0399b7d | ||
|
|
4e9a66cfe5 | ||
|
|
dd1f009765 | ||
|
|
d1443a034f | ||
|
|
a059d86f5a | ||
|
|
932d480ec8 | ||
|
|
d537bb9929 | ||
|
|
bce079f71c | ||
|
|
e22d4cbf99 | ||
|
|
a7ba06f122 | ||
|
|
2b028e4371 | ||
|
|
521b47f546 | ||
|
|
9d840144ed | ||
|
|
f5f33d8e63 | ||
|
|
a29b6505df | ||
|
|
bc725eeddc | ||
|
|
b30cbd57ce | ||
|
|
8f4ad7bfca | ||
|
|
1758201146 | ||
|
|
4aef9965af | ||
|
|
a1d76e7529 | ||
|
|
cf6de53ee4 | ||
|
|
c41ab26aba | ||
|
|
74c8953300 | ||
|
|
f3b7a5e65e | ||
|
|
950d195dc7 | ||
|
|
1df1276201 | ||
|
|
fcc3a40ed6 | ||
|
|
0d8304fd4e | ||
|
|
81432ba841 | ||
|
|
d734538db8 | ||
|
|
ae82103543 | ||
|
|
b716d7a27b | ||
|
|
4cc9d8263a | ||
|
|
b9d5a81ff1 | ||
|
|
d3f66b9828 | ||
|
|
ef4dff5693 | ||
|
|
2f378c46b2 | ||
|
|
9c088ff44a | ||
|
|
ef975835cf | ||
|
|
93e053edb6 | ||
|
|
b3573aa284 | ||
|
|
24fe96de10 | ||
|
|
082aff3972 | ||
|
|
aea5d09faa | ||
|
|
cae337b781 | ||
|
|
db3cf1fba3 | ||
|
|
4a3bc3ec98 | ||
|
|
c12324d678 | ||
|
|
377d98e2e4 | ||
|
|
87468ce565 | ||
|
|
d0f070717f | ||
|
|
5c5c2e3dbd | ||
|
|
a7dcba8ed7 | ||
|
|
b3e009b6b4 | ||
|
|
8276f65314 | ||
|
|
1b9b4e7c0c | ||
|
|
5ef346d94e | ||
|
|
18b428577f | ||
|
|
fc7ad9c579 | ||
|
|
41bfecbe1c | ||
|
|
4628b294d5 | ||
|
|
073f112bf3 | ||
|
|
21b5101267 | ||
|
|
48399b7772 | ||
|
|
16af1627ee | ||
|
|
772e693f08 | ||
|
|
3e7fc6482d | ||
|
|
6447b26a9d | ||
|
|
d24b2c4bfe | ||
|
|
5223f088e7 | ||
|
|
d8a5c0ba27 | ||
|
|
3a82ebf4d8 | ||
|
|
dc6a56b7d1 | ||
|
|
e7875cc10a | ||
|
|
ef60fb1d57 | ||
|
|
9828ab6b25 | ||
|
|
1ef97e7329 | ||
|
|
41805bd3bb | ||
|
|
02d07aa4f8 | ||
|
|
f413931239 | ||
|
|
062a8aa240 | ||
|
|
09e3daecd5 | ||
|
|
cda5296c02 | ||
|
|
846121bc17 | ||
|
|
e4c2b3ee41 | ||
|
|
d11f372850 | ||
|
|
b0d2c9a932 | ||
|
|
cf43f0862d | ||
|
|
c3a58fbbc9 | ||
|
|
07b60dc305 | ||
|
|
1beb1c073f | ||
|
|
b0d6e213fb | ||
|
|
cfb9d69ec3 | ||
|
|
3935b72df5 | ||
|
|
094af9280f | ||
|
|
c8c49aa0f2 | ||
|
|
6daa82ac14 | ||
|
|
915c7b04bb | ||
|
|
e17a93121a | ||
|
|
a19935de51 | ||
|
|
f10496f5b7 | ||
|
|
48e71fd828 | ||
|
|
a714efa93c | ||
|
|
dcab1acfa7 | ||
|
|
c1de0a342b | ||
|
|
c4c67d80bc | ||
|
|
9e7d0cce7e | ||
|
|
2e29567170 | ||
|
|
0d4675dd33 | ||
|
|
45d651d3d0 | ||
|
|
a16387323d | ||
|
|
2ffe1be0ad | ||
|
|
db1c449cbc | ||
|
|
7763c4b568 | ||
|
|
daca3f0ee0 | ||
|
|
68ee42f7cd | ||
|
|
3165d258f1 | ||
|
|
10c9a9dcb6 | ||
|
|
a3bf73e583 | ||
|
|
8efec20cc0 | ||
|
|
1773a4d0bc | ||
|
|
53865d09fa | ||
|
|
88663f6ca8 | ||
|
|
f90cf8196d | ||
|
|
b7196b15f9 | ||
|
|
ed5ad8310a | ||
|
|
d53faf5c98 | ||
|
|
6e8fbaa1f6 | ||
|
|
d29b1c1982 | ||
|
|
eaa6ee74f1 | ||
|
|
324aaaf7f7 | ||
|
|
194020de79 | ||
|
|
d619a05556 | ||
|
|
6342f499e4 | ||
|
|
975ea198f7 | ||
|
|
e3174156a6 | ||
|
|
71e347a4f9 | ||
|
|
27d2fd8f78 | ||
|
|
4851440c10 | ||
|
|
f4d155a0eb | ||
|
|
2bfe73da57 | ||
|
|
6dd29baf0e | ||
|
|
22baa344df | ||
|
|
e48e570d25 | ||
|
|
4df2ef3926 | ||
|
|
55bd4df422 | ||
|
|
10095ac4ff | ||
|
|
e002746617 | ||
|
|
5a62316f57 | ||
|
|
d69a002349 | ||
|
|
c41fc53202 | ||
|
|
2f28e54877 | ||
|
|
ef430040b3 | ||
|
|
5df5471b99 | ||
|
|
c100188ad9 | ||
|
|
5d649e1b74 | ||
|
|
4f95349e3a | ||
|
|
6ca7a80c2a | ||
|
|
5aebcdca58 | ||
|
|
84c03b3bc0 | ||
|
|
8c9a4dede4 | ||
|
|
179a224877 | ||
|
|
6c86aafe5f | ||
|
|
a35fb2d560 | ||
|
|
5c7415da1f | ||
|
|
650055d605 | ||
|
|
6aa3e6027b | ||
|
|
30777e314e | ||
|
|
f989f5609c | ||
|
|
71dd8587a6 | ||
|
|
602f2b8557 | ||
|
|
aa6809b16a | ||
|
|
88a8647570 | ||
|
|
31b3a88404 | ||
|
|
2fe23966f9 | ||
|
|
e7ba494bfc | ||
|
|
60f2c61346 | ||
|
|
98a9bf1e3c | ||
|
|
aecf80c08c | ||
|
|
1ca9582296 | ||
|
|
18c57bb9a3 | ||
|
|
29b54f0a93 | ||
|
|
ddfe45856f | ||
|
|
f1372ded5d | ||
|
|
3ede4618fe | ||
|
|
26175c65b3 | ||
|
|
c920fe2d21 | ||
|
|
5fd7f68510 | ||
|
|
55d567395e | ||
|
|
b8e3a9cd7f | ||
|
|
54bfc2baad | ||
|
|
d15da6e07e | ||
|
|
deeecfda25 | ||
|
|
5eacd810a6 | ||
|
|
4380f3ec09 | ||
|
|
06af1faf5b | ||
|
|
1fb6c0976d | ||
|
|
d107b264d8 | ||
|
|
ab14f3dfb4 | ||
|
|
f5c59ff54c | ||
|
|
16bbcb62e6 | ||
|
|
04465c4abc | ||
|
|
9fa69c59f9 | ||
|
|
f62c344d7a | ||
|
|
09e30bac71 | ||
|
|
6cc7ea5e57 | ||
|
|
b3561933f7 | ||
|
|
37357154f8 | ||
|
|
9c9980c329 | ||
|
|
7210bdc0c9 | ||
|
|
a7e97c06c6 | ||
|
|
00cc2cd1bf | ||
|
|
7858e29b21 | ||
|
|
6e793a1c1d | ||
|
|
3bf47520a0 | ||
|
|
19ab8423eb | ||
|
|
45e5ca3612 | ||
|
|
b85056a493 | ||
|
|
2b74317b34 | ||
|
|
63f0776079 | ||
|
|
ac361d4e8f | ||
|
|
319593e0b6 | ||
|
|
86dc36a372 | ||
|
|
79a991a2a0 | ||
|
|
70c2010ea5 | ||
|
|
65e4a22c84 | ||
|
|
0215cabda8 | ||
|
|
2ed9fa8834 | ||
|
|
d3b4943c55 | ||
|
|
8232e5aa52 | ||
|
|
785054d28b | ||
|
|
fe620796b4 | ||
|
|
c9efe991df | ||
|
|
df9d6bbfda | ||
|
|
1c2a3eb2e5 | ||
|
|
d0005aea7f | ||
|
|
f9fa92afc1 | ||
|
|
ef5d5abfff | ||
|
|
5a2a1658ce | ||
|
|
6ad8d06015 | ||
|
|
adb9a82d84 | ||
|
|
0d112fd655 | ||
|
|
4d8ebbcc15 | ||
|
|
3fd0d817e7 | ||
|
|
515c7e9f72 | ||
|
|
9cb2ae259c | ||
|
|
4462f1bea4 | ||
|
|
2fa5cf5dab | ||
|
|
8d16c1768e | ||
|
|
769e45e65a | ||
|
|
cc1cea5b93 | ||
|
|
36076eb7f8 | ||
|
|
d1e512e7c8 | ||
|
|
f0df12127f | ||
|
|
628efdc6f2 | ||
|
|
41edbd338d | ||
|
|
eedfb62cf2 | ||
|
|
f5e83e1e20 | ||
|
|
f20e3ff946 | ||
|
|
7da63ac504 | ||
|
|
76dc529d23 | ||
|
|
74b9589eb6 | ||
|
|
3b179315c1 | ||
|
|
6850704072 | ||
|
|
fd00f3fae3 | ||
|
|
b00b88476b | ||
|
|
f8ab28196b | ||
|
|
26bae55830 | ||
|
|
85b44f02b3 | ||
|
|
061b12ed80 | ||
|
|
b72031e62f | ||
|
|
56a7588736 | ||
|
|
a7f2bb3b79 | ||
|
|
4fcb89cb28 | ||
|
|
9127d8a8ac | ||
|
|
75155f7304 | ||
|
|
50f6b1675e | ||
|
|
40ca70ae26 | ||
|
|
34ee406445 | ||
|
|
3f8fe03003 | ||
|
|
07d5b03e35 | ||
|
|
3c239e8af0 | ||
|
|
9d759d03eb | ||
|
|
6c53474479 | ||
|
|
10e9655a43 | ||
|
|
13ad318ad9 | ||
|
|
4aa78c6a11 | ||
|
|
f34ddc8d9b | ||
|
|
59fb89c243 | ||
|
|
e5202a8f92 | ||
|
|
5ddff4ce22 | ||
|
|
1ae0f6171b | ||
|
|
550bc0c311 | ||
|
|
ca04662341 | ||
|
|
a3682756dc | ||
|
|
4f52ec4846 | ||
|
|
b26685f05e | ||
|
|
a6743e8217 | ||
|
|
0580e1afbb | ||
|
|
d8e94923d6 | ||
|
|
b1d40fb039 | ||
|
|
dc0ced3ca3 | ||
|
|
f6266db2bc | ||
|
|
f5b2b81c21 | ||
|
|
50c40be5e2 | ||
|
|
fa13d108d9 | ||
|
|
8069a7b306 | ||
|
|
42fe38c2aa | ||
|
|
87b71295f2 | ||
|
|
03bea6b291 | ||
|
|
0aa091b212 | ||
|
|
dec4913090 | ||
|
|
c01a35d410 | ||
|
|
15f5885b0f | ||
|
|
c3ccee72a7 | ||
|
|
139d7626b2 | ||
|
|
d285dd6855 | ||
|
|
0a066fbef7 | ||
|
|
4d70395204 | ||
|
|
98d4130222 | ||
|
|
24ee7a6af3 | ||
|
|
9a40c949d5 | ||
|
|
633105305a | ||
|
|
b22cfa0c74 | ||
|
|
58c1aee0df | ||
|
|
3d7b55c01e | ||
|
|
2510dcabb4 | ||
|
|
756e553b31 | ||
|
|
82443db8ec | ||
|
|
de6dd91277 | ||
|
|
ce532f25f7 | ||
|
|
8df1d96a2e | ||
|
|
7deb20ab65 | ||
|
|
219689a74f | ||
|
|
3426904a60 | ||
|
|
9e76806e90 | ||
|
|
3f5d963068 | ||
|
|
58fe731e70 | ||
|
|
121afa0c95 | ||
|
|
cb1ba51238 | ||
|
|
98a7e08624 | ||
|
|
43a913fa78 | ||
|
|
dd4b07b2a2 | ||
|
|
b587253ac0 | ||
|
|
d4cda24fb8 | ||
|
|
51a2588c4e | ||
|
|
de3c2430c0 | ||
|
|
4073ffbbb6 | ||
|
|
a55e0a3d53 | ||
|
|
d90c830b27 | ||
|
|
e53047854f | ||
|
|
cfabcaa871 | ||
|
|
b3c8a8ec4f | ||
|
|
78e2b1d3be | ||
|
|
b663f71640 | ||
|
|
31301a7c34 | ||
|
|
40395ef039 | ||
|
|
96af273bb5 | ||
|
|
e600d9bc02 | ||
|
|
da40fabeaa | ||
|
|
2641e0c1cc | ||
|
|
2bddc9a00f | ||
|
|
87ae076950 | ||
|
|
b2aefdd4cf | ||
|
|
88f1e0c4af | ||
|
|
47d28c0d20 | ||
|
|
b2a574eb66 | ||
|
|
08c136f4ee | ||
|
|
9c0446a053 | ||
|
|
ef4e93c396 | ||
|
|
efb9acce1b | ||
|
|
80d2ddfab9 | ||
|
|
67d3a9feb0 | ||
|
|
3dd3cf5a28 | ||
|
|
7bbb81cd17 | ||
|
|
a5080a3faf | ||
|
|
7d88eeee77 | ||
|
|
52baac3fe9 | ||
|
|
5fe8170e7c | ||
|
|
a2825a08a9 | ||
|
|
6a2ef5a8ca | ||
|
|
04b38dd103 | ||
|
|
a7a3aaf06a | ||
|
|
9f21a98923 | ||
|
|
ab64677ea9 | ||
|
|
dced8834b6 | ||
|
|
9ffc9cb4f4 | ||
|
|
05771f4337 | ||
|
|
82dfc3eba3 | ||
|
|
6b029cf8dd | ||
|
|
a8e829e3ee | ||
|
|
025ac78e27 | ||
|
|
4a3e9593fd | ||
|
|
f92e7fffac | ||
|
|
637b02c42e | ||
|
|
9e091eaf06 | ||
|
|
3e0aafea36 | ||
|
|
89e89efac6 | ||
|
|
1381291256 | ||
|
|
f7a0c59c53 | ||
|
|
4c9a1538f7 | ||
|
|
b9da705564 | ||
|
|
764c38c71e | ||
|
|
b0e0b46d2f | ||
|
|
964810add9 | ||
|
|
14fe0a4c85 | ||
|
|
4497e34bbb | ||
|
|
5a9e8cbcac | ||
|
|
912f2942a6 | ||
|
|
4890453214 | ||
|
|
fd6a98f9db | ||
|
|
2ad41a9047 | ||
|
|
9150360f74 | ||
|
|
08c1a7aa29 | ||
|
|
8b1c028b2a | ||
|
|
895cea805e | ||
|
|
364fb579be | ||
|
|
88cfc7ad66 | ||
|
|
7c8ad05bc2 | ||
|
|
14aef11a11 | ||
|
|
5ce539f6c5 | ||
|
|
078e467fb2 | ||
|
|
c12371ea12 | ||
|
|
2ec973b12c | ||
|
|
88acbbdc84 | ||
|
|
4f9ea8b70d | ||
|
|
d6495dda32 | ||
|
|
b2cd1adf46 | ||
|
|
2a6cd86bad | ||
|
|
6ae882fd3e | ||
|
|
a00dd8023b | ||
|
|
91b52f34a7 | ||
|
|
f4fb105adc | ||
|
|
ee3be887cd | ||
|
|
7f564e8ddf | ||
|
|
2362420f4d | ||
|
|
f7ae03ead7 | ||
|
|
1ce89c5306 | ||
|
|
f0186853ec | ||
|
|
06de790dc2 | ||
|
|
e76d33fd51 | ||
|
|
475b8d4f15 | ||
|
|
a0a06c450b | ||
|
|
7b9c4bb249 | ||
|
|
34dbb868dd | ||
|
|
1ce9b117cc | ||
|
|
0e684f1a32 | ||
|
|
569bbedf7d | ||
|
|
d8d85ebeef | ||
|
|
120fe61980 | ||
|
|
dc7e984fbe | ||
|
|
d7062322ac | ||
|
|
ac42a20f55 | ||
|
|
b7da1b955a | ||
|
|
c226dfd624 | ||
|
|
c61bff0904 | ||
|
|
6891ac58f2 | ||
|
|
c064587d5c | ||
|
|
13665de064 | ||
|
|
a6c2718354 | ||
|
|
6b4643f8e8 | ||
|
|
7b17caf131 | ||
|
|
b50b922d3a | ||
|
|
dce2e0ec17 | ||
|
|
772404a494 | ||
|
|
bda421680f | ||
|
|
b6ff695c4c | ||
|
|
524cb8a78b | ||
|
|
42edaceafc | ||
|
|
de4d4aa0ed | ||
|
|
6313a2b5cc | ||
|
|
a86761fea6 | ||
|
|
bf5be69df3 | ||
|
|
cee2f0babc | ||
|
|
2b6df1d328 | ||
|
|
03260f60cd | ||
|
|
3c95419987 | ||
|
|
f325e37ce9 | ||
|
|
e658a430f4 | ||
|
|
038b549e03 | ||
|
|
e4c2397097 | ||
|
|
dc5921b988 | ||
|
|
f56cd4f164 | ||
|
|
6b4b90bffd | ||
|
|
efbec69b3c | ||
|
|
4969e382f6 | ||
|
|
06589cd77f | ||
|
|
8ab249b815 | ||
|
|
a8bf71b12a | ||
|
|
ac2401daf1 | ||
|
|
fc1bfe0b24 | ||
|
|
dc27a0951c | ||
|
|
c23a0a1e62 | ||
|
|
a0e37f3f37 | ||
|
|
57b1cfa3fa | ||
|
|
acb4118f82 | ||
|
|
d88fc9b652 | ||
|
|
08c3de06e2 | ||
|
|
e890363345 | ||
|
|
b5392c1cc1 | ||
|
|
10a432d244 | ||
|
|
58b6c994d5 | ||
|
|
189ee293d3 | ||
|
|
9cc687efca | ||
|
|
ac95b2b9fa | ||
|
|
0bf2eea358 | ||
|
|
4e00176c98 | ||
|
|
4122a9d51d | ||
|
|
87e2dc69a2 | ||
|
|
d6619b9055 | ||
|
|
d368a73464 | ||
|
|
2906181f37 | ||
|
|
8db5ec0247 | ||
|
|
4d57e9fbdb | ||
|
|
1beadcf73b | ||
|
|
4981300476 | ||
|
|
b143b05ad7 | ||
|
|
91d4fcd2c3 | ||
|
|
b5d77dc7cf | ||
|
|
3d91b63f1f | ||
|
|
c1058ec351 | ||
|
|
7416bc3bb7 | ||
|
|
90d32abd6b | ||
|
|
b7049f35e6 | ||
|
|
011713cd25 | ||
|
|
43a3c3a340 | ||
|
|
c0d0419016 | ||
|
|
4fa45154bb | ||
|
|
54ea4acf22 | ||
|
|
8fb7aa34e3 | ||
|
|
1a89fc9f8e | ||
|
|
59c3b18a6f | ||
|
|
7d3e3155f7 | ||
|
|
db3c4fd8f7 | ||
|
|
c3b8abf3e5 | ||
|
|
a226d98116 | ||
|
|
e3ed17e7e9 | ||
|
|
6cdc054446 | ||
|
|
34d276ff43 | ||
|
|
fe8db2f978 | ||
|
|
e8b56fa91e | ||
|
|
7886e9fe52 | ||
|
|
60eb3afb8d | ||
|
|
383b793576 | ||
|
|
3c3b2dd7f1 | ||
|
|
fc8056343b | ||
|
|
c425828f4e | ||
|
|
f474d2b688 | ||
|
|
1c917da75c | ||
|
|
d88c3f7f33 | ||
|
|
cab20173c2 | ||
|
|
2545becb68 | ||
|
|
a7cdadf65c | ||
|
|
41dd28c197 | ||
|
|
861678fd71 | ||
|
|
f64279fb75 | ||
|
|
6c3b6aeea5 | ||
|
|
012eeabc87 | ||
|
|
d889acba16 | ||
|
|
26cf72b0c5 | ||
|
|
a1b47b1188 | ||
|
|
85b69d3afd | ||
|
|
266c5a541b | ||
|
|
cf6b7b5aa3 | ||
|
|
3edd934564 | ||
|
|
7ca16fee2a | ||
|
|
930ab20004 | ||
|
|
fb94d9777a | ||
|
|
f0fac538ac | ||
|
|
ba21ed19ef | ||
|
|
b84d12407f | ||
|
|
f391126b5b | ||
|
|
b8c7c2f740 | ||
|
|
8e7eeb2573 | ||
|
|
8e907f714a | ||
|
|
4e9461adde | ||
|
|
6a13f2ef08 |
@@ -45,13 +45,12 @@ jobs:
|
||||
rm README.md
|
||||
git add .
|
||||
git commit --allow-empty -m "Updating"
|
||||
git push https://Anuken:${{ secrets.API_TOKEN_GITHUB }}@github.com/Anuken/MindustryJitpack
|
||||
git tag ${RELEASE_VERSION}
|
||||
git push https://Anuken:${{ secrets.API_TOKEN_GITHUB }}@github.com/Anuken/MindustryJitpack
|
||||
git push https://Anuken:${{ secrets.API_TOKEN_GITHUB }}@github.com/Anuken/MindustryJitpack ${RELEASE_VERSION}
|
||||
cd ../Mindustry
|
||||
- name: Create artifacts
|
||||
run: |
|
||||
./gradlew desktop:dist server:dist core:mergedJavadoc -Pbuildversion=${RELEASE_VERSION:1}
|
||||
./gradlew desktop:dist server:dist core:depsJar core:assetsJar core:mergedJavadoc -Pbuildversion=${RELEASE_VERSION:1}
|
||||
- name: Update docs
|
||||
run: |
|
||||
cd ../
|
||||
@@ -65,7 +64,7 @@ jobs:
|
||||
cd docs
|
||||
git add .
|
||||
git commit --allow-empty -m "Update ${RELEASE_VERSION:1}"
|
||||
git push https://Anuken:${{ secrets.API_TOKEN_GITHUB }}@github.com/MindustryGame/docs
|
||||
git push https://Anuken:${{ secrets.API_TOKEN_ORG_GITHUB }}@github.com/MindustryGame/docs
|
||||
cd ../Mindustry
|
||||
- name: Update F-Droid build string
|
||||
run: |
|
||||
@@ -91,3 +90,18 @@ jobs:
|
||||
file: server/build/libs/server-release.jar
|
||||
tag: ${{ github.ref }}
|
||||
|
||||
- name: Upload dependency JAR
|
||||
uses: svenstaro/upload-release-action@v2
|
||||
with:
|
||||
repo_token: ${{ secrets.GITHUB_TOKEN }}
|
||||
file: core/build/libs/core-release-deps.jar
|
||||
asset_name: dependencies.jar
|
||||
tag: ${{ github.ref }}
|
||||
|
||||
- name: Upload assets JAR
|
||||
uses: svenstaro/upload-release-action@v2
|
||||
with:
|
||||
repo_token: ${{ secrets.GITHUB_TOKEN }}
|
||||
file: core/build/libs/core-release-assets.jar
|
||||
asset_name: assets.jar
|
||||
tag: ${{ github.ref }}
|
||||
|
||||
@@ -15,6 +15,8 @@ jobs:
|
||||
uses: actions/setup-java@v1
|
||||
with:
|
||||
java-version: 17
|
||||
- name: Fetch latest Arc
|
||||
run: git clone --depth=1 --branch=master https://github.com/Anuken/Arc ../Arc
|
||||
- name: Setup Gradle
|
||||
uses: gradle/gradle-build-action@v2
|
||||
- name: Run unit tests
|
||||
|
||||
@@ -25,6 +25,8 @@ jobs:
|
||||
uses: actions/setup-java@v1
|
||||
with:
|
||||
java-version: 17
|
||||
- name: Fetch latest Arc
|
||||
run: git clone --depth=1 --branch=master https://github.com/Anuken/Arc ../Arc
|
||||
- name: Setup Gradle
|
||||
uses: gradle/gradle-build-action@v2
|
||||
- name: Update bundles
|
||||
@@ -39,6 +41,18 @@ jobs:
|
||||
git commit -m "Automatic bundle update"
|
||||
git push
|
||||
fi
|
||||
- name: Update scripts and class mappings
|
||||
if: ${{ github.repository == 'Anuken/Mindustry' }}
|
||||
run: |
|
||||
./gradlew updateScripts
|
||||
|
||||
if [ -n "$(git status --porcelain)" ]; then
|
||||
git config --global user.name "Github Actions"
|
||||
git config --global user.email "actions@github.com"
|
||||
git add core/assets/scripts/* core/src/mindustry/mod/ClassMap.java
|
||||
git commit -m "Automatic class mapping update"
|
||||
git push
|
||||
fi
|
||||
- name: Update JITpack repo
|
||||
if: ${{ github.repository == 'Anuken/Mindustry' }}
|
||||
run: |
|
||||
|
||||
@@ -20,6 +20,12 @@ Yes, there are occurrences of trailing spaces, extra newlines, empty indents, an
|
||||
|
||||
I **especially** do not want to see PRs that apply any kind of automated analysis to the source code to "optimize" anything - my IDE can do that already. If the PR doesn't actually change anything useful, I'm not going to review or merge it.
|
||||
|
||||
### Do not make AI "contributions".
|
||||
|
||||
If I see a PR with significant amounts of code that's obviously written by AI, I will reject your PR, and you will be blocked. Don't waste my time with slop.
|
||||
|
||||
Asking AI questions, and using that information to help you write code? Fine. Using it to actually write code? No.
|
||||
|
||||
## Style Guidelines
|
||||
|
||||
### Follow the formatting guidelines.
|
||||
|
||||
@@ -14,7 +14,6 @@
|
||||
android:roundIcon="@mipmap/ic_launcher_round"
|
||||
android:isGame="true"
|
||||
android:theme="@style/ArcTheme"
|
||||
android:usesCleartextTraffic="true"
|
||||
android:appCategory="game"
|
||||
android:label="@string/app_name"
|
||||
android:fullBackupContent="@xml/backup_rules"
|
||||
@@ -32,13 +31,6 @@
|
||||
<category android:name="android.intent.category.LAUNCHER"/>
|
||||
</intent-filter>
|
||||
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.VIEW"/>
|
||||
<category android:name="android.intent.category.DEFAULT"/>
|
||||
<category android:name="android.intent.category.BROWSABLE"/>
|
||||
<data android:mimeType="application/octet-stream" />
|
||||
<data android:scheme="file" android:host="*" android:pathPattern=".*\\.msav"/>
|
||||
</intent-filter>
|
||||
</activity>
|
||||
|
||||
</application>
|
||||
|
||||
@@ -3,7 +3,6 @@ buildscript{
|
||||
mavenLocal()
|
||||
mavenCentral()
|
||||
google()
|
||||
maven{ url "https://oss.sonatype.org/content/repositories/snapshots/" }
|
||||
}
|
||||
|
||||
dependencies{
|
||||
@@ -17,7 +16,7 @@ configurations{ natives }
|
||||
|
||||
repositories{
|
||||
mavenCentral()
|
||||
maven{ url "https://maven.google.com" }
|
||||
maven{ url = "https://maven.google.com" }
|
||||
}
|
||||
|
||||
task deploy(type: Copy){
|
||||
@@ -40,7 +39,12 @@ android{
|
||||
renderscript.srcDirs = ['src']
|
||||
res.srcDirs = ['res']
|
||||
assets.srcDirs = ['assets', 'src/main/assets', '../core/assets/']
|
||||
jniLibs.srcDirs = ['libs']
|
||||
|
||||
if(localArc){
|
||||
jniLibs.srcDirs += ['../../Arc/natives/natives-android/libs', '../../Arc/natives/natives-freetype-android/libs']
|
||||
}else{
|
||||
jniLibs.srcDirs = ['libs']
|
||||
}
|
||||
}
|
||||
|
||||
androidTest.setRoot('tests')
|
||||
@@ -67,12 +71,12 @@ android{
|
||||
}
|
||||
props.store(file('../core/assets/version.properties').newWriter(), null)
|
||||
|
||||
multiDexEnabled true
|
||||
multiDexEnabled = true
|
||||
}
|
||||
|
||||
compileOptions{
|
||||
sourceCompatibility JavaVersion.VERSION_1_8
|
||||
targetCompatibility JavaVersion.VERSION_1_8
|
||||
sourceCompatibility JavaVersion.VERSION_17
|
||||
targetCompatibility JavaVersion.VERSION_17
|
||||
}
|
||||
|
||||
flavorDimensions = ["google"]
|
||||
@@ -110,7 +114,7 @@ android{
|
||||
if(project.hasProperty("RELEASE_STORE_FILE") || System.getenv("CI") == "true"){
|
||||
buildTypes{
|
||||
release{
|
||||
signingConfig signingConfigs.release
|
||||
signingConfig = signingConfigs.release
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -122,8 +126,10 @@ dependencies{
|
||||
implementation arcModule("backends:backend-android")
|
||||
implementation 'com.jakewharton.android.repackaged:dalvik-dx:9.0.0_r3'
|
||||
|
||||
natives "com.github.Anuken.Arc:natives-android:$arcHash"
|
||||
natives "com.github.Anuken.Arc:natives-freetype-android:$arcHash"
|
||||
if(!localArc){
|
||||
natives "com.github.Anuken.Arc:natives-android:$arcHash"
|
||||
natives "com.github.Anuken.Arc:natives-freetype-android:$arcHash"
|
||||
}
|
||||
|
||||
def version, highestVersion
|
||||
new File((String)findSdkDir(), "/platforms").eachFileMatch ~/android-\d+/, {
|
||||
@@ -136,11 +142,13 @@ dependencies{
|
||||
}
|
||||
|
||||
task copyAndroidNatives(){
|
||||
configurations.natives.files.each{ jar ->
|
||||
copy{
|
||||
from zipTree(jar)
|
||||
into file("libs/")
|
||||
include "**"
|
||||
if(!localArc){
|
||||
configurations.natives.files.each{ jar ->
|
||||
copy{
|
||||
from zipTree(jar)
|
||||
into file("libs/")
|
||||
include "**"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,20 +5,22 @@ import android.app.*;
|
||||
import android.content.*;
|
||||
import android.content.pm.*;
|
||||
import android.net.*;
|
||||
import android.os.Build.*;
|
||||
import android.os.*;
|
||||
import android.os.Build.*;
|
||||
import android.telephony.*;
|
||||
import arc.*;
|
||||
import arc.backend.android.*;
|
||||
import arc.files.*;
|
||||
import arc.func.*;
|
||||
import arc.scene.ui.layout.*;
|
||||
import arc.struct.*;
|
||||
import arc.util.*;
|
||||
import dalvik.system.*;
|
||||
import mindustry.*;
|
||||
import mindustry.game.Saves.*;
|
||||
import mindustry.io.*;
|
||||
import mindustry.net.*;
|
||||
import mindustry.ui.*;
|
||||
import mindustry.ui.FileChooser.*;
|
||||
import mindustry.ui.dialogs.*;
|
||||
|
||||
import java.io.*;
|
||||
@@ -30,7 +32,7 @@ import static mindustry.Vars.*;
|
||||
public class AndroidLauncher extends AndroidApplication{
|
||||
public static final int PERMISSION_REQUEST_CODE = 1;
|
||||
boolean doubleScaleTablets = true;
|
||||
FileChooser chooser;
|
||||
FileChooserDialog chooser;
|
||||
Runnable permCallback;
|
||||
|
||||
@Override
|
||||
@@ -97,8 +99,7 @@ public class AndroidLauncher extends AndroidApplication{
|
||||
}
|
||||
};
|
||||
}catch(SecurityException e){
|
||||
//`setReadOnly` to jar file in `/sdcard/Android/data/...` does not work on some Android 14 device
|
||||
//But in `/data/...` it works
|
||||
//`setReadOnly` to jar file in `/sdcard/Android/data/...` does not work on some Android 14 devices, but in `/data/...`, it does
|
||||
|
||||
if(Build.VERSION.SDK_INT < VERSION_CODES.O_MR1){
|
||||
throw e;
|
||||
@@ -127,27 +128,34 @@ public class AndroidLauncher extends AndroidApplication{
|
||||
}
|
||||
|
||||
@Override
|
||||
public void showFileChooser(boolean open, String title, String extension, Cons<Fi> cons){
|
||||
showFileChooser(open, title, cons, extension);
|
||||
}
|
||||
|
||||
void showFileChooser(boolean open, String title, Cons<Fi> cons, String... extensions){
|
||||
public void showFileChooser(FileChooserParams params){
|
||||
try{
|
||||
String extension = extensions[0];
|
||||
String extension = params.extensions[0];
|
||||
|
||||
if(VERSION.SDK_INT >= VERSION_CODES.Q){
|
||||
Intent intent = new Intent(open ? Intent.ACTION_OPEN_DOCUMENT : Intent.ACTION_CREATE_DOCUMENT);
|
||||
Intent intent = new Intent(params.open ? Intent.ACTION_OPEN_DOCUMENT : Intent.ACTION_CREATE_DOCUMENT);
|
||||
intent.addCategory(Intent.CATEGORY_OPENABLE);
|
||||
intent.setType(extension.equals("zip") && !open && extensions.length == 1 ? "application/zip" : "*/*");
|
||||
intent.putExtra(Intent.EXTRA_TITLE, "export." + extension);
|
||||
intent.setType(extension.equals("zip") && !params.open && params.extensions.length == 1 ? "application/zip" : "*/*");
|
||||
intent.putExtra(Intent.EXTRA_TITLE, params.fileName);
|
||||
if(params.allowMultiple){
|
||||
intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
|
||||
}
|
||||
|
||||
addResultListener(i -> startActivityForResult(intent, i), (code, in) -> {
|
||||
if(code == Activity.RESULT_OK && in != null && in.getData() != null){
|
||||
Uri uri = in.getData();
|
||||
Uri[] uris;
|
||||
if(in.getClipData() != null){
|
||||
uris = new Uri[in.getClipData().getItemCount()];
|
||||
for(int i = 0; i < uris.length; i++){
|
||||
uris[i] = in.getClipData().getItemAt(i).getUri();
|
||||
}
|
||||
}else{
|
||||
uris = new Uri[]{in.getData()};
|
||||
}
|
||||
|
||||
if(uri.getPath().contains("(invalid)")) return;
|
||||
if(uris.length == 0 || uris[0].getPath().contains("(invalid)")) return;
|
||||
|
||||
Core.app.post(() -> Core.app.post(() -> cons.get(new Fi(uri.getPath()){
|
||||
Fi[] files = Seq.with(uris).map(uri -> new Fi(uri.getPath()){
|
||||
@Override
|
||||
public InputStream read(){
|
||||
try{
|
||||
@@ -165,18 +173,14 @@ public class AndroidLauncher extends AndroidApplication{
|
||||
throw new ArcRuntimeException(e);
|
||||
}
|
||||
}
|
||||
})));
|
||||
}).toArray(Fi.class);
|
||||
|
||||
Core.app.post(() -> Core.app.post(() -> params.handleChooseResult(files)));
|
||||
}
|
||||
});
|
||||
}else if(VERSION.SDK_INT >= VERSION_CODES.M && !(checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED &&
|
||||
checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED)){
|
||||
chooser = new FileChooser(title, file -> Structs.contains(extensions, file.extension().toLowerCase()), open, file -> {
|
||||
if(!open){
|
||||
cons.get(file.parent().child(file.nameWithoutExtension() + "." + extension));
|
||||
}else{
|
||||
cons.get(file);
|
||||
}
|
||||
});
|
||||
chooser = FileChooser.createFallbackFileChooser(params);
|
||||
|
||||
ArrayList<String> perms = new ArrayList<>();
|
||||
if(checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED){
|
||||
@@ -187,22 +191,13 @@ public class AndroidLauncher extends AndroidApplication{
|
||||
}
|
||||
requestPermissions(perms.toArray(new String[0]), PERMISSION_REQUEST_CODE);
|
||||
}else{
|
||||
if(open){
|
||||
new FileChooser(title, file -> Structs.contains(extensions, file.extension().toLowerCase()), true, cons).show();
|
||||
}else{
|
||||
super.showFileChooser(open, "@open", extension, cons);
|
||||
}
|
||||
FileChooser.showFallbackFileChooser(params);
|
||||
}
|
||||
}catch(Throwable error){
|
||||
Core.app.post(() -> Vars.ui.showException(error));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void showMultiFileChooser(Cons<Fi> cons, String... extensions){
|
||||
showFileChooser(true, "@open", cons, extensions);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void beginForceLandscape(){
|
||||
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE);
|
||||
@@ -235,7 +230,6 @@ public class AndroidLauncher extends AndroidApplication{
|
||||
Log.err("Failed to delete cached folder", t);
|
||||
}
|
||||
|
||||
|
||||
//move to internal storage if there's no file indicating that it moved
|
||||
if(!Core.files.local("files_moved").exists()){
|
||||
Log.info("Moving files to external storage...");
|
||||
|
||||
@@ -5,6 +5,21 @@ import java.lang.annotation.*;
|
||||
public class Annotations{
|
||||
//region entity interfaces
|
||||
|
||||
@Repeatable(BuildingListDefs.class)
|
||||
@Retention(RetentionPolicy.SOURCE)
|
||||
@Target({ElementType.TYPE})
|
||||
public @interface BuildingListDef{
|
||||
String qualifiedType() default "";
|
||||
Class<?> type() default void.class;
|
||||
String method();
|
||||
}
|
||||
|
||||
@Retention(RetentionPolicy.SOURCE)
|
||||
@Target({ElementType.TYPE})
|
||||
public @interface BuildingListDefs{
|
||||
BuildingListDef[] value();
|
||||
}
|
||||
|
||||
/** Indicates that a method overrides other methods. */
|
||||
@Target({ElementType.METHOD})
|
||||
@Retention(RetentionPolicy.SOURCE)
|
||||
@@ -35,6 +50,10 @@ public class Annotations{
|
||||
@Retention(RetentionPolicy.SOURCE)
|
||||
public @interface NoSync{}
|
||||
|
||||
/** Indicates that a field should be synced, but not serialized */
|
||||
@Target({ElementType.FIELD})
|
||||
@Retention(RetentionPolicy.SOURCE)
|
||||
public @interface NoSerialize{}
|
||||
|
||||
/** Indicates that a component field is imported from other components. This means it doesn't actually exist. */
|
||||
@Target({ElementType.FIELD})
|
||||
@@ -84,6 +103,7 @@ public class Annotations{
|
||||
boolean collide() default false;
|
||||
boolean spatial() default false;
|
||||
boolean mapping() default false;
|
||||
boolean update() default false;
|
||||
}
|
||||
|
||||
/** Indicates an entity definition. */
|
||||
@@ -103,6 +123,8 @@ public class Annotations{
|
||||
boolean genio() default true;
|
||||
/** Whether I made a massive mistake by merging two different class branches */
|
||||
boolean legacy() default false;
|
||||
/** Groups to exclude. */
|
||||
String[] excludeGroups() default {};
|
||||
}
|
||||
|
||||
/** Indicates an internal interface for entity components. */
|
||||
|
||||
@@ -232,7 +232,7 @@ public abstract class BaseProcessor extends AbstractProcessor{
|
||||
|
||||
@Override
|
||||
public SourceVersion getSupportedSourceVersion(){
|
||||
return SourceVersion.RELEASE_8;
|
||||
return SourceVersion.RELEASE_17;
|
||||
}
|
||||
|
||||
public void process(RoundEnvironment env) throws Exception{
|
||||
|
||||
@@ -0,0 +1,112 @@
|
||||
package mindustry.annotations.entity;
|
||||
|
||||
import mindustry.annotations.Annotations.*;
|
||||
import mindustry.annotations.*;
|
||||
|
||||
import javax.annotation.processing.*;
|
||||
import javax.lang.model.type.*;
|
||||
import javax.tools.*;
|
||||
import java.io.*;
|
||||
|
||||
@SupportedAnnotationTypes("mindustry.annotations.Annotations.BuildingListDefs")
|
||||
public class BuildingListProcess extends BaseProcessor{
|
||||
static final String template = """
|
||||
package mindustry.gen;
|
||||
|
||||
import ELEMENT_TYPE;
|
||||
|
||||
public class CLASS_NAME{
|
||||
public ELEMENT_TYPE[] values = new ELEMENT_TYPE[50];
|
||||
public int size, index;
|
||||
|
||||
public void update(){
|
||||
for(index = 0; index < size; index++){
|
||||
values[index].UPDATE_METHOD_NAME();
|
||||
}
|
||||
}
|
||||
|
||||
public void add(ELEMENT_TYPE building){
|
||||
ELEMENT_TYPE[] items = values;
|
||||
if(size == items.length){
|
||||
int newLength = (int)(size * 1.75f);
|
||||
ELEMENT_TYPE[] newItems = new ELEMENT_TYPE[newLength];
|
||||
System.arraycopy(items, 0, newItems, 0, size);
|
||||
values = items = newItems;
|
||||
}
|
||||
items[building.buildingArrayIndex = size++] = building;
|
||||
}
|
||||
|
||||
public void remove(ELEMENT_TYPE type){
|
||||
int position = type.buildingArrayIndex;
|
||||
|
||||
if(position != -1 && position < size){
|
||||
|
||||
//rarely the entity index is wrong; fallback to slow implementation
|
||||
if(values[position] != type){
|
||||
type.buildingArrayIndex = -1;
|
||||
for(int i = 0; i < size; i++){
|
||||
if(values[position] == type){
|
||||
type.buildingArrayIndex = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
//not found in the array (attempt to remove a building that does not exist?)
|
||||
if(type.buildingArrayIndex == -1) return;
|
||||
}
|
||||
|
||||
//swap head with current
|
||||
if(size > 1){
|
||||
var head = values[size - 1];
|
||||
head.buildingArrayIndex = position;
|
||||
values[position] = head;
|
||||
}
|
||||
|
||||
size--;
|
||||
values[size] = null;
|
||||
|
||||
//fix iteration index when removing
|
||||
if(index >= position){
|
||||
index--;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
""";
|
||||
|
||||
@Override
|
||||
public void process(RoundEnvironment env) throws Exception{
|
||||
var types = types(BuildingListDefs.class);
|
||||
for(var type : types){
|
||||
for(var listDef : type.annotation(BuildingListDefs.class).value()){
|
||||
String fullName;
|
||||
|
||||
if(!listDef.qualifiedType().isEmpty()){
|
||||
fullName = listDef.qualifiedType();
|
||||
}else{
|
||||
try{
|
||||
fullName = listDef.type().getCanonicalName();
|
||||
}catch(MirroredTypeException e){
|
||||
fullName = e.getTypeMirror().toString();
|
||||
}
|
||||
}
|
||||
|
||||
String simpleName = simpleName(fullName);
|
||||
|
||||
var listMethod = listDef.method();
|
||||
|
||||
String listClassName = (simpleName.endsWith("Build") ? simpleName.replace("Build","") : simpleName) + "List";
|
||||
String resultClass = template
|
||||
.replaceAll("ELEMENT_TYPE", fullName)
|
||||
.replaceAll("CLASS_NAME", listClassName)
|
||||
.replaceAll("UPDATE_METHOD_NAME", listMethod)
|
||||
;
|
||||
|
||||
JavaFileObject object = filer.createSourceFile(packageName + "." + listClassName);
|
||||
Writer stream = object.openWriter();
|
||||
stream.write(resultClass);
|
||||
stream.close();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -13,6 +13,8 @@ import mindustry.annotations.util.TypeIOResolver.*;
|
||||
|
||||
import javax.lang.model.element.*;
|
||||
|
||||
import java.lang.annotation.*;
|
||||
|
||||
import static mindustry.annotations.BaseProcessor.instanceOf;
|
||||
|
||||
public class EntityIO{
|
||||
@@ -56,7 +58,8 @@ public class EntityIO{
|
||||
Seq<FieldSpec> fields = typeFields.select(spec ->
|
||||
!spec.hasModifier(Modifier.TRANSIENT) &&
|
||||
!spec.hasModifier(Modifier.STATIC) &&
|
||||
!spec.hasModifier(Modifier.FINAL)/* &&
|
||||
!spec.hasModifier(Modifier.FINAL)
|
||||
/* &&
|
||||
(spec.type.isPrimitive() || serializer.has(spec.type.toString()))*/);
|
||||
|
||||
//sort to keep order
|
||||
@@ -77,7 +80,7 @@ public class EntityIO{
|
||||
}
|
||||
}
|
||||
|
||||
void write(MethodSpec.Builder method, boolean write) throws Exception{
|
||||
void write(MethodSpec.Builder method, boolean write, Seq<Svar> allFields) throws Exception{
|
||||
this.method = method;
|
||||
this.write = write;
|
||||
|
||||
@@ -89,6 +92,7 @@ public class EntityIO{
|
||||
st("write.s($L)", revisions.peek().version);
|
||||
//write uses most recent revision
|
||||
for(RevisionField field : revisions.peek().fields){
|
||||
if(fieldHasAnno(field, allFields, NoSerialize.class)) continue;
|
||||
io(field.type, "this." + field.name, false);
|
||||
}
|
||||
}else{
|
||||
@@ -106,6 +110,7 @@ public class EntityIO{
|
||||
|
||||
//add code for reading revision
|
||||
for(RevisionField field : rev.fields){
|
||||
if(fieldHasAnno(field, allFields, NoSerialize.class)) continue;
|
||||
//if the field doesn't exist, the result will be an empty string, it won't get assigned
|
||||
io(field.type, presentFields.contains(field.name) ? "this." + field.name + " = " : "", false);
|
||||
}
|
||||
@@ -118,6 +123,11 @@ public class EntityIO{
|
||||
}
|
||||
}
|
||||
|
||||
boolean fieldHasAnno(RevisionField field, Seq<Svar> allFields, Class<? extends Annotation> type){
|
||||
Svar var = allFields.find(s -> s.name().equals(field.name));
|
||||
return var != null && var.has(type);
|
||||
}
|
||||
|
||||
void writeSync(MethodSpec.Builder method, boolean write, Seq<Svar> allFields) throws Exception{
|
||||
this.method = method;
|
||||
this.write = write;
|
||||
@@ -125,8 +135,7 @@ public class EntityIO{
|
||||
if(write){
|
||||
//write uses most recent revision
|
||||
for(RevisionField field : revisions.peek().fields){
|
||||
Svar var = allFields.find(s -> s.name().equals(field.name));
|
||||
if(var == null || var.has(NoSync.class)) continue;
|
||||
if(fieldHasAnno(field, allFields, NoSync.class)) continue;
|
||||
|
||||
io(field.type, "this." + field.name, true);
|
||||
}
|
||||
@@ -229,7 +238,7 @@ public class EntityIO{
|
||||
s(type.equals("boolean") ? "bool" : type.charAt(0) + "", field);
|
||||
}else if(instanceOf(type, "mindustry.ctype.Content") && !type.equals("mindustry.ai.UnitStance") && !type.equals("mindustry.ai.UnitCommand")){
|
||||
if(write){
|
||||
s("s", field + ".id");
|
||||
s("s", field + " == null ? -1 : " + field + ".id");
|
||||
}else{
|
||||
st(field + "mindustry.Vars.content.getByID(mindustry.ctype.ContentType.$L, read.s())", BaseProcessor.simpleName(type).toLowerCase().replace("type", ""));
|
||||
}
|
||||
@@ -237,8 +246,8 @@ public class EntityIO{
|
||||
st("$L(write, $L)", network ? serializer.getNetWriter(type, null) : serializer.writers.get(type), field);
|
||||
}else if(serializer.mutatorReaders.containsKey(type) && !write && !field.replace(" = ", "").contains(" ") && !field.isEmpty()){
|
||||
st("$L$L(read, $L)", field, serializer.mutatorReaders.get(type), field.replace(" = ", ""));
|
||||
}else if(serializer.readers.containsKey(type) && !write){
|
||||
st("$L$L(read)", field, serializer.readers.get(type));
|
||||
}else if((serializer.readers.containsKey(type) || (network && serializer.netReaders.containsKey(type))) && !write){
|
||||
st("$L$L(read)", field, network ? serializer.getNetReader(type, null) : serializer.readers.get(type));
|
||||
}else if(type.endsWith("[]")){ //it's a 1D array
|
||||
String rawType = type.substring(0, type.length() - 2);
|
||||
|
||||
|
||||
@@ -242,7 +242,7 @@ public class EntityProcess extends BaseProcessor{
|
||||
|
||||
boolean collides = an.collide();
|
||||
groupDefs.add(new GroupDefinition(name,
|
||||
ClassName.bestGuess(packageName + "." + groupType), types, an.spatial(), an.mapping(), collides));
|
||||
ClassName.bestGuess(packageName + "." + groupType), types, an.spatial(), an.mapping(), collides, an.update()));
|
||||
|
||||
TypeSpec.Builder accessor = TypeSpec.interfaceBuilder("IndexableEntity__" + name);
|
||||
accessor.addMethod(MethodSpec.methodBuilder("setIndex__" + name).addModifiers(Modifier.ABSTRACT, Modifier.PUBLIC).addParameter(int.class, "index").returns(void.class).build());
|
||||
@@ -258,7 +258,7 @@ public class EntityProcess extends BaseProcessor{
|
||||
|
||||
//all component classes (not interfaces)
|
||||
Seq<Stype> components = allComponents(type);
|
||||
Seq<GroupDefinition> groups = groupDefs.select(g -> (!g.components.isEmpty() && !g.components.contains(s -> !components.contains(s))) || g.manualInclusions.contains(type));
|
||||
Seq<GroupDefinition> groups = groupDefs.select(g -> (!g.components.isEmpty() && !Structs.contains(ann.excludeGroups(), g.name) && !g.components.contains(s -> !components.contains(s))) || g.manualInclusions.contains(type));
|
||||
ObjectMap<String, Seq<Smethod>> methods = new ObjectMap<>();
|
||||
ObjectMap<FieldSpec, Svar> specVariables = new ObjectMap<>();
|
||||
ObjectSet<String> usedFields = new ObjectSet<>();
|
||||
@@ -505,7 +505,7 @@ public class EntityProcess extends BaseProcessor{
|
||||
//SPECIAL CASE: I/O code
|
||||
//note that serialization is generated even for non-serializing entities for manual usage
|
||||
if((first.name().equals("read") || first.name().equals("write"))){
|
||||
io.write(mbuilder, first.name().equals("write"));
|
||||
io.write(mbuilder, first.name().equals("write"), allFields);
|
||||
specialIO = true;
|
||||
}
|
||||
|
||||
@@ -700,7 +700,11 @@ public class EntityProcess extends BaseProcessor{
|
||||
}
|
||||
}
|
||||
|
||||
groupUpdate.addStatement("all.update()");
|
||||
for(GroupDefinition group : groupDefs){
|
||||
if(group.updates){
|
||||
groupUpdate.addStatement("$L.update()", group.name);
|
||||
}
|
||||
}
|
||||
|
||||
for(GroupDefinition group : groupDefs){
|
||||
if(group.collides){
|
||||
@@ -985,16 +989,17 @@ public class EntityProcess extends BaseProcessor{
|
||||
final String name;
|
||||
final ClassName baseType;
|
||||
final Seq<Stype> components;
|
||||
final boolean spatial, mapping, collides;
|
||||
final boolean spatial, mapping, collides, updates;
|
||||
final ObjectSet<Selement> manualInclusions = new ObjectSet<>();
|
||||
|
||||
public GroupDefinition(String name, ClassName bestType, Seq<Stype> components, boolean spatial, boolean mapping, boolean collides){
|
||||
public GroupDefinition(String name, ClassName bestType, Seq<Stype> components, boolean spatial, boolean mapping, boolean collides, boolean updates){
|
||||
this.baseType = bestType;
|
||||
this.components = components;
|
||||
this.name = name;
|
||||
this.spatial = spatial;
|
||||
this.mapping = mapping;
|
||||
this.collides = collides;
|
||||
this.updates = updates;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -142,6 +142,19 @@ public class AssetsProcess extends BaseProcessor{
|
||||
.addParameter(int.class, "id")
|
||||
.returns(Sound.class)
|
||||
.addStatement("return (Sound)idToSound.get(id, () -> Sounds.none)").build());
|
||||
|
||||
type.addMethod(MethodSpec.methodBuilder("registerSound")
|
||||
.addModifiers(Modifier.PUBLIC, Modifier.STATIC)
|
||||
.addParameter(Sound.class, "sound")
|
||||
.addParameter(int.class, "id")
|
||||
.returns(void.class)
|
||||
.addStatement("idToSound.put(id, sound); soundToId.put(sound, id);").build());
|
||||
|
||||
type.addMethod(MethodSpec.methodBuilder("unregisterSound")
|
||||
.addModifiers(Modifier.PUBLIC, Modifier.STATIC)
|
||||
.addParameter(Sound.class, "sound")
|
||||
.returns(void.class)
|
||||
.addStatement("int id = soundToId.get(sound); if(id != 0){ soundToId.remove(sound); idToSound.remove(id); }").build());
|
||||
}
|
||||
|
||||
HashSet<String> names = new HashSet<>();
|
||||
|
||||
@@ -56,6 +56,15 @@ public class CallGenerator{
|
||||
packet.addMethod(writeHandleMethod(ent, true));
|
||||
}
|
||||
|
||||
if(!(ent.where.isClient && ent.where.isServer)){
|
||||
packet.addMethod( MethodSpec.methodBuilder("allow")
|
||||
.addModifiers(Modifier.PUBLIC)
|
||||
.addParameter(boolean.class, "server")
|
||||
.addAnnotation(Override.class)
|
||||
.returns(boolean.class)
|
||||
.addCode("return " + (ent.where.isClient ? "server" : "!server") + ";").build());
|
||||
}
|
||||
|
||||
//register packet
|
||||
register.addStatement("mindustry.net.Net.registerPacket($L.$L::new)", packageName, ent.packetClassName);
|
||||
|
||||
@@ -193,7 +202,7 @@ public class CallGenerator{
|
||||
builder.addStatement("$L = READ.$L()", varName, pname);
|
||||
}else{
|
||||
//else, try and find a serializer
|
||||
String ser = serializer.readers.get(typeName.replace("mindustry.gen.", ""), SerializerResolver.locate(ent.element.e, var.mirror(), false));
|
||||
String ser = serializer.getNetReader(typeName.replace("mindustry.gen.", ""), SerializerResolver.locate(ent.element.e, var.mirror(), false));
|
||||
|
||||
if(ser == null){ //make sure a serializer exists!
|
||||
BaseProcessor.err("No read method to read class type '" + typeName + "' in method " + ent.targetMethod + "; " + serializer.readers, var);
|
||||
|
||||
@@ -16,7 +16,7 @@ public class TypeIOResolver{
|
||||
* Maps fully qualified class names to their serializers.
|
||||
*/
|
||||
public static ClassSerializer resolve(BaseProcessor processor){
|
||||
ClassSerializer out = new ClassSerializer(new ObjectMap<>(), new ObjectMap<>(), new ObjectMap<>(), new ObjectMap<>());
|
||||
ClassSerializer out = new ClassSerializer(new ObjectMap<>(), new ObjectMap<>(), new ObjectMap<>(), new ObjectMap<>(), new ObjectMap<>());
|
||||
for(Stype type : processor.types(TypeIOHandler.class)){
|
||||
//look at all TypeIOHandler methods
|
||||
Seq<Smethod> methods = type.methods();
|
||||
@@ -27,11 +27,11 @@ public class TypeIOResolver{
|
||||
if(params.size == 2 && params.first().tname().toString().equals("arc.util.io.Writes")){
|
||||
//Net suffix indicates that this should only be used for sync operations
|
||||
ObjectMap<String, String> targetMap = meth.name().endsWith("Net") ? out.netWriters : out.writers;
|
||||
|
||||
targetMap.put(fix(params.get(1).tname().toString()), type.fullName() + "." + meth.name());
|
||||
}else if(params.size == 1 && params.first().tname().toString().equals("arc.util.io.Reads") && !meth.isVoid()){
|
||||
//1 param, one is reader, returns type
|
||||
out.readers.put(fix(meth.retn().toString()), type.fullName() + "." + meth.name());
|
||||
}else if(params.size == 1 && params.first().tname().toString().equals("arc.util.io.Reads") && !meth.isVoid()){ //1 param, one is reader, returns type
|
||||
//Net suffix indicates that this should only be used for sync operations
|
||||
ObjectMap<String, String> targetMap = meth.name().endsWith("Net") ? out.netReaders : out.readers;
|
||||
targetMap.put(fix(meth.retn().toString()), type.fullName() + "." + meth.name());
|
||||
}else if(params.size == 2 && params.first().tname().toString().equals("arc.util.io.Reads") && !meth.isVoid() && meth.ret().equals(meth.params().get(1).mirror())){
|
||||
//2 params, one is reader, other is type, returns type - these are made to reduce garbage allocated
|
||||
out.mutatorReaders.put(fix(meth.retn().toString()), type.fullName() + "." + meth.name());
|
||||
@@ -50,17 +50,22 @@ public class TypeIOResolver{
|
||||
|
||||
/** Information about read/write methods for class types. */
|
||||
public static class ClassSerializer{
|
||||
public final ObjectMap<String, String> writers, readers, mutatorReaders, netWriters;
|
||||
public final ObjectMap<String, String> writers, readers, mutatorReaders, netWriters, netReaders;
|
||||
|
||||
public ClassSerializer(ObjectMap<String, String> writers, ObjectMap<String, String> readers, ObjectMap<String, String> mutatorReaders, ObjectMap<String, String> netWriters){
|
||||
public ClassSerializer(ObjectMap<String, String> writers, ObjectMap<String, String> readers, ObjectMap<String, String> mutatorReaders, ObjectMap<String, String> netWriters, ObjectMap<String, String> netReaders){
|
||||
this.writers = writers;
|
||||
this.readers = readers;
|
||||
this.mutatorReaders = mutatorReaders;
|
||||
this.netWriters = netWriters;
|
||||
this.netReaders = netReaders;
|
||||
}
|
||||
|
||||
public String getNetWriter(String type, String fallback){
|
||||
return netWriters.get(type, writers.get(type, fallback));
|
||||
}
|
||||
|
||||
public String getNetReader(String type, String fallback){
|
||||
return netReaders.get(type, readers.get(type, fallback));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -19,6 +19,7 @@ mindustry.entities.comp.DecalComp=8
|
||||
mindustry.entities.comp.EffectStateComp=9
|
||||
mindustry.entities.comp.FireComp=10
|
||||
mindustry.entities.comp.LaunchCoreComp=11
|
||||
mindustry.entities.comp.LocationPingComp=48
|
||||
mindustry.entities.comp.PlayerComp=12
|
||||
mindustry.entities.comp.PosTeam=27
|
||||
mindustry.entities.comp.PosTeamDef=28
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
{version:2,fields:[{name:admin,type:boolean},{name:boosting,type:boolean},{name:color,type:arc.graphics.Color},{name:lastCommand,type:mindustry.ai.UnitCommand},{name:mouseX,type:float},{name:mouseY,type:float},{name:name,type:java.lang.String},{name:selectedBlock,type:mindustry.world.Block},{name:selectedRotation,type:int},{name:shooting,type:boolean},{name:team,type:mindustry.game.Team},{name:typing,type:boolean},{name:unit,type:Unit},{name:x,type:float},{name:y,type:float}]}
|
||||
@@ -0,0 +1 @@
|
||||
{version:1,fields:[{name:flags,type:byte},{name:fontSize,type:float},{name:parent,type:mindustry.gen.Posc},{name:text,type:java.lang.String},{name:x,type:float},{name:y,type:float},{name:z,type:float}]}
|
||||
@@ -0,0 +1 @@
|
||||
{version:4,fields:[{name:abilities,type:"mindustry.entities.abilities.Ability[]"},{name:aimX,type:float},{name:aimY,type:float},{name:ammo,type:float},{name:controller,type:mindustry.entities.units.UnitController},{name:elevation,type:float},{name:flag,type:double},{name:health,type:float},{name:isShooting,type:boolean},{name:mineTile,type:mindustry.world.Tile},{name:mounts,type:"mindustry.entities.units.WeaponMount[]"},{name:plans,type:arc.struct.Queue<mindustry.entities.units.BuildPlan>},{name:rotation,type:float},{name:shield,type:float},{name:spawnedByCore,type:boolean},{name:stack,type:mindustry.type.ItemStack},{name:statuses,type:arc.struct.Seq<mindustry.entities.units.StatusEntry>},{name:team,type:mindustry.game.Team},{name:type,type:mindustry.type.UnitType},{name:updateBuilding,type:boolean},{name:vel,type:arc.math.geom.Vec2},{name:x,type:float},{name:y,type:float}]}
|
||||
@@ -0,0 +1 @@
|
||||
{version:5,fields:[{name:abilities,type:"mindustry.entities.abilities.Ability[]"},{name:aimX,type:float},{name:aimY,type:float},{name:controller,type:mindustry.entities.units.UnitController},{name:elevation,type:float},{name:flag,type:double},{name:health,type:float},{name:isShooting,type:boolean},{name:mineTile,type:mindustry.world.Tile},{name:mounts,type:"mindustry.entities.units.WeaponMount[]"},{name:plans,type:arc.struct.Queue<mindustry.entities.units.BuildPlan>},{name:rotation,type:float},{name:shield,type:float},{name:spawnedByCore,type:boolean},{name:stack,type:mindustry.type.ItemStack},{name:statuses,type:arc.struct.Seq<mindustry.entities.units.StatusEntry>},{name:team,type:mindustry.game.Team},{name:type,type:mindustry.type.UnitType},{name:updateBuilding,type:boolean},{name:vel,type:arc.math.geom.Vec2},{name:x,type:float},{name:y,type:float}]}
|
||||
@@ -0,0 +1 @@
|
||||
{version:4,fields:[{name:abilities,type:"mindustry.entities.abilities.Ability[]"},{name:aimX,type:float},{name:aimY,type:float},{name:ammo,type:float},{name:controller,type:mindustry.entities.units.UnitController},{name:elevation,type:float},{name:flag,type:double},{name:health,type:float},{name:isShooting,type:boolean},{name:mineTile,type:mindustry.world.Tile},{name:mounts,type:"mindustry.entities.units.WeaponMount[]"},{name:plans,type:arc.struct.Queue<mindustry.entities.units.BuildPlan>},{name:rotation,type:float},{name:shield,type:float},{name:spawnedByCore,type:boolean},{name:stack,type:mindustry.type.ItemStack},{name:statuses,type:arc.struct.Seq<mindustry.entities.units.StatusEntry>},{name:team,type:mindustry.game.Team},{name:type,type:mindustry.type.UnitType},{name:updateBuilding,type:boolean},{name:vel,type:arc.math.geom.Vec2},{name:x,type:float},{name:y,type:float}]}
|
||||
@@ -0,0 +1 @@
|
||||
{version:5,fields:[{name:abilities,type:"mindustry.entities.abilities.Ability[]"},{name:aimX,type:float},{name:aimY,type:float},{name:controller,type:mindustry.entities.units.UnitController},{name:elevation,type:float},{name:flag,type:double},{name:health,type:float},{name:isShooting,type:boolean},{name:mineTile,type:mindustry.world.Tile},{name:mounts,type:"mindustry.entities.units.WeaponMount[]"},{name:plans,type:arc.struct.Queue<mindustry.entities.units.BuildPlan>},{name:rotation,type:float},{name:shield,type:float},{name:spawnedByCore,type:boolean},{name:stack,type:mindustry.type.ItemStack},{name:statuses,type:arc.struct.Seq<mindustry.entities.units.StatusEntry>},{name:team,type:mindustry.game.Team},{name:type,type:mindustry.type.UnitType},{name:updateBuilding,type:boolean},{name:vel,type:arc.math.geom.Vec2},{name:x,type:float},{name:y,type:float}]}
|
||||
@@ -0,0 +1 @@
|
||||
{version:4,fields:[{name:abilities,type:"mindustry.entities.abilities.Ability[]"},{name:aimX,type:float},{name:aimY,type:float},{name:ammo,type:float},{name:controller,type:mindustry.entities.units.UnitController},{name:elevation,type:float},{name:flag,type:double},{name:health,type:float},{name:isShooting,type:boolean},{name:mineTile,type:mindustry.world.Tile},{name:mounts,type:"mindustry.entities.units.WeaponMount[]"},{name:plans,type:arc.struct.Queue<mindustry.entities.units.BuildPlan>},{name:rotation,type:float},{name:shield,type:float},{name:spawnedByCore,type:boolean},{name:stack,type:mindustry.type.ItemStack},{name:statuses,type:arc.struct.Seq<mindustry.entities.units.StatusEntry>},{name:team,type:mindustry.game.Team},{name:type,type:mindustry.type.UnitType},{name:updateBuilding,type:boolean},{name:vel,type:arc.math.geom.Vec2},{name:x,type:float},{name:y,type:float}]}
|
||||
@@ -0,0 +1 @@
|
||||
{version:5,fields:[{name:abilities,type:"mindustry.entities.abilities.Ability[]"},{name:aimX,type:float},{name:aimY,type:float},{name:controller,type:mindustry.entities.units.UnitController},{name:elevation,type:float},{name:flag,type:double},{name:health,type:float},{name:isShooting,type:boolean},{name:mineTile,type:mindustry.world.Tile},{name:mounts,type:"mindustry.entities.units.WeaponMount[]"},{name:plans,type:arc.struct.Queue<mindustry.entities.units.BuildPlan>},{name:rotation,type:float},{name:shield,type:float},{name:spawnedByCore,type:boolean},{name:stack,type:mindustry.type.ItemStack},{name:statuses,type:arc.struct.Seq<mindustry.entities.units.StatusEntry>},{name:team,type:mindustry.game.Team},{name:type,type:mindustry.type.UnitType},{name:updateBuilding,type:boolean},{name:vel,type:arc.math.geom.Vec2},{name:x,type:float},{name:y,type:float}]}
|
||||
@@ -0,0 +1 @@
|
||||
{version:8,fields:[{name:abilities,type:"mindustry.entities.abilities.Ability[]"},{name:aimX,type:float},{name:aimY,type:float},{name:ammo,type:float},{name:controller,type:mindustry.entities.units.UnitController},{name:elevation,type:float},{name:flag,type:double},{name:health,type:float},{name:isShooting,type:boolean},{name:mineTile,type:mindustry.world.Tile},{name:mounts,type:"mindustry.entities.units.WeaponMount[]"},{name:plans,type:arc.struct.Queue<mindustry.entities.units.BuildPlan>},{name:rotation,type:float},{name:shield,type:float},{name:spawnedByCore,type:boolean},{name:stack,type:mindustry.type.ItemStack},{name:statuses,type:arc.struct.Seq<mindustry.entities.units.StatusEntry>},{name:team,type:mindustry.game.Team},{name:type,type:mindustry.type.UnitType},{name:updateBuilding,type:boolean},{name:vel,type:arc.math.geom.Vec2},{name:x,type:float},{name:y,type:float}]}
|
||||
@@ -0,0 +1 @@
|
||||
{version:9,fields:[{name:abilities,type:"mindustry.entities.abilities.Ability[]"},{name:aimX,type:float},{name:aimY,type:float},{name:controller,type:mindustry.entities.units.UnitController},{name:elevation,type:float},{name:flag,type:double},{name:health,type:float},{name:isShooting,type:boolean},{name:mineTile,type:mindustry.world.Tile},{name:mounts,type:"mindustry.entities.units.WeaponMount[]"},{name:plans,type:arc.struct.Queue<mindustry.entities.units.BuildPlan>},{name:rotation,type:float},{name:shield,type:float},{name:spawnedByCore,type:boolean},{name:stack,type:mindustry.type.ItemStack},{name:statuses,type:arc.struct.Seq<mindustry.entities.units.StatusEntry>},{name:team,type:mindustry.game.Team},{name:type,type:mindustry.type.UnitType},{name:updateBuilding,type:boolean},{name:vel,type:arc.math.geom.Vec2},{name:x,type:float},{name:y,type:float}]}
|
||||
@@ -0,0 +1 @@
|
||||
{version:8,fields:[{name:abilities,type:"mindustry.entities.abilities.Ability[]"},{name:aimX,type:float},{name:aimY,type:float},{name:ammo,type:float},{name:controller,type:mindustry.entities.units.UnitController},{name:elevation,type:float},{name:flag,type:double},{name:health,type:float},{name:isShooting,type:boolean},{name:mineTile,type:mindustry.world.Tile},{name:mounts,type:"mindustry.entities.units.WeaponMount[]"},{name:plans,type:arc.struct.Queue<mindustry.entities.units.BuildPlan>},{name:rotation,type:float},{name:shield,type:float},{name:spawnedByCore,type:boolean},{name:stack,type:mindustry.type.ItemStack},{name:statuses,type:arc.struct.Seq<mindustry.entities.units.StatusEntry>},{name:team,type:mindustry.game.Team},{name:type,type:mindustry.type.UnitType},{name:updateBuilding,type:boolean},{name:vel,type:arc.math.geom.Vec2},{name:x,type:float},{name:y,type:float}]}
|
||||
@@ -0,0 +1 @@
|
||||
{version:9,fields:[{name:abilities,type:"mindustry.entities.abilities.Ability[]"},{name:aimX,type:float},{name:aimY,type:float},{name:controller,type:mindustry.entities.units.UnitController},{name:elevation,type:float},{name:flag,type:double},{name:health,type:float},{name:isShooting,type:boolean},{name:mineTile,type:mindustry.world.Tile},{name:mounts,type:"mindustry.entities.units.WeaponMount[]"},{name:plans,type:arc.struct.Queue<mindustry.entities.units.BuildPlan>},{name:rotation,type:float},{name:shield,type:float},{name:spawnedByCore,type:boolean},{name:stack,type:mindustry.type.ItemStack},{name:statuses,type:arc.struct.Seq<mindustry.entities.units.StatusEntry>},{name:team,type:mindustry.game.Team},{name:type,type:mindustry.type.UnitType},{name:updateBuilding,type:boolean},{name:vel,type:arc.math.geom.Vec2},{name:x,type:float},{name:y,type:float}]}
|
||||
@@ -0,0 +1 @@
|
||||
{version:1,fields:[{name:abilities,type:"mindustry.entities.abilities.Ability[]"},{name:aimX,type:float},{name:aimY,type:float},{name:ammo,type:float},{name:controller,type:mindustry.entities.units.UnitController},{name:elevation,type:float},{name:flag,type:double},{name:health,type:float},{name:isShooting,type:boolean},{name:mineTile,type:mindustry.world.Tile},{name:mounts,type:"mindustry.entities.units.WeaponMount[]"},{name:plans,type:arc.struct.Queue<mindustry.entities.units.BuildPlan>},{name:rotation,type:float},{name:shield,type:float},{name:spawnedByCore,type:boolean},{name:stack,type:mindustry.type.ItemStack},{name:statuses,type:arc.struct.Seq<mindustry.entities.units.StatusEntry>},{name:team,type:mindustry.game.Team},{name:type,type:mindustry.type.UnitType},{name:updateBuilding,type:boolean},{name:vel,type:arc.math.geom.Vec2},{name:x,type:float},{name:y,type:float}]}
|
||||
@@ -0,0 +1 @@
|
||||
{version:2,fields:[{name:abilities,type:"mindustry.entities.abilities.Ability[]"},{name:aimX,type:float},{name:aimY,type:float},{name:controller,type:mindustry.entities.units.UnitController},{name:elevation,type:float},{name:flag,type:double},{name:health,type:float},{name:isShooting,type:boolean},{name:mineTile,type:mindustry.world.Tile},{name:mounts,type:"mindustry.entities.units.WeaponMount[]"},{name:plans,type:arc.struct.Queue<mindustry.entities.units.BuildPlan>},{name:rotation,type:float},{name:shield,type:float},{name:spawnedByCore,type:boolean},{name:stack,type:mindustry.type.ItemStack},{name:statuses,type:arc.struct.Seq<mindustry.entities.units.StatusEntry>},{name:team,type:mindustry.game.Team},{name:type,type:mindustry.type.UnitType},{name:updateBuilding,type:boolean},{name:vel,type:arc.math.geom.Vec2},{name:x,type:float},{name:y,type:float}]}
|
||||
@@ -0,0 +1 @@
|
||||
{version:8,fields:[{name:abilities,type:"mindustry.entities.abilities.Ability[]"},{name:aimX,type:float},{name:aimY,type:float},{name:ammo,type:float},{name:controller,type:mindustry.entities.units.UnitController},{name:elevation,type:float},{name:flag,type:double},{name:health,type:float},{name:isShooting,type:boolean},{name:mineTile,type:mindustry.world.Tile},{name:mounts,type:"mindustry.entities.units.WeaponMount[]"},{name:plans,type:arc.struct.Queue<mindustry.entities.units.BuildPlan>},{name:rotation,type:float},{name:shield,type:float},{name:spawnedByCore,type:boolean},{name:stack,type:mindustry.type.ItemStack},{name:statuses,type:arc.struct.Seq<mindustry.entities.units.StatusEntry>},{name:team,type:mindustry.game.Team},{name:type,type:mindustry.type.UnitType},{name:updateBuilding,type:boolean},{name:vel,type:arc.math.geom.Vec2},{name:x,type:float},{name:y,type:float}]}
|
||||
@@ -0,0 +1 @@
|
||||
{version:9,fields:[{name:abilities,type:"mindustry.entities.abilities.Ability[]"},{name:aimX,type:float},{name:aimY,type:float},{name:controller,type:mindustry.entities.units.UnitController},{name:elevation,type:float},{name:flag,type:double},{name:health,type:float},{name:isShooting,type:boolean},{name:mineTile,type:mindustry.world.Tile},{name:mounts,type:"mindustry.entities.units.WeaponMount[]"},{name:plans,type:arc.struct.Queue<mindustry.entities.units.BuildPlan>},{name:rotation,type:float},{name:shield,type:float},{name:spawnedByCore,type:boolean},{name:stack,type:mindustry.type.ItemStack},{name:statuses,type:arc.struct.Seq<mindustry.entities.units.StatusEntry>},{name:team,type:mindustry.game.Team},{name:type,type:mindustry.type.UnitType},{name:updateBuilding,type:boolean},{name:vel,type:arc.math.geom.Vec2},{name:x,type:float},{name:y,type:float}]}
|
||||
@@ -0,0 +1 @@
|
||||
{version:4,fields:[{name:abilities,type:"mindustry.entities.abilities.Ability[]"},{name:aimX,type:float},{name:aimY,type:float},{name:ammo,type:float},{name:controller,type:mindustry.entities.units.UnitController},{name:elevation,type:float},{name:flag,type:double},{name:health,type:float},{name:isShooting,type:boolean},{name:mineTile,type:mindustry.world.Tile},{name:mounts,type:"mindustry.entities.units.WeaponMount[]"},{name:plans,type:arc.struct.Queue<mindustry.entities.units.BuildPlan>},{name:rotation,type:float},{name:shield,type:float},{name:spawnedByCore,type:boolean},{name:stack,type:mindustry.type.ItemStack},{name:statuses,type:arc.struct.Seq<mindustry.entities.units.StatusEntry>},{name:team,type:mindustry.game.Team},{name:type,type:mindustry.type.UnitType},{name:updateBuilding,type:boolean},{name:vel,type:arc.math.geom.Vec2},{name:x,type:float},{name:y,type:float}]}
|
||||
@@ -0,0 +1 @@
|
||||
{version:5,fields:[{name:abilities,type:"mindustry.entities.abilities.Ability[]"},{name:aimX,type:float},{name:aimY,type:float},{name:controller,type:mindustry.entities.units.UnitController},{name:elevation,type:float},{name:flag,type:double},{name:health,type:float},{name:isShooting,type:boolean},{name:mineTile,type:mindustry.world.Tile},{name:mounts,type:"mindustry.entities.units.WeaponMount[]"},{name:plans,type:arc.struct.Queue<mindustry.entities.units.BuildPlan>},{name:rotation,type:float},{name:shield,type:float},{name:spawnedByCore,type:boolean},{name:stack,type:mindustry.type.ItemStack},{name:statuses,type:arc.struct.Seq<mindustry.entities.units.StatusEntry>},{name:team,type:mindustry.game.Team},{name:type,type:mindustry.type.UnitType},{name:updateBuilding,type:boolean},{name:vel,type:arc.math.geom.Vec2},{name:x,type:float},{name:y,type:float}]}
|
||||
@@ -0,0 +1 @@
|
||||
{version:1,fields:[{name:abilities,type:"mindustry.entities.abilities.Ability[]"},{name:aimX,type:float},{name:aimY,type:float},{name:ammo,type:float},{name:controller,type:mindustry.entities.units.UnitController},{name:elevation,type:float},{name:flag,type:double},{name:health,type:float},{name:isShooting,type:boolean},{name:mineTile,type:mindustry.world.Tile},{name:mounts,type:"mindustry.entities.units.WeaponMount[]"},{name:plans,type:arc.struct.Queue<mindustry.entities.units.BuildPlan>},{name:rotation,type:float},{name:shield,type:float},{name:spawnedByCore,type:boolean},{name:stack,type:mindustry.type.ItemStack},{name:statuses,type:arc.struct.Seq<mindustry.entities.units.StatusEntry>},{name:team,type:mindustry.game.Team},{name:type,type:mindustry.type.UnitType},{name:updateBuilding,type:boolean},{name:vel,type:arc.math.geom.Vec2},{name:x,type:float},{name:y,type:float}]}
|
||||
@@ -0,0 +1 @@
|
||||
{version:2,fields:[{name:abilities,type:"mindustry.entities.abilities.Ability[]"},{name:aimX,type:float},{name:aimY,type:float},{name:controller,type:mindustry.entities.units.UnitController},{name:elevation,type:float},{name:flag,type:double},{name:health,type:float},{name:isShooting,type:boolean},{name:mineTile,type:mindustry.world.Tile},{name:mounts,type:"mindustry.entities.units.WeaponMount[]"},{name:plans,type:arc.struct.Queue<mindustry.entities.units.BuildPlan>},{name:rotation,type:float},{name:shield,type:float},{name:spawnedByCore,type:boolean},{name:stack,type:mindustry.type.ItemStack},{name:statuses,type:arc.struct.Seq<mindustry.entities.units.StatusEntry>},{name:team,type:mindustry.game.Team},{name:type,type:mindustry.type.UnitType},{name:updateBuilding,type:boolean},{name:vel,type:arc.math.geom.Vec2},{name:x,type:float},{name:y,type:float}]}
|
||||
@@ -0,0 +1 @@
|
||||
{version:8,fields:[{name:abilities,type:"mindustry.entities.abilities.Ability[]"},{name:aimX,type:float},{name:aimY,type:float},{name:ammo,type:float},{name:baseRotation,type:float},{name:controller,type:mindustry.entities.units.UnitController},{name:elevation,type:float},{name:flag,type:double},{name:health,type:float},{name:isShooting,type:boolean},{name:mineTile,type:mindustry.world.Tile},{name:mounts,type:"mindustry.entities.units.WeaponMount[]"},{name:plans,type:arc.struct.Queue<mindustry.entities.units.BuildPlan>},{name:rotation,type:float},{name:shield,type:float},{name:spawnedByCore,type:boolean},{name:stack,type:mindustry.type.ItemStack},{name:statuses,type:arc.struct.Seq<mindustry.entities.units.StatusEntry>},{name:team,type:mindustry.game.Team},{name:type,type:mindustry.type.UnitType},{name:updateBuilding,type:boolean},{name:vel,type:arc.math.geom.Vec2},{name:x,type:float},{name:y,type:float}]}
|
||||
@@ -0,0 +1 @@
|
||||
{version:9,fields:[{name:abilities,type:"mindustry.entities.abilities.Ability[]"},{name:aimX,type:float},{name:aimY,type:float},{name:baseRotation,type:float},{name:controller,type:mindustry.entities.units.UnitController},{name:elevation,type:float},{name:flag,type:double},{name:health,type:float},{name:isShooting,type:boolean},{name:mineTile,type:mindustry.world.Tile},{name:mounts,type:"mindustry.entities.units.WeaponMount[]"},{name:plans,type:arc.struct.Queue<mindustry.entities.units.BuildPlan>},{name:rotation,type:float},{name:shield,type:float},{name:spawnedByCore,type:boolean},{name:stack,type:mindustry.type.ItemStack},{name:statuses,type:arc.struct.Seq<mindustry.entities.units.StatusEntry>},{name:team,type:mindustry.game.Team},{name:type,type:mindustry.type.UnitType},{name:updateBuilding,type:boolean},{name:vel,type:arc.math.geom.Vec2},{name:x,type:float},{name:y,type:float}]}
|
||||
@@ -0,0 +1 @@
|
||||
{version:2,fields:[{name:abilities,type:"mindustry.entities.abilities.Ability[]"},{name:aimX,type:float},{name:aimY,type:float},{name:ammo,type:float},{name:building,type:Building},{name:controller,type:mindustry.entities.units.UnitController},{name:elevation,type:float},{name:flag,type:double},{name:health,type:float},{name:isShooting,type:boolean},{name:mineTile,type:mindustry.world.Tile},{name:mounts,type:"mindustry.entities.units.WeaponMount[]"},{name:payloads,type:arc.struct.Seq<mindustry.world.blocks.payloads.Payload>},{name:plans,type:arc.struct.Queue<mindustry.entities.units.BuildPlan>},{name:rotation,type:float},{name:shield,type:float},{name:spawnedByCore,type:boolean},{name:stack,type:mindustry.type.ItemStack},{name:statuses,type:arc.struct.Seq<mindustry.entities.units.StatusEntry>},{name:team,type:mindustry.game.Team},{name:type,type:mindustry.type.UnitType},{name:updateBuilding,type:boolean},{name:vel,type:arc.math.geom.Vec2},{name:x,type:float},{name:y,type:float}]}
|
||||
@@ -0,0 +1 @@
|
||||
{version:3,fields:[{name:abilities,type:"mindustry.entities.abilities.Ability[]"},{name:aimX,type:float},{name:aimY,type:float},{name:building,type:Building},{name:controller,type:mindustry.entities.units.UnitController},{name:elevation,type:float},{name:flag,type:double},{name:health,type:float},{name:isShooting,type:boolean},{name:mineTile,type:mindustry.world.Tile},{name:mounts,type:"mindustry.entities.units.WeaponMount[]"},{name:payloads,type:arc.struct.Seq<mindustry.world.blocks.payloads.Payload>},{name:plans,type:arc.struct.Queue<mindustry.entities.units.BuildPlan>},{name:rotation,type:float},{name:shield,type:float},{name:spawnedByCore,type:boolean},{name:stack,type:mindustry.type.ItemStack},{name:statuses,type:arc.struct.Seq<mindustry.entities.units.StatusEntry>},{name:team,type:mindustry.game.Team},{name:type,type:mindustry.type.UnitType},{name:updateBuilding,type:boolean},{name:vel,type:arc.math.geom.Vec2},{name:x,type:float},{name:y,type:float}]}
|
||||
@@ -0,0 +1 @@
|
||||
{version:6,fields:[{name:abilities,type:"mindustry.entities.abilities.Ability[]"},{name:aimX,type:float},{name:aimY,type:float},{name:ammo,type:float},{name:controller,type:mindustry.entities.units.UnitController},{name:elevation,type:float},{name:flag,type:double},{name:health,type:float},{name:isShooting,type:boolean},{name:mineTile,type:mindustry.world.Tile},{name:mounts,type:"mindustry.entities.units.WeaponMount[]"},{name:payloads,type:arc.struct.Seq<mindustry.world.blocks.payloads.Payload>},{name:plans,type:arc.struct.Queue<mindustry.entities.units.BuildPlan>},{name:rotation,type:float},{name:shield,type:float},{name:spawnedByCore,type:boolean},{name:stack,type:mindustry.type.ItemStack},{name:statuses,type:arc.struct.Seq<mindustry.entities.units.StatusEntry>},{name:team,type:mindustry.game.Team},{name:type,type:mindustry.type.UnitType},{name:updateBuilding,type:boolean},{name:vel,type:arc.math.geom.Vec2},{name:x,type:float},{name:y,type:float}]}
|
||||
@@ -0,0 +1 @@
|
||||
{version:7,fields:[{name:abilities,type:"mindustry.entities.abilities.Ability[]"},{name:aimX,type:float},{name:aimY,type:float},{name:controller,type:mindustry.entities.units.UnitController},{name:elevation,type:float},{name:flag,type:double},{name:health,type:float},{name:isShooting,type:boolean},{name:mineTile,type:mindustry.world.Tile},{name:mounts,type:"mindustry.entities.units.WeaponMount[]"},{name:payloads,type:arc.struct.Seq<mindustry.world.blocks.payloads.Payload>},{name:plans,type:arc.struct.Queue<mindustry.entities.units.BuildPlan>},{name:rotation,type:float},{name:shield,type:float},{name:spawnedByCore,type:boolean},{name:stack,type:mindustry.type.ItemStack},{name:statuses,type:arc.struct.Seq<mindustry.entities.units.StatusEntry>},{name:team,type:mindustry.game.Team},{name:type,type:mindustry.type.UnitType},{name:updateBuilding,type:boolean},{name:vel,type:arc.math.geom.Vec2},{name:x,type:float},{name:y,type:float}]}
|
||||
@@ -0,0 +1 @@
|
||||
{version:2,fields:[{name:abilities,type:"mindustry.entities.abilities.Ability[]"},{name:aimX,type:float},{name:aimY,type:float},{name:ammo,type:float},{name:controller,type:mindustry.entities.units.UnitController},{name:elevation,type:float},{name:flag,type:double},{name:health,type:float},{name:isShooting,type:boolean},{name:lifetime,type:float},{name:mineTile,type:mindustry.world.Tile},{name:mounts,type:"mindustry.entities.units.WeaponMount[]"},{name:plans,type:arc.struct.Queue<mindustry.entities.units.BuildPlan>},{name:rotation,type:float},{name:shield,type:float},{name:spawnedByCore,type:boolean},{name:stack,type:mindustry.type.ItemStack},{name:statuses,type:arc.struct.Seq<mindustry.entities.units.StatusEntry>},{name:team,type:mindustry.game.Team},{name:time,type:float},{name:type,type:mindustry.type.UnitType},{name:updateBuilding,type:boolean},{name:vel,type:arc.math.geom.Vec2},{name:x,type:float},{name:y,type:float}]}
|
||||
@@ -0,0 +1 @@
|
||||
{version:3,fields:[{name:abilities,type:"mindustry.entities.abilities.Ability[]"},{name:aimX,type:float},{name:aimY,type:float},{name:controller,type:mindustry.entities.units.UnitController},{name:elevation,type:float},{name:flag,type:double},{name:health,type:float},{name:isShooting,type:boolean},{name:lifetime,type:float},{name:mineTile,type:mindustry.world.Tile},{name:mounts,type:"mindustry.entities.units.WeaponMount[]"},{name:plans,type:arc.struct.Queue<mindustry.entities.units.BuildPlan>},{name:rotation,type:float},{name:shield,type:float},{name:spawnedByCore,type:boolean},{name:stack,type:mindustry.type.ItemStack},{name:statuses,type:arc.struct.Seq<mindustry.entities.units.StatusEntry>},{name:team,type:mindustry.game.Team},{name:time,type:float},{name:type,type:mindustry.type.UnitType},{name:updateBuilding,type:boolean},{name:vel,type:arc.math.geom.Vec2},{name:x,type:float},{name:y,type:float}]}
|
||||
@@ -0,0 +1 @@
|
||||
{version:7,fields:[{name:abilities,type:"mindustry.entities.abilities.Ability[]"},{name:aimX,type:float},{name:aimY,type:float},{name:ammo,type:float},{name:controller,type:mindustry.entities.units.UnitController},{name:elevation,type:float},{name:flag,type:double},{name:health,type:float},{name:isShooting,type:boolean},{name:mineTile,type:mindustry.world.Tile},{name:mounts,type:"mindustry.entities.units.WeaponMount[]"},{name:plans,type:arc.struct.Queue<mindustry.entities.units.BuildPlan>},{name:rotation,type:float},{name:shield,type:float},{name:spawnedByCore,type:boolean},{name:stack,type:mindustry.type.ItemStack},{name:statuses,type:arc.struct.Seq<mindustry.entities.units.StatusEntry>},{name:team,type:mindustry.game.Team},{name:type,type:mindustry.type.UnitType},{name:updateBuilding,type:boolean},{name:vel,type:arc.math.geom.Vec2},{name:x,type:float},{name:y,type:float}]}
|
||||
@@ -0,0 +1 @@
|
||||
{version:8,fields:[{name:abilities,type:"mindustry.entities.abilities.Ability[]"},{name:aimX,type:float},{name:aimY,type:float},{name:controller,type:mindustry.entities.units.UnitController},{name:elevation,type:float},{name:flag,type:double},{name:health,type:float},{name:isShooting,type:boolean},{name:mineTile,type:mindustry.world.Tile},{name:mounts,type:"mindustry.entities.units.WeaponMount[]"},{name:plans,type:arc.struct.Queue<mindustry.entities.units.BuildPlan>},{name:rotation,type:float},{name:shield,type:float},{name:spawnedByCore,type:boolean},{name:stack,type:mindustry.type.ItemStack},{name:statuses,type:arc.struct.Seq<mindustry.entities.units.StatusEntry>},{name:team,type:mindustry.game.Team},{name:type,type:mindustry.type.UnitType},{name:updateBuilding,type:boolean},{name:vel,type:arc.math.geom.Vec2},{name:x,type:float},{name:y,type:float}]}
|
||||
@@ -0,0 +1 @@
|
||||
{version:6,fields:[{name:abilities,type:"mindustry.entities.abilities.Ability[]"},{name:aimX,type:float},{name:aimY,type:float},{name:ammo,type:float},{name:baseRotation,type:float},{name:controller,type:mindustry.entities.units.UnitController},{name:elevation,type:float},{name:flag,type:double},{name:health,type:float},{name:isShooting,type:boolean},{name:mineTile,type:mindustry.world.Tile},{name:mounts,type:"mindustry.entities.units.WeaponMount[]"},{name:plans,type:arc.struct.Queue<mindustry.entities.units.BuildPlan>},{name:rotation,type:float},{name:shield,type:float},{name:spawnedByCore,type:boolean},{name:stack,type:mindustry.type.ItemStack},{name:statuses,type:arc.struct.Seq<mindustry.entities.units.StatusEntry>},{name:team,type:mindustry.game.Team},{name:type,type:mindustry.type.UnitType},{name:updateBuilding,type:boolean},{name:vel,type:arc.math.geom.Vec2},{name:x,type:float},{name:y,type:float}]}
|
||||
@@ -0,0 +1 @@
|
||||
{version:7,fields:[{name:abilities,type:"mindustry.entities.abilities.Ability[]"},{name:aimX,type:float},{name:aimY,type:float},{name:baseRotation,type:float},{name:controller,type:mindustry.entities.units.UnitController},{name:elevation,type:float},{name:flag,type:double},{name:health,type:float},{name:isShooting,type:boolean},{name:mineTile,type:mindustry.world.Tile},{name:mounts,type:"mindustry.entities.units.WeaponMount[]"},{name:plans,type:arc.struct.Queue<mindustry.entities.units.BuildPlan>},{name:rotation,type:float},{name:shield,type:float},{name:spawnedByCore,type:boolean},{name:stack,type:mindustry.type.ItemStack},{name:statuses,type:arc.struct.Seq<mindustry.entities.units.StatusEntry>},{name:team,type:mindustry.game.Team},{name:type,type:mindustry.type.UnitType},{name:updateBuilding,type:boolean},{name:vel,type:arc.math.geom.Vec2},{name:x,type:float},{name:y,type:float}]}
|
||||
@@ -0,0 +1 @@
|
||||
{version:6,fields:[{name:abilities,type:"mindustry.entities.abilities.Ability[]"},{name:aimX,type:float},{name:aimY,type:float},{name:ammo,type:float},{name:controller,type:mindustry.entities.units.UnitController},{name:elevation,type:float},{name:flag,type:double},{name:health,type:float},{name:isShooting,type:boolean},{name:mineTile,type:mindustry.world.Tile},{name:mounts,type:"mindustry.entities.units.WeaponMount[]"},{name:payloads,type:arc.struct.Seq<mindustry.world.blocks.payloads.Payload>},{name:plans,type:arc.struct.Queue<mindustry.entities.units.BuildPlan>},{name:rotation,type:float},{name:shield,type:float},{name:spawnedByCore,type:boolean},{name:stack,type:mindustry.type.ItemStack},{name:statuses,type:arc.struct.Seq<mindustry.entities.units.StatusEntry>},{name:team,type:mindustry.game.Team},{name:type,type:mindustry.type.UnitType},{name:updateBuilding,type:boolean},{name:vel,type:arc.math.geom.Vec2},{name:x,type:float},{name:y,type:float}]}
|
||||
@@ -0,0 +1 @@
|
||||
{version:7,fields:[{name:abilities,type:"mindustry.entities.abilities.Ability[]"},{name:aimX,type:float},{name:aimY,type:float},{name:controller,type:mindustry.entities.units.UnitController},{name:elevation,type:float},{name:flag,type:double},{name:health,type:float},{name:isShooting,type:boolean},{name:mineTile,type:mindustry.world.Tile},{name:mounts,type:"mindustry.entities.units.WeaponMount[]"},{name:payloads,type:arc.struct.Seq<mindustry.world.blocks.payloads.Payload>},{name:plans,type:arc.struct.Queue<mindustry.entities.units.BuildPlan>},{name:rotation,type:float},{name:shield,type:float},{name:spawnedByCore,type:boolean},{name:stack,type:mindustry.type.ItemStack},{name:statuses,type:arc.struct.Seq<mindustry.entities.units.StatusEntry>},{name:team,type:mindustry.game.Team},{name:type,type:mindustry.type.UnitType},{name:updateBuilding,type:boolean},{name:vel,type:arc.math.geom.Vec2},{name:x,type:float},{name:y,type:float}]}
|
||||
@@ -0,0 +1 @@
|
||||
{version:6,fields:[{name:abilities,type:"mindustry.entities.abilities.Ability[]"},{name:aimX,type:float},{name:aimY,type:float},{name:ammo,type:float},{name:controller,type:mindustry.entities.units.UnitController},{name:elevation,type:float},{name:flag,type:double},{name:health,type:float},{name:isShooting,type:boolean},{name:mineTile,type:mindustry.world.Tile},{name:mounts,type:"mindustry.entities.units.WeaponMount[]"},{name:plans,type:arc.struct.Queue<mindustry.entities.units.BuildPlan>},{name:rotation,type:float},{name:shield,type:float},{name:spawnedByCore,type:boolean},{name:stack,type:mindustry.type.ItemStack},{name:statuses,type:arc.struct.Seq<mindustry.entities.units.StatusEntry>},{name:team,type:mindustry.game.Team},{name:type,type:mindustry.type.UnitType},{name:updateBuilding,type:boolean},{name:vel,type:arc.math.geom.Vec2},{name:x,type:float},{name:y,type:float}]}
|
||||
@@ -0,0 +1 @@
|
||||
{version:7,fields:[{name:abilities,type:"mindustry.entities.abilities.Ability[]"},{name:aimX,type:float},{name:aimY,type:float},{name:controller,type:mindustry.entities.units.UnitController},{name:elevation,type:float},{name:flag,type:double},{name:health,type:float},{name:isShooting,type:boolean},{name:mineTile,type:mindustry.world.Tile},{name:mounts,type:"mindustry.entities.units.WeaponMount[]"},{name:plans,type:arc.struct.Queue<mindustry.entities.units.BuildPlan>},{name:rotation,type:float},{name:shield,type:float},{name:spawnedByCore,type:boolean},{name:stack,type:mindustry.type.ItemStack},{name:statuses,type:arc.struct.Seq<mindustry.entities.units.StatusEntry>},{name:team,type:mindustry.game.Team},{name:type,type:mindustry.type.UnitType},{name:updateBuilding,type:boolean},{name:vel,type:arc.math.geom.Vec2},{name:x,type:float},{name:y,type:float}]}
|
||||
@@ -0,0 +1 @@
|
||||
{version:4,fields:[{name:abilities,type:"mindustry.entities.abilities.Ability[]"},{name:aimX,type:float},{name:aimY,type:float},{name:ammo,type:float},{name:baseRotation,type:float},{name:controller,type:mindustry.entities.units.UnitController},{name:elevation,type:float},{name:flag,type:double},{name:health,type:float},{name:isShooting,type:boolean},{name:mineTile,type:mindustry.world.Tile},{name:mounts,type:"mindustry.entities.units.WeaponMount[]"},{name:plans,type:arc.struct.Queue<mindustry.entities.units.BuildPlan>},{name:rotation,type:float},{name:shield,type:float},{name:spawnedByCore,type:boolean},{name:stack,type:mindustry.type.ItemStack},{name:statuses,type:arc.struct.Seq<mindustry.entities.units.StatusEntry>},{name:team,type:mindustry.game.Team},{name:type,type:mindustry.type.UnitType},{name:updateBuilding,type:boolean},{name:vel,type:arc.math.geom.Vec2},{name:x,type:float},{name:y,type:float}]}
|
||||
@@ -0,0 +1 @@
|
||||
{version:5,fields:[{name:abilities,type:"mindustry.entities.abilities.Ability[]"},{name:aimX,type:float},{name:aimY,type:float},{name:baseRotation,type:float},{name:controller,type:mindustry.entities.units.UnitController},{name:elevation,type:float},{name:flag,type:double},{name:health,type:float},{name:isShooting,type:boolean},{name:mineTile,type:mindustry.world.Tile},{name:mounts,type:"mindustry.entities.units.WeaponMount[]"},{name:plans,type:arc.struct.Queue<mindustry.entities.units.BuildPlan>},{name:rotation,type:float},{name:shield,type:float},{name:spawnedByCore,type:boolean},{name:stack,type:mindustry.type.ItemStack},{name:statuses,type:arc.struct.Seq<mindustry.entities.units.StatusEntry>},{name:team,type:mindustry.game.Team},{name:type,type:mindustry.type.UnitType},{name:updateBuilding,type:boolean},{name:vel,type:arc.math.geom.Vec2},{name:x,type:float},{name:y,type:float}]}
|
||||
@@ -0,0 +1 @@
|
||||
{version:7,fields:[{name:abilities,type:"mindustry.entities.abilities.Ability[]"},{name:aimX,type:float},{name:aimY,type:float},{name:ammo,type:float},{name:controller,type:mindustry.entities.units.UnitController},{name:elevation,type:float},{name:flag,type:double},{name:health,type:float},{name:isShooting,type:boolean},{name:mineTile,type:mindustry.world.Tile},{name:mounts,type:"mindustry.entities.units.WeaponMount[]"},{name:payloads,type:arc.struct.Seq<mindustry.world.blocks.payloads.Payload>},{name:plans,type:arc.struct.Queue<mindustry.entities.units.BuildPlan>},{name:rotation,type:float},{name:shield,type:float},{name:spawnedByCore,type:boolean},{name:stack,type:mindustry.type.ItemStack},{name:statuses,type:arc.struct.Seq<mindustry.entities.units.StatusEntry>},{name:team,type:mindustry.game.Team},{name:type,type:mindustry.type.UnitType},{name:updateBuilding,type:boolean},{name:vel,type:arc.math.geom.Vec2},{name:x,type:float},{name:y,type:float}]}
|
||||
@@ -0,0 +1 @@
|
||||
{version:8,fields:[{name:abilities,type:"mindustry.entities.abilities.Ability[]"},{name:aimX,type:float},{name:aimY,type:float},{name:controller,type:mindustry.entities.units.UnitController},{name:elevation,type:float},{name:flag,type:double},{name:health,type:float},{name:isShooting,type:boolean},{name:mineTile,type:mindustry.world.Tile},{name:mounts,type:"mindustry.entities.units.WeaponMount[]"},{name:payloads,type:arc.struct.Seq<mindustry.world.blocks.payloads.Payload>},{name:plans,type:arc.struct.Queue<mindustry.entities.units.BuildPlan>},{name:rotation,type:float},{name:shield,type:float},{name:spawnedByCore,type:boolean},{name:stack,type:mindustry.type.ItemStack},{name:statuses,type:arc.struct.Seq<mindustry.entities.units.StatusEntry>},{name:team,type:mindustry.game.Team},{name:type,type:mindustry.type.UnitType},{name:updateBuilding,type:boolean},{name:vel,type:arc.math.geom.Vec2},{name:x,type:float},{name:y,type:float}]}
|
||||
@@ -0,0 +1 @@
|
||||
{version:4,fields:[{name:abilities,type:"mindustry.entities.abilities.Ability[]"},{name:aimX,type:float},{name:aimY,type:float},{name:ammo,type:float},{name:baseRotation,type:float},{name:controller,type:mindustry.entities.units.UnitController},{name:elevation,type:float},{name:flag,type:double},{name:health,type:float},{name:isShooting,type:boolean},{name:mineTile,type:mindustry.world.Tile},{name:mounts,type:"mindustry.entities.units.WeaponMount[]"},{name:plans,type:arc.struct.Queue<mindustry.entities.units.BuildPlan>},{name:rotation,type:float},{name:shield,type:float},{name:spawnedByCore,type:boolean},{name:stack,type:mindustry.type.ItemStack},{name:statuses,type:arc.struct.Seq<mindustry.entities.units.StatusEntry>},{name:team,type:mindustry.game.Team},{name:type,type:mindustry.type.UnitType},{name:updateBuilding,type:boolean},{name:vel,type:arc.math.geom.Vec2},{name:x,type:float},{name:y,type:float}]}
|
||||
@@ -0,0 +1 @@
|
||||
{version:5,fields:[{name:abilities,type:"mindustry.entities.abilities.Ability[]"},{name:aimX,type:float},{name:aimY,type:float},{name:baseRotation,type:float},{name:controller,type:mindustry.entities.units.UnitController},{name:elevation,type:float},{name:flag,type:double},{name:health,type:float},{name:isShooting,type:boolean},{name:mineTile,type:mindustry.world.Tile},{name:mounts,type:"mindustry.entities.units.WeaponMount[]"},{name:plans,type:arc.struct.Queue<mindustry.entities.units.BuildPlan>},{name:rotation,type:float},{name:shield,type:float},{name:spawnedByCore,type:boolean},{name:stack,type:mindustry.type.ItemStack},{name:statuses,type:arc.struct.Seq<mindustry.entities.units.StatusEntry>},{name:team,type:mindustry.game.Team},{name:type,type:mindustry.type.UnitType},{name:updateBuilding,type:boolean},{name:vel,type:arc.math.geom.Vec2},{name:x,type:float},{name:y,type:float}]}
|
||||
@@ -0,0 +1 @@
|
||||
{version:8,fields:[{name:abilities,type:"mindustry.entities.abilities.Ability[]"},{name:aimX,type:float},{name:aimY,type:float},{name:ammo,type:float},{name:controller,type:mindustry.entities.units.UnitController},{name:elevation,type:float},{name:flag,type:double},{name:health,type:float},{name:isShooting,type:boolean},{name:mineTile,type:mindustry.world.Tile},{name:mounts,type:"mindustry.entities.units.WeaponMount[]"},{name:plans,type:arc.struct.Queue<mindustry.entities.units.BuildPlan>},{name:rotation,type:float},{name:shield,type:float},{name:spawnedByCore,type:boolean},{name:stack,type:mindustry.type.ItemStack},{name:statuses,type:arc.struct.Seq<mindustry.entities.units.StatusEntry>},{name:team,type:mindustry.game.Team},{name:type,type:mindustry.type.UnitType},{name:updateBuilding,type:boolean},{name:vel,type:arc.math.geom.Vec2},{name:x,type:float},{name:y,type:float}]}
|
||||
@@ -0,0 +1 @@
|
||||
{version:9,fields:[{name:abilities,type:"mindustry.entities.abilities.Ability[]"},{name:aimX,type:float},{name:aimY,type:float},{name:controller,type:mindustry.entities.units.UnitController},{name:elevation,type:float},{name:flag,type:double},{name:health,type:float},{name:isShooting,type:boolean},{name:mineTile,type:mindustry.world.Tile},{name:mounts,type:"mindustry.entities.units.WeaponMount[]"},{name:plans,type:arc.struct.Queue<mindustry.entities.units.BuildPlan>},{name:rotation,type:float},{name:shield,type:float},{name:spawnedByCore,type:boolean},{name:stack,type:mindustry.type.ItemStack},{name:statuses,type:arc.struct.Seq<mindustry.entities.units.StatusEntry>},{name:team,type:mindustry.game.Team},{name:type,type:mindustry.type.UnitType},{name:updateBuilding,type:boolean},{name:vel,type:arc.math.geom.Vec2},{name:x,type:float},{name:y,type:float}]}
|
||||
@@ -0,0 +1 @@
|
||||
{version:7,fields:[{name:abilities,type:"mindustry.entities.abilities.Ability[]"},{name:aimX,type:float},{name:aimY,type:float},{name:ammo,type:float},{name:controller,type:mindustry.entities.units.UnitController},{name:elevation,type:float},{name:flag,type:double},{name:health,type:float},{name:isShooting,type:boolean},{name:mineTile,type:mindustry.world.Tile},{name:mounts,type:"mindustry.entities.units.WeaponMount[]"},{name:plans,type:arc.struct.Queue<mindustry.entities.units.BuildPlan>},{name:rotation,type:float},{name:shield,type:float},{name:spawnedByCore,type:boolean},{name:stack,type:mindustry.type.ItemStack},{name:statuses,type:arc.struct.Seq<mindustry.entities.units.StatusEntry>},{name:team,type:mindustry.game.Team},{name:type,type:mindustry.type.UnitType},{name:updateBuilding,type:boolean},{name:vel,type:arc.math.geom.Vec2},{name:x,type:float},{name:y,type:float}]}
|
||||
@@ -0,0 +1 @@
|
||||
{version:8,fields:[{name:abilities,type:"mindustry.entities.abilities.Ability[]"},{name:aimX,type:float},{name:aimY,type:float},{name:controller,type:mindustry.entities.units.UnitController},{name:elevation,type:float},{name:flag,type:double},{name:health,type:float},{name:isShooting,type:boolean},{name:mineTile,type:mindustry.world.Tile},{name:mounts,type:"mindustry.entities.units.WeaponMount[]"},{name:plans,type:arc.struct.Queue<mindustry.entities.units.BuildPlan>},{name:rotation,type:float},{name:shield,type:float},{name:spawnedByCore,type:boolean},{name:stack,type:mindustry.type.ItemStack},{name:statuses,type:arc.struct.Seq<mindustry.entities.units.StatusEntry>},{name:team,type:mindustry.game.Team},{name:type,type:mindustry.type.UnitType},{name:updateBuilding,type:boolean},{name:vel,type:arc.math.geom.Vec2},{name:x,type:float},{name:y,type:float}]}
|
||||
@@ -0,0 +1 @@
|
||||
{version:1,fields:[{name:abilities,type:"mindustry.entities.abilities.Ability[]"},{name:aimX,type:float},{name:aimY,type:float},{name:ammo,type:float},{name:controller,type:mindustry.entities.units.UnitController},{name:elevation,type:float},{name:flag,type:double},{name:health,type:float},{name:isShooting,type:boolean},{name:mineTile,type:mindustry.world.Tile},{name:mounts,type:"mindustry.entities.units.WeaponMount[]"},{name:plans,type:arc.struct.Queue<mindustry.entities.units.BuildPlan>},{name:rotation,type:float},{name:shield,type:float},{name:spawnedByCore,type:boolean},{name:stack,type:mindustry.type.ItemStack},{name:statuses,type:arc.struct.Seq<mindustry.entities.units.StatusEntry>},{name:team,type:mindustry.game.Team},{name:type,type:mindustry.type.UnitType},{name:updateBuilding,type:boolean},{name:vel,type:arc.math.geom.Vec2},{name:x,type:float},{name:y,type:float}]}
|
||||
@@ -0,0 +1 @@
|
||||
{version:2,fields:[{name:abilities,type:"mindustry.entities.abilities.Ability[]"},{name:aimX,type:float},{name:aimY,type:float},{name:controller,type:mindustry.entities.units.UnitController},{name:elevation,type:float},{name:flag,type:double},{name:health,type:float},{name:isShooting,type:boolean},{name:mineTile,type:mindustry.world.Tile},{name:mounts,type:"mindustry.entities.units.WeaponMount[]"},{name:plans,type:arc.struct.Queue<mindustry.entities.units.BuildPlan>},{name:rotation,type:float},{name:shield,type:float},{name:spawnedByCore,type:boolean},{name:stack,type:mindustry.type.ItemStack},{name:statuses,type:arc.struct.Seq<mindustry.entities.units.StatusEntry>},{name:team,type:mindustry.game.Team},{name:type,type:mindustry.type.UnitType},{name:updateBuilding,type:boolean},{name:vel,type:arc.math.geom.Vec2},{name:x,type:float},{name:y,type:float}]}
|
||||
@@ -0,0 +1 @@
|
||||
{version:4,fields:[{name:abilities,type:"mindustry.entities.abilities.Ability[]"},{name:aimX,type:float},{name:aimY,type:float},{name:ammo,type:float},{name:controller,type:mindustry.entities.units.UnitController},{name:elevation,type:float},{name:flag,type:double},{name:health,type:float},{name:isShooting,type:boolean},{name:mineTile,type:mindustry.world.Tile},{name:mounts,type:"mindustry.entities.units.WeaponMount[]"},{name:plans,type:arc.struct.Queue<mindustry.entities.units.BuildPlan>},{name:rotation,type:float},{name:shield,type:float},{name:spawnedByCore,type:boolean},{name:stack,type:mindustry.type.ItemStack},{name:statuses,type:arc.struct.Seq<mindustry.entities.units.StatusEntry>},{name:team,type:mindustry.game.Team},{name:type,type:mindustry.type.UnitType},{name:updateBuilding,type:boolean},{name:vel,type:arc.math.geom.Vec2},{name:x,type:float},{name:y,type:float}]}
|
||||
@@ -0,0 +1 @@
|
||||
{version:5,fields:[{name:abilities,type:"mindustry.entities.abilities.Ability[]"},{name:aimX,type:float},{name:aimY,type:float},{name:controller,type:mindustry.entities.units.UnitController},{name:elevation,type:float},{name:flag,type:double},{name:health,type:float},{name:isShooting,type:boolean},{name:mineTile,type:mindustry.world.Tile},{name:mounts,type:"mindustry.entities.units.WeaponMount[]"},{name:plans,type:arc.struct.Queue<mindustry.entities.units.BuildPlan>},{name:rotation,type:float},{name:shield,type:float},{name:spawnedByCore,type:boolean},{name:stack,type:mindustry.type.ItemStack},{name:statuses,type:arc.struct.Seq<mindustry.entities.units.StatusEntry>},{name:team,type:mindustry.game.Team},{name:type,type:mindustry.type.UnitType},{name:updateBuilding,type:boolean},{name:vel,type:arc.math.geom.Vec2},{name:x,type:float},{name:y,type:float}]}
|
||||
@@ -4,7 +4,7 @@ buildscript{
|
||||
ext{
|
||||
arcHash = property("archash")
|
||||
|
||||
localArc = !project.hasProperty("release") && new File(rootDir.parent, 'Arc').exists() && !project.hasProperty("noLocalArc")
|
||||
localArc = new File(rootDir.parent, 'Arc').exists() && !project.hasProperty("noLocalArc")
|
||||
|
||||
arcModule = { String name ->
|
||||
//skip to last submodule
|
||||
@@ -17,8 +17,7 @@ buildscript{
|
||||
mavenLocal()
|
||||
mavenCentral()
|
||||
google()
|
||||
maven{ url "https://oss.sonatype.org/content/repositories/snapshots/" }
|
||||
maven{ url 'https://jitpack.io' }
|
||||
maven{ url = 'https://jitpack.io' }
|
||||
}
|
||||
|
||||
dependencies{
|
||||
@@ -28,8 +27,8 @@ buildscript{
|
||||
}
|
||||
|
||||
plugins{
|
||||
id "org.jetbrains.kotlin.jvm" version "2.1.10"
|
||||
id "org.jetbrains.kotlin.kapt" version "2.1.10"
|
||||
id "org.jetbrains.kotlin.jvm" version "2.3.20"
|
||||
id "org.jetbrains.kotlin.kapt" version "2.3.20"
|
||||
}
|
||||
|
||||
allprojects{
|
||||
@@ -40,11 +39,11 @@ allprojects{
|
||||
|
||||
ext{
|
||||
versionNumber = '8'
|
||||
if(!project.hasProperty("versionModifier")) versionModifier = 'beta'
|
||||
if(!project.hasProperty("versionModifier")) versionModifier = 'release'
|
||||
if(!project.hasProperty("versionType")) versionType = 'official'
|
||||
appName = 'Mindustry'
|
||||
steamworksVersion = '0b86023401880bb5e586bc404bedbaae9b1f1c94'
|
||||
rhinoVersion = '73a812444ac388ac2d94013b5cadc8f70b7ea027'
|
||||
rhinoVersion = '54b75cbd1207ef1fd5cff517cbd188e763c85baa'
|
||||
|
||||
loadVersionProps = {
|
||||
return new Properties().with{p -> p.load(file('../core/assets/version.properties').newReader()); return p }
|
||||
@@ -113,7 +112,7 @@ allprojects{
|
||||
def output = 'en\n'
|
||||
def bundles = new File(project(':core').projectDir, 'assets/bundles/')
|
||||
bundles.list().sort().each{ name ->
|
||||
if(name == "bundle.properties") return
|
||||
if(name == "bundle.properties" || name == "global.properties") return
|
||||
output += name.substring("bundle".length() + 1, name.lastIndexOf('.')) + "\n"
|
||||
}
|
||||
new File(project(':core').projectDir, 'assets/locales').text = output
|
||||
@@ -181,9 +180,8 @@ allprojects{
|
||||
repositories{
|
||||
mavenLocal()
|
||||
mavenCentral()
|
||||
maven{ url "https://oss.sonatype.org/content/repositories/snapshots/" }
|
||||
maven{ url "https://oss.sonatype.org/content/repositories/releases/" }
|
||||
maven{ url 'https://jitpack.io' }
|
||||
maven{ url = "https://central.sonatype.com/repository/maven-snapshots" }
|
||||
maven{ url = 'https://jitpack.io' }
|
||||
}
|
||||
|
||||
task clearCache{
|
||||
@@ -195,7 +193,7 @@ allprojects{
|
||||
}
|
||||
|
||||
tasks.withType(JavaCompile){
|
||||
targetCompatibility = 8
|
||||
targetCompatibility = JavaVersion.VERSION_17
|
||||
sourceCompatibility = JavaVersion.VERSION_17
|
||||
options.encoding = "UTF-8"
|
||||
options.compilerArgs += ["-Xlint:deprecation"]
|
||||
@@ -216,16 +214,32 @@ allprojects{
|
||||
|
||||
configure(project(":annotations")){
|
||||
tasks.withType(JavaCompile){
|
||||
targetCompatibility = 8
|
||||
sourceCompatibility = 8
|
||||
targetCompatibility = JavaVersion.VERSION_17
|
||||
sourceCompatibility = JavaVersion.VERSION_17
|
||||
options.fork = true
|
||||
|
||||
options.compilerArgs.addAll([
|
||||
"--add-exports", "jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED",
|
||||
"--add-exports", "jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED",
|
||||
"--add-exports", "jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED",
|
||||
"--add-exports", "jdk.compiler/com.sun.tools.javac.model=ALL-UNNAMED",
|
||||
"--add-exports", "jdk.compiler/com.sun.tools.javac.processing=ALL-UNNAMED",
|
||||
"--add-exports", "jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED",
|
||||
"--add-exports", "jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED",
|
||||
"--add-exports", "jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED",
|
||||
"--add-exports", "jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED",
|
||||
"--add-exports", "jdk.compiler/com.sun.tools.javac.main=ALL-UNNAMED",
|
||||
"--add-exports", "jdk.compiler/com.sun.tools.javac.jvm=ALL-UNNAMED",
|
||||
"--add-exports", "jdk.compiler/com.sun.tools.javac.comp=ALL-UNNAMED",
|
||||
"--add-exports", "java.base/sun.reflect.annotation=ALL-UNNAMED"
|
||||
])
|
||||
}
|
||||
}
|
||||
|
||||
//compile with java 8 compatibility for everything except the annotation project
|
||||
configure(subprojects - project(":annotations") - project(":tests")){
|
||||
tasks.withType(JavaCompile){
|
||||
options.compilerArgs.addAll(['--release', '8'])
|
||||
options.compilerArgs.addAll(['--release', '17'])
|
||||
}
|
||||
|
||||
tasks.withType(Javadoc){
|
||||
@@ -247,6 +261,7 @@ project(":desktop"){
|
||||
implementation arcModule("extensions:profiling")
|
||||
implementation arcModule("extensions:discord")
|
||||
implementation arcModule("natives:natives-filedialogs")
|
||||
implementation arcModule("extensions:filedialogs")
|
||||
implementation arcModule("natives:natives-desktop")
|
||||
implementation arcModule("natives:natives-freetype-desktop")
|
||||
|
||||
@@ -255,7 +270,6 @@ project(":desktop"){
|
||||
implementation "com.github.Anuken:steamworks4j:$steamworksVersion"
|
||||
|
||||
implementation arcModule("backends:backend-sdl")
|
||||
annotationProcessor 'com.github.Anuken:jabel:0.9.0'
|
||||
}
|
||||
}
|
||||
|
||||
@@ -267,7 +281,7 @@ project(":core"){
|
||||
kapt{
|
||||
javacOptions{
|
||||
option("-source", "17")
|
||||
option("-target", "1.8")
|
||||
option("-target", "17")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -305,41 +319,69 @@ project(":core"){
|
||||
}
|
||||
}
|
||||
|
||||
task depsJar(type: Jar, dependsOn: [classes, ":server:dist"]){
|
||||
archiveClassifier = 'deps'
|
||||
from files(sourceSets.main.output.classesDirs)
|
||||
from{ configurations.runtimeClasspath.collect{ it.isDirectory() ? it : zipTree(it) } }
|
||||
from zipTree("../server/build/libs/server-release.jar")
|
||||
from files("src/")
|
||||
from files("../../Arc/arc-core/src/")
|
||||
from files("../../Arc/extensions/arcnet/src/")
|
||||
from files("../../Arc/extensions/g3d/src/")
|
||||
from files("../../Arc/extensions/flabel/src/")
|
||||
from files("../../Arc/extensions/freetype/src/")
|
||||
from files("../server/src/")
|
||||
|
||||
exclude("META-INF/**")
|
||||
exclude("vfxshaders/**")
|
||||
exclude("maps/**")
|
||||
exclude("baseparts/**")
|
||||
exclude("vfxshaders/**")
|
||||
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
|
||||
}
|
||||
|
||||
task sourcesJar(type: Jar, dependsOn: classes){
|
||||
archiveClassifier = 'sources'
|
||||
from sourceSets.main.allSource
|
||||
}
|
||||
|
||||
task assetsJar(type: Jar, dependsOn: ":tools:pack"){
|
||||
task assetsJar(type: Jar){
|
||||
archiveClassifier = 'assets'
|
||||
from files("assets"){
|
||||
exclude "config", "cache", "music", "sounds", "sprites/fallback"
|
||||
|
||||
into('assets'){
|
||||
from 'assets'
|
||||
exclude 'config', 'cache', 'music', 'sounds', 'sprites/fallback'
|
||||
}
|
||||
|
||||
into('assets-raw/sprites'){
|
||||
from 'assets-raw/sprites_out'
|
||||
include '**/*.png'
|
||||
}
|
||||
}
|
||||
|
||||
task musicJar(type: Jar){
|
||||
archiveClassifier = 'music'
|
||||
from files("assets"){
|
||||
include "music/*", "sounds/*"
|
||||
|
||||
into('assets'){
|
||||
from 'assets'
|
||||
include '**/*.ogg', '**/*.mp3'
|
||||
}
|
||||
}
|
||||
|
||||
dependencies{
|
||||
compileJava.dependsOn(preGen)
|
||||
|
||||
api "org.lz4:lz4-java:1.8.0"
|
||||
api "at.yawk.lz4:lz4-java:1.10.2"
|
||||
api arcModule("arc-core")
|
||||
api arcModule("extensions:flabel")
|
||||
api arcModule("extensions:freetype")
|
||||
api arcModule("extensions:g3d")
|
||||
api arcModule("extensions:fx")
|
||||
api arcModule("extensions:arcnet")
|
||||
implementation arcModule("extensions:filedialogs")
|
||||
api "com.github.Anuken:rhino:$rhinoVersion"
|
||||
if(localArc && debugged()) api arcModule("extensions:recorder")
|
||||
if(localArc) api arcModule(":extensions:packer")
|
||||
|
||||
annotationProcessor 'com.github.Anuken:jabel:0.9.0'
|
||||
compileOnly project(":annotations")
|
||||
if(!project.hasProperty("noKapt")) kapt project(":annotations")
|
||||
}
|
||||
@@ -384,7 +426,7 @@ project(":server"){
|
||||
dependencies{
|
||||
implementation project(":core")
|
||||
implementation arcModule("backends:backend-headless")
|
||||
annotationProcessor 'com.github.Anuken:jabel:0.9.0'
|
||||
implementation 'org.jline:jline:4.0.0'
|
||||
}
|
||||
}
|
||||
|
||||
@@ -398,6 +440,7 @@ project(":tests"){
|
||||
testImplementation arcModule("backends:backend-headless")
|
||||
testImplementation "org.json:json:20230618"
|
||||
testRuntimeOnly "org.junit.jupiter:junit-jupiter-engine:5.7.1"
|
||||
testRuntimeOnly "org.junit.platform:junit-platform-launcher"
|
||||
}
|
||||
|
||||
tasks.withType(JavaCompile){
|
||||
@@ -409,6 +452,7 @@ project(":tests"){
|
||||
test{
|
||||
//fork every test so mods don't interact with each other
|
||||
forkEvery = 1
|
||||
jvmArgs = ["-XX:+HeapDumpOnOutOfMemoryError"]
|
||||
useJUnitPlatform()
|
||||
workingDir = new File("../core/assets")
|
||||
testLogging{
|
||||
@@ -429,7 +473,6 @@ project(":tools"){
|
||||
implementation arcModule("backends:backend-headless")
|
||||
|
||||
implementation("com.google.guava:guava:33.3.1-jre")
|
||||
annotationProcessor 'com.github.Anuken:jabel:0.9.0'
|
||||
}
|
||||
}
|
||||
|
||||
@@ -452,10 +495,6 @@ configure([":core", ":server"].collect{project(it)}){
|
||||
publications{
|
||||
maven(MavenPublication){
|
||||
from components.java
|
||||
//TODO: uncomment this once the jitpack packing is fixed (currently depends on a newer glibc version)
|
||||
//if(project.name == "core"){
|
||||
// artifact(tasks.named("assetsJar"))
|
||||
//}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -476,7 +515,6 @@ task deployAll{
|
||||
dependsOn cleanDeployOutput
|
||||
dependsOn "desktop:packrLinux64"
|
||||
dependsOn "desktop:packrWindows64"
|
||||
dependsOn "desktop:packrWindows32"
|
||||
dependsOn "desktop:packrMacOS"
|
||||
if(versionModifier != "steam"){
|
||||
dependsOn "server:deploy"
|
||||
|
||||
@@ -308,12 +308,6 @@
|
||||
"discord-logo-white"
|
||||
]
|
||||
},
|
||||
{
|
||||
"uid": "dd6df3b754e8d0dbf09d9b24088f0442",
|
||||
"css": "box",
|
||||
"code": 59422,
|
||||
"src": "iconic"
|
||||
},
|
||||
{
|
||||
"uid": "f08ba9f0e8f9b426a92efcaa59c1e932",
|
||||
"css": "reddit-alien",
|
||||
@@ -1069,6 +1063,200 @@
|
||||
"search": [
|
||||
"planet"
|
||||
]
|
||||
},
|
||||
{
|
||||
"uid": "ec43f846ca53702f30310718d627f2b5",
|
||||
"css": "arrow-note",
|
||||
"code": 59444,
|
||||
"src": "custom_icons",
|
||||
"selected": true,
|
||||
"svg": {
|
||||
"path": "M50 0L0 50V150 250 350 450 550 650L50 700H150 250 350 450 550 650 750L800 750 750 800 700 850V950L750 1000H850L900 950 950 900 1000 850 1050 800 1100 750 1150 700 1200 650V550L1150 500 1100 450 1050 400 1000 350 950 300 900 250 850 200H750L700 250V350L750 400 800 450 750 500H650 550 450 350 250L200 450V350 250 150 50L150 0Z",
|
||||
"width": 1200
|
||||
},
|
||||
"search": [
|
||||
"arrow-note"
|
||||
]
|
||||
},
|
||||
{
|
||||
"uid": "9ea0a737ccc45d6c510dcbae56058849",
|
||||
"css": "music",
|
||||
"code": 59402,
|
||||
"src": "fontawesome"
|
||||
},
|
||||
{
|
||||
"uid": "81db033e704eb7c586a365559d7c0f36",
|
||||
"css": "file-audio",
|
||||
"code": 61895,
|
||||
"src": "fontawesome"
|
||||
},
|
||||
{
|
||||
"uid": "e44601720c64e6bb6a2d5cba6b0c588c",
|
||||
"css": "volume-off",
|
||||
"code": 59404,
|
||||
"src": "fontawesome"
|
||||
},
|
||||
{
|
||||
"uid": "fee6e00f36e8ca8ef3e4a62caa213bf6",
|
||||
"css": "volume-down",
|
||||
"code": 59423,
|
||||
"src": "fontawesome"
|
||||
},
|
||||
{
|
||||
"uid": "76857a03fbaa6857fe063b6c25aa98ed",
|
||||
"css": "volume-up",
|
||||
"code": 59424,
|
||||
"src": "fontawesome"
|
||||
},
|
||||
{
|
||||
"uid": "3db5347bd219f3bce6025780f5d9ef45",
|
||||
"css": "tag",
|
||||
"code": 59425,
|
||||
"src": "fontawesome"
|
||||
},
|
||||
{
|
||||
"uid": "a3f89e106175a5c5c4e9738870b12e55",
|
||||
"css": "tags",
|
||||
"code": 59432,
|
||||
"src": "fontawesome"
|
||||
},
|
||||
{
|
||||
"uid": "69bd9dfe950d07d910f39c6988364e49",
|
||||
"css": "battery-4",
|
||||
"code": 62016,
|
||||
"src": "fontawesome"
|
||||
},
|
||||
{
|
||||
"uid": "7ab4ec24078133effbc4e923b65ef835",
|
||||
"css": "battery-3",
|
||||
"code": 62017,
|
||||
"src": "fontawesome"
|
||||
},
|
||||
{
|
||||
"uid": "e430a168b45ba40aa988ca1a5034a553",
|
||||
"css": "battery-2",
|
||||
"code": 62018,
|
||||
"src": "fontawesome"
|
||||
},
|
||||
{
|
||||
"uid": "99f4ea74adc24022106932d84a49b055",
|
||||
"css": "battery-1",
|
||||
"code": 62019,
|
||||
"src": "fontawesome"
|
||||
},
|
||||
{
|
||||
"uid": "9983d2489e028d659d196915a25ef3ca",
|
||||
"css": "battery-0",
|
||||
"code": 62020,
|
||||
"src": "fontawesome"
|
||||
},
|
||||
{
|
||||
"uid": "26613a2e6bc41593c54bead46f8c8ee3",
|
||||
"css": "file-code",
|
||||
"code": 61897,
|
||||
"src": "fontawesome"
|
||||
},
|
||||
{
|
||||
"uid": "dd69d9aa589ea7bc0a82a3fe67039f4b",
|
||||
"css": "file-video",
|
||||
"code": 61896,
|
||||
"src": "fontawesome"
|
||||
},
|
||||
{
|
||||
"uid": "e80ae555c1413a4ec18b33fb348b4049",
|
||||
"css": "file-archive",
|
||||
"code": 61894,
|
||||
"src": "fontawesome"
|
||||
},
|
||||
{
|
||||
"uid": "c95735c17a10af81448c7fed98a04546",
|
||||
"css": "folder-open",
|
||||
"code": 59438,
|
||||
"src": "fontawesome"
|
||||
},
|
||||
{
|
||||
"uid": "b091a8bd0fdade174951f17d936f51e4",
|
||||
"css": "folder-empty",
|
||||
"code": 61716,
|
||||
"src": "fontawesome"
|
||||
},
|
||||
{
|
||||
"uid": "6533bdc16ab201eb3f3b27ce989cab33",
|
||||
"css": "folder-open-empty",
|
||||
"code": 61717,
|
||||
"src": "fontawesome"
|
||||
},
|
||||
{
|
||||
"uid": "c7a75a25880928fe76981a53eca4f926",
|
||||
"css": "inbox",
|
||||
"code": 59439,
|
||||
"src": "fontawesome"
|
||||
},
|
||||
{
|
||||
"uid": "6fe95ffc3c807e62647d4f814a96e0d7",
|
||||
"css": "sitemap",
|
||||
"code": 61672,
|
||||
"src": "fontawesome"
|
||||
},
|
||||
{
|
||||
"uid": "2c413e78faf1d6631fd7b094d14c2253",
|
||||
"css": "cloud",
|
||||
"code": 59441,
|
||||
"src": "fontawesome"
|
||||
},
|
||||
{
|
||||
"uid": "de2fc7a5c986ab8c622f63455d7cf814",
|
||||
"css": "upload-cloud",
|
||||
"code": 61678,
|
||||
"src": "fontawesome"
|
||||
},
|
||||
{
|
||||
"uid": "f5999a012fc3752386635ec02a858447",
|
||||
"css": "download-cloud",
|
||||
"code": 61677,
|
||||
"src": "fontawesome"
|
||||
},
|
||||
{
|
||||
"uid": "e7a4824e79002c2d8ce3047b2da8b5a2",
|
||||
"css": "rain",
|
||||
"code": 59442,
|
||||
"src": "typicons"
|
||||
},
|
||||
{
|
||||
"uid": "ac10a3a3077eab1b9d66509eb25fb9b4",
|
||||
"css": "cloud-sun",
|
||||
"code": 59448,
|
||||
"src": "typicons"
|
||||
},
|
||||
{
|
||||
"uid": "6f200a5a449259c51cd0ccf56b4c1e93",
|
||||
"css": "drizzle",
|
||||
"code": 59452,
|
||||
"src": "typicons"
|
||||
},
|
||||
{
|
||||
"uid": "3cac7625657b10cf706e7f332749c912",
|
||||
"css": "cloud-flash",
|
||||
"code": 59456,
|
||||
"src": "typicons"
|
||||
},
|
||||
{
|
||||
"uid": "364cc69fb3edb8fb21caa6a2c0489589",
|
||||
"css": "cloud-wind",
|
||||
"code": 59457,
|
||||
"src": "typicons"
|
||||
},
|
||||
{
|
||||
"uid": "cc05df515bebe11df3ada0a5910a8f6d",
|
||||
"css": "box",
|
||||
"code": 59422,
|
||||
"src": "entypo"
|
||||
},
|
||||
{
|
||||
"uid": "d5f287ad8e3a2db8f808bc09980ec3dc",
|
||||
"css": "chart-alt",
|
||||
"code": 59459,
|
||||
"src": "typicons"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
|
After Width: | Height: | Size: 411 B |
|
Before Width: | Height: | Size: 751 B After Width: | Height: | Size: 393 B |
|
Before Width: | Height: | Size: 468 B After Width: | Height: | Size: 428 B |
|
Before Width: | Height: | Size: 633 B After Width: | Height: | Size: 505 B |
|
Before Width: | Height: | Size: 426 B After Width: | Height: | Size: 425 B |
|
Before Width: | Height: | Size: 119 B After Width: | Height: | Size: 219 B |
|
Before Width: | Height: | Size: 149 B After Width: | Height: | Size: 251 B |
|
Before Width: | Height: | Size: 2.0 KiB After Width: | Height: | Size: 359 B |
|
Before Width: | Height: | Size: 364 B After Width: | Height: | Size: 400 B |
|
Before Width: | Height: | Size: 442 B After Width: | Height: | Size: 403 B |
|
Before Width: | Height: | Size: 560 B After Width: | Height: | Size: 424 B |
|
Before Width: | Height: | Size: 413 B After Width: | Height: | Size: 405 B |
|
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1010 B |
|
Before Width: | Height: | Size: 244 B After Width: | Height: | Size: 1.1 KiB |
|
After Width: | Height: | Size: 2.1 KiB |
|
After Width: | Height: | Size: 299 B |
|
After Width: | Height: | Size: 341 B |
|
After Width: | Height: | Size: 189 B |
|
Before Width: | Height: | Size: 353 B After Width: | Height: | Size: 256 B |
|
Before Width: | Height: | Size: 125 B After Width: | Height: | Size: 138 B |
|
After Width: | Height: | Size: 194 B |
|
After Width: | Height: | Size: 195 B |
|
After Width: | Height: | Size: 450 B |
|
After Width: | Height: | Size: 480 B |
|
After Width: | Height: | Size: 717 B |
|
Before Width: | Height: | Size: 660 B After Width: | Height: | Size: 660 B |
|
After Width: | Height: | Size: 819 B |
|
After Width: | Height: | Size: 852 B |
|
Before Width: | Height: | Size: 808 B After Width: | Height: | Size: 808 B |
|
Before Width: | Height: | Size: 831 B After Width: | Height: | Size: 814 B |
@@ -15,9 +15,11 @@ link.wiki.description = Official Mindustry wiki
|
||||
link.suggestions.description = Suggest new features
|
||||
link.bug.description = Found one? Report it here
|
||||
linkopen = This server has sent you a link. Are you sure you want to open it?\n\n[sky]{0}
|
||||
clipboardcopy = This server wants to copy text to your clipboard. Are you sure you want to continue?\n\n[sky]{0}
|
||||
linkfail = Failed to open link!\nThe URL has been copied to your clipboard.
|
||||
screenshot = Screenshot saved to {0}
|
||||
screenshot.invalid = Map too large, potentially not enough memory for screenshot.
|
||||
screenshot.error = Failed to take screenshot. Your device likely does not support screenshots this large.
|
||||
gameover = Game Over
|
||||
gameover.disconnect = Disconnect
|
||||
gameover.pvp = The[accent] {0}[] team is victorious!
|
||||
@@ -25,6 +27,7 @@ gameover.waiting = [accent]Waiting for next map...
|
||||
highscore = [accent]New highscore!
|
||||
copied = Copied.
|
||||
indev.notready = This part of the game isn't ready yet
|
||||
bundle.external = Note: You have successfully loaded an external translation bundle.\n[accent]{0}
|
||||
|
||||
load.sound = Sounds
|
||||
load.map = Maps
|
||||
@@ -49,11 +52,19 @@ mods.browser.view-releases = View Releases
|
||||
mods.browser.noreleases = [scarlet]No Releases Found\n[accent]Couldn't find any releases for this mod. Check if the mod's repository has any releases published.
|
||||
mods.browser.latest = [lightgray][Latest]
|
||||
mods.browser.releases = Releases
|
||||
mods.browser.fetching = Fetching Releases...
|
||||
mods.github.open = Repo
|
||||
mods.github.open-release = Release Page
|
||||
mods.browser.sortdate = Sort by recent
|
||||
mods.browser.sortstars = Sort by stars
|
||||
|
||||
export.file = Export File
|
||||
import.file = Import File
|
||||
copy.clipboard = Copy to Clipboard
|
||||
import.clipboard = Import from Clipboard
|
||||
workshop.browse = Browse Workshop
|
||||
workshop.share = Share on Workshop
|
||||
|
||||
schematic = Schematic
|
||||
schematic.add = Save Schematic...
|
||||
schematics = Schematics
|
||||
@@ -61,12 +72,6 @@ schematic.search = Search schematics...
|
||||
schematic.replace = A schematic by that name already exists. Replace it?
|
||||
schematic.exists = A schematic by that name already exists.
|
||||
schematic.import = Import Schematic...
|
||||
schematic.exportfile = Export File
|
||||
schematic.importfile = Import File
|
||||
schematic.browseworkshop = Browse Workshop
|
||||
schematic.copy = Copy to Clipboard
|
||||
schematic.copy.import = Import from Clipboard
|
||||
schematic.shareworkshop = Share on Workshop
|
||||
schematic.flip = [accent][[{0}][]/[accent][[{1}][]: Flip Schematic
|
||||
schematic.saved = Schematic saved.
|
||||
schematic.delete.confirm = This schematic will be utterly eradicated.
|
||||
@@ -101,6 +106,7 @@ coreattack = < Core is under attack! >
|
||||
nearpoint = [[ [scarlet]LEAVE DROP POINT IMMEDIATELY[] ]\nannihilation imminent
|
||||
database = Core Database
|
||||
database.button = Database
|
||||
database.patched = Modified by data patches.
|
||||
viewfields = View Content Fields
|
||||
savegame = Save Game
|
||||
loadgame = Load Game
|
||||
@@ -123,9 +129,12 @@ maps.none = [lightgray]No maps found!
|
||||
invalid = Invalid
|
||||
pickcolor = Pick Color
|
||||
color = Color
|
||||
import = Import
|
||||
export = Export
|
||||
preparingconfig = Preparing Config
|
||||
preparingcontent = Preparing Content
|
||||
uploadingcontent = Uploading Content
|
||||
content.createdby = Created by: {0}
|
||||
uploadingpreviewfile = Uploading Preview File
|
||||
committingchanges = Committing Changes
|
||||
done = Done
|
||||
@@ -170,6 +179,7 @@ mod.incompletedependencies.details = This mod is unable to be loaded due to inva
|
||||
mod.requiresversion = Requires game version: [red]{0}
|
||||
|
||||
mod.errors = Errors have occurred loading content.
|
||||
mod.errors.map = [scarlet]Errors have occurred loading map content. All custom content has been disabled.[]\nThis map will likely not function correctly.
|
||||
mod.noerrorplay = [red]You have mods with errors.[] Either disable the affected mods or fix the errors before playing.
|
||||
mod.enable = Enable
|
||||
mod.requiresrestart = The game will now close to apply the mod changes.
|
||||
@@ -211,6 +221,10 @@ campaign.none = [lightgray]Select a planet to start on.\nThis can be switched at
|
||||
campaign.erekir = Newer, more polished content. Mostly linear campaign progression.\n\nMore difficult. Higher quality maps and overall experience.
|
||||
campaign.serpulo = Older content; the classic experience. More open-ended, more content.\n\nPotentially unbalanced maps and campaign mechanics. Less polished.
|
||||
campaign.difficulty = Difficulty
|
||||
campaign.rework.title = Campaign Changes Notice
|
||||
campaign.rework.serpulo = [accent]⚠ The Serpulo campaign has been reworked.[]\n\n\
|
||||
Sector positions and difficulty have changed. You may encounter issues relating to leftover campaign saves from the old layout.\n\n\
|
||||
For a cleaner experience, consider resetting your campaign saves in the settings.
|
||||
completed = [accent]Researched
|
||||
techtree = Tech Tree
|
||||
techtree.select = Tech Tree Selection
|
||||
@@ -234,6 +248,7 @@ server.kicked.vote = You have been vote-kicked. Goodbye.
|
||||
server.kicked.clientOutdated = Outdated client! Update your game!
|
||||
server.kicked.serverOutdated = Outdated server! Ask the host to update!
|
||||
server.kicked.banned = You are banned on this server.
|
||||
server.kicked.steamBanned = You have been banned from Steam lobbies for disruptive and shameful behavior.
|
||||
server.kicked.typeMismatch = This server is not compatible with your build type.
|
||||
server.kicked.playerLimit = This server is full. Wait for an empty slot.
|
||||
server.kicked.recentKick = You have been kicked recently.\nWait before connecting again.
|
||||
@@ -317,7 +332,12 @@ disconnect.snapshottimeout = Timed out while receiving UDP snapshots.\nThis may
|
||||
cantconnect = Unable to join game ([accent]{0}[]).
|
||||
connecting = [accent]Connecting...
|
||||
reconnecting = [accent]Reconnecting...
|
||||
connecting.data = [accent]Loading world data...
|
||||
|
||||
connecting.establish = [accent]Establishing connection...
|
||||
receiving.world = [accent]Receiving world data ({0})...
|
||||
receiving.assets = [accent]Receiving assets ({0})...
|
||||
receiving.assets.fail = I/O error occurred while receiving assets.
|
||||
|
||||
server.port = Port:
|
||||
server.invalidport = Invalid port number!
|
||||
server.error.addressinuse = [scarlet]Failed to open server on port 6567.[]\n\nMake sure no other Mindustry servers are running on your device or network!
|
||||
@@ -334,6 +354,13 @@ save.export = Export Save
|
||||
save.import.invalid = [accent]This save is invalid!
|
||||
save.import.fail = [scarlet]Failed to import save: [accent]{0}
|
||||
save.export.fail = [scarlet]Failed to export save: [accent]{0}
|
||||
save.export.needsload = [scarlet]⚠ This save contains embedded assets.[]\nLoad into this save before exporting it.
|
||||
save.assets.missing = Missing Assets
|
||||
save.assets.missing.list = Asset List...
|
||||
save.assets.missing.info = [scarlet]⚠ This save contains missing assets![]\n\n\
|
||||
[lightgray]This is likely because the save file was not properly exported.\n\
|
||||
[lightgray]When sharing saves, only export through the in-game UI. Do not copy save files directly.\n\
|
||||
[lightgray]If transferring files is necessary, make sure the [accent]assetCache[] folder is copied as well.
|
||||
save.import = Import Save
|
||||
save.newslot = Save name:
|
||||
save.rename = Rename
|
||||
@@ -353,16 +380,12 @@ save.mode = Gamemode: {0}
|
||||
save.date = Last Saved: {0}
|
||||
save.playtime = Playtime: {0}
|
||||
dontshowagain = Don't show again
|
||||
warn.32bit.title = 32-bit Deprecation Warning
|
||||
warn.32bit = You are using a [red]32-bit[] version of Mindustry.\n\
|
||||
As newer Java versions have dropped 32-bit Windows support, [red]32-bit support will be discontinued in the future[].\n\n\
|
||||
Please upgrade to a 64-bit machine, and make sure you have the 64-bit version of Mindustry downloaded.\n\n\
|
||||
If you are running Mindustry as a JAR file, make sure you are using 64-bit Java.
|
||||
warning = Warning.
|
||||
warning = Warning!
|
||||
confirm = Confirm
|
||||
delete = Delete
|
||||
view.workshop = View In Workshop
|
||||
workshop.listing = Edit Workshop Listing
|
||||
hide = Hide
|
||||
ok = OK
|
||||
open = Open
|
||||
customize = Customize Rules
|
||||
@@ -374,7 +397,6 @@ command.repair = Repair
|
||||
command.rebuild = Rebuild
|
||||
command.assist = Assist Player
|
||||
command.move = Move
|
||||
command.boost = Boost
|
||||
command.enterPayload = Enter Payload Block
|
||||
command.loadUnits = Load Units
|
||||
command.loadBlocks = Load Blocks
|
||||
@@ -385,7 +407,9 @@ stance.shoot = Stance: Shoot
|
||||
stance.holdfire = Stance: Hold Fire
|
||||
stance.pursuetarget = Stance: Pursue Target
|
||||
stance.patrol = Stance: Patrol Path
|
||||
stance.holdposition = Stance: Hold Position
|
||||
stance.ram = Stance: Ram\n[lightgray]Straight line movement, no pathfinding
|
||||
stance.boost = Boost
|
||||
stance.mineauto = Automatic Mining
|
||||
stance.mine = Mine Item: {0}
|
||||
openlink = Open Link
|
||||
@@ -432,6 +456,7 @@ saveimage = Save Image
|
||||
unknown = Unknown
|
||||
custom = Custom
|
||||
builtin = Built-In
|
||||
modded = Modded
|
||||
map.delete.confirm = Are you sure you want to delete this map? This action cannot be undone!
|
||||
map.random = [accent]Random Map
|
||||
map.nospawn = This map does not have any cores for the player to spawn in! Add a {0} core to this map in the editor.
|
||||
@@ -471,14 +496,6 @@ editor.rules = Rules
|
||||
editor.generation = Generation
|
||||
editor.objectives = Objectives
|
||||
editor.locales = Locale Bundles
|
||||
editor.patches.guide = Patch Guide
|
||||
editor.patches = Data Patches
|
||||
editor.patch = Patchset: {0}
|
||||
editor.patches.none = [lightgray]No patchsets loaded.
|
||||
editor.patches.errors = Patchset Errors
|
||||
editor.patches.importerror = Failed to import patchset
|
||||
editor.patches.delete.confirm = Are you sure you want to delete this patchset?
|
||||
editor.patch.fields = {0} fields
|
||||
editor.worldprocessors = World Processors
|
||||
editor.worldprocessors.editname = Edit Name
|
||||
editor.worldprocessors.none = [lightgray]No world processor blocks found!\nAdd one in the map editor, or use the \ue813 Add button below.
|
||||
@@ -492,12 +509,86 @@ editor.center = Center
|
||||
editor.search = Search maps...
|
||||
editor.filters = Filter Maps
|
||||
editor.filters.mode = Gamemodes:
|
||||
editor.filters.priorities = Priorities:
|
||||
editor.filters.type = Map Type:
|
||||
editor.filters.search = Search In:
|
||||
editor.filters.author = Author
|
||||
editor.filters.description = Description
|
||||
editor.filters.modname = Mod Name
|
||||
editor.filters.prioritizemod = Mod Priority
|
||||
editor.filters.prioritizecustom = Custom Priority
|
||||
editor.filters.planetselect = Planet Selection
|
||||
editor.shiftx = Shift X
|
||||
editor.shifty = Shift Y
|
||||
|
||||
asset.patch = Patches
|
||||
asset.content = Content
|
||||
asset.bundle = Translation Bundles
|
||||
asset.image = Images
|
||||
asset.sound = Sounds
|
||||
asset.music = Music
|
||||
|
||||
content.unit = Unit
|
||||
content.item = Item
|
||||
content.liquid = Liquid
|
||||
content.block = Block
|
||||
content.planet = Planet
|
||||
content.weather = Weather
|
||||
content.status = Status Effect
|
||||
|
||||
patches = Data Patches
|
||||
patch.set = Patchset: {0}
|
||||
patch.none = [lightgray]No patchsets found.
|
||||
patch.errors = Patchset Errors
|
||||
patch.importerror = Failed to import patchset
|
||||
patch.delete.confirm = Are you sure you want to delete this patchset?
|
||||
patch.path = Path:
|
||||
patch.fields = {0} fields
|
||||
|
||||
bundle.lines = {0} lines
|
||||
|
||||
images = Images
|
||||
asset.guide = Usage Guide
|
||||
asset.bundle.exists = A bundle with path '{0}' already exists.
|
||||
asset.importzip = Import Asset Zip
|
||||
asset.exportzip = Export Asset Zip
|
||||
asset.image.importzip = Import Image Zip
|
||||
asset.image.exportzip = Export Image Zip
|
||||
asset.clearall = Clear All
|
||||
asset.clearall.confirm = Are you sure that you want to clear [red]all[] assets from this map?\nThis includes images, audio, content, etc.
|
||||
asset.imports = Import Results
|
||||
asset.imported = [accent]{0} assets imported.
|
||||
asset.import.none = No valid asset files found in zip archive.
|
||||
asset.content.errors = Content Errors
|
||||
asset.content.add = Add Content
|
||||
asset.content.type = Type:
|
||||
asset.content.exists = [red]Content with that name already exists!
|
||||
asset.content.badname = [red]Invalid name! Most symbols are not allowed.
|
||||
asset.content.import.file = Import File
|
||||
asset.content.import.clipboard = Import From Clipboard
|
||||
asset.exists = An asset of that type with the same path/name already exists:\n[lightgray]{0}
|
||||
asset.broken = This asset file could not be located.\nThis can be caused by improper import of data, or an incorrectly exported save.
|
||||
asset.audio.invalid = Audio file could not be loaded.\nEnsure that it is a valid OGG or MP3 file.
|
||||
asset.delete.confirm = Are you sure you want to delete this asset?
|
||||
asset.images = Data Patch Images
|
||||
asset.image.imports = Import Results
|
||||
asset.image.imported = [accent]{0} images imported.
|
||||
asset.image.none = No valid PNG files found in zip archive.
|
||||
asset.image.error = [red]The following errors were encountered:[]
|
||||
asset.image.clearall.confirm = Are you certain that you wish to clear all images?
|
||||
asset.image.info = Image Info
|
||||
asset.image.toolarge = Image ([lightgray]{0}x{1}[]) is too large. Maximum size is {2}x{3}.
|
||||
asset.image.exists = An image with that path/name already exists:\n[lightgray]{0}
|
||||
asset.image.delete.confirm = Are you certain that you wish to delete this image?
|
||||
asset.image.name = [accent]File Name: [lightgray]{0}
|
||||
asset.image.region.name = [accent]Region Name: [lightgray]{0}
|
||||
asset.image.path = [accent]Path: [lightgray]{0}
|
||||
asset.image.env = [accent]Uses Environment Atlas: [lightgray]{0}
|
||||
asset.image.size = [accent]Size: [lightgray]{0}x{1}
|
||||
asset.image.filesize = [accent]File Size: [lightgray]{0}
|
||||
asset.image.packfailed = [red]⚠ Failed to pack sprite![]
|
||||
asset.image.packfailed.env = This is likely caused by a lack of space in the environment atlas.\nNote that environment sprites are limited to a 512x512 total area.
|
||||
|
||||
workshop = Workshop
|
||||
waves.title = Waves
|
||||
waves.team = Team
|
||||
@@ -512,10 +603,10 @@ waves.spawn = spawn:
|
||||
waves.spawn.all = <all>
|
||||
waves.spawn.select = Spawn Select
|
||||
waves.spawn.none = [scarlet]no spawns found in map
|
||||
waves.spawn.first = [lightgray](first {0})
|
||||
waves.max = max units
|
||||
waves.guardian = Guardian
|
||||
waves.preview = Preview
|
||||
waves.edit = Edit...
|
||||
waves.random = Random
|
||||
waves.copy = Copy to Clipboard
|
||||
waves.load = Load from Clipboard
|
||||
@@ -531,6 +622,7 @@ waves.search = Search waves...
|
||||
waves.filter = Unit Filter
|
||||
waves.units.hide = Hide All
|
||||
waves.units.show = Show All
|
||||
pause.disabled = [scarlet]Pause is disabled
|
||||
|
||||
#these are intentionally in lower case
|
||||
wavemode.counts = counts
|
||||
@@ -541,7 +633,9 @@ all = All
|
||||
editor.default = [lightgray]<Default>
|
||||
details = Details...
|
||||
edit = Edit
|
||||
edit.menu = Edit...
|
||||
variables = Vars
|
||||
logic.error.toolong = Processor code too long (Limit: {0} compressed bytes, actual length: {1} bytes)
|
||||
logic.clear.confirm = Are you sure you want to clear all code from this processor?
|
||||
logic.restart = Restart
|
||||
logic.globals = Built-in Variables
|
||||
@@ -617,6 +711,8 @@ toolmode.drawteams.description = Draw teams instead of blocks.
|
||||
#unused
|
||||
toolmode.underliquid = Under Liquids
|
||||
toolmode.underliquid.description = Draw floors under liquid tiles.
|
||||
toolmode.fillunderliquid = Fill Under Liquids
|
||||
toolmode.fillunderliquid.description = Fill floors under liquid tiles.
|
||||
|
||||
filters.empty = [lightgray]No filters! Add one with the button below.
|
||||
|
||||
@@ -680,6 +776,8 @@ locales.showsame = Show properties that have same values in different locales
|
||||
locales.viewproperty = View in all locales
|
||||
locales.viewing = Viewing property "{0}"
|
||||
locales.addicon = Add Icon
|
||||
locales.property.name = name
|
||||
locales.property.text = text
|
||||
|
||||
width = Width:
|
||||
height = Height:
|
||||
@@ -751,8 +849,10 @@ objective.build = [accent]Build: [][lightgray]{0}[]x\n{1}[lightgray]{2}
|
||||
objective.buildunit = [accent]Build Unit: [][lightgray]{0}[]x\n{1}[lightgray]{2}
|
||||
objective.destroyunits = [accent]Destroy: [][lightgray]{0}[]x Units
|
||||
objective.enemiesapproaching = [accent]Enemies approaching in [lightgray]{0}[]
|
||||
#TODO: fix the typo (escelating -> escalating) and update every objective that uses it
|
||||
objective.enemyescelating = [accent]Enemy production escalating in [lightgray]{0}[]
|
||||
objective.enemyairunits = [accent]Enemy air unit production beginning in [lightgray]{0}[]
|
||||
objective.enemyairunits = [accent]Enemy air unit production begins in [lightgray]{0}[]
|
||||
objective.enemyunitproduction = [accent]Enemy unit production begins in [lightgray]{0}[]
|
||||
objective.destroycore = [accent]Destroy Enemy Core
|
||||
objective.command = [accent]Command Units
|
||||
objective.nuclearlaunch = [accent]\u26A0 Missile launch detected: [lightgray]{0}
|
||||
@@ -839,7 +939,8 @@ sector.changeicon = Change Icon
|
||||
sector.noswitch.title = Unable to Switch Sectors
|
||||
sector.noswitch = You may not switch sectors while an existing sector is under attack.\n\nSector: [accent]{0}[] on [accent]{1}[]
|
||||
sector.view = View Sector
|
||||
sector.foundationrequired = [lightgray] Core: Foundation Required
|
||||
sector.foundationrequired = [lightgray] Core: Foundation Required Nearby
|
||||
sector.shielded = [lightgray] Shielded
|
||||
|
||||
threat.low = Low
|
||||
threat.medium = Medium
|
||||
@@ -847,6 +948,10 @@ threat.high = High
|
||||
threat.extreme = Extreme
|
||||
threat.eradication = Eradication
|
||||
|
||||
difficulty.guide.title = Notice
|
||||
difficulty.guide = If a sector poses too much of a challenge, campaign difficulty can be adjusted for an easier experience.
|
||||
difficulty.guide.confirm = Adjust Difficulty
|
||||
|
||||
difficulty.casual = Casual
|
||||
difficulty.easy = Easy
|
||||
difficulty.normal = Normal
|
||||
@@ -866,7 +971,7 @@ planet.sun.name = Sun
|
||||
|
||||
sector.impact0078.name = Impact 0078
|
||||
sector.groundZero.name = Ground Zero
|
||||
sector.craters.name = The Craters
|
||||
sector.crateredBattleground.name = Cratered Battleground
|
||||
sector.frozenForest.name = Frozen Forest
|
||||
sector.ruinousShores.name = Ruinous Shores
|
||||
sector.stainedMountains.name = Stained Mountains
|
||||
@@ -883,52 +988,49 @@ sector.facility32m.name = Facility 32 M
|
||||
sector.taintedWoods.name = Tainted Woods
|
||||
sector.infestedCanyons.name = Infested Canyons
|
||||
sector.planetaryTerminal.name = Planetary Launch Terminal
|
||||
sector.coastline.name = Coastline
|
||||
sector.coastline.name = Humid Coastline
|
||||
sector.navalFortress.name = Naval Fortress
|
||||
sector.polarAerodrome.name = Polar Aerodrome
|
||||
sector.atolls.name = Atolls
|
||||
sector.testingGrounds.name = Testing Grounds
|
||||
sector.seaPort.name = Sea Port
|
||||
sector.perilousHarbor.name = Perilous Harbor
|
||||
sector.weatheredChannels.name = Weathered Channels
|
||||
sector.fallenVessel.name = Fallen Vessel
|
||||
sector.mycelialBastion.name = Mycelial Bastion
|
||||
sector.frontier.name = Frontier
|
||||
sector.sunkenPier.name = Sunken Pier
|
||||
sector.littoralShipyard.name = Littoral Shipyard
|
||||
sector.cruxscape.name = Cruxscape
|
||||
sector.geothermalStronghold.name = Geothermal Stronghold
|
||||
|
||||
sector.groundZero.description = The optimal location to begin once more. Low enemy threat. Few resources.\nGather as much lead and copper as possible.\nMove on.
|
||||
sector.groundZero.description = The optimal location to begin once more. Low enemy threat. Few resources.\n\nGather as much lead and copper as possible.\nMove on.
|
||||
sector.frozenForest.description = Even here, closer to mountains, the spores have spread. The frigid temperatures cannot contain them forever.\n\nBegin the venture into power. Build combustion generators. Learn to use menders.
|
||||
sector.saltFlats.description = On the outskirts of the desert lie the Salt Flats. Few resources can be found in this location.\n\nThe enemy has erected a resource storage complex here. Eradicate their core. Leave nothing standing.
|
||||
sector.craters.description = Water has accumulated in this crater, relic of the old wars. Reclaim the area. Collect sand. Smelt metaglass. Pump water to cool turrets and drills.
|
||||
sector.ruinousShores.description = Past the wastes, is the shoreline. Once, this location housed a coastal defense array. Not much of it remains. Only the most basic defense structures have remained unscathed, everything else reduced to scrap.\nContinue the expansion outwards. Rediscover the technology.
|
||||
sector.crateredBattleground.description = Water has accumulated in this crater, relic of the old wars. Reclaim the area. Collect sand. Smelt metaglass. Pump water to cool turrets and drills.
|
||||
sector.ruinousShores.description = Past the wastes, is the shoreline. Once, this location housed a coastal defense array. Not much of it remains. Only the most basic defense structures have remained unscathed, everything else reduced to scrap.\n\nContinue the expansion outwards. Rediscover the technology.
|
||||
sector.stainedMountains.description = Further inland lie the mountains, yet untainted by spores.\nExtract the abundant titanium in this area. Learn how to use it.\n\nThe enemy presence is greater here. Do not give them time to send their strongest units.
|
||||
sector.overgrowth.description = This area is overgrown, closer to the source of the spores.\nThe enemy has established an outpost here. Build Mace units. Destroy it.
|
||||
sector.tarFields.description = The outskirts of an oil production zone, between the mountains and desert. One of the few areas with usable tar reserves.\nAlthough abandoned, this area has some dangerous enemy forces nearby. Do not underestimate them.\n\n[lightgray]Research oil processing technology if possible.
|
||||
sector.desolateRift.description = An extremely dangerous zone. Plentiful resources, but little space. High risk of destruction. Build air and ground defenses as soon as possible. Do not be fooled by the long spacing between enemy attacks.
|
||||
sector.nuclearComplex.description = A former facility for the production and processing of thorium, reduced to ruins.\n[lightgray]Research the thorium and its many uses.\n\nThe enemy is present here in great numbers, constantly scouting for attackers.
|
||||
sector.fungalPass.description = A transition area between high mountains and lower, spore-ridden lands. A small enemy reconnaissance base is located here.\nDestroy it.\nUse Dagger units. Take out the enemy core.
|
||||
sector.overgrowth.description = This area is overgrown, closer to the origin of the spores.\n\nThe enemy has established an outpost here. Build Mace units. Destroy it.
|
||||
sector.tarFields.description = The outskirts of an oil production zone, between the mountains and desert. One of the few areas with usable tar reserves.\nAlthough abandoned, this area has some dangerous enemy forces nearby. Do not underestimate them.\n\nResearch oil processing technology if possible.
|
||||
sector.desolateRift.description = An extremely dangerous zone. Plentiful resources, but little space. High risk of destruction.\n\nBuild air and ground defenses as soon as possible. Do not be fooled by the infrequent nature of enemy attacks.
|
||||
sector.nuclearComplex.description = A former facility for the production and processing of thorium, reduced to ruins.\nResearch the Thorium Reactor, and utilize it for advanced power generation.\n\nThe enemy is present here in great numbers, constantly scouting for attackers.
|
||||
sector.fungalPass.description = A transition area between high mountains and lower, spore-ridden lands. A small enemy reconnaissance base is located here.\n\nUtilize Dagger units. Destroy the enemy outpost.
|
||||
sector.biomassFacility.description = The origin of spores. This is the facility in which they were researched and initially produced.\nResearch the technology contained within. Cultivate spores for the production of fuel and plastics.\n\n[lightgray]Upon this facility's demise, the spores were released. Nothing in the local ecosystem could compete with such an invasive organism.
|
||||
sector.windsweptIslands.description = Further past the shoreline is this remote chain of islands. Records show they once had [accent]Plastanium[]-producing structures.\n\nFend off the enemy's naval units. Establish a base on the islands. Research these factories.
|
||||
sector.windsweptIslands.description = Further past the shoreline is this remote chain of islands. Records show they once had structures producing Plastanium.\n\nFend off the enemy's naval units. Establish a base on the islands. Research these factories.
|
||||
sector.extractionOutpost.description = A remote outpost, constructed by the enemy for the purpose of launching resources to other sectors.\n\nCross-sector transport technology is essential for further conquest. Destroy the base. Research their Launch Pads.
|
||||
sector.impact0078.description = Here lie remnants of the interstellar transport vessel that first entered this system.\n\nSalvage as much as possible from the wreckage. Research any intact technology.
|
||||
sector.planetaryTerminal.description = The final target.\n\nThis coastal base contains a structure capable of launching Cores to local planets. It is extremely well guarded.\n\nProduce naval units. Eliminate the enemy as quickly as possible. Research the launch structure.
|
||||
sector.coastline.description = Remnants of naval unit technology have been detected at this location. Repel the enemy attacks, capture this sector, and acquire the technology.
|
||||
sector.planetaryTerminal.description = The final objective.\n\nThis coastal base contains a structure capable of launching Cores to local planets. It is extremely well guarded.\n\nProduce naval units. Eliminate the enemy as quickly as possible. Research the launch structure.
|
||||
sector.coastline.description = Remnants of alloy synthesis technology have been detected at this location.\n\nRepel the enemy attacks, capture this sector, and acquire the technology.
|
||||
sector.navalFortress.description = The enemy has established a base on a remote, naturally-fortified island. Destroy this outpost. Acquire their advanced naval craft technology, and research it.
|
||||
|
||||
#do not translate
|
||||
sector.facility32m.description = WIP, map submission by Stormride_R
|
||||
sector.taintedWoods.description = WIP, map submission by Stormride_R
|
||||
sector.sunkenPier.description = WIP, map submission by Stormride_R
|
||||
sector.atolls.description = WIP, map submission by Stormride_R
|
||||
sector.frontier.description = WIP, map submission by Stormride_R
|
||||
sector.infestedCanyons.description = WIP, map submission by Skeledragon
|
||||
sector.polarAerodrome.description = WIP, map submission by hhh i 17
|
||||
sector.testingGrounds.description = WIP, map submission by dnx2019
|
||||
sector.seaPort.description = WIP, map submission by inkognito626
|
||||
sector.weatheredChannels.description = WIP, map submission by Skeledragon
|
||||
sector.mycelialBastion.description = WIP, map submission by Skeledragon
|
||||
sector.cruxscape.description = WIP, map submission by Stormride_R
|
||||
sector.geothermalStronghold.description = WIP, map submission by Skeledragon
|
||||
sector.facility32m.description = This sector contains the moldering remnants of an explosives production facility.\n\nCapture this area. Research the Blast Mixer. Produce Blast Compound for use as turret ammunition.
|
||||
sector.taintedWoods.description = [gray][optional objective][]\nRich in oil reserves, this sector contains large masses of fungal growth, making it difficult to traverse.\n\nUtilize its resources to produce Plastanium. Fend off the enemy.
|
||||
sector.sunkenPier.description = [gray][optional objective][]\nOnce an offshore oil platform, this facility has long-since fallen into disrepair.\n\nHigh amounts of enemy naval units detected. Be prepared for attacks from multiple directions.
|
||||
sector.atolls.description = [gray][optional objective][]\nMultiple enemy naval bases have been detected at this location.\n\nUtilize Mega payload units to transport ground forces into attack positions. Build naval units to destroy the peripheral outposts.
|
||||
sector.frontier.description = A small enemy outpost has been detected here.\n\nBuild Mono units in order to harvest resources more effectively. Utilize the Additive Reconstructor to construct stronger units.
|
||||
sector.infestedCanyons.description = Beyond the mountains lies a winding river valley, now covered in layers of spore moss.\n\nHold your ground against the enemy onslaught. Construct naval units. Eliminate all enemy cores.
|
||||
sector.testingGrounds.description = [gray][optional objective][]\nA crater-riddled desert valley, formerly used as a testing ground for military projects.\n\nDue to lack of water, establishing a presence in this location may pose a challenge. Be prepared for attacks from multiple directions.
|
||||
sector.perilousHarbor.description = Multiple enemy bases have been established across this treacherous coastal region.\n\nConstruct naval units, and crush their fortifications.
|
||||
sector.weatheredChannels.description = [gray][optional objective][]\nThis channel system harbors abundant resources. Land your core. Fend off the enemy waves to claim them.\n\nThe enemy will take multiple routes to assault your infrastructure. Look for signs of a possible ambush and defend accordingly.
|
||||
sector.mycelialBastion.description = This fortified complex lies deep within the fungal regions, threatening neighboring sectors with advanced insectoid units.\n\nAssault the complex. Obtain the technology within. Utilize units capable of traversing walls.
|
||||
sector.littoralShipyard.description = Located upon the far reaches of the central sea, this naval production facility contains technology for building advanced units.\n\nDestroy this facility, and use its technology to further assist in the completion of the final objective.
|
||||
|
||||
sector.onset.name = The Onset
|
||||
sector.aegis.name = Aegis
|
||||
@@ -982,6 +1084,10 @@ status.blasted.name = Blasted
|
||||
status.corroded.name = Corroded
|
||||
status.unmoving.name = Unmoving
|
||||
status.boss.name = Guardian
|
||||
status.slow.name = Slow
|
||||
status.fast.name = Fast
|
||||
status.shielded.name = Shielded
|
||||
status.disarmed.name = Disarmed
|
||||
|
||||
settings.language = Language
|
||||
settings.data = Game Data
|
||||
@@ -1001,6 +1107,13 @@ settings.clearresearch = Clear Research
|
||||
settings.clearresearch.confirm = Are you sure you want to clear all of your campaign research?
|
||||
settings.clearcampaignsaves = Clear Campaign Saves
|
||||
settings.clearcampaignsaves.confirm = Are you sure you want to clear all of your campaign saves?
|
||||
settings.clearplanetdata = Clear Planet Data
|
||||
settings.planetselect = Planet: {0}
|
||||
settings.clearplanetresearch = Clear Planet Research
|
||||
settings.clearplanetresearch.confirm = Are you sure you want to clear {0}'s research?
|
||||
settings.clearplanetcampaignsaves = Clear Planet Campaign Saves
|
||||
settings.clearplanetcampaignsaves.confirm = Are you sure you want to clear {0}'s campaign saves?
|
||||
|
||||
paused = [accent]< Paused >
|
||||
clear = Clear
|
||||
banned = [scarlet]Banned
|
||||
@@ -1032,8 +1145,8 @@ stat.targetsair = Targets Air
|
||||
stat.targetsground = Targets Ground
|
||||
stat.crushdamage = Crush Damage
|
||||
stat.legsplashdamage = Leg Splash Damage
|
||||
stat.legsplashrange = Leg Splash Range
|
||||
stat.itemsmoved = Move Speed
|
||||
stat.itemsmoved.info = Throughput is often not linear and tied to FPS/TPS.
|
||||
stat.launchtime = Time Between Launches
|
||||
stat.shootrange = Range
|
||||
stat.size = Size
|
||||
@@ -1049,12 +1162,15 @@ stat.itemcapacity = Item Capacity
|
||||
stat.memorycapacity = Memory Capacity
|
||||
stat.basepowergeneration = Base Power Generation
|
||||
stat.productiontime = Production Time
|
||||
stat.warmuptime = Warmup Time
|
||||
stat.repairtime = Block Full Repair Time
|
||||
stat.repairspeed = Repair Speed
|
||||
stat.weapons = Weapons
|
||||
stat.bullet = Bullet
|
||||
stat.moduletier = Module Tier
|
||||
stat.unittype = Unit Type
|
||||
stat.receiverate = Receiving Rate
|
||||
stat.receiverate.info = Affected by overdrive. Throughput can be increased by placing additional unloaders.
|
||||
stat.speedincrease = Speed Increase
|
||||
stat.range = Range
|
||||
stat.drilltier = Drillables
|
||||
@@ -1063,6 +1179,7 @@ stat.boosteffect = Boost Effect
|
||||
stat.maxunits = Max Active Units
|
||||
stat.health = Health
|
||||
stat.armor = Armor
|
||||
stat.armor.info = Applied damage = incoming damage - armor.\nUp to 90% maximum damage reduction.
|
||||
stat.buildtime = Build Time
|
||||
stat.maxconsecutive = Max Consecutive
|
||||
stat.buildcost = Build Cost
|
||||
@@ -1073,6 +1190,7 @@ stat.ammo = Ammo
|
||||
stat.shieldhealth = Shield Health
|
||||
stat.cooldowntime = Cooldown Time
|
||||
stat.regenerationrate = Regeneration Rate
|
||||
stat.activationtime = Activation Time
|
||||
stat.explosiveness = Explosiveness
|
||||
stat.basedeflectchance = Base Deflect Chance
|
||||
stat.lightningchance = Lightning Chance
|
||||
@@ -1090,6 +1208,7 @@ stat.minetier = Mine Tier
|
||||
stat.payloadcapacity = Payload Capacity
|
||||
stat.abilities = Abilities
|
||||
stat.canboost = Can Boost
|
||||
stat.boostingspeed = Boosting Speed
|
||||
stat.flying = Flying
|
||||
stat.ammouse = Ammo Use
|
||||
stat.ammocapacity = Ammo Capacity
|
||||
@@ -1120,7 +1239,7 @@ ability.armorplate.description = Reduces damage taken while shooting
|
||||
ability.shieldarc = Shield Arc
|
||||
ability.shieldarc.description = Projects a force shield in an arc that absorbs or deflects bullets, missiles and units
|
||||
ability.suppressionfield = Repair Suppression
|
||||
ability.suppressionfield.description = Stops nearby repair buildings
|
||||
ability.suppressionfield.description = Stops nearby repair buildings and build towers
|
||||
ability.energyfield = Energy Field
|
||||
ability.energyfield.description = Zaps nearby enemies
|
||||
ability.energyfield.healdescription = Zaps nearby enemies and heals allies
|
||||
@@ -1183,20 +1302,37 @@ bar.input = Input
|
||||
bar.output = Output
|
||||
bar.strength = [stat]{0}[lightgray]x strength
|
||||
bar.regenerationrate = [stat]{0}/sec[lightgray] regen rate
|
||||
bar.activationtimer = Activates in {0}
|
||||
bar.activated = Activated
|
||||
|
||||
units.processorcontrol = [lightgray]Processor Controlled
|
||||
|
||||
weapon.pointdefense = [stat]Point Defense
|
||||
|
||||
bullet.damage = [stat]{0}[lightgray] damage
|
||||
bullet.splashdamage = [stat]{0}[lightgray] area dmg ~ [stat]{1}[lightgray] tiles
|
||||
bullet.incendiary = [stat]incendiary
|
||||
bullet.homing = [stat]homing
|
||||
bullet.armorpierce = [stat]armor piercing
|
||||
bullet.armorweakness = [red]{0}x[lightgray] armor weakness
|
||||
bullet.partialarmorpierce = [stat]{0}%[lightgray] armor pierce
|
||||
bullet.antiarmor = [stat]{0}x[lightgray] anti-armor
|
||||
bullet.blockarmorweakness = [red]{0}x[lightgray] building armor weakness
|
||||
bullet.blockpartialarmorpierce = [stat]{0}%[lightgray] building armor pierce
|
||||
bullet.blockantiarmor = [stat]{0}x[lightgray] building anti-armor
|
||||
bullet.maxdamagefraction = [stat]{0}%[lightgray] damage limit
|
||||
bullet.suppression = [stat]{0}[lightgray] seconds of repair suppression ~ [stat]{1}[lightgray] tiles
|
||||
bullet.empradius = [stat]{0}[lightgray] tiles EMP radius
|
||||
bullet.empboost = [stat]{0}%[lightgray] overdrive ~ [stat]{1}[lightgray]
|
||||
bullet.empdamage = [stat]{0}%[lightgray] power damage
|
||||
bullet.empslowdown = [stat]{0}%[lightgray] enemy power overdrive ~ [stat]{1}[lightgray]
|
||||
bullet.empunitdamage = [stat]{0}%[lightgray] unit damage
|
||||
bullet.interval = [stat]{0}/sec[lightgray] interval bullets:
|
||||
bullet.frags = [stat]{0}x[lightgray] frag bullets:
|
||||
bullet.lightning = [stat]{0}x[lightgray] lightning ~ [stat]{1}[lightgray] damage
|
||||
bullet.lightninginterval = [stat]{0}[lightgray] tiles interval ~ [stat]{1}[lightgray] tiles length
|
||||
bullet.buildingdamage = [stat]{0}%[lightgray] building damage
|
||||
bullet.spawnBullets = [stat]{0}x[lightgray] spawned bullets:
|
||||
bullet.shielddamage = [stat]{0}%[lightgray] shield damage
|
||||
bullet.knockback = [stat]{0}[lightgray] knockback
|
||||
bullet.pierce = [stat]{0}x[lightgray] pierce
|
||||
@@ -1217,6 +1353,7 @@ unit.liquidsecond = liquid units/second
|
||||
unit.itemssecond = items/second
|
||||
unit.liquidunits = liquid units
|
||||
unit.powerunits = power units
|
||||
unit.powerequilibrium = power equilibrium
|
||||
unit.heatunits = heat units
|
||||
unit.degrees = degrees
|
||||
unit.seconds = seconds
|
||||
@@ -1234,6 +1371,7 @@ unit.billions = b
|
||||
unit.shots = shots
|
||||
unit.pershot = /shot
|
||||
unit.perleg = per leg
|
||||
unit.perside = per side
|
||||
category.purpose = Purpose
|
||||
category.general = General
|
||||
category.power = Power
|
||||
@@ -1250,7 +1388,6 @@ setting.shadows.name = Shadows
|
||||
setting.blockreplace.name = Automatic Block Suggestions
|
||||
setting.linear.name = Linear Filtering
|
||||
setting.hints.name = Hints
|
||||
setting.logichints.name = Logic Hints
|
||||
setting.backgroundpause.name = Pause In Background
|
||||
setting.buildautopause.name = Auto-Pause Building
|
||||
setting.doubletapmine.name = Double-Tap to Mine
|
||||
@@ -1260,6 +1397,8 @@ setting.modcrashdisable.name = Disable Mods On Startup Crash
|
||||
setting.animatedwater.name = Animated Surfaces
|
||||
setting.animatedshields.name = Animated Shields
|
||||
setting.playerindicators.name = Player Indicators
|
||||
setting.showpings.name = Show Pings
|
||||
setting.showotherbuildplans.name = Show Other Player's Build Plans
|
||||
setting.indicators.name = Enemy Indicators
|
||||
setting.autotarget.name = Auto-Target
|
||||
setting.keyboard.name = Mouse+Keyboard Controls (Experimental)
|
||||
@@ -1269,6 +1408,8 @@ setting.fpscap.none = None
|
||||
setting.fpscap.text = {0} FPS
|
||||
setting.uiscale.name = UI Scaling
|
||||
setting.uiscale.description = Restart required to apply changes.
|
||||
setting.uiEdgePadding.name = UI Edge Padding
|
||||
setting.uiEdgePadding.description = Adds padding to the edges of the UI. Useful for displays with rounded corners or notches.
|
||||
setting.swapdiagonal.name = Always Diagonal Placement
|
||||
setting.screenshake.name = Screen Shake
|
||||
setting.bloomintensity.name = Bloom Intensity
|
||||
@@ -1282,9 +1423,6 @@ setting.saveinterval.name = Save Interval
|
||||
setting.seconds = {0} seconds
|
||||
setting.milliseconds = {0} milliseconds
|
||||
setting.fullscreen.name = Fullscreen
|
||||
setting.borderlesswindow.name = Borderless Window
|
||||
setting.borderlesswindow.name.windows = Borderless Fullscreen
|
||||
setting.borderlesswindow.description = Restart may be required to apply changes.
|
||||
setting.fps.name = Show FPS & Ping
|
||||
setting.console.name = Enable Console
|
||||
setting.smoothcamera.name = Smooth Camera
|
||||
@@ -1303,7 +1441,6 @@ setting.ambientvol.name = Ambient Volume
|
||||
setting.mutemusic.name = Mute Music
|
||||
setting.sfxvol.name = SFX Volume
|
||||
setting.mutesound.name = Mute Sound
|
||||
setting.crashreport.name = Send Anonymous Crash Reports
|
||||
setting.communityservers.name = Fetch Community Server List
|
||||
setting.savecreate.name = Auto-Create Saves
|
||||
setting.steampublichost.name = Public Game Visibility
|
||||
@@ -1334,6 +1471,8 @@ category.command.name = Unit Command
|
||||
category.multiplayer.name = Multiplayer
|
||||
category.blocks.name = Block Select
|
||||
placement.blockselectkeys = \n[lightgray]Key: [{0},
|
||||
ping.text = Ping:
|
||||
keybind.ping.name = Ping Location
|
||||
keybind.respawn.name = Respawn
|
||||
keybind.control.name = Control Unit
|
||||
keybind.clear_building.name = Clear Building
|
||||
@@ -1357,13 +1496,14 @@ keybind.unit_stance_hold_fire.name = Unit Stance: Hold Fire
|
||||
keybind.unit_stance_pursue_target.name = Unit Stance: Pursue Target
|
||||
keybind.unit_stance_patrol.name = Unit Stance: Patrol
|
||||
keybind.unit_stance_ram.name = Unit Stance: Ram
|
||||
keybind.unit_stance_boost.name = Unit Stance: Boost
|
||||
keybind.unit_stance_hold_position.name = Unit Stance: Hold Position
|
||||
|
||||
keybind.unit_command_move.name = Unit Command: Move
|
||||
keybind.unit_command_repair.name = Unit Command: Repair
|
||||
keybind.unit_command_rebuild.name = Unit Command: Rebuild
|
||||
keybind.unit_command_assist.name = Unit Command: Assist
|
||||
keybind.unit_command_mine.name = Unit Command: Mine
|
||||
keybind.unit_command_boost.name = Unit Command: Boost
|
||||
keybind.unit_command_load_units.name = Unit Command: Load Units
|
||||
keybind.unit_command_load_blocks.name = Unit Command: Load Blocks
|
||||
keybind.unit_command_unload_payload.name = Unit Command: Unload Payload
|
||||
@@ -1444,6 +1584,8 @@ rules.hidebannedblocks = Hide Banned Blocks
|
||||
rules.infiniteresources = Infinite Resources
|
||||
rules.fillitems = Fill Core With Items
|
||||
rules.onlydepositcore = Only Allow Core Depositing
|
||||
rules.coreunloaders = Allow Core Unloaders
|
||||
rules.coreunloaders.info = When enabled, Serpulo unloaders can take items from the core.\nDoes not affect Erekir unloaders.
|
||||
rules.derelictrepair = Allow Derelict Block Repair
|
||||
rules.reactorexplosions = Reactor Explosions
|
||||
rules.coreincinerates = Core Incinerates Overflow
|
||||
@@ -1474,15 +1616,24 @@ rules.cleanupdeadteams = Clean Up Defeated Team Buildings (PvP)
|
||||
rules.corecapture = Capture Core On Destruction
|
||||
rules.polygoncoreprotection = Polygonal Core Protection
|
||||
rules.placerangecheck = Placement Range Check
|
||||
rules.protectcores = Protect Cores
|
||||
rules.protectcores.info = When disabled, the core no-build radius won't affect this team.\nPlayers won't be assigned to unprotected teams.
|
||||
rules.checkplacement = Check Placement
|
||||
rules.checkplacement.info = When disabled, buildings of this team are ignored in placement range checks.
|
||||
rules.enemyCheat = Infinite Enemy Team Resources
|
||||
rules.blockhealthmultiplier = Block Health Multiplier
|
||||
rules.blockdamagemultiplier = Block Damage Multiplier
|
||||
rules.unitfactoryactivation = Unit Factory Activation Delay
|
||||
rules.unitfactoryactivation.objective = Unit Factories Activating: {0}
|
||||
rules.unitbuildspeedmultiplier = Unit Production Speed Multiplier
|
||||
rules.unitcostmultiplier = Unit Cost Multiplier
|
||||
rules.unithealthmultiplier = Unit Health Multiplier
|
||||
rules.unitdamagemultiplier = Unit Damage Multiplier
|
||||
rules.unitcrashdamagemultiplier = Unit Crash Damage Multiplier
|
||||
rules.unitminespeedmultiplier = Unit Mine Speed Multiplier
|
||||
rules.logicunitcontrol = Logic Unit Control
|
||||
rules.logicunitbuild = Logic Unit Building
|
||||
rules.logicunitdeconstruct = Logic Unit Deconstruction
|
||||
rules.solarmultiplier = Solar Power Multiplier
|
||||
rules.unitcapvariable = Cores Contribute To Unit Cap
|
||||
rules.unitpayloadsexplode = Carried Payloads Explode With The Unit
|
||||
@@ -1515,8 +1666,9 @@ rules.invasions = Enemy Sector Invasions
|
||||
rules.legacylaunchpads = Legacy Launch Pad Mechanics
|
||||
rules.legacylaunchpads.info = Allows using launch pads without landing pads, as in 7.0.
|
||||
landingpad.legacy.disabled = [scarlet]\ue815 Disabled[lightgray] (Legacy Launch Pads enabled)
|
||||
rules.showspawns = Show Enemy Spawns
|
||||
rules.hidespawns = Hide Enemy Spawns
|
||||
rules.randomwaveai = Unpredictable Wave AI
|
||||
rules.pauseDisabled = Disable Pausing
|
||||
rules.fire = Fire
|
||||
rules.anyenv = <Any>
|
||||
rules.explosions = Block/Unit Explosion Damage
|
||||
@@ -1530,13 +1682,27 @@ rules.randomwaveai.info = Makes units spawned in waves target random structures
|
||||
rules.placerangecheck.info = Prevents players from placing anything near enemy buildings. When trying to place a turret, the range is increased, so the turret will not be able to reach the enemy.
|
||||
rules.onlydepositcore.info = Prevents units from depositing items into any buildings except cores.
|
||||
|
||||
content.item.name = Items
|
||||
content.liquid.name = Fluids
|
||||
content.unit.name = Units
|
||||
content.block.name = Blocks
|
||||
content.status.name = Status Effects
|
||||
content.sector.name = Sectors
|
||||
content.team.name = Factions
|
||||
database-category.item = Items
|
||||
database-category.liquid = Fluids
|
||||
database-category.unit = Units
|
||||
database-category.block = Blocks
|
||||
database-category.status = Status Effects
|
||||
database-category.sector = Sectors
|
||||
database-category.team = Factions
|
||||
|
||||
database-tag.turret = Turret
|
||||
database-tag.production = Production
|
||||
database-tag.distribution = Distribution
|
||||
database-tag.liquid = Liquid
|
||||
database-tag.power = Power
|
||||
database-tag.defense = Defense
|
||||
database-tag.crafting = Crafting
|
||||
database-tag.units = Units
|
||||
database-tag.effect = Utility
|
||||
database-tag.logic = Logic
|
||||
database-tag.unit-air = Air
|
||||
database-tag.unit-naval = Naval
|
||||
database-tag.unit-ground = Ground
|
||||
|
||||
wallore = (Wall)
|
||||
|
||||
@@ -1982,8 +2148,8 @@ block.radar.name = Radar
|
||||
block.build-tower.name = Build Tower
|
||||
block.regen-projector.name = Regen Projector
|
||||
block.shockwave-tower.name = Shockwave Tower
|
||||
block.shield-projector.name = Shield Projector
|
||||
block.large-shield-projector.name = Large Shield Projector
|
||||
block.shield-projector.name = Barrier Projector
|
||||
block.large-shield-projector.name = Large Barrier Projector
|
||||
block.armored-duct.name = Armored Duct
|
||||
block.overflow-duct.name = Overflow Duct
|
||||
block.underflow-duct.name = Underflow Duct
|
||||
@@ -2024,6 +2190,9 @@ block.disperse.name = Disperse
|
||||
block.afflict.name = Afflict
|
||||
block.lustre.name = Lustre
|
||||
block.scathe.name = Scathe
|
||||
block.scathe.carbide.info = Travels significantly faster.\nModerate damage at any range.
|
||||
block.scathe.surge-alloy.info = Splits into micro missiles.\nHeavy damage at close distance.
|
||||
block.scathe.phase-fabric.info = Equipped with a force field.\nLow damage, largest radius.
|
||||
block.tank-refabricator.name = Tank Refabricator
|
||||
block.mech-refabricator.name = Mech Refabricator
|
||||
block.ship-refabricator.name = Ship Refabricator
|
||||
@@ -2035,6 +2204,7 @@ block.reinforced-payload-router.name = Reinforced Payload Router
|
||||
block.payload-mass-driver.name = Payload Mass Driver
|
||||
block.small-deconstructor.name = Deconstructor
|
||||
block.canvas.name = Canvas
|
||||
block.large-canvas.name = Large Canvas
|
||||
block.world-processor.name = World Processor
|
||||
block.world-cell.name = World Cell
|
||||
block.tank-fabricator.name = Tank Fabricator
|
||||
@@ -2097,9 +2267,9 @@ hint.payloadPickup.mobile = [accent]Tap and hold[] a small block or unit to pick
|
||||
hint.payloadDrop = Press [accent]][] to drop a payload.
|
||||
hint.payloadDrop.mobile = [accent]Tap and hold[] an empty location to drop a payload there.
|
||||
hint.waveFire = [accent]Wave[] turrets with water as ammunition will automatically put out nearby fires.
|
||||
hint.generator = :combustion-generator: [accent]Combustion Generators[] burn coal and transmit power to adjacent blocks.\n\nPower transmission range can be extended with :power-node: [accent]Power Nodes[].
|
||||
hint.guardian = [accent]Guardian[] units are armored. Weak ammo such as [accent]Copper[] and [accent]Lead[] is [scarlet]not effective[].\n\nUse higher tier turrets or :graphite: [accent]Graphite[] :duo:Duo/:salvo:Salvo ammunition to take Guardians down.
|
||||
hint.coreUpgrade = Cores can be upgraded by [accent]placing higher-tier cores over them[].\n\nPlace a :core-foundation: [accent]Foundation[] core over the :core-shard: [accent]Shard[] core. Make sure it is free from nearby obstructions.
|
||||
hint.serpuloCoreZone = Additional :core-shard: [accent]Cores[] may be constructed on :core-zone: [accent]Core Zone[] tiles.
|
||||
hint.cannotUpgrade = A [red]:tree:[] icon over a payload unit indicates that its upgraded version is not researched yet.\n\nUnit upgrades must be researched in the [accent]:tree: tech tree[] before they can be produced in reconstructors.
|
||||
hint.presetLaunch = Gray [accent]landing zone sectors[], such as [accent]Frozen Forest[], can be launched to from anywhere. They do not require capture of nearby territory.\n\n[accent]Numbered sectors[], such as this one, are [accent]optional[].
|
||||
hint.presetDifficulty = This sector has a [scarlet]high enemy threat level[].\nLaunching to such sectors is [accent]not recommended[] without proper technology and preparation.
|
||||
@@ -2128,6 +2298,44 @@ gz.zone2 = Anything built in the radius is destroyed when a wave starts.
|
||||
gz.zone3 = A wave will begin now.\nGet ready.
|
||||
gz.finish = Build more turrets, mine more resources,\nand defend against all the waves to [accent]capture the sector[].
|
||||
|
||||
ff.coal = Use :mechanical-drill: [accent]Mechanical Drills[] to mine :ore-coal: [accent]coal[].
|
||||
ff.graphitepress = :tree: Research and place a :graphite-press: [accent]Graphite Press[].
|
||||
ff.craft = Move :coal: coal into the :graphite-press: [accent]Graphite Press[].\nIt will output :graphite: graphite to all nearby conveyors.\nMove the output :graphite: graphite from the :graphite-press: [accent]Graphite Press[] into the core.
|
||||
ff.generator = :coal: Coal can also be used as fuel in :combustion-generator: [accent]Combustion Generators[].\nResearch and place a :combustion-generator: [accent]Combustion Generator[].
|
||||
ff.coalpower = Input :coal: coal into the generator to produce [accent]:power: power[].
|
||||
ff.coalpower.objective = :combustion-generator: Produce Power
|
||||
ff.node = :power-node: [accent]Power Nodes[] transmit power to nearby blocks in range.\nResearch and place a :power-node: [accent]Power Node[] close to the generator.
|
||||
ff.battery = :battery: [accent]Batteries[] store power.\nResearch and place a :battery: [accent]Battery[] close to the node.
|
||||
ff.arc = :arc: [accent]Arc[] turrets require power to function. Research and place an :arc: [accent]Arc[] turret near a power node.
|
||||
|
||||
fungalpass.tutorial1 = Use [accent]units[] to defend buildings and attack the enemy.\nResearch and place a :ground-factory: [accent]ground factory[].
|
||||
fungalpass.tutorial2 = Select :dagger: [accent]Dagger[] units in the factory.\nProduce 3 units.
|
||||
|
||||
frontier.tutorial1 = The :additive-reconstructor: [accent]Additive Reconstructor[]\nupgrades tier 1 units to tier 2\nusing :silicon: silicon and :graphite: graphite.\n\n[accent]Research and reconstruct\na []:dagger:[accent] dagger to a []:mace:[accent] mace.
|
||||
frontier.tutorial2 = Enemy waves send [accent]infinitely[] until all enemy cores are [unlaunched]destroyed.
|
||||
frontier.tutorial3 = [accent]Attack the enemy base fast to prevent waves from getting too high[].
|
||||
|
||||
atolls.destroy1 = Destroy the 2 enemy [accent]foundation cores[] first.\n[accent]Gain access to thorium[].
|
||||
atolls.mega1 = Enter [accent]command mode[] and select the :mega:[accent]Mega[] units.
|
||||
atolls.mega2 = Select the [accent]Load Units[] command to have Mega units to pick up ground units.
|
||||
atolls.mega3 = Move the Mega units [accent]above[] ground units to load them in.
|
||||
atolls.mega4 = [accent]Drop ground units here to attack.
|
||||
atolls.mega5 = Select the [accent]Unload Payload[] command to have Mega units drop their carried units.
|
||||
atolls.mega6 = Units will be [accent]automatically dropped[] while the Unload Payload command is selected.
|
||||
atolls.mega7 = Mega units [accent]will not[] drop ground units while they are above walls or deep water.
|
||||
atolls.mega8 = [accent]Drop naval units here to attack.[]
|
||||
atolls.attack1 = 1: Drop ground units here to attack from this location.
|
||||
atolls.attack2 = 2: Alternatively, drop naval units here to launch a surprise attack.
|
||||
atolls.carry1 = Carrying ground units requires :mega:[accent]Mega[] units.
|
||||
atolls.carry2 = 1: Command Mega units to [accent]move over[] the ground units.
|
||||
atolls.carry3 = 2: Select the [accent]Load Units[] command in order to pick up the ground units with the Mega units.
|
||||
atolls.carry4 = 3: Command and move the Mega carriers [accent]loaded with units[].
|
||||
atolls.carry5 = 4: Select the [accent]'Unload Payload'[] command in order for the Mega units to drop the ground units.
|
||||
atolls.carry6 = These steps can be reviewed [accent]here[].
|
||||
atolls.carry7 = Follow these instructions to airdrop more units near the enemy base.
|
||||
atolls.noairunit = This base is too well-fortified to destroy with air units.
|
||||
atolls.2strategies = There are two strategies to destroy this base.
|
||||
|
||||
onset.mine = Click to mine :beryllium: [accent]beryllium[] from walls.\n\nUse [accent][[WASD] to move.
|
||||
onset.mine.mobile = Tap to mine :beryllium: [accent]beryllium[] from walls.
|
||||
onset.research = Open the :tree: tech tree.\nResearch, then place a :turbine-condenser: [accent]turbine condenser[] on the vent.\nThis will generate [accent]power[].
|
||||
@@ -2156,7 +2364,7 @@ aegis.tungsten = Tungsten can be mined using an [accent]impact drill[].\nThis st
|
||||
|
||||
split.pickup = Some blocks can be picked up by the core unit.\nPick up this [accent]container[] and place it onto the [accent]payload loader[].\n(Default keys are [[ and ] to pick up and drop)
|
||||
split.pickup.mobile = Some blocks can be picked up by the core unit.\nPick up this [accent]container[] and place it onto the [accent]payload loader[].\n(To pick up or drop something, long-press it.)
|
||||
split.acquire = You must acquire some tungsten to build units.
|
||||
split.acquire = Acquire some tungsten to build units.
|
||||
split.build = Units must be transported to the other side of the wall.\nPlace two [accent]Payload Mass Drivers[], one on each side of the wall.\nSet up the link by pressing one of them, then selecting the other.
|
||||
split.container = Similar to the container, units can also be transported using a [accent]Payload Mass Driver[].\nPlace a unit fabricator adjacent to a mass driver to load them, then send them across the wall to attack the enemy base.
|
||||
|
||||
@@ -2456,6 +2664,7 @@ block.unit-repair-tower.description = Repairs all units in its vicinity. Require
|
||||
block.radar.description = Gradually uncovers terrain and enemy units in a large radius. Requires power.
|
||||
block.shockwave-tower.description = Damages and destroys enemy projectiles in a radius. Requires cyanogen.
|
||||
block.canvas.description = Displays a simple image with a pre-defined palette. Editable.
|
||||
block.large-canvas.description = Displays a simple image with a pre-defined palette. Editable.
|
||||
|
||||
unit.dagger.description = Fires standard bullets at enemy targets.
|
||||
unit.mace.description = Fires streams of flame at enemy targets.
|
||||
@@ -2486,7 +2695,7 @@ unit.risso.description = Fires a barrage of missiles and bullets at enemy target
|
||||
unit.minke.description = Fires shells and standard bullets at enemy ground targets.
|
||||
unit.bryde.description = Fires long-range artillery shells and missiles at enemy targets.
|
||||
unit.sei.description = Fires a barrage of missiles and armor-piercing bullets at enemy targets.
|
||||
unit.omura.description = Fires a long-range piercing railgun bolt at enemy targets. Constructs flare units.
|
||||
unit.omura.description = Fires a long-range piercing railgun bolt at enemy targets.
|
||||
unit.alpha.description = Defends the Shard core from enemies. Builds structures.
|
||||
unit.beta.description = Defends the Foundation core from enemies. Builds structures.
|
||||
unit.gamma.description = Defends the Nucleus core from enemies. Builds structures.
|
||||
@@ -2499,9 +2708,9 @@ unit.navanax.description = Fires explosive EMP projectiles, dealing significant
|
||||
#Erekir
|
||||
unit.stell.description = Fires standard bullets at enemy targets.
|
||||
unit.locus.description = Fires alternating bullets at enemy targets.
|
||||
unit.precept.description = Fires piercing cluster bullets at enemy targets. Less affected by harmful terrain.
|
||||
unit.vanquish.description = Fires large piercing splitting bullets at enemy targets. Less affected by harmful terrain.
|
||||
unit.conquer.description = Fires large piercing cascades of bullets at enemy targets. Less affected by harmful terrain.
|
||||
unit.precept.description = Fires piercing cluster bullets at enemy targets. Less affected by liquid drag
|
||||
unit.vanquish.description = Fires large piercing splitting bullets at enemy targets. Less affected by liquid drag.
|
||||
unit.conquer.description = Fires large piercing cascades of bullets at enemy targets. Significantly less affected by liquid drag.
|
||||
unit.merui.description = Fires long-range artillery at enemy ground targets. Can step over most terrain.
|
||||
unit.cleroi.description = Fires dual shells at enemy targets. Targets enemy projectiles with point defense turrets. Can step over most terrain.
|
||||
unit.anthicus.description = Fires long-range homing missiles at enemy targets. Can step over most terrain.
|
||||
@@ -2530,6 +2739,7 @@ lst.radar = Locate units around a building with range.
|
||||
lst.sensor = Get data from a building or unit.
|
||||
lst.set = Set a variable.
|
||||
lst.operation = Perform an operation on 1-2 variables.
|
||||
lst.select = Conditionally set a variable to one of two values.
|
||||
lst.end = Jump to the top of the instruction stack.
|
||||
lst.wait = Wait a certain number of seconds.
|
||||
lst.stop = Halt execution of this processor.
|
||||
@@ -2542,6 +2752,7 @@ lst.unitlocate = Locate a specific type of position/building anywhere on the map
|
||||
lst.getblock = Get tile data at any location.
|
||||
lst.setblock = Set tile data at any location.
|
||||
lst.spawnunit = Spawn unit at a location.
|
||||
lst.spawnbullet = Spawns a bullet at a location.
|
||||
lst.applystatus = Apply or clear a status effect from a unit.
|
||||
lst.weathersense = Check if a type of weather is active.
|
||||
lst.weatherset = Set the current state of a type of weather.
|
||||
@@ -2560,9 +2771,11 @@ lst.setprop = Sets a property of a unit or building.
|
||||
lst.effect = Create a particle effect.
|
||||
lst.sync = Sync a variable across the network.\nLimited to 20 times a second per variable.
|
||||
lst.playsound = Plays a sound.\nVolume and pan can be a global value, or calculated based on position.
|
||||
lst.playmusic = Plays a music track by name, e.g. [accent]\"game1\"[].\nIf [accent]interrupt[] is true, the previously playing music will be stopped.\nPlaying with null music and interrupt set to true will stop the current track.\nNote that music from data patches must be prefixed with [accent]dp-[].
|
||||
lst.makemarker = Create a new logic marker in the world.\nAn ID to identify this marker must be provided.\nMarkers currently limited to 20,000 per world.
|
||||
lst.setmarker = Set a property for a marker.\nThe ID used must be the same as in the Make Marker instruction.\n[accent]null []values are ignored.
|
||||
lst.localeprint = Add map locale property value to the text buffer.\nTo set map locale bundles in map editor, check [accent]Map Info > Locale Bundles[].\nIf client is a mobile device, tries to print a property ending in ".mobile" first.
|
||||
lst.query = Queries units/buildings in a specified area.\nResults are outputted into [accent]@queries[].\nResults can be read from [accent]@queries[] using the [accent]Read[] instruction and an index.\nLength of [accent]@queries[] can be sensed using [accent]@size[] as a parameter.
|
||||
|
||||
lglobal.false = 0
|
||||
lglobal.true = 1
|
||||
@@ -2607,8 +2820,6 @@ lglobal.@clientName = Player name of client running the code
|
||||
lglobal.@clientTeam = Team ID of client running the code
|
||||
lglobal.@clientMobile = True if the client running the code is on mobile, false otherwise
|
||||
|
||||
logic.nounitbuild = [red]Unit building logic is not allowed here.
|
||||
|
||||
lenum.type = Type of building/unit.\ne.g. for any router, this will return [accent]@router[].\nNot a string.
|
||||
lenum.shoot = Shoot at a position.
|
||||
lenum.shootp = Shoot at a unit/building with velocity prediction.
|
||||
@@ -2629,6 +2840,7 @@ laccess.displaywidth = Width of a display block in pixels.
|
||||
laccess.displayheight = Height of a display block in pixels.
|
||||
laccess.buffersize = For messages: Length of the contents.\nFor displays: Number of unprocessed graphics commands.
|
||||
laccess.operations = Number of operations performed on the block.\nFor displays, returns the number of drawflush operations.
|
||||
laccess.maxunits = Maximum units that a team can have.\nCan only be sensed from cores.
|
||||
|
||||
lcategory.unknown = Unknown
|
||||
lcategory.unknown.description = Uncategorized instructions.
|
||||
@@ -2655,7 +2867,7 @@ graphicstype.linerect = Draw a rectangle outline.
|
||||
graphicstype.poly = Fill a regular polygon.
|
||||
graphicstype.linepoly = Draw a regular polygon outline.
|
||||
graphicstype.triangle = Fill a triangle.
|
||||
graphicstype.image = Draw an image of some content.\nex: [accent]@router[] or [accent]@dagger[].
|
||||
graphicstype.image = Draw an image of some content or copies another display.\nex content: [accent]@router[], [accent]@dagger[] or a display [accent]display1[].
|
||||
graphicstype.print = Draws text from the print buffer.\nOnly ASCII characters are allowed.\nClears the print buffer.
|
||||
|
||||
lenum.always = Always true.
|
||||
@@ -2803,4 +3015,4 @@ lenum.ambientlight = Ambient light color. Used when lighting is enabled.
|
||||
lenum.solarmultiplier = Multiplies power output of solar panels.
|
||||
lenum.dragmultiplier = Environment drag multiplier.
|
||||
lenum.ban = Blocks or units that cannot be placed or built.
|
||||
lenum.unban = Unban a unit or block.
|
||||
lenum.unban = Unban a unit or block.
|
||||
|
||||