Compare commits

..

475 Commits
v84 ... v95

Author SHA1 Message Date
ねらひかだ
5aa574bc71 Better Japanese Translations (#686)
* Sync with original bundle

* ja translation part-1

* ja translation part-2

* Done tutorial translation

* Almost complete...

* zone description is difficult...

* OMG!!! IT IS NOT SPACE!!!

* a little change
2019-09-24 20:44:40 -04:00
firda
99c0291b0e Czech tranlastion corrections - bundle_cs (#669) 2019-09-24 20:35:50 -04:00
laohuaji233
89c195d96b Update bundle_zh_CN.properties[finished] (#674)
* Update bundle_zh_CN.properties

* Update bundle_zh_CN.properties

* Update bundle_zh_CN.properties

* Update bundle_zh_CN.properties

* Update bundle_zh_CN.properties

* Update bundle_zh_CN.properties

* Update bundle_zh_CN.properties
2019-09-24 20:20:28 -04:00
nightmare3832
86f3fffa91 translations (#677) 2019-09-24 19:49:19 -04:00
PlayerBrasil13
e191362c4f Update bundle_pt_BR.properties (#678)
* Update bundle_pt_BR.properties

* Update bundle_pt_BR.properties
2019-09-24 19:49:00 -04:00
Prosta4okua
8c0cff0c65 Steam (╯°□°)╯︵ ┻━┻ (#683)
* Fixes

* Капіталізація це зло.

* Update bundle_ru.properties

* Update bundle_uk_UA.properties

* .-.

* Gm

Description

* Oof

* ЈҮУКЕНГШҺЗХҸЖДЛОРПАВЫӘЧСМИТҒБӨ

* dada

* Translate new descriptions

* й

* Ukrainian finished. Fixed some errors.

* Translated everything. Maybe.

* /

* 1

* Added tutorial. Thank to Slava0135 and ymomfe.

* 1

* 1

* WATER

WATER

* [[]]

* 1

* gmmm

/-/-/-/

* idk what i changed

* Обновление и корректировка строк с 1 по 90

* router

* Обновление и корректировка строк с 87 по 252

Обновление и корректировка строк с 87 по 252, а так же правка предыдущих.
- 35 строку лучше привести в соответствии с оригинальным текстом, без дополнений и пояснений.
- 103 строка не переводится в соответствии с https://semver.org/lang/ru/ , хотя это не жёсткое правило, поскольку не влияет непосредственно на алгоритм работы с версиями.
- 187 Предлагаю эту строку перевести как 'Настройки карты', не смотря на оригинальный текст (соответственно и 230, 231).

* router

* Обновление и корректировка строк с 253 по 321 - "WorldEditor Update"

Обновление и корректировка строк с 253 по 321, а так же предыдущих.
- Разобраться с 297 строкой ("filter.option.percentile").
- Разобраться с местами применения 322 строки.

* озарение в переводе ;D

* Fixed "В"

* Unfinished Ukrainian language.

* Small fixes.

* Обновление и корректировка строк с 322 по 377 - "Campaign Update"

Обновление и корректировка строк с 322 по 377, а так же предыдущих.
- По прежнему нужно разобраться с 297 строкой ("filter.option.percentile"). Добавил метку для отличия функционала. Проверю и уберу к следующей сборке.

* Мелкие правки

* From additional improvements.

* hmmm

* hm

* 123

* Небольшие правки "КАК СОЗДАТЬ СЕРВЕР С ДРУГОМ Update"

* Рефакторинг и добавление новых строк с 1 по 136

- Приведение положения строк в бандле в соответствии с референсным файлом
- Добавление и перевод новых (отсутствующих) строк из референсного файла

* Рефакторинг и добавление новых строк с 137 по 380

- Приведение положения строк в бандле в соответствии с референсным файлом
- Добавление и перевод новых (отсутствующих) строк из референсного файла
- Мелкие правки

* Second pack of changes by Vanguard.

* ru_ri

* Небольшие правки

* 313131

* Рефакторинг, корректировка и добавление новых строк с 381 по 600

Рефакторинг, корректировка и добавление новых строк с 381 по 600
- Приведение положения строк в бандле в соответствии с референсным файлом
- Добавление и перевод новых (отсутствующих) строк из референсного файла
- Корректировка существующих строк

* Перші сто рядків українського перекладу відредаговано.

* 121

* 212122

* правки в редакторе

* ещё правки в редакторе

* мелкие правки

* правка

* Рефакторинг, корректировка и добавление новых строк с 601 по 800

Рефакторинг, корректировка и добавление новых строк с 601 по 800
- Приведение положения строк в бандле в соответствии с референсным файлом
- Добавление и перевод новых (отсутствующих) строк из референсного файла
- Корректировка существующих строк

* Рефакторинг, корректировка и добавление новых строк с 801 по 912

Рефакторинг, корректировка и добавление новых строк с 801 по 912
- Приведение положения строк в бандле в соответствии с референсным файлом
- Добавление и перевод новых (отсутствующих) строк из референсного файла
- Корректировка существующих строк

* мелкие правки

* Виправив декілька помилок

* 3123

* Мелкие правки и дополнения

* Перевод новых строк

* niiiice

* oh no

* oh no 😱

* 😱 oh no 😱

* just another yet translator

* Some contributors

The changes made by **Vanguard** were commited by @Prosta4okua and @Remint32 (Felix
Corvus).
Therefore he is not present in authors of commits on github.

* Мелкие правки из TODO

* Новые строки и новые правки

DAFAK?
-> 3f293190cf (diff-daade3141498d8856d75ec34b88bbb19)

* Добавление строк блока с сообщением

* Корректировка правок

* Правки правок

* Правки 🚚

* Крамниця
2019-09-24 19:47:35 -04:00
T1NT4
db31238b00 Update bundle_pt_BR.properties (#687) 2019-09-24 19:45:01 -04:00
Maxwelllondon92
c18b730d7c Update Italian translations (#696)
* Update bundle_it.properties

Minor translation corrections and mistypes.
Fixed doubled name for lancer tower (had the same name as wave tower)
Changed infinite source and void block translations (now translate as "Infinite Source (item/liquid/energy)" and "Bin (item/energy)".
Change force projector translation. Now translates as "Force field generator".
Changed Launch pad name (now translate as space elevator and advanced space elevator)
Changed spore pod name (translation was "spore platform")
Changed mech/ship pads translation (translation was "block of {x} mech/ship")

* Update bundle_it.properties

* Update bundle_it.properties

* Update bundle_it.properties

* Update bundle_it.properties

* Update bundle_it.properties

* Update bundle_it.properties

* Update bundle_it.properties
2019-09-24 19:44:44 -04:00
itskatt
7ad85f6ffb Update the French translation (#697)
* translate newest additions

* few changes + correct mistake

* merge

* translate armored conveyors
2019-09-24 19:44:27 -04:00
Markus Kollotzek
45a79624b1 Provide updated translations for German tutorial (#703)
* Provide German translation for the tutorial. (#640)

* Apply improvements to German translation #641

* Fix typos in German translation
2019-09-24 19:43:29 -04:00
Anuken
65dde8bc97 Merge remote-tracking branch 'origin/master' 2019-09-24 19:16:18 -04:00
Anuken
83dce4d8d2 Bugfixes 2019-09-24 19:16:12 -04:00
Anuken
6680326392 Update TRANSLATING.md 2019-09-24 17:56:23 -04:00
Anuken
cc222034cb Update TRANSLATING.md 2019-09-24 17:56:12 -04:00
Anuken
5b0250ee74 Merge remote-tracking branch 'origin/master' 2019-09-24 17:50:16 -04:00
Anuken
eb52f3b902 Added steam metadata 2019-09-24 17:49:49 -04:00
Anuken
9add64ae8d Update feature_request.md 2019-09-24 17:35:50 -04:00
Anuken
20c5aadefe Update feature_request.md 2019-09-24 17:35:38 -04:00
Anuken
34896a805e Update bug_report.md 2019-09-24 17:35:10 -04:00
Letter N
722b488795 Adds templates (#701)
* Create feature_request.md

* Create bug_report.md
2019-09-24 17:34:02 -04:00
Anuken
ecd73dcc2c Various bugfixes / Added new blocks to tech tree 2019-09-24 17:02:34 -04:00
Anuken
b6e97c4261 Added armored conveyors 2019-09-22 15:12:15 -04:00
Anuken
a2750c8aff Default linear filtering on desktop 2019-09-22 12:35:53 -04:00
Anuken
2c0372f680 Power graph capacity display 2019-09-22 11:38:13 -04:00
Anuken
2dceb8927c Votekick after being offline / Votekick button 2019-09-22 11:28:32 -04:00
Anuken
e5cf2161d4 spaghetti eradicated 2019-09-22 01:37:50 -04:00
Anuken
b2bae64215 extreme confusion 2019-09-22 00:01:48 -04:00
Anuken
552dc254da spgashfetiti 2019-09-21 23:41:56 -04:00
Anuken
dc51afdc60 Fixed sprites 2019-09-21 20:24:07 -04:00
Anuken
3f293190cf Merge branch 'master' of https://github.com/Anuken/Mindustry into messages
# Conflicts:
#	core/assets/sprites/block_colors.png
#	core/assets/sprites/sprites.atlas
#	core/assets/sprites/sprites.png
#	core/assets/sprites/sprites2.png
#	core/assets/sprites/sprites5.png
2019-09-21 18:59:49 -04:00
Synray
7f299869c5 Add ability to rotate each block in a line (#688)
* Add ability to rotate each block in a line

* New behavior only when placing straight lines

* Code style
2019-09-21 18:03:05 -04:00
Anuken
c45805e703 no 2019-09-21 17:51:44 -04:00
Anuken
d062d8081a Bugfixes 2019-09-21 16:44:47 -04:00
Anuken
5955ecefd3 Bugfixes 2019-09-21 15:54:34 -04:00
Anuken
0d25d83651 Better Android keyboard support 2019-09-21 15:35:59 -04:00
Anuken
1957b6aa12 Removed unused rally point block 2019-09-21 13:06:09 -04:00
Anuken
4fa173f0f5 Don't auto-increment build version 2019-09-21 11:04:35 -04:00
Anuken
fed3bcd79d Cleanup 2019-09-20 23:21:43 -04:00
Anuken
dda1f18f67 Unit enemy spawnpoint camping 2019-09-20 23:09:11 -04:00
Anuken
025386af53 New pathfinding implementation on separate thread 2019-09-20 22:01:27 -04:00
Anuken
bd1ea41c0d Merge remote-tracking branch 'origin/master' 2019-09-19 23:46:34 -04:00
Anuken
5d729c1e8d Bugfixes 2019-09-19 23:46:27 -04:00
Anuken
1fac4c59a3 Merge remote-tracking branch 'origin/master'
# Conflicts:
#	core/src/io/anuke/mindustry/editor/MapEditorDialog.java
2019-09-19 23:00:42 -04:00
Anuken
0e9296913c Fixed iOS build issues 2019-09-19 22:59:44 -04:00
Anuken
50d379d94d Merge remote-tracking branch 'origin/master' 2019-09-19 19:02:05 -04:00
Anuken
d6a4149175 Testing iOS file chooser 2019-09-19 19:01:48 -04:00
Anuken
5a0669d437 SAF is terrible 2019-09-18 19:24:49 -04:00
Anuken
0d29d94800 Bugfixes 2019-09-18 15:18:59 -04:00
Anuken
1e667946b3 Bugfixes 2019-09-18 12:46:11 -04:00
Anuken
c6a4bf69ee Fixed turret cooling 2019-09-18 08:49:48 -04:00
Anuken
5d0cfc3599 Workshop tweaks 2019-09-17 22:39:58 -04:00
Anuken
2424afa1fb Workshop implementation progress 2019-09-17 21:55:57 -04:00
Anuken
69944a2b63 Crash fixes 2019-09-17 19:29:38 -04:00
Anuken
0ceb58a105 Bugfixes 2019-09-17 19:25:37 -04:00
Anuken
5e8da856e7 Conclusively fixed status effect null issue 2019-09-17 18:54:30 -04:00
Anuken
ee412e1994 passbackback 2019-09-17 17:39:20 -04:00
Anuken
02736524bd Update Tutorial.java 2019-09-17 12:27:18 -04:00
Anuken
c357b97b3b Update Control.java 2019-09-17 11:00:57 -04:00
Anuken
dbe7251c6b Update Statuses.java 2019-09-17 10:59:40 -04:00
Anuken
7ae90f655c Merge remote-tracking branch 'origin/master' 2019-09-16 23:25:14 -04:00
Anuken
669ce6dfbb launch pad fix 2019-09-16 23:25:09 -04:00
David Held
4dc55e5594 Fixes bug which let phase conveyor operate with any non-zero power; now requires full power to work (#672)
* Fixes bug which let phase conveyor operate with any non-zero power; now requires full power to work

* Fixed normal bridge, deprecated method
2019-09-16 19:00:06 -04:00
Anuken
4b824f7a4c Crash fixes 2019-09-16 17:26:39 -04:00
Anuken
3435132e87 Status nullcheck 2019-09-16 08:38:49 -04:00
Anuken
d49b15b2a0 Fixed some things 2019-09-16 08:24:10 -04:00
Anuken
0c59553b3d Fixed dialog padding 2019-09-15 21:57:19 -04:00
Anuken
4a50192937 Docs 2019-09-15 21:30:42 -04:00
Anuken
f65ab00250 Merge remote-tracking branch 'origin/master' 2019-09-15 21:03:45 -04:00
Anuken
f71c3af2e1 Plugin config file creation 2019-09-15 21:03:41 -04:00
JopoJP
77fb9e3d3e Fixed translation (#627)
The translation stated that storage is combined if placed beside each other but that isn't true.
2019-09-15 20:40:34 -04:00
osoitz
c1d6674797 Create bundle_eu.properties (#629)
Basque translation
2019-09-15 20:40:20 -04:00
itskatt
659aaba0b9 Update the French translation (#631)
* sync bundle and translate newest additions

* translate a few things

* Respect Capitalisaton & further the translation effort.

* Apply suggestions from code review

Apply review.

Co-Authored-By: itskatt <48765398+itskatt@users.noreply.github.com>

* Apply suggestions from code review

Revert changes to English version

Co-Authored-By: itskatt <48765398+itskatt@users.noreply.github.com>

* Add amrsoll to the contributors

* Update bundle_fr.properties.

* Add message.

* Sync with bundle.properties

* sync

* Translate newest additions
2019-09-15 20:39:59 -04:00
DeltaRays
a3816f6355 Completed the Italian (it) translation (#632)
Completed the Italian (it) translation, edited some partially incorrect translations (thanks Militare11). If you find any more incorrect translations make sure to tell us in the translations channel 😉
2019-09-15 20:39:50 -04:00
laohuaji233
4829f040c2 Update bundle_zh_CN.properties (#642)
* Update bundle_zh_CN.properties

* Update bundle_zh_CN.properties

* Update bundle_zh_CN.properties
2019-09-15 20:37:55 -04:00
VizardAlpha
59826f5189 Updates bundle_fr_BE.properties (#644)
* Updates bundle_fr_BE.properties

* Update bundle_fr_BE.properties
2019-09-15 20:37:45 -04:00
Prosta4okua
a6fac9e56a Translation (#645)
* Fixes

* Капіталізація це зло.

* Update bundle_ru.properties

* Update bundle_uk_UA.properties

* .-.

* Gm

Description

* Oof

* ЈҮУКЕНГШҺЗХҸЖДЛОРПАВЫӘЧСМИТҒБӨ

* dada

* Translate new descriptions

* й

* Ukrainian finished. Fixed some errors.

* Translated everything. Maybe.

* /

* 1

* Added tutorial. Thank to Slava0135 and ymomfe.

* 1

* 1

* WATER

WATER

* [[]]

* 1

* gmmm

/-/-/-/

* idk what i changed

* Обновление и корректировка строк с 1 по 90

* router

* Обновление и корректировка строк с 87 по 252

Обновление и корректировка строк с 87 по 252, а так же правка предыдущих.
- 35 строку лучше привести в соответствии с оригинальным текстом, без дополнений и пояснений.
- 103 строка не переводится в соответствии с https://semver.org/lang/ru/ , хотя это не жёсткое правило, поскольку не влияет непосредственно на алгоритм работы с версиями.
- 187 Предлагаю эту строку перевести как 'Настройки карты', не смотря на оригинальный текст (соответственно и 230, 231).

* router

* Обновление и корректировка строк с 253 по 321 - "WorldEditor Update"

Обновление и корректировка строк с 253 по 321, а так же предыдущих.
- Разобраться с 297 строкой ("filter.option.percentile").
- Разобраться с местами применения 322 строки.

* озарение в переводе ;D

* Fixed "В"

* Unfinished Ukrainian language.

* Small fixes.

* Обновление и корректировка строк с 322 по 377 - "Campaign Update"

Обновление и корректировка строк с 322 по 377, а так же предыдущих.
- По прежнему нужно разобраться с 297 строкой ("filter.option.percentile"). Добавил метку для отличия функционала. Проверю и уберу к следующей сборке.

* Мелкие правки

* From additional improvements.

* hmmm

* hm

* 123

* Небольшие правки "КАК СОЗДАТЬ СЕРВЕР С ДРУГОМ Update"

* Рефакторинг и добавление новых строк с 1 по 136

- Приведение положения строк в бандле в соответствии с референсным файлом
- Добавление и перевод новых (отсутствующих) строк из референсного файла

* Рефакторинг и добавление новых строк с 137 по 380

- Приведение положения строк в бандле в соответствии с референсным файлом
- Добавление и перевод новых (отсутствующих) строк из референсного файла
- Мелкие правки

* Second pack of changes by Vanguard.

* ru_ri

* Небольшие правки

* 313131

* Рефакторинг, корректировка и добавление новых строк с 381 по 600

Рефакторинг, корректировка и добавление новых строк с 381 по 600
- Приведение положения строк в бандле в соответствии с референсным файлом
- Добавление и перевод новых (отсутствующих) строк из референсного файла
- Корректировка существующих строк

* Перші сто рядків українського перекладу відредаговано.

* 121

* 212122

* правки в редакторе

* ещё правки в редакторе

* мелкие правки

* правка

* Рефакторинг, корректировка и добавление новых строк с 601 по 800

Рефакторинг, корректировка и добавление новых строк с 601 по 800
- Приведение положения строк в бандле в соответствии с референсным файлом
- Добавление и перевод новых (отсутствующих) строк из референсного файла
- Корректировка существующих строк

* Рефакторинг, корректировка и добавление новых строк с 801 по 912

Рефакторинг, корректировка и добавление новых строк с 801 по 912
- Приведение положения строк в бандле в соответствии с референсным файлом
- Добавление и перевод новых (отсутствующих) строк из референсного файла
- Корректировка существующих строк

* мелкие правки
2019-09-15 20:37:38 -04:00
AmateurPotion
68f0ef1bd2 Update bundle_ko.properties (#650)
* Update bundle_ko.properties

* Update bundle_ko.properties
2019-09-15 20:35:07 -04:00
east
d53882a086 Update bundle_tr.properties (#657)
Translated some still-English parts (will continue) and added some missing lines.
2019-09-15 20:33:34 -04:00
CinExPL
7c7306d37b Update bundle_pl.properties (#659)
Merge https://github.com/Anuken/Mindustry/pull/633 as first.
This file contains @Dr4coDragon's edits with some changes.
+ improvements based on comparison with original bundle file.
2019-09-15 20:32:40 -04:00
Draco
d5a9938354 Updated Polish translation (done) (#633)
* Updated polish translation

Added some of the missing translations for map descriptions, tutorial and few others

* Fixed typos and added more translations

* Added most of remaining translations (almost done)

There's only a few untranslated strings left which i'm not sure about proper translation or meaning

* Last few changes and translations added (done)

Translation update is ready
2019-09-15 20:30:54 -04:00
Anuken
3fad378b69 List fix 2019-09-15 18:24:18 -04:00
Anuken
afb47344c6 Arc update trigger 2019-09-15 17:55:33 -04:00
Anuken
5ba7e1d08b fixed #665 2019-09-15 16:54:58 -04:00
Anuken
681347e933 Mobile scrolling fix 2019-09-15 15:47:42 -04:00
Anuken
f1bf8a0f1a Equality comparison fix 2019-09-15 14:38:00 -04:00
Anuken
874b41cb46 Fixed disconnect not triggering 2019-09-15 14:24:00 -04:00
Anuken
d3876b6376 Fixed lobby joining 2019-09-15 14:01:27 -04:00
Anuken
f72f2bdf5d Fixed servers not discovering 2019-09-15 13:52:56 -04:00
Anuken
af91e17b13 2 2019-09-15 13:13:21 -04:00
Anuken
69bfd8f54d Static steam names 2019-09-15 13:03:29 -04:00
Anuken
369c3b569c Bugfixes, game startup connection 2019-09-15 12:44:30 -04:00
Anuken
8480e656b9 More steam stuff 2019-09-15 10:38:36 -04:00
Anuken
fb29324905 Steam stuff 2019-09-15 09:27:31 -04:00
Anuken
ed88633712 More bugfixes 2019-09-14 21:36:32 -04:00
Anuken
cd456f80a4 Bugfixes 2019-09-14 20:57:10 -04:00
Anuken
6d61515e28 Compile fix 2019-09-14 20:30:26 -04:00
Anuken
38af936e3f Bugfix 2019-09-14 19:14:22 -04:00
Anuken
d59f5ddc59 Achievement work, cleanup 2019-09-14 19:01:27 -04:00
Anuken
6c07c5006a Added client implementation for 50 achievemenets 2019-09-13 22:02:13 -04:00
Anuken
d4d060a500 'then' 2019-09-13 14:01:31 -04:00
Anuken
55e43761e9 Auto-tag Arc commits at release time 2019-09-13 13:53:15 -04:00
Anuken
b1edaa1408 Testing arc hash script 4 2019-09-13 13:12:34 -04:00
Anuken
d8d9762998 Testing arc hash script 3 2019-09-13 13:08:21 -04:00
Anuken
dd93284062 Merge remote-tracking branch 'origin/master' 2019-09-13 13:04:20 -04:00
Anuken
19c76fc741 Testing arc hash script 2019-09-13 13:03:02 -04:00
Anuken
1013455b0f Update ItemBridge.java 2019-09-13 08:56:53 -04:00
Anuken
066e4380e1 Crash fix 2019-09-13 08:17:47 -04:00
Anuken
55da9df2a1 Fixed #655 2019-09-13 08:13:40 -04:00
Anuken
4b26c57a20 Added direct core-vault chaining 2019-09-12 21:14:09 -04:00
Anuken
d0491dd68a 8 2019-09-12 19:00:31 -04:00
Anuken
cd8cc34c31 Merge remote-tracking branch 'origin/master'
# Conflicts:
#	.travis.yml
2019-09-12 18:56:30 -04:00
Anuken
0249ebf718 7 2019-09-12 18:56:03 -04:00
Anuken
7fb4eeb998 Update .travis.yml 2019-09-12 18:29:10 -04:00
Anuken
0cd7313523 5 2019-09-12 17:48:41 -04:00
Anuken
5c3fc2a6ba 4 2019-09-12 17:45:53 -04:00
Anuken
19f888061f 3 2019-09-12 17:39:45 -04:00
Anuken
4e8a02be7d 2 2019-09-12 17:33:15 -04:00
Anuken
2231062c19 Travis testing 2019-09-12 17:19:01 -04:00
Anuken
fb4faa15bb Merge remote-tracking branch 'origin/master' 2019-09-12 13:03:49 -04:00
Anuken
e6d05926dd Bugfix 2019-09-12 13:02:48 -04:00
Anuken
ca9f18325c Fixed #583 2019-09-12 12:40:52 -04:00
Anuken
bd96ae5a48 Nestable array iterators + unit tests 2019-09-12 12:17:28 -04:00
east
cf1cc2ca49 Typo fix (#653)
Corrected "Prepating"
2019-09-12 10:41:22 -04:00
Anuken
bbaaa91575 Fixed black styles on game reload (Android) 2019-09-12 09:06:25 -04:00
Anuken
41b21c81a0 Fixed mass driver deadlock 2019-09-12 08:42:19 -04:00
Anuken
44842d3221 Deploy animation 2019-09-11 16:54:18 -04:00
Anuken
d9c7665aca Events 2019-09-11 12:37:58 -04:00
Anuken
565b79d1b2 Events, triggers 2019-09-10 22:50:00 -04:00
Anuken
f30dc7dcd9 Cleanup 2019-09-10 21:20:28 -04:00
Anuken
e4cdf515c9 More workshop implementation 2019-09-10 20:53:31 -04:00
Anuken
ad3463cbc4 Merge remote-tracking branch 'origin/master' 2019-09-10 15:05:06 -04:00
Anuken
db733bced6 Stats 2019-09-10 15:05:02 -04:00
Anuken
7aa71a7201 Steam workshop publishing 2019-09-10 14:25:34 -04:00
Anuken
6fe55661ed Bugfixes / Fixed #639 2019-09-09 19:06:11 -04:00
Anuken
af89efcfc4 Update links to match Steam policy 2019-09-09 17:05:36 -04:00
Anuken
82493c596d Merge remote-tracking branch 'origin/master' 2019-09-09 16:22:40 -04:00
Anuken
5a3fbf33df Made all color names lowercase for consistent style 2019-09-09 16:22:29 -04:00
Anuken
5bed0f3bcc Update LoadDialog.java 2019-09-09 00:03:55 -04:00
Anuken
87f6ff7be6 Update IOSLauncher.java 2019-09-09 00:01:48 -04:00
Anuken
fa56996e10 Update AndroidLauncher.java 2019-09-09 00:01:07 -04:00
Anuken
b867cdb8b9 Map fix 2019-09-08 23:33:21 -04:00
Anuken
3bac32e04a Dialog fix 2019-09-08 23:30:15 -04:00
Anuken
c4c0f45228 cleaning up what remains 2019-09-08 22:55:36 -04:00
Anuken
d981bb95b9 it is gone 2019-09-08 22:32:47 -04:00
Anuken
c9f0a59339 time for a crusade against dialogs 2019-09-08 15:08:55 -04:00
Anuken
ec58e868fd Update bundle.properties 2019-09-08 11:35:38 -04:00
Ulysses2
aa5152ac70 Update Router.java (#643) 2019-09-08 09:31:49 -04:00
Anuken
2cc627e7d0 Merged net module 2019-09-07 16:55:09 -04:00
Anuken
8653e7bbb1 Cleanup 2019-09-07 16:03:20 -04:00
Anuken
4fb7430fb7 More cleanup, removed connection IDs 2019-09-07 15:23:13 -04:00
Anuken
e90c8c4d3e Extensive network refactor 2019-09-07 14:11:50 -04:00
Anuken
06e6deae42 More cleanup 2019-09-07 12:10:26 -04:00
Anuken
38fe99f10e Android cleanup 2019-09-07 12:04:28 -04:00
Anuken
05ab62f038 merge 2019-09-06 22:51:35 -04:00
Anuken
168011586b More file chooser fixes 2019-09-06 22:09:54 -04:00
Anuken
b5f1e566b2 New Android file chooser implementation 2019-09-06 21:21:30 -04:00
Anuken
9b6fb2f382 cleanup 2019-09-06 15:20:30 -04:00
Anuken
24bb2428e7 Bugfixes 2019-09-06 14:05:13 -04:00
Anuken
75ba33abc0 Compile fix 2019-09-06 14:02:42 -04:00
Anuken
ff54629550 Merge 2019-09-06 13:58:32 -04:00
Anuken
b492c7ae27 Bugfixes 2019-09-05 21:44:49 -04:00
Anuken
5d04f93a88 Merge remote-tracking branch 'origin/master' 2019-09-05 19:23:25 -04:00
Anuken
5651d1b023 Support for built-in servers 2019-09-05 19:23:17 -04:00
Axel Soll
6822e3f5b8 Add French app description for the Play Store. (#635)
* Add French app description for the Play Store.

* Add "Features include" line

* Update full_description.txt
2019-09-05 10:01:25 -04:00
Anuken
3cbb02f9fb Merge remote-tracking branch 'origin/master' 2019-09-04 23:16:33 -04:00
Anuken
0f79298c28 Many various fixes 2019-09-04 23:16:26 -04:00
Anuken
8f4bd09635 Update Blocks.java 2019-09-04 10:00:16 -04:00
Anuken
0a9cad2ea6 net fix 2019-09-03 22:59:10 -04:00
Anuken
dc21adfda5 Better spawn animations 2019-09-03 22:55:46 -04:00
Anuken
a7bfe18f4a Player limit / Server mode display / Crash fixes / More save info 2019-09-03 19:14:33 -04:00
Anuken
209f0902c9 message blocks 2019-09-03 16:11:01 -04:00
Anuken
9cc76a148b Utility methods 2019-09-03 08:36:59 -04:00
Anuken
1d95a255bc Bugfixes 2019-09-03 08:21:23 -04:00
Anuken
3f8d412d1c Merge remote-tracking branch 'origin/master' 2019-09-02 21:07:45 -04:00
Anuken
b2c35d45c3 merge 2 2019-09-02 21:07:40 -04:00
Anuken
35ab90e445 Merge remote-tracking branch 'origin/master'
# Conflicts:
#	core/src/io/anuke/mindustry/core/NetServer.java
2019-09-02 21:07:15 -04:00
Anuken
9bfb5216f9 Merge remote-tracking branch 'origin/master' 2019-09-02 20:59:44 -04:00
Anuken
b10656294e Merge 2019-09-02 20:59:35 -04:00
Anuken
316f4d471f Fixed iOS crash 2019-09-02 20:58:15 -04:00
J-VdS
ef0b56eb22 Extra events (#630)
* eventype player join

* playerjoin event

* player leave

* player leave event

* typo

* remove

* leave fix
2019-09-02 19:37:38 -04:00
Anuken
e640042e5d Update build.gradle 2019-09-02 12:40:52 -04:00
Anuken
2c0d2c5e22 Update NetServer.java 2019-09-02 12:37:25 -04:00
Anuken
9eed39c2ae Update NetServer.java 2019-09-02 12:34:15 -04:00
Anuken
e8d89b6c43 Bugfixes 2019-09-01 15:52:07 -04:00
Anuken
494c3ffbc4 💥 2019-09-01 13:34:20 -04:00
Anuken
40d27c787c Fixed drones not finding blocked ores 2019-09-01 13:21:20 -04:00
Anuken
2fe5b44698 Java 8+ plugin load fix 2019-09-01 11:01:04 -04:00
Anuken
5cc32b9001 Fixed map loading bugs 2019-09-01 10:46:44 -04:00
Anuken
d481af43c7 Fixed "disconnected" bug / Updated menu music 2019-09-01 10:19:13 -04:00
Anuken
1cd43f938f Bugfixes 2019-09-01 00:45:54 -04:00
Anuken
528f5295c2 Slightly more informative D/C messages 2019-09-01 00:39:08 -04:00
Anuken
aaedeea870 console 2019-08-31 20:08:48 -04:00
Anuken
c684c32abe Merge branch 'master' of https://github.com/Anuken/Mindustry into steam 2019-08-31 17:04:23 -04:00
Anuken
34df9cca2c Fixed Java 8+ compatibility 2019-08-31 16:54:29 -04:00
Anuken
c678b53d3f Merge remote-tracking branch 'origin/master' 2019-08-31 14:49:33 -04:00
Anuken
ea30cc7d19 Renamed folder to use correct locale 2019-08-31 14:49:29 -04:00
DeltaRays
a2772d09f3 Update bundle_it.properties (#626) 2019-08-31 13:59:52 -04:00
Anuken
a0016f001c Updated bundles 2019-08-31 13:08:06 -04:00
Prosta4okua
ca532f271f [WIP] Ukr&Rus Translation (#607)
* Fixes

* Капіталізація це зло.

* Update bundle_ru.properties

* Update bundle_uk_UA.properties

* .-.

* Gm

Description

* Oof

* ЈҮУКЕНГШҺЗХҸЖДЛОРПАВЫӘЧСМИТҒБӨ

* dada

* Translate new descriptions

* й

* Ukrainian finished. Fixed some errors.

* Translated everything. Maybe.

* /

* 1

* Added tutorial. Thank to Slava0135 and ymomfe.

* 1

* 1

* WATER

WATER

* [[]]

* 1

* gmmm

/-/-/-/

* idk what i changed

* Обновление и корректировка строк с 1 по 90

* router

* Обновление и корректировка строк с 87 по 252

Обновление и корректировка строк с 87 по 252, а так же правка предыдущих.
- 35 строку лучше привести в соответствии с оригинальным текстом, без дополнений и пояснений.
- 103 строка не переводится в соответствии с https://semver.org/lang/ru/ , хотя это не жёсткое правило, поскольку не влияет непосредственно на алгоритм работы с версиями.
- 187 Предлагаю эту строку перевести как 'Настройки карты', не смотря на оригинальный текст (соответственно и 230, 231).

* router

* Обновление и корректировка строк с 253 по 321 - "WorldEditor Update"

Обновление и корректировка строк с 253 по 321, а так же предыдущих.
- Разобраться с 297 строкой ("filter.option.percentile").
- Разобраться с местами применения 322 строки.

* озарение в переводе ;D

* Fixed "В"

* Unfinished Ukrainian language.

* Small fixes.

* Обновление и корректировка строк с 322 по 377 - "Campaign Update"

Обновление и корректировка строк с 322 по 377, а так же предыдущих.
- По прежнему нужно разобраться с 297 строкой ("filter.option.percentile"). Добавил метку для отличия функционала. Проверю и уберу к следующей сборке.

* Мелкие правки

* From additional improvements.
2019-08-31 13:07:02 -04:00
Anuken
89402fd097 removeCommand() 2019-08-31 13:00:34 -04:00
ichthyosaurus
75451743aa Update bundle_de.properties (#620) 2019-08-31 12:12:07 -04:00
AmateurPotion
b4d9a6a507 Update bundle_ko.properties (#618)
* Update bundle_ko.properties

* Update bundle_ko.properties

* Update bundle_ko.properties

* Update bundle_ko.properties
2019-08-31 12:11:01 -04:00
VizardAlpha
335afa56a1 bundle_fr_BE.properties (#617)
* bundle_fr_BE.properties

* Small fix

https://fr.m.wikipedia.org/wiki/Flou_lumineux
2019-08-31 12:10:54 -04:00
laohuaji233
485592bdac Update bundle_zh_CN.properties (#612)
* Update bundle_zh_CN.properties

* Update bundle_zh_CN.properties

* Update bundle_zh_CN.properties

* Update bundle_zh_CN.properties

* Update bundle_zh_CN.properties

* Update bundle_zh_CN.properties

* Update bundle_zh_CN.properties

* Update bundle_zh_CN.properties

* Update bundle_zh_CN.properties

* Update bundle_zh_CN.properties
2019-08-31 12:05:49 -04:00
FranLamark
ee9289fc24 Update bundle_es.propierties (Spanish trasnlation to the game) (#611)
* Update bundle_es.propierties

Translated mostly (i hope every) stuff in english, and edit some spanish stuff too. Gaven specially to some ores more descriptive names, and bring specially translation in spanish to newer things like draugs factories, information about this one, and related newer things.

* Update bundle_es.properties
2019-08-31 12:05:42 -04:00
Spico (Spirit Guy)
a0c281a0a9 Update to Turkish Translation (#610)
Updated lines between 1 to 100.
Some tutorial messages are missing, going to translate them later on.
2019-08-31 12:05:08 -04:00
Dominik
ad0b0858f6 Update bundle_pl.properties (#608)
* Update bundle_pl.properties

* Update bundle_pl.properties

* Update bundle_pl.properties

* Update bundle_pl.properties
2019-08-31 12:05:00 -04:00
itskatt
c2191872ac [READY TO MERGE] French translation (#594)
* first step

* More progress

* Translate zones

* More translating

* Remove redundant part

* Translate ~100 lines

* Update bundle_fr.properties

* Update bundle_fr.properties

* More translating

* Translate over 1k lines, start translating the tutorial

* Rearange the french bundle like the original one

* Translate more lines from the tutorial

* Finish translating the tutorial + few adjustments

* Start translating the item descriptions

* More item description translating

* few parts that i've missed

* sync files + few changes

* not much

* Apply suggestions from AzariasB's code review

Co-Authored-By: Azarias Boutin <AzariasB@users.noreply.github.com>

* Few changes + add AzariasB to the contributors

* Translate new additions

* small fixes

* More small fixes
2019-08-31 12:04:52 -04:00
Anuken
5f361413bb /sync command 2019-08-31 10:14:26 -04:00
Anuken
3414026828 Crash fix 2019-08-31 09:50:05 -04:00
Anuken
7089fae0d5 Map fixes 2019-08-31 09:45:27 -04:00
Anuken
80bdf1e19c Bugfix 2019-08-31 08:47:53 -04:00
Anuken
e0c1f2a31a Minor save fixes 2019-08-30 23:39:29 -04:00
Anuken
92cfa2b033 1x deconstruction speed 2019-08-30 22:16:18 -04:00
Anuken
877cd5968c Tweaks 2019-08-30 21:37:10 -04:00
Anuken
b39464a7d1 Merged save previews 2019-08-30 20:13:03 -04:00
Anuken
52332e5821 Bugfixes 2019-08-30 20:11:48 -04:00
Anuken
7f2c7685b4 Lobby prefs 2019-08-30 19:49:36 -04:00
Anuken
7e80a60e65 More cleanup 2019-08-30 17:44:28 -04:00
Anuken
44544020ec Platform cleanup 2019-08-30 17:35:26 -04:00
Anuken
3b9d3fd233 Platform cleanup 2019-08-30 17:32:49 -04:00
Anuken
4e2d2ee378 Steam cleanup 2019-08-30 17:25:37 -04:00
Anuken
7aafa8b150 Merge 2019-08-30 16:39:40 -04:00
Anuken
6d9a59c60b More cleanup 2019-08-30 16:37:04 -04:00
Anuken
39e0977231 Entity cleanup 2019-08-30 16:00:09 -04:00
Anuken
f8f140090f Fixed #623 2019-08-30 15:52:55 -04:00
Anuken
f063f7b2d3 Minor tweaks 2019-08-30 15:17:05 -04:00
Anuken
60306f146f Campaign slot preview 2019-08-30 15:08:43 -04:00
Anuken
3b873b7cb2 Merge branches 'master' and 'save-preview' of https://github.com/Anuken/Mindustry into save-preview 2019-08-30 15:01:48 -04:00
Anuken
26d44ea030 Save slot previews 2019-08-30 15:01:38 -04:00
Anuken
b369751a75 Bugfixes 2019-08-30 13:56:33 -04:00
Anuken
6e2cd81c9f Save previews 2019-08-30 13:53:19 -04:00
Anuken
e953bd40eb PR build fix 2019-08-30 12:41:43 -04:00
Anuken
233ae99d3f Added teamchat 2019-08-29 23:22:47 -04:00
Anuken
ddca5ef25a Data export/import 2019-08-29 22:04:01 -04:00
Anuken
ae88f286a6 Merge remote-tracking branch 'origin/master' 2019-08-29 19:07:05 -04:00
Anuken
25af0c4302 Added bleeding edge info 2019-08-29 19:07:00 -04:00
Poussinou
96b398867b Update README.md (#622) 2019-08-29 18:57:54 -04:00
Anuken
97d1c49a3c ... 2019-08-29 18:53:46 -04:00
Anuken
e83dfd3d5a ... 2019-08-29 18:45:03 -04:00
Anuken
1142af853d ... 2019-08-29 18:37:27 -04:00
Anuken
4d502fe073 Updated travis.yml 2019-08-29 18:31:55 -04:00
Anuken
b022333df1 sadness 2019-08-29 18:27:42 -04:00
Anuken
725b2188aa Updated travis.yml 2019-08-29 18:09:03 -04:00
Anuken
1f20d19aea Updated travis.yml 2019-08-29 18:04:39 -04:00
Anuken
ec9f91519d Updated travis.yml 2019-08-29 17:23:50 -04:00
Anuken
ae4e3e2d33 Updated travis.yml 2019-08-29 17:07:58 -04:00
Anuken
b931493d2f Updated travis.yml 2019-08-29 17:04:05 -04:00
Anuken
7b0c07533b Updated travis.yml 2019-08-29 16:52:52 -04:00
Anuken
33f0d64971 Update .travis.yml 2019-08-29 16:49:07 -04:00
Anuken
d10592a397 Testing builds 2019-08-29 10:01:01 -04:00
Anuken
641937f952 Automatic custom game saves 2019-08-29 08:53:41 -04:00
Anuken
b5ed309405 Page fix 2019-08-28 22:44:19 -04:00
Anuken
9bfbd7c953 Typo fix 2019-08-28 22:34:55 -04:00
Anuken
57924afa3f Moved plugin files 2019-08-28 22:12:25 -04:00
Anuken
76f11099b7 Merge branch 'plugins' of https://github.com/Anuken/Mindustry 2019-08-28 22:07:31 -04:00
Anuken
efcf802682 JITPack fixes 2019-08-28 22:07:08 -04:00
Anuken
b095840dc8 Votekick 2019-08-28 21:57:09 -04:00
Anuken
5f9370da9a Server plugins + clientside commands 2019-08-28 20:38:12 -04:00
Anuken
7a6eb08e53 Updated descriptions on GP 2019-08-28 18:26:36 -04:00
Anuken
865c3f28d5 Server plugins branch 2019-08-28 18:23:43 -04:00
Anuken
d5916f3bc3 hmmm 2019-08-28 16:18:53 -04:00
Anuken
3ce870fb19 Building fix 2019-08-28 16:17:04 -04:00
Anuken
a575284bfe Fixed unit tests 2019-08-28 14:12:11 -04:00
Anuken
89d79fdc65 Merge remote-tracking branch 'origin/master' 2019-08-28 13:18:31 -04:00
Anuken
05c0fd2f40 Bugfixes 2019-08-28 13:18:27 -04:00
Anuken
bc3c2c46a8 iOS crash fix 2019-08-28 13:08:28 -04:00
Anuken
3d69e9c763 Fixed incorrect asset loading 2019-08-27 22:53:24 -04:00
Anuken
9f5a0ca4e9 Fixed crash on load 2019-08-27 21:11:39 -04:00
Anuken
43245681fe Merge branches 'asset-manager' and 'master' of https://github.com/Anuken/Mindustry 2019-08-27 19:40:13 -04:00
Anuken
9d214a77d7 Test fixes 2019-08-27 19:37:13 -04:00
Anuken
5134aca723 Put zone previews into atlas 2019-08-27 19:33:41 -04:00
Anuken
40405332ec Additional improvements 2019-08-27 18:34:38 -04:00
Anuken
8d61f3b479 Fixed some crashes 2019-08-27 18:25:38 -04:00
Anuken
bd15287420 Better loading screen / Fixed unit tests 2019-08-27 17:44:25 -04:00
Anuken
5dfc3fd576 Functional loading 2019-08-27 16:32:22 -04:00
Anuken
1e80bdf19f Functional loading 2019-08-27 09:27:09 -04:00
Anuken
76cd7ba8d1 non-functional loading screen 2019-08-26 22:53:11 -04:00
Anuken
1dfa0d08de Testing out Github Actions workflow 2019-08-26 16:55:22 -04:00
Anuken
1fc9c82aaf Attempts to improve the loading system 2019-08-26 13:15:53 -04:00
Anuken
600a2b5ad7 Fixed mend projector place offset 2019-08-26 12:24:42 -04:00
Anuken
cb60556ac0 Disabled structure mirroring 2019-08-26 12:23:09 -04:00
Anuken
62f683b871 Game load time breakdown 2019-08-26 08:10:27 -04:00
Anuken
f22d32c15e more balance 2019-08-25 22:12:11 -04:00
Anuken
a3d8586199 Improvements to version scripts 2019-08-25 22:02:00 -04:00
Anuken
0a471441cc Balance 2019-08-25 14:23:43 -04:00
Anuken
73149123b4 Fullscreen key / Bugfixes 2019-08-25 12:02:51 -04:00
Anuken
5c6f2171f4 Fixed black tile issue 2019-08-25 11:16:38 -04:00
Anuken
fd973038bb mnet was a mistake 2019-08-24 18:29:21 -04:00
Anuken
b7dff91d01 Merge remote-tracking branch 'origin/master' 2019-08-24 15:39:22 -04:00
Anuken
e314d199f0 By popular demand, re-added command center 2019-08-24 15:39:01 -04:00
Spico (Spirit Guy)
3938c199f6 Request to Reseting the Turkish Translation File (#609)
There were some conflicting duplicated lines and someone put the file onto google translate, so some of the coloured lines were broken, and since (I think) Im the only one who edits this file (My brother didnt started translating yet) It would be easier for me to start from scratch.
2019-08-24 14:41:59 -04:00
Anuken
962eef4a1d or not 2019-08-24 13:06:39 -04:00
Anuken
97443a86cb fixed a crash that shouldn't even happen 2019-08-24 11:52:14 -04:00
Anuken
7137616224 Merge remote-tracking branch 'origin/master' 2019-08-24 10:45:36 -04:00
Anuken
444825a5c1 Bugfix 2019-08-24 10:45:25 -04:00
Anuken
986deaa6c7 Various fixes 2019-08-24 10:32:29 -04:00
Anuken
7b27903de2 Fixed some static library issues 2019-08-24 10:00:04 -04:00
Anuken
bbadf6795e . 2019-08-23 19:16:43 -04:00
Anuken
8b9be6eafe Removed arcnet as dependency 2019-08-23 18:18:14 -04:00
Anuken
da336ea412 Updated bundle texts 2019-08-23 18:14:27 -04:00
Anuken
f1cf95d412 Merge remote-tracking branch 'origin/master' 2019-08-23 18:13:30 -04:00
Anuken
6642a3e9ad Added temp changelog to ignore 2019-08-23 18:13:26 -04:00
Dominik
49db7773e8 Update bundle_pl.properties (#586)
* Update bundle_pl.properties

* Update bundle_pl.properties

* Update bundle_pl.properties

* Update bundle_pl.properties

* Update bundle_pl.properties
2019-08-23 18:13:00 -04:00
AmateurPotion
9372819fb8 Update bundle_ko.properties (#588)
* Update bundle_ko.properties

* Update bundle_ko.properties

* Update bundle_ko.properties

* Update bundle_ko.properties

* Update bundle_ko.properties

* Update bundle_ko.properties

* Update bundle_ko.properties

* Update bundle_ko.properties

* Update bundle_ko.properties

* Update bundle_ko.properties

* Update bundle_ko.properties

* Update bundle_ko.properties
2019-08-23 18:12:53 -04:00
VizardAlpha
9d07d81551 bundle_fr_BE.properties (#595)
* bundle_fr_BE.properties

* bundle_fr_BE.properties

* bundle_fr_BE.properties
2019-08-23 18:12:45 -04:00
JasonD157
3c9bcf05e2 Update bundle_nl_BE.properties (#596) 2019-08-23 18:12:38 -04:00
Prosta4okua
3338da2a91 Patch 1 (#597)
* Fixes

* Капіталізація це зло.

* Update bundle_ru.properties

* Update bundle_uk_UA.properties

* .-.

* Gm

Description

* Oof

* ЈҮУКЕНГШҺЗХҸЖДЛОРПАВЫӘЧСМИТҒБӨ

* dada

* Translate new descriptions

* й

* Ukrainian finished. Fixed some errors.

* Translated everything. Maybe.

* /

* 1

* Added tutorial. Thank to Slava0135 and ymomfe.

* 1

* 1

* WATER

WATER

* [[]]

* 1

* gmmm

/-/-/-/

* idk what i changed

* Обновление и корректировка строк с 1 по 90

* router

* Обновление и корректировка строк с 87 по 252

Обновление и корректировка строк с 87 по 252, а так же правка предыдущих.
- 35 строку лучше привести в соответствии с оригинальным текстом, без дополнений и пояснений.
- 103 строка не переводится в соответствии с https://semver.org/lang/ru/ , хотя это не жёсткое правило, поскольку не влияет непосредственно на алгоритм работы с версиями.
- 187 Предлагаю эту строку перевести как 'Настройки карты', не смотря на оригинальный текст (соответственно и 230, 231).

* router

* Обновление и корректировка строк с 253 по 321 - "WorldEditor Update"

Обновление и корректировка строк с 253 по 321, а так же предыдущих.
- Разобраться с 297 строкой ("filter.option.percentile").
- Разобраться с местами применения 322 строки.

* озарение в переводе ;D
2019-08-23 18:12:30 -04:00
Daniel-Chin
b31858a64f Update bundle_zh_CN.properties (#598)
Improved some word choice.  
Changed some translations to fit the English counterpart.  
In the weapon descriptions, the Chinese text misses some info. I added them according to the current English descriptions.
2019-08-23 18:11:10 -04:00
Kylof61034
8f2a8dc9ba Add my name to contributors (#602) 2019-08-23 18:10:58 -04:00
Kylof61034
44e54cd4df German translations (#600)
* german translation update 1

* german translation update 2

* german translation update 3

* german translation update 4

* german translation update 5

* german translation update 6

* fixed some little mistakes
2019-08-23 18:10:50 -04:00
Spico (Spirit Guy)
36c41557ea 1 change on the names (#605)
Changed CrazyBearTR onto Spico The Spirit Guy
CrazyBearTR was my old username and I dont use it anymore, so i dont think it needs to be there
2019-08-23 18:10:33 -04:00
Anuken
d0d72101ab Fixed game6.ogg ending abruptly 2019-08-23 18:05:06 -04:00
Anuken
7b41d65fa6 Fixed issues with multithreaded serializer access 2019-08-23 16:13:46 -04:00
Anuken
5f9000db92 MNet cleanup 2019-08-23 15:04:31 -04:00
Anuken
de031b1ddb Merge branches 'master' and 'mnet' of https://github.com/Anuken/Mindustry 2019-08-23 14:29:53 -04:00
Anuken
58f46bb75f Merge remote-tracking branch 'origin/master' 2019-08-23 14:17:01 -04:00
Anuken
d1e07ec0a2 Fixed OpenAL not loading correctly 2019-08-23 17:17:45 -06:00
Anuken
0d4716f3b4 Fallback shield shader 2019-08-23 14:16:51 -04:00
Anuken
9ddfd650dd . 2019-08-23 14:16:25 -04:00
Anuken
cf9cda4936 Merge branch 'master' of https://github.com/Anuken/Mindustry into steam 2019-08-23 14:05:46 -04:00
Anuken
1880c32f90 Experimental MNet-2 backend 2019-08-22 22:49:22 -04:00
Anuken
6d72c08d63 ignore some files 2019-08-22 21:52:51 -04:00
Anuken
95ac1b2c21 Merge remote-tracking branch 'origin/master' 2019-08-22 21:52:06 -04:00
Anuken
a33fd45136 bugfixes 2019-08-22 21:51:56 -04:00
Anuken
4e43d2a96b . 2019-08-22 21:09:33 -04:00
Anuken
d68c8fe72c Merge remote-tracking branch 'origin/steam' into steam
# Conflicts:
#	desktop/src/io/anuke/mindustry/desktop/steam/SteamNetImpl.java
2019-08-22 21:08:58 -04:00
Anuken
c9d0619289 . 2019-08-22 21:08:44 -04:00
Anuken
8ea33946c4 proper discovery 2019-08-22 21:08:01 -04:00
Anuken
bef7394004 Merge remote-tracking branch 'origin/steam' into steam
# Conflicts:
#	desktop/src/io/anuke/mindustry/desktop/DesktopPlatform.java
2019-08-22 20:50:43 -04:00
Anuken
4042bf042e . 2019-08-22 20:50:16 -04:00
Anuken
643b698c30 discovery 2019-08-22 20:49:27 -04:00
Anuken
aba3e3985a . 2019-08-22 19:53:44 -04:00
Anuken
91f679f762 disconnection 2019-08-22 19:49:29 -04:00
Anuken
3eeed507cc Merge remote-tracking branch 'origin/steam' into steam 2019-08-22 17:38:04 -04:00
Anuken
988e1d6e30 . 2019-08-22 17:38:00 -04:00
Anuken
04b4aabcf6 . 2019-08-22 17:37:16 -04:00
Anuken
d97fe47206 . 2019-08-22 17:16:13 -04:00
Anuken
0d8748a6ce autoclip 2019-08-22 17:02:41 -04:00
Anuken
b360a39fcf debug 2019-08-22 16:59:39 -04:00
Anuken
70b071fa26 fixes 2019-08-22 16:51:26 -04:00
Anuken
64badb2cb7 Cleanup 2019-08-22 16:44:32 -04:00
Anuken
3da6634242 things 2019-08-22 16:19:29 -04:00
Anuken
4b8d072854 testing 2019-08-22 16:13:39 -04:00
Anuken
a1ea393f35 Update MirrorFilter.java 2019-08-22 15:45:14 -04:00
Anuken
32abd991e7 steam debugging 2019-08-22 09:27:59 -04:00
Anuken
3294f800be Steam things 2019-08-21 21:20:44 -04:00
Anuken
74e3dc2d7d ? 2019-08-21 20:12:00 -04:00
Anuken
a7a49a823b Merge 2019-08-21 20:10:54 -04:00
Anuken
14c943adfe fix of uninteresting variety 2019-08-21 19:04:26 -04:00
Anuken
fb84b4b7c1 Added fastlane integration 2019-08-21 18:46:46 -04:00
Anuken
4089ee424c Removed pointless platform-specific dists 2019-08-21 15:50:58 -04:00
Anuken
9bf010e222 Removed lwjgl3 desktop module, sdl promoted to main module 2019-08-21 15:41:38 -04:00
Anuken
0553fb6b79 Finalized build scripts 2019-08-21 15:34:01 -04:00
Anuken
4bb6a25055 Added deployment scripts 2019-08-21 14:46:36 -04:00
Anuken
66ff7b1592 Fixed minimization 2019-08-20 20:47:28 -04:00
Anuken
be32810608 on second thought, no 2019-08-20 19:57:42 -04:00
Anuken
88f48599a0 Names updated 2019-08-20 19:52:08 -04:00
Anuken
014e2ac8b8 Bugfixes 2019-08-20 19:42:39 -04:00
Anuken
bae88ec416 iPhone X splash images 2019-08-20 19:14:30 -04:00
Anuken
46230ad307 nothing 2019-08-20 18:31:56 -04:00
Anuken
963a207194 New power node link system 2019-08-20 10:52:06 -04:00
Anuken
59419e13d9 Networking fixes 2019-08-20 10:23:22 -04:00
Anuken
82f43a362f merge 2019-08-19 22:36:28 -04:00
Anuken
b370e04035 UI fix 2019-08-19 22:21:22 -04:00
Anuken
dfd6e7a07b Merge remote-tracking branch 'origin/master' 2019-08-19 22:16:51 -04:00
Anuken
a873560d4e Multiplayer: Smooth building + rotation / Disabled UDP / Cleanup 2019-08-19 22:16:43 -04:00
Anuken
f7eea51066 further progress 2019-08-19 21:32:33 -04:00
Anuken
c6777bd219 Update bundle.properties 2019-08-19 18:03:21 -04:00
Anuken
8eb4d25638 Fixed error on exiting with custom map on server 2019-08-19 09:42:45 -04:00
Anuken
98c35c5291 steam init 2019-08-19 09:40:59 -04:00
Anuken
191c6e9016 crash fix 2019-08-19 09:23:16 -04:00
Anuken
33c1579e9c Progress 2019-08-19 08:39:38 -04:00
Anuken
52af0b1db9 Merge remote-tracking branch 'origin/master' 2019-08-18 22:52:50 -04:00
Anuken
492cb49805 bugfixes 2019-08-18 22:52:46 -04:00
Anuken
e482c2c318 Steam client init 2019-08-18 15:26:06 -04:00
Anuken
5b387e7e17 Merge branches 'master' and 'steam' of https://github.com/Anuken/Mindustry into steam 2019-08-18 13:34:04 -04:00
Anuken
b2e70a44be Update TRANSLATING.md 2019-08-18 12:31:54 -04:00
Anuken
452a8aaa0c Fixed dialog scrolling 2019-08-18 10:16:31 -04:00
Anuken
c3f392a01c Merge remote-tracking branch 'origin/master' 2019-08-17 20:26:30 -04:00
Anuken
7d9b6a41fc Actual prediction fix 2019-08-17 20:26:17 -04:00
Samuele Esposito
f4f4cf3947 Possibly a small typo? (#592) 2019-08-17 17:00:20 -04:00
Anuken
28e930eb4b Merge remote-tracking branch 'origin/master' 2019-08-17 15:39:45 -04:00
Anuken
301387fb32 Fixed low rank on attack map completion 2019-08-17 15:39:41 -04:00
Anuken
5955387bdd map tweaks 2019-08-17 14:08:13 -04:00
Anuken
150491ff2c bugfixes 2019-08-17 12:09:18 -04:00
Anuken
c7d735bf56 Fixed moving unit target prediction 2019-08-17 11:23:49 -04:00
Anuken
1f4dbd0024 fixed #587 2019-08-16 23:11:14 -04:00
Anuken
ddef78c7d8 Merge remote-tracking branch 'origin/master' 2019-08-16 14:50:04 -04:00
Anuken
dc435d88f4 Fixed massive music files on iOS, now using MP3 2019-08-16 14:49:35 -04:00
Anuken
84aff0112d small map fix 2019-08-16 14:17:23 -04:00
Anuken
a13f8ed05f more frequent music 2019-08-16 12:53:18 -04:00
Anuken
0429abbb28 Balance 2019-08-16 12:31:44 -04:00
AmateurPotion
562d3e6528 Update bundle_ko.properties (#585) 2019-08-16 12:08:42 -04:00
Anuken
ac27b484fa Updated Mac icon 2019-08-16 12:05:00 -04:00
Anuken
3c57c3e492 Merge remote-tracking branch 'origin/master' 2019-08-16 11:14:22 -04:00
Anuken
83f9f5d34a zipzip 2019-08-16 11:14:18 -04:00
Prosta4okua
c659e4f0aa Fixes (#584)
* Fixes

* Капіталізація це зло.

* Update bundle_ru.properties

* Update bundle_uk_UA.properties

* .-.

* Gm

Description

* Oof

* ЈҮУКЕНГШҺЗХҸЖДЛОРПАВЫӘЧСМИТҒБӨ

* dada

* Translate new descriptions

* й

* Ukrainian finished. Fixed some errors.

* Translated everything. Maybe.

* /

* 1

* Added tutorial. Thank to Slava0135 and ymomfe.

* 1

* 1

* WATER

WATER

* [[]]

* 1
2019-08-16 11:13:52 -04:00
AmateurPotion
723ee3c647 Update bundle_ko.properties (#579)
* Update bundle_ko.properties

* Update bundle_ko.properties

* Update bundle_ko.properties
2019-08-16 11:10:38 -04:00
Kylof61034
32baa279e2 added some german translations (#582) 2019-08-16 11:10:27 -04:00
Anuken
17b17979ab Release preparations 2019-08-16 11:00:15 -04:00
Anuken
c94ab5b05a Merge remote-tracking branch 'origin/master' 2019-08-16 09:58:34 -04:00
Anuken
625a0125cb Various tweaks 2019-08-16 09:58:25 -04:00
Anuken
9f8c1b3d20 ios landscape fix 2019-08-16 09:01:28 -04:00
Anuken
cc6ed88878 aaaaaaAAAAAAAAAAAa 2019-08-16 00:00:49 -04:00
Anuken
73523a96fa Merge remote-tracking branch 'origin/master' 2019-08-15 22:58:52 -04:00
Anuken
62e3bc86eb hhh 2019-08-15 22:58:48 -04:00
Anuken
a12af852ab more iOS mess-fixing 2019-08-15 22:44:37 -04:00
Anuken
6f2fc00045 Icons/splash screen updated for iOS 2019-08-15 22:25:08 -04:00
Anuken
9e0de644c4 more iOS fixes 2019-08-15 20:59:45 -04:00
Anuken
393bdfccaf iOS map export 2019-08-15 20:45:30 -04:00
Anuken
56c39799c8 things 2019-08-15 20:02:35 -04:00
Anuken
7f2a1374e4 Fixed truncated sounds 2019-08-15 14:16:41 -04:00
Anuken
6fa0ac56ac files 2019-08-15 13:33:23 -04:00
Anuken
89ee04c942 Machine ambient sounds 2019-08-15 13:32:36 -04:00
Anuken
c058163ab4 no 2019-08-15 00:12:06 -04:00
Anuken
2832dc69ef Random shoot sound pitch 2019-08-14 23:27:24 -04:00
Anuken
cb2e2ab9b2 OpenAL cleanup+refactor 2019-08-14 23:01:51 -04:00
Anuken
f342c38c62 openal stuff 2019-08-14 21:48:36 -04:00
Anuken
811e456f8f OpenAL audio backend for SDL 2019-08-14 20:50:26 -04:00
Anuken
000503d674 Update build.gradle 2019-08-14 13:53:23 -04:00
Anuken
d0bd29cfa0 fixed unnecessary asset copying 2019-08-14 13:47:16 -04:00
Anuken
d56565990e Fixed iOS audio issues 2019-08-14 13:10:29 -04:00
Anuken
b68734d679 iOS-specific format loading 2019-08-14 11:03:36 -04:00
Anuken
bf21c94bd7 Bugfixes 2019-08-14 10:27:10 -04:00
Anuken
b6b9685d57 wiki build script update 2019-08-13 23:53:22 -04:00
Anuken
f8adbda9c5 updated roboVM to 2.3.7 2019-08-13 23:26:25 -04:00
Anuken
c9178c3f2f Fixed power nodes in multiplayer 2019-08-13 22:47:31 -04:00
Anuken
84786c12d8 Bugfixes 2019-08-13 18:15:40 -04:00
Anuken
335b6ae0cc bundle 2019-08-13 17:48:19 -04:00
Anuken
9bde68a86f Merge remote-tracking branch 'origin/master' 2019-08-13 16:51:10 -04:00
Anuken
c3201178ae typo 2019-08-13 16:51:03 -04:00
Teamblur
366636ef7d Create bundle_et.properties (#498)
* Create bundle_et.properties

* Update bundle_et.properties

lisasin mõne tõlke eest poolt

* Update bundle_et.properties

* Update bundle_et.properties

* Update bundle_et.properties

* Update bundle_et.properties

* Update bundle_et.properties

* Update bundle_et.properties

* Update bundle_et.properties

* Update bundle_et.properties

* Update bundle_et.properties

* Update bundle_et.properties

* Update bundle_et.properties

* Update bundle_et.properties

* Update bundle_et.properties

* Update bundle_et.properties

* Update bundle_et.properties

* Update bundle_et.properties

* Update bundle_et.properties

* Update bundle_et.properties

* Update bundle_et.properties

* Update bundle_et.properties

* Update bundle_et.properties

* Update bundle_et.properties

* Update bundle_et.properties

* Update bundle_et.properties

* Update bundle_et.properties

* Update bundle_et.properties

* Update bundle_et.properties

* Update bundle_et.properties

* Update bundle_et.properties

* Update bundle_et.properties

* Update bundle_et.properties

* Update bundle_et.properties

* Update bundle_et.properties

* Update bundle_et.properties

* Update bundle_et.properties

* Update bundle_et.properties

* Update bundle_et.properties

* Update bundle_et.properties

* Update bundle_et.properties

* Update bundle_et.properties

* Update bundle_et.properties
2019-08-13 16:49:10 -04:00
Dominik
47112e233e Update bundle_pl.properties (#566)
* Update bundle_pl.properties

Updated names of blocks in editor and some more

* Update bundle_pl.properties

* Update bundle_pl.properties

* Update bundle_pl.properties

* Update bundle_pl.properties

* Update bundle_pl.properties

* Update bundle_pl.properties
2019-08-13 16:48:02 -04:00
laohuaji233
88f005be0c Update bundle_zh_CN.properties (#568)
* Update bundle_zh_CN.properties

* Update bundle_zh_CN.properties
2019-08-13 16:47:48 -04:00
Prosta4okua
f454cd3291 Patch 1 (#569)
* Fixes

* Капіталізація це зло.

* Update bundle_ru.properties

* Update bundle_uk_UA.properties

* .-.

* Gm

Description

* Oof

* ЈҮУКЕНГШҺЗХҸЖДЛОРПАВЫӘЧСМИТҒБӨ

* dada

* Translate new descriptions

* й

* Ukrainian finished. Fixed some errors.

* Translated everything. Maybe.

* /

* 1

* Added tutorial. Thank to Slava0135 and ymomfe.

* 1
2019-08-13 16:46:12 -04:00
AmateurPotion
23038dc6f7 Update bundle_ko.properties (#577)
* Update bundle_ko.properties

Update!

* Update bundle_ko.properties

error xd

* Update bundle_ko.properties

third edit...

* Update bundle_ko.properties

one change

* Update bundle_ko.properties
2019-08-13 16:36:19 -04:00
Anuken
58b4f64125 Tutorial fixes 2019-08-13 16:26:02 -04:00
Anuken
974ab59fd2 Classic data backup dialog 2019-08-13 15:14:03 -04:00
Anuken
f2f6dc89a2 fire 2019-08-13 12:04:09 -04:00
Anuken
bff9d89232 more sounds 2019-08-13 11:42:01 -04:00
Anuken
a818da5eb7 some bad sounds 2019-08-12 23:29:24 -04:00
Anuken
a1269c05c5 Updated discord presence 2019-08-12 13:50:09 -04:00
Anuken
d0ff0307f5 New icon 2019-08-12 13:29:02 -04:00
Anuken
c4aa0b2863 New discord app ID / New testing sounds 2019-08-12 12:32:13 -04:00
Anuken
85fd2ad804 Various things 2019-08-11 18:01:32 -04:00
Anuken
0770574f17 Sound things 2019-08-11 16:55:32 -04:00
Anuken
6314bf51df audio cleanup 2019-08-11 13:46:14 -04:00
Anuken
4c08c98f8c Work on sound effects 2019-08-11 10:47:22 -04:00
Anuken
2341da995e Random in-game music, untested 2019-08-10 18:56:20 -04:00
Anuken
4ef60af4a8 Fixed maps not being able to override gamemode-specific settings 2019-08-10 11:43:28 -04:00
Anuken
16f6b51857 Various tweaks, new music tracks 2019-08-09 23:23:45 -04:00
Anuken
59e53eb672 mandatory hosting/joining info 2019-08-09 14:01:25 -04:00
Anuken
c7724e9122 Converted sounds to ogg 2019-08-09 13:51:24 -04:00
Anuken
2c4379acd1 Tutorial improvements 2019-08-09 12:18:08 -04:00
Anuken
69e7b442e2 made pause/tutorial panes not touchable 2019-08-08 21:57:13 -04:00
Anuken
70a4c2f3ed slightly less of a mess 2019-08-08 21:45:55 -04:00
Anuken
83c86b3883 more tutorial 2019-08-08 21:26:50 -04:00
Anuken
9924796ad9 A somewhat complete tutorial 2019-08-08 20:50:15 -04:00
Anuken
b587b6bb4d More tutorial 2019-08-08 17:26:20 -04:00
Anuken
4811578c95 Incomplete tutorial basics 2019-08-08 17:03:45 -04:00
Anuken
0a07c62b63 Merge branch 'master' of https://github.com/Anuken/Mindustry into tutorial 2019-08-08 11:26:29 -04:00
Anuken
c1ff370923 Fixed scaling / Improved power node visuals / Balancing 2019-08-08 10:48:35 -04:00
Anuken
e55575f093 Editor music updated 2019-08-07 19:21:50 -04:00
Anuken
703f034054 Bugfixes 2019-08-07 18:16:51 -04:00
Anuken
2d504521b1 Bugfixes 2019-08-07 08:39:59 -04:00
Anuken
8359789d4f Bugfixes 2019-08-06 19:10:32 -04:00
Anuken
8162e13f04 Balancing, fixes, general improvements 2019-08-06 18:05:17 -04:00
Anuken
282aab5939 Zone improvements 2019-08-06 13:01:54 -04:00
Anuken
5c6bcbf9cd Renamed layout/Unit to UnitScl to prevent name conflicts 2019-08-06 11:04:58 -04:00
Anuken
8ef1d54a16 Bugfixes 2019-08-06 09:17:26 -04:00
Anuken
1cb01af77b Structure 2019-08-04 08:13:16 -04:00
Anuken
a65592d511 Added Tutorial class 2019-08-03 19:47:57 -04:00
Anuken
4ee6f60531 Merge branches 'master' and 'tutorial' of https://github.com/Anuken/Mindustry into tutorial 2019-08-03 19:38:26 -04:00
Anuken
5573031d07 Created tutorial branch 2019-08-01 10:43:41 -04:00
607 changed files with 24971 additions and 14951 deletions

12
.github/ISSUE_TEMPLATE/bug_report.md vendored Normal file
View File

@@ -0,0 +1,12 @@
---
name: Bug report
about: Create a report to help fix an issue.
---
[Platform]: # (Android/iOS/Mac/Windows/Linux/Web)
[Build]: # (The build number under the title in the main menu. Required.)
[Issue]: # (Explain your issue in detail, possibly including the steps to reproduce it.)
[Notes]: # (Other notes.)

View File

@@ -0,0 +1,7 @@
---
name: Feature request
about: Suggest an idea for this project
---
Do not make a new issue for feature requests. Instead, post it in #545.

17
.github/workflows/gradle.yml vendored Normal file
View File

@@ -0,0 +1,17 @@
name: Java CI
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- name: Set up JDK 1.8
uses: actions/setup-java@v1
with:
java-version: 1.8
- name: Run unit tests with gradle
run: ./gradlew test

11
.gitignore vendored
View File

@@ -4,12 +4,14 @@ logs/
/core/assets/bundles/output/ /core/assets/bundles/output/
/core/assets/.gifimages/ /core/assets/.gifimages/
/deploy/ /deploy/
/out/
/desktop/packr-out/ /desktop/packr-out/
/desktop/packr-export/ /desktop/packr-export/
/desktop/mindustry-saves/ /desktop/mindustry-saves/
/desktop/mindustry-maps/ /desktop/mindustry-maps/
/desktop/gifexport/ /desktop/gifexport/
/core/lib/ /core/lib/
/ios/assets/
/core/assets-raw/sprites/generated/ /core/assets-raw/sprites/generated/
/core/assets-raw/sprites_out/ /core/assets-raw/sprites_out/
/annotations/build/ /annotations/build/
@@ -18,10 +20,13 @@ logs/
/tools/build/ /tools/build/
/tests/build/ /tests/build/
/server/build/ /server/build/
changelog
saves/
core/assets/saves/
/core/assets/saves/
steam_appid.txt
/test_files/ /test_files/
/annotations/build/ /annotations/build/
/desktop-sdl/build/
desktop-sdl/build/
/android/assets/mindustry-maps/ /android/assets/mindustry-maps/
/android/assets/mindustry-saves/ /android/assets/mindustry-saves/
/core/assets/gifexport/ /core/assets/gifexport/
@@ -32,7 +37,9 @@ desktop-sdl/build/
ios/robovm.properties ios/robovm.properties
packr-out/ packr-out/
config/ config/
changelog
*.gif *.gif
/core/assets/saves/
version.properties version.properties

View File

@@ -1,28 +1,43 @@
jdk: jdk:
- openjdk8 - openjdk8
dist: trusty
android:
components:
- android-29
- build-tools-29.0.2
script: script:
- git clone --depth=1 --branch=master https://github.com/Anuken/MindustryBuilds ../MindustryBuilds
- cd ../MindustryBuilds
- echo ${TRAVIS_TAG}
- if [ -n "$TRAVIS_TAG" ]; then echo versionName=4-fdroid-${TRAVIS_TAG:1}$'\n'versionCode=${TRAVIS_TAG:1} > version_fdroid.txt; git add .; git commit -m "Updating to build ${TRAVIS_TAG}"; fi
- git tag ${TRAVIS_BUILD_NUMBER}
- git config --global user.name "Build Uploader"
- if [ "$TRAVIS_PULL_REQUEST" = "false" ]; then git push https://Anuken:${GH_PUSH_TOKEN}@github.com/Anuken/MindustryBuilds ${TRAVIS_BUILD_NUMBER}; git push https://Anuken:${GH_PUSH_TOKEN}@github.com/Anuken/MindustryBuilds; fi
- cd ../Mindustry
- git clone --depth=1 --branch=master https://github.com/Anuken/Arc ../Arc - git clone --depth=1 --branch=master https://github.com/Anuken/Arc ../Arc
- if [ -n "$TRAVIS_TAG" ]; then cd ../Arc; git tag ${TRAVIS_TAG}; git push https://Anuken:${GH_PUSH_TOKEN}@github.com/Anuken/Arc ${TRAVIS_TAG}; cd ../Mindustry; fi
- "./gradlew test" - "./gradlew test"
- "./gradlew desktop:dist -Pbuildversion=${TRAVIS_TAG:1}" - "./gradlew desktop:dist -Pbuildversion=${TRAVIS_TAG:1}"
- "./gradlew server:dist -Pbuildversion=${TRAVIS_TAG:1}" - "./gradlew server:dist -Pbuildversion=${TRAVIS_TAG:1}"
deploy: deploy:
- provider: releases - provider: releases
skip_cleanup: true skip_cleanup: true
draft: false draft: false
api_key: api_key:
secure: Cv5wFtWt62/A24EvSEQvMow7gKPbZ3oATEFPuSghhB2TQz1dA40Zee3Qvk4LFlpLrhYo4K0ZSczCZRGpR+hCd8+Dpww52bheYEvWuh3ZQfvu/fXtEx2j5PwP1qMpmIgSxETV/gkD7l9FImdh0VzktYiAvQfmi0bEocG9/D4QwjFpNat7iwBdcMiw1MvAygpdIWRsjiw0RKlB2mWarmoHhQ7Gu7qlU3j50uaEvcrtmU0pBUPggNQwQRv32i9NPvNFxrqqlUjDLIS8JFea99zCkp8BwYqbEvBIMzd+Qip1/stLJJA3+cDUClbsDtg8rAVetzpOrdLEEBmqShFe5MDl2yEHcsgpN9CFsyTaUfvB3P3rVjizvycMm42IsUkXQiarm5xTQ/TIA8Rd8AHiSKuweNCg1Fd5SFaRtKy8JVLXuxyfUccmyje6hhz2L4lS2Wfj3mAG7sqZUCXhWP79EKdGkiPOjKv4CwXEKmuH3BMVqPlNUZJr9Eg3sV1FG0h2l+MVOOnR635qdUbb49sYojYxVruMLX0BH1c4ZCu230m8CUoWA1Em1QNI75ya7+9Y5T6AsgWDVpBvdUo9fWNbdp+VQ0GskFQsJD5wtnxbcbHeFiERAgGBm7z6qt9u9LrQpBH+dsW52ADvYsu3L4nQEa+sdMHwTTwmGY+iUvsxu0DqxGg= secure: Cv5wFtWt62/A24EvSEQvMow7gKPbZ3oATEFPuSghhB2TQz1dA40Zee3Qvk4LFlpLrhYo4K0ZSczCZRGpR+hCd8+Dpww52bheYEvWuh3ZQfvu/fXtEx2j5PwP1qMpmIgSxETV/gkD7l9FImdh0VzktYiAvQfmi0bEocG9/D4QwjFpNat7iwBdcMiw1MvAygpdIWRsjiw0RKlB2mWarmoHhQ7Gu7qlU3j50uaEvcrtmU0pBUPggNQwQRv32i9NPvNFxrqqlUjDLIS8JFea99zCkp8BwYqbEvBIMzd+Qip1/stLJJA3+cDUClbsDtg8rAVetzpOrdLEEBmqShFe5MDl2yEHcsgpN9CFsyTaUfvB3P3rVjizvycMm42IsUkXQiarm5xTQ/TIA8Rd8AHiSKuweNCg1Fd5SFaRtKy8JVLXuxyfUccmyje6hhz2L4lS2Wfj3mAG7sqZUCXhWP79EKdGkiPOjKv4CwXEKmuH3BMVqPlNUZJr9Eg3sV1FG0h2l+MVOOnR635qdUbb49sYojYxVruMLX0BH1c4ZCu230m8CUoWA1Em1QNI75ya7+9Y5T6AsgWDVpBvdUo9fWNbdp+VQ0GskFQsJD5wtnxbcbHeFiERAgGBm7z6qt9u9LrQpBH+dsW52ADvYsu3L4nQEa+sdMHwTTwmGY+iUvsxu0DqxGg=
file: file:
- desktop/build/libs/desktop-release.jar - desktop/build/libs/Mindustry.jar
- server/build/libs/server-release.jar - server/build/libs/server-release.jar
on: on:
repo: Anuken/Mindustry repo: Anuken/Mindustry
tags: true tags: true
- provider: script - provider: script
script: bash update_wiki.sh script: bash update_wiki.sh
on: on:
repo: Anuken/Mindustry repo: Anuken/Mindustry
tags: true tags: true
env: env:
global: global:
secure: TqlUl/ojjkCMVOGbCTKz7Cnr4F08UyWzY/CiJ0vvUOGJGZ1qm7XavAlDf5XT0egU4mvr37THubFO8vojbqmrmy0oZnYh3njKFA8axgyZ8PyKkjGHOfd0i6qyEWsOr9H90/2X8r3LwEeLaDFyHpu3wljIGBjweg53g2qwmDwCFa9UR80FJZ+xDB+rD6B3cXT0DTEkCoLZXLqXm0Y3HvBdSuBL1LR/FNb2BSxNq+tNLGiz1kdQZV5erausbbZypBoGxzz63xAnyz2kkFz73A8xQYVTzGbFodTPz7HM13GVZ5s43I03Y+HYyHBgBaSLziO2hi2kzVJccOwzBp7wS4fs1MqsFY5+IeWJ9k+hm89NiYT7+6zlEgoUMlIniny1qLqWTzx7btUeuC/y/h5TVBNgaV+z0jmHycHfeSyq5I+vmX4J8qe3wmaN8TcdqYKU5nIznOTk3CM5Fzu0Bs9vkCkOxmormmcjMFW1RbdOLc/hpZWZggsBA88sNEAI8eq+r5QEeqzeCx8YKoZDjdrsqvgLMc3El3gS9oMGxkn0Y/TEcqs9Tc4BXtTkqIA68hD0DYzlAxYjVbbkAI9Hh9lHNvV3Dr/oCkGXQ/HflM143kj1L3tSBZpqeqQE2XhngB5nqpS3OZTmZbMTQ8qD2luU18yaTGMLF5tJS/fdKPRx0gQ1kL8= - secure: TqlUl/ojjkCMVOGbCTKz7Cnr4F08UyWzY/CiJ0vvUOGJGZ1qm7XavAlDf5XT0egU4mvr37THubFO8vojbqmrmy0oZnYh3njKFA8axgyZ8PyKkjGHOfd0i6qyEWsOr9H90/2X8r3LwEeLaDFyHpu3wljIGBjweg53g2qwmDwCFa9UR80FJZ+xDB+rD6B3cXT0DTEkCoLZXLqXm0Y3HvBdSuBL1LR/FNb2BSxNq+tNLGiz1kdQZV5erausbbZypBoGxzz63xAnyz2kkFz73A8xQYVTzGbFodTPz7HM13GVZ5s43I03Y+HYyHBgBaSLziO2hi2kzVJccOwzBp7wS4fs1MqsFY5+IeWJ9k+hm89NiYT7+6zlEgoUMlIniny1qLqWTzx7btUeuC/y/h5TVBNgaV+z0jmHycHfeSyq5I+vmX4J8qe3wmaN8TcdqYKU5nIznOTk3CM5Fzu0Bs9vkCkOxmormmcjMFW1RbdOLc/hpZWZggsBA88sNEAI8eq+r5QEeqzeCx8YKoZDjdrsqvgLMc3El3gS9oMGxkn0Y/TEcqs9Tc4BXtTkqIA68hD0DYzlAxYjVbbkAI9Hh9lHNvV3Dr/oCkGXQ/HflM143kj1L3tSBZpqeqQE2XhngB5nqpS3OZTmZbMTQ8qD2luU18yaTGMLF5tJS/fdKPRx0gQ1kL8=
- secure: VEskj/0TVX2o7iUVXuVPysj/VSWmPhDl57SrT7/nBNN/P/8N5jFAvx8PMzG7qT0S5FzKxuV20psE4WylUGRKdeRtK7/QNBV7T3YqYYM6BUB1VeRpxe5hLxTeuBK3izglFO8DkdDqjUtzQSjzkoYT75ilROjhBrBUPhVek7UlbBHbaklPWYFXHnJmYS1FpZTdzqIj+Y0Gd1PSL2MzK4X74aAHl0qaDgsTwYwtKs7IAz+kFaTZBRpi9VjQHAFhDlkDR3jo9wQjH8/F6x0lCgV/FulSc37Okdb40sLFG98xcEA6gWh1NPMkz8CulUdVE7mj7SJNxLbNvoMNrWOVRjmEsn59p/9LiNC1F9ncFz9vjQjAmi7rMFFGHGxe5nn8cIAkpTvHQQkZoWHAA9SNJTDMMf09m2pRy/vvzx+a6NVxyC9iNrhLlnBg4gxAqRh0S6NU0uL+fuygKixn7rqlnb7KMT7bAbfcuV+dng6c8V7hYKDCh7sJbH8iJump1xkwoM7ecnU8fxJF/oKOr/fbk0Bfxu+Q9qYLrV1+DEdm93Vl2Thq+DBKmI66jRGSva6HeCLFo81PEiEjP1nLv75+kvVfOqVqJrZD1BrvoG2eWT/3hVLrN2kEIWWlpvQVC7FL11yWmYtAuOBh/vfhI76zKr+YTS6ccG9rqW4XeYjJytshe8M=

View File

@@ -29,6 +29,13 @@ _Building:_ `./gradlew desktop:dist`
Server builds are bundled with each released build (in Releases). If you'd rather compile on your own, replace 'desktop' with 'server', e.g. `gradlew server:dist`. Server builds are bundled with each released build (in Releases). If you'd rather compile on your own, replace 'desktop' with 'server', e.g. `gradlew server:dist`.
#### Android
1. Install the Android SDK [here.](https://developer.android.com/studio#downloads) Make sure you're downloading the "Command line tools only", as Android Studio is not required.
2. Create a file named `local.properties` inside the Mindustry directory, with its contents looking like this: `sdk.dir=<Path to Android SDK you just downloaded, without these bracket>`. For example, if you're on Windows and installed the tools to C:\\tools, your local.properties would contain `sdk.dir=C:\\tools` (*note the double backslashes are required instead of single ones!*).
3. Run `gradlew android:assembleDebug` (or `./gradlew` if on linux/mac). This will create an unsigned APK in `android/build/outputs/apk`.
4. (Optional) To debug the application on a connected phone, do `gradlew android:installDebug android:run`. It is **highly recommended** to use IntelliJ for this instead, however.
##### Troubleshooting ##### Troubleshooting
If the terminal returns `Permission denied` or `Command not found` on Mac/Linux, run `chmod +x ./gradlew` before running `./gradlew`. *This is a one-time procedure.* If the terminal returns `Permission denied` or `Command not found` on Mac/Linux, run `chmod +x ./gradlew` before running `./gradlew`. *This is a one-time procedure.*
@@ -36,10 +43,18 @@ If the terminal returns `Permission denied` or `Command not found` on Mac/Linux,
--- ---
Gradle may take up to several minutes to download files. Be patient. <br> Gradle may take up to several minutes to download files. Be patient. <br>
After building, the output .JAR file should be in `/desktop/build/libs/desktop-release.jar` for desktop builds, and in `/server/build/libs/server-release.jar` for server builds. After building, the output .JAR file should be in `/desktop/build/libs/Mindustry.jar` for desktop builds, and in `/server/build/libs/server-release.jar` for server builds.
### Downloads ### Downloads
<a href="https://anuke.itch.io/mindustry"><img src="https://static.itch.io/images/badge.svg" width="auto" height="75"></a> [<img src="https://static.itch.io/images/badge.svg"
alt="Get it on Itch.io"
height="60">](https://anuke.itch.io/mindustry)
<a href="https://play.google.com/store/apps/details?id=io.anuke.mindustry&hl=en"><img src="https://upload.wikimedia.org/wikipedia/commons/thumb/c/cd/Get_it_on_Google_play.svg/1280px-Get_it_on_Google_play.svg.png" width="auto" height="75"></a> [<img src="https://play.google.com/intl/en_us/badges/images/generic/en-play-badge.png"
alt="Get it on Google Play"
height="80">](https://play.google.com/store/apps/details?id=io.anuke.mindustry)
[<img src="https://fdroid.gitlab.io/artwork/badge/get-it-on.png"
alt="Get it on F-Droid"
height="80">](https://f-droid.org/packages/io.anuke.mindustry/)

View File

@@ -1,8 +1,5 @@
## Translating for Mindustry ## Translating for Mindustry
**DISCLAIMER:** *Currently, 4.0 is far from done, which means that things such as block names, descriptions, and core text will be changing often. If you begin translating now, you might have to re-do large chunks of the bundle before final release.*
To begin, log in to your GitHub account, or if you don't have one yet, create it [here](https://github.com/). To begin, log in to your GitHub account, or if you don't have one yet, create it [here](https://github.com/).
Consult [this list](https://www.science.co.il/language/Locale-codes.php) to find the locale code for your language. Once you've found it, Consult [this list](https://www.science.co.il/language/Locale-codes.php) to find the locale code for your language. Once you've found it,
@@ -34,6 +31,10 @@ There are two ways to test the translation bundle:
1) Assuming you have the PC version downloaded, download your bundle file, name it `bundle.properties`, then place it in the same folder as the Mindustry desktop executable and run it. *You should get a popup message in-game confirming that you have loaded an external translation.* 1) Assuming you have the PC version downloaded, download your bundle file, name it `bundle.properties`, then place it in the same folder as the Mindustry desktop executable and run it. *You should get a popup message in-game confirming that you have loaded an external translation.*
2) For advanced users: simply download your fork of mindustry and compile/run the game. 2) For advanced users: simply download your fork of mindustry and compile/run the game.
#### Translating for stores (Steam, Google Play)
If you would like to translate the descriptions for Google Play or Steam, see the [Fastlane Metadata folder](https://github.com/Anuken/Mindustry/tree/master/fastlane/metadata) and submit a pull request for files there. On Google Play, you would create or edit the folder with the correct local code; for Steam, I have to update the translations manually, so just name the folder with the language name, and include the same files as the English folder does.
**And that's it.** **And that's it.**
*(...of course, that's never really it. Bother me on Discord when something inevitably goes wrong.)* *(...of course, that's never really it. Bother me on Discord when something inevitably goes wrong.)*

View File

@@ -32,32 +32,9 @@
<action android:name="android.intent.action.VIEW"/> <action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/> <category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/> <category android:name="android.intent.category.BROWSABLE"/>
<data android:mimeType="application/octet-stream"/> <data android:mimeType="application/octet-stream" />
<data android:scheme="file" android:host="*" android:pathPattern=".*\\.mmap"/>
</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"/> <data android:scheme="file" android:host="*" android:pathPattern=".*\\.msav"/>
</intent-filter> </intent-filter>
<intent-filter android:icon="@mipmap/ic_launcher"
android:label="Mindustry Map"
android:priority="1">
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:scheme="file" android:host="*" android:pathPattern=".*\\.mmap" android:mimeType="*/*"/>
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:scheme="file" android:host="*" android:pathPattern=".*\\.msav" android:mimeType="*/*"/>
</intent-filter>
</activity> </activity>
</application> </application>

View File

@@ -26,7 +26,6 @@ repositories{
dependencies{ dependencies{
implementation project(":core") implementation project(":core")
implementation project(":net")
implementation arcModule("backends:backend-android") implementation arcModule("backends:backend-android")
natives "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-armeabi" natives "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-armeabi"
@@ -46,12 +45,12 @@ task deploy(type: Copy){
from "build/outputs/apk/release/android-release.apk" from "build/outputs/apk/release/android-release.apk"
into "../deploy/" into "../deploy/"
rename("android-release.apk", appName + "-android-" + getVersionString() + ".apk") rename("android-release.apk", "${generateDeployName('android')}.apk")
} }
android{ android{
buildToolsVersion '28.0.3' buildToolsVersion '29.0.2'
compileSdkVersion 28 compileSdkVersion 29
sourceSets{ sourceSets{
main{ main{
manifest.srcFile 'AndroidManifest.xml' manifest.srcFile 'AndroidManifest.xml'
@@ -70,27 +69,21 @@ android{
} }
defaultConfig{ defaultConfig{
def vfile = file('../core/assets/version.properties') Properties props = new Properties().with{p -> p.load(file('../core/assets/version.properties').newReader()); return p }
Integer vcode = props['androidBuildCode']?.toInteger() ?: 1
def code = 0 def versionNameResult = "$versionNumber-$versionType-${getBuildVersion().replace(" ", "-")}"
def versionNameResult = "unknown"
if(vfile.exists()){
def props = new Properties()
props.load(new FileInputStream(vfile))
code = (props['androidBuildCode'] == null ? 0 : props['androidBuildCode']).toInteger() + 1
props['androidBuildCode'] = code.toString()
props.store(vfile.newWriter(), "Autogenerated file. Do not modify.")
versionNameResult = "$versionNumber-$versionType-${props['build'].replace(" ", "-")}"
}
applicationId "io.anuke.mindustry" applicationId "io.anuke.mindustry"
minSdkVersion 14 minSdkVersion 14
targetSdkVersion 28 targetSdkVersion 29
versionCode code
versionName versionNameResult versionName versionNameResult
versionCode vcode
if(project.hasProperty("release")){
props['androidBuildCode'] = (vcode + 1).toString()
}
props.store(file('../core/assets/version.properties').newWriter(), null)
} }
compileOptions{ compileOptions{

Binary file not shown.

Before

Width:  |  Height:  |  Size: 76 KiB

After

Width:  |  Height:  |  Size: 87 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.5 KiB

After

Width:  |  Height:  |  Size: 6.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.1 KiB

After

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.4 KiB

After

Width:  |  Height:  |  Size: 8.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.6 KiB

After

Width:  |  Height:  |  Size: 7.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.1 KiB

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.1 KiB

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.2 KiB

After

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.3 KiB

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.8 KiB

After

Width:  |  Height:  |  Size: 9.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.8 KiB

After

Width:  |  Height:  |  Size: 7.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

After

Width:  |  Height:  |  Size: 29 KiB

View File

@@ -1,32 +1,28 @@
package io.anuke.mindustry; package io.anuke.mindustry;
import android.Manifest; import android.*;
import android.content.Context; import android.app.*;
import android.content.Intent; import android.content.*;
import android.content.pm.ActivityInfo; import android.content.pm.*;
import android.content.pm.PackageManager; import android.net.*;
import android.net.Uri; import android.os.Build.*;
import android.os.Build; import android.os.*;
import android.os.Bundle; import android.provider.Settings.*;
import android.provider.Settings.Secure; import android.telephony.*;
import android.telephony.TelephonyManager; import io.anuke.arc.*;
import io.anuke.arc.Core; import io.anuke.arc.backends.android.surfaceview.*;
import io.anuke.arc.backends.android.surfaceview.AndroidApplication; import io.anuke.arc.files.*;
import io.anuke.arc.backends.android.surfaceview.AndroidApplicationConfiguration; import io.anuke.arc.function.*;
import io.anuke.arc.files.FileHandle; import io.anuke.arc.scene.ui.layout.*;
import io.anuke.arc.function.Consumer; import io.anuke.arc.util.*;
import io.anuke.arc.function.Predicate; import io.anuke.arc.util.serialization.*;
import io.anuke.arc.scene.ui.layout.Unit; import io.anuke.mindustry.game.Saves.*;
import io.anuke.arc.util.Strings; import io.anuke.mindustry.io.*;
import io.anuke.arc.util.serialization.Base64Coder; import io.anuke.mindustry.ui.dialogs.*;
import io.anuke.mindustry.core.Platform;
import io.anuke.mindustry.game.Saves.SaveSlot;
import io.anuke.mindustry.io.SaveIO;
import io.anuke.mindustry.net.*;
import io.anuke.mindustry.ui.dialogs.FileChooser;
import java.io.*; import java.io.*;
import java.util.ArrayList; import java.lang.System;
import java.util.*;
import static io.anuke.mindustry.Vars.*; import static io.anuke.mindustry.Vars.*;
@@ -34,14 +30,16 @@ public class AndroidLauncher extends AndroidApplication{
public static final int PERMISSION_REQUEST_CODE = 1; public static final int PERMISSION_REQUEST_CODE = 1;
boolean doubleScaleTablets = true; boolean doubleScaleTablets = true;
FileChooser chooser; FileChooser chooser;
Runnable permCallback;
@Override @Override
protected void onCreate(Bundle savedInstanceState){ protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
AndroidApplicationConfiguration config = new AndroidApplicationConfiguration(); if(doubleScaleTablets && isTablet(this.getContext())){
config.useImmersiveMode = true; Scl.setAddition(0.5f);
config.depth = 0; }
Platform.instance = new Platform(){
initialize(new ClientLauncher(){
@Override @Override
public void hide(){ public void hide(){
@@ -71,13 +69,48 @@ public class AndroidLauncher extends AndroidApplication{
} }
@Override @Override
public void showFileChooser(String text, String content, Consumer<FileHandle> cons, boolean open, Predicate<String> filetype){ public void showFileChooser(boolean open, String extension, Consumer<FileHandle> cons){
chooser = new FileChooser(text, file -> filetype.test(file.extension().toLowerCase()), open, cons); if(VERSION.SDK_INT >= VERSION_CODES.Q){
if(Build.VERSION.SDK_INT < Build.VERSION_CODES.M || (checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED && Intent intent = new Intent(open ? Intent.ACTION_OPEN_DOCUMENT : Intent.ACTION_CREATE_DOCUMENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType(extension.equals("zip") ? "application/zip" : "*/*");
addResultListener(i -> startActivityForResult(intent, i), (code, in) -> {
if(code == Activity.RESULT_OK && in != null && in.getData() != null){
Uri uri = in.getData();
if(uri.getPath().contains("(invalid)")) return;
Core.app.post(() -> Core.app.post(() -> cons.accept(new FileHandle(uri.getPath()){
@Override
public InputStream read(){
try{
return getContentResolver().openInputStream(uri);
}catch(IOException e){
throw new ArcRuntimeException(e);
}
}
@Override
public OutputStream write(boolean append){
try{
return getContentResolver().openOutputStream(uri);
}catch(IOException e){
throw new ArcRuntimeException(e);
}
}
})));
}
});
}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)){ checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED)){
chooser.show(); chooser = new FileChooser(open ? "$open" : "$save", file -> file.extension().equalsIgnoreCase(extension), open, file -> {
chooser = null; if(!open){
cons.accept(file.parent().child(file.nameWithoutExtension() + "." + extension));
}else{ }else{
cons.accept(file);
}
});
ArrayList<String> perms = new ArrayList<>(); ArrayList<String> perms = new ArrayList<>();
if(checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED){ if(checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED){
perms.add(Manifest.permission.WRITE_EXTERNAL_STORAGE); perms.add(Manifest.permission.WRITE_EXTERNAL_STORAGE);
@@ -86,6 +119,8 @@ public class AndroidLauncher extends AndroidApplication{
perms.add(Manifest.permission.READ_EXTERNAL_STORAGE); perms.add(Manifest.permission.READ_EXTERNAL_STORAGE);
} }
requestPermissions(perms.toArray(new String[0]), PERMISSION_REQUEST_CODE); requestPermissions(perms.toArray(new String[0]), PERMISSION_REQUEST_CODE);
}else{
super.showFileChooser(open, extension, cons);
} }
} }
@@ -103,16 +138,11 @@ public class AndroidLauncher extends AndroidApplication{
public boolean canDonate(){ public boolean canDonate(){
return true; return true;
} }
}; }, new AndroidApplicationConfiguration(){{
useImmersiveMode = true;
if(doubleScaleTablets && isTablet(this.getContext())){ depth = 0;
Unit.dp.addition = 0.5f; hideStatusBar = true;
} }});
config.hideStatusBar = true;
Net.setClientProvider(new ArcNetClient());
Net.setServerProvider(new ArcNetServer());
initialize(new Mindustry(), config);
checkFiles(getIntent()); checkFiles(getIntent());
} }
@@ -123,7 +153,11 @@ public class AndroidLauncher extends AndroidApplication{
if(i != PackageManager.PERMISSION_GRANTED) return; if(i != PackageManager.PERMISSION_GRANTED) return;
} }
if(chooser != null){ if(chooser != null){
chooser.show(); Core.app.post(chooser::show);
}
if(permCallback != null){
Core.app.post(permCallback);
permCallback = null;
} }
} }
} }
@@ -156,10 +190,10 @@ public class AndroidLauncher extends AndroidApplication{
SaveSlot slot = control.saves.importSave(file); SaveSlot slot = control.saves.importSave(file);
ui.load.runLoadSave(slot); ui.load.runLoadSave(slot);
}catch(IOException e){ }catch(IOException e){
ui.showError(Core.bundle.format("save.import.fail", Strings.parseException(e, true))); ui.showException("$save.import.fail", e);
} }
}else{ }else{
ui.showError("$save.import.invalid"); ui.showErrorMessage("$save.import.invalid");
} }
}else if(map){ //open map }else if(map){ //open map
FileHandle file = Core.files.local("temp-map." + mapExtension); FileHandle file = Core.files.local("temp-map." + mapExtension);

View File

@@ -4,6 +4,11 @@ import java.lang.annotation.*;
public class Annotations{ public class Annotations{
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.SOURCE)
public @interface StyleDefaults {
}
/** Indicates that a method should always call its super version. */ /** Indicates that a method should always call its super version. */
@Target(ElementType.METHOD) @Target(ElementType.METHOD)
@Retention(RetentionPolicy.SOURCE) @Retention(RetentionPolicy.SOURCE)
@@ -25,7 +30,7 @@ public class Annotations{
} }
/** Indicates that a method return or field cannot be null.*/ /** Indicates that a method return or field cannot be null.*/
@Target({ElementType.METHOD, ElementType.FIELD}) @Target({ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER, ElementType.LOCAL_VARIABLE})
@Retention(RetentionPolicy.SOURCE) @Retention(RetentionPolicy.SOURCE)
public @interface NonNull{ public @interface NonNull{

View File

@@ -1,26 +1,22 @@
package io.anuke.annotations; package io.anuke.annotations;
import com.squareup.javapoet.*; import com.squareup.javapoet.*;
import io.anuke.annotations.Annotations.*;
import javax.annotation.processing.AbstractProcessor; import javax.annotation.processing.*;
import javax.annotation.processing.ProcessingEnvironment; import javax.lang.model.*;
import javax.annotation.processing.RoundEnvironment; import javax.lang.model.element.*;
import javax.annotation.processing.SupportedSourceVersion; import javax.tools.Diagnostic.*;
import javax.lang.model.SourceVersion; import javax.tools.*;
import javax.lang.model.element.Modifier; import java.nio.file.*;
import javax.lang.model.element.TypeElement; import java.util.*;
import javax.tools.Diagnostic.Kind;
import javax.tools.StandardLocation;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
@SupportedSourceVersion(SourceVersion.RELEASE_8) @SupportedSourceVersion(SourceVersion.RELEASE_8)
@SupportedAnnotationTypes("io.anuke.annotations.Annotations.StyleDefaults")
public class AssetsAnnotationProcessor extends AbstractProcessor{ public class AssetsAnnotationProcessor extends AbstractProcessor{
/** Name of the base package to put all the generated classes. */ /** Name of the base package to put all the generated classes. */
private static final String packageName = "io.anuke.mindustry.gen"; private static final String packageName = "io.anuke.mindustry.gen";
private String path;
private int round; private int round;
@Override @Override
@@ -38,13 +34,13 @@ public class AssetsAnnotationProcessor extends AbstractProcessor{
if(round++ != 0) return false; //only process 1 round if(round++ != 0) return false; //only process 1 round
try{ try{
path = Paths.get(Utils.filer.createResource(StandardLocation.CLASS_OUTPUT, "no", "no")
String path = Paths.get(Utils.filer.createResource(StandardLocation.CLASS_OUTPUT, "no", "no") .toUri().toURL().toString().substring(System.getProperty("os.name").contains("Windows") ? 6 : "file:".length()))
.toUri().toURL().toString().substring("file:".length()))
.getParent().getParent().getParent().getParent().getParent().getParent().toString(); .getParent().getParent().getParent().getParent().getParent().getParent().toString();
process("Sounds", path + "/assets/sounds", "io.anuke.arc.audio.Sound", "newSound"); processSounds("Sounds", path + "/assets/sounds", "io.anuke.arc.audio.Sound");
process("Musics", path + "/assets/music", "io.anuke.arc.audio.Music", "newMusic"); processSounds("Musics", path + "/assets/music", "io.anuke.arc.audio.Music");
processUI(roundEnv.getElementsAnnotatedWith(StyleDefaults.class));
return true; return true;
}catch(Exception e){ }catch(Exception e){
@@ -53,16 +49,73 @@ public class AssetsAnnotationProcessor extends AbstractProcessor{
} }
} }
@Override void processUI(Set<? extends Element> elements) throws Exception{
public Set<String> getSupportedAnnotationTypes() { String[] iconSizes = {"small", "smaller", "tiny"};
return Collections.singleton("*");
TypeSpec.Builder type = TypeSpec.classBuilder("Tex").addModifiers(Modifier.PUBLIC);
TypeSpec.Builder ictype = TypeSpec.classBuilder("Icon").addModifiers(Modifier.PUBLIC);
MethodSpec.Builder load = MethodSpec.methodBuilder("load").addModifiers(Modifier.PUBLIC, Modifier.STATIC);
MethodSpec.Builder loadStyles = MethodSpec.methodBuilder("loadStyles").addModifiers(Modifier.PUBLIC, Modifier.STATIC);
MethodSpec.Builder icload = MethodSpec.methodBuilder("load").addModifiers(Modifier.PUBLIC, Modifier.STATIC);
String resources = path + "/assets-raw/sprites/ui";
Files.walk(Paths.get(resources)).forEach(p -> {
if(Files.isDirectory(p) || p.getFileName().toString().equals(".DS_Store")) return;
String filename = p.getFileName().toString();
filename = filename.substring(0, filename.indexOf("."));
ArrayList<String> names = new ArrayList<>();
names.add("");
if(filename.contains("icon")){
names.addAll(Arrays.asList(iconSizes));
} }
void process(String classname, String path, String rtype, String loadMethod) throws Exception{ for(String suffix : names){
TypeSpec.Builder type = TypeSpec.classBuilder(classname).addModifiers(Modifier.PUBLIC); suffix = suffix.isEmpty() ? "" : "-" + suffix;
MethodSpec.Builder load = MethodSpec.methodBuilder("load").addModifiers(Modifier.PUBLIC, Modifier.STATIC);
MethodSpec.Builder dispose = MethodSpec.methodBuilder("dispose").addModifiers(Modifier.PUBLIC, Modifier.STATIC);
String sfilen = filename + suffix;
String dtype = p.getFileName().toString().endsWith(".9.png") ? "io.anuke.arc.scene.style.NinePatchDrawable" : "io.anuke.arc.scene.style.TextureRegionDrawable";
String varname = capitalize(sfilen);
TypeSpec.Builder ttype = type;
MethodSpec.Builder tload = load;
if(varname.startsWith("icon")){
varname = varname.substring("icon".length());
varname = Character.toLowerCase(varname.charAt(0)) + varname.substring(1);
ttype = ictype;
tload = icload;
if(SourceVersion.isKeyword(varname)) varname += "i";
}
if(SourceVersion.isKeyword(varname)) varname += "s";
ttype.addField(ClassName.bestGuess(dtype), varname, Modifier.STATIC, Modifier.PUBLIC);
tload.addStatement(varname + " = ("+dtype+")io.anuke.arc.Core.atlas.drawable($S)", sfilen);
}
});
for(Element elem : elements){
TypeElement t = (TypeElement)elem;
t.getEnclosedElements().stream().filter(e -> e.getKind() == ElementKind.FIELD).forEach(field -> {
String fname = field.getSimpleName().toString();
if(fname.startsWith("default")){
loadStyles.addStatement("io.anuke.arc.Core.scene.addStyle(" + field.asType().toString() + ".class, io.anuke.mindustry.ui.Styles." + fname + ")");
}
});
}
ictype.addMethod(icload.build());
JavaFile.builder(packageName, ictype.build()).build().writeTo(Utils.filer);
type.addMethod(load.build());
type.addMethod(loadStyles.build());
JavaFile.builder(packageName, type.build()).build().writeTo(Utils.filer);
}
void processSounds(String classname, String path, String rtype) throws Exception{
TypeSpec.Builder type = TypeSpec.classBuilder(classname).addModifiers(Modifier.PUBLIC);
MethodSpec.Builder dispose = MethodSpec.methodBuilder("dispose").addModifiers(Modifier.PUBLIC, Modifier.STATIC);
MethodSpec.Builder loadBegin = MethodSpec.methodBuilder("load").addModifiers(Modifier.PUBLIC, Modifier.STATIC);
HashSet<String> names = new HashSet<>(); HashSet<String> names = new HashSet<>();
Files.list(Paths.get(path)).forEach(p -> { Files.list(Paths.get(path)).forEach(p -> {
@@ -80,15 +133,40 @@ public class AssetsAnnotationProcessor extends AbstractProcessor{
name = name + "s"; name = name + "s";
} }
load.addStatement(name + " = io.anuke.arc.Core.audio."+loadMethod+"(io.anuke.arc.Core.files.internal($S))", path.substring(path.lastIndexOf("/") + 1) + "/" + fname); String filepath = path.substring(path.lastIndexOf("/") + 1) + "/" + fname;
String filename = "io.anuke.arc.Core.app.getType() != io.anuke.arc.Application.ApplicationType.iOS ? \"" + filepath + "\" : \"" + filepath.replace(".ogg", ".mp3")+"\"";
loadBegin.addStatement("io.anuke.arc.Core.assets.load("+filename +", "+rtype+".class).loaded = a -> " + name + " = ("+rtype+")a", filepath, filepath.replace(".ogg", ".mp3"));
dispose.addStatement(name + ".dispose()"); dispose.addStatement(name + ".dispose()");
dispose.addStatement(name + " = null"); dispose.addStatement(name + " = null");
type.addField(FieldSpec.builder(ClassName.bestGuess(rtype), name, Modifier.STATIC, Modifier.PUBLIC).initializer("new io.anuke.arc.audio.mock.Mock" + rtype.substring(rtype.lastIndexOf(".") + 1)+ "()").build()); type.addField(FieldSpec.builder(ClassName.bestGuess(rtype), name, Modifier.STATIC, Modifier.PUBLIC).initializer("new io.anuke.arc.audio.mock.Mock" + rtype.substring(rtype.lastIndexOf(".") + 1)+ "()").build());
//cons.consume(type, fname, name);
}); });
type.addMethod(load.build()); if(classname.equals("Sounds")){
type.addField(FieldSpec.builder(ClassName.bestGuess(rtype), "none", Modifier.STATIC, Modifier.PUBLIC).initializer("new io.anuke.arc.audio.mock.Mock" + rtype.substring(rtype.lastIndexOf(".") + 1)+ "()").build());
}
type.addMethod(loadBegin.build());
type.addMethod(dispose.build()); type.addMethod(dispose.build());
JavaFile.builder(packageName, type.build()).build().writeTo(Utils.filer); JavaFile.builder(packageName, type.build()).build().writeTo(Utils.filer);
} }
static String capitalize(String s){
StringBuilder result = new StringBuilder(s.length());
for(int i = 0; i < s.length(); i++){
char c = s.charAt(i);
if(c != '_' && c != '-'){
if(i > 0 && (s.charAt(i - 1) == '_' || s.charAt(i - 1) == '-')){
result.append(Character.toUpperCase(c));
}else{
result.append(c);
}
}
}
return result.toString();
}
} }

View File

@@ -54,8 +54,20 @@ class CodeAnalyzerTreeScanner extends TreePathScanner<Object, Trees> {
return false; return false;
} }
@SuppressWarnings("unchecked")
public boolean checkScope (Scope members) { public boolean checkScope (Scope members) {
for (Symbol s : members.getElements()) { Iterable<Symbol> it;
try{
it = (Iterable<Symbol>)members.getClass().getMethod("getElements").invoke(members);
}catch(Throwable t){
try{
it = (Iterable<Symbol>)members.getClass().getMethod("getSymbols").invoke(members);
}catch(Exception e){
throw new RuntimeException(e);
}
}
for (Symbol s : it) {
if (s instanceof MethodSymbol) { if (s instanceof MethodSymbol) {
MethodSymbol ms = (MethodSymbol) s; MethodSymbol ms = (MethodSymbol) s;

View File

@@ -118,7 +118,7 @@ public class RemoteReadGenerator{
if(entry.forward && entry.where.isServer && needsPlayer){ if(entry.forward && entry.where.isServer && needsPlayer){
//call forwarded method //call forwarded method
readBlock.addStatement(packageName + "." + entry.className + "." + entry.element.getSimpleName() + readBlock.addStatement(packageName + "." + entry.className + "." + entry.element.getSimpleName() +
"__forward(player.con.id" + (varResult.length() == 0 ? "" : ", ") + varResult.toString() + ")"); "__forward(player.con" + (varResult.length() == 0 ? "" : ", ") + varResult.toString() + ")");
} }
readBlock.nextControlFlow("catch (java.lang.Exception e)"); readBlock.nextControlFlow("catch (java.lang.Exception e)");

View File

@@ -85,19 +85,19 @@ public class RemoteWriteGenerator{
//if toAll is false, it's a 'send to one player' variant, so add the player as a parameter //if toAll is false, it's a 'send to one player' variant, so add the player as a parameter
if(!toAll){ if(!toAll){
method.addParameter(int.class, "playerClientID"); method.addParameter(ClassName.bestGuess("io.anuke.mindustry.net.NetConnection"), "playerConnection");
} }
//add sender to ignore //add sender to ignore
if(forwarded){ if(forwarded){
method.addParameter(int.class, "exceptSenderID"); method.addParameter(ClassName.bestGuess("io.anuke.mindustry.net.NetConnection"), "exceptConnection");
} }
//call local method if applicable, shouldn't happen when forwarding method as that already happens by default //call local method if applicable, shouldn't happen when forwarding method as that already happens by default
if(!forwarded && methodEntry.local != Loc.none){ if(!forwarded && methodEntry.local != Loc.none){
//add in local checks //add in local checks
if(methodEntry.local != Loc.both){ if(methodEntry.local != Loc.both){
method.beginControlFlow("if(" + getCheckString(methodEntry.local) + " || !io.anuke.mindustry.net.Net.active())"); method.beginControlFlow("if(" + getCheckString(methodEntry.local) + " || !io.anuke.mindustry.Vars.net.active())");
} }
//concatenate parameters //concatenate parameters
@@ -159,7 +159,7 @@ public class RemoteWriteGenerator{
boolean writePlayerSkipCheck = methodEntry.where == Loc.both && i == 0; boolean writePlayerSkipCheck = methodEntry.where == Loc.both && i == 0;
if(writePlayerSkipCheck){ //write begin check if(writePlayerSkipCheck){ //write begin check
method.beginControlFlow("if(io.anuke.mindustry.net.Net.server())"); method.beginControlFlow("if(io.anuke.mindustry.Vars.net.server())");
} }
if(Utils.isPrimitive(typeName)){ //check if it's a primitive, and if so write it if(Utils.isPrimitive(typeName)){ //check if it's a primitive, and if so write it
@@ -194,18 +194,18 @@ public class RemoteWriteGenerator{
if(forwarded){ //forward packet if(forwarded){ //forward packet
if(!methodEntry.local.isClient){ //if the client doesn't get it called locally, forward it back after validation if(!methodEntry.local.isClient){ //if the client doesn't get it called locally, forward it back after validation
sendString = "send("; sendString = "io.anuke.mindustry.Vars.net.send(";
}else{ }else{
sendString = "sendExcept(exceptSenderID, "; sendString = "io.anuke.mindustry.Vars.net.sendExcept(exceptConnection, ";
} }
}else if(toAll){ //send to all players / to server }else if(toAll){ //send to all players / to server
sendString = "send("; sendString = "io.anuke.mindustry.Vars.net.send(";
}else{ //send to specific client from server }else{ //send to specific client from server
sendString = "sendTo(playerClientID, "; sendString = "playerConnection.send(";
} }
//send the actual packet //send the actual packet
method.addStatement("io.anuke.mindustry.net.Net." + sendString + "packet, " + method.addStatement(sendString + "packet, " +
(methodEntry.unreliable ? "io.anuke.mindustry.net.Net.SendMode.udp" : "io.anuke.mindustry.net.Net.SendMode.tcp") + ")"); (methodEntry.unreliable ? "io.anuke.mindustry.net.Net.SendMode.udp" : "io.anuke.mindustry.net.Net.SendMode.tcp") + ")");
@@ -217,8 +217,8 @@ public class RemoteWriteGenerator{
} }
private String getCheckString(Loc loc){ private String getCheckString(Loc loc){
return loc.isClient && loc.isServer ? "io.anuke.mindustry.net.Net.server() || io.anuke.mindustry.net.Net.client()" : return loc.isClient && loc.isServer ? "io.anuke.mindustry.Vars.net.server() || io.anuke.mindustry.Vars.net.client()" :
loc.isClient ? "io.anuke.mindustry.net.Net.client()" : loc.isClient ? "io.anuke.mindustry.Vars.net.client()" :
loc.isServer ? "io.anuke.mindustry.net.Net.server()" : "false"; loc.isServer ? "io.anuke.mindustry.Vars.net.server()" : "false";
} }
} }

View File

@@ -8,7 +8,7 @@ buildscript{
} }
dependencies{ dependencies{
classpath 'com.mobidevelop.robovm:robovm-gradle-plugin:2.3.6' classpath 'com.mobidevelop.robovm:robovm-gradle-plugin:2.3.7'
classpath "com.badlogicgames.gdx:gdx-tools:1.9.10" classpath "com.badlogicgames.gdx:gdx-tools:1.9.10"
classpath "com.badlogicgames.packr:packr:2.1-SNAPSHOT" classpath "com.badlogicgames.packr:packr:2.1-SNAPSHOT"
} }
@@ -16,35 +16,29 @@ buildscript{
allprojects{ allprojects{
version = 'release' version = 'release'
apply plugin: 'maven'
group = 'com.github.Anuken'
ext{ ext{
versionNumber = '4' versionNumber = '4'
versionModifier = 'beta' if(!project.hasProperty("versionModifier")) versionModifier = 'release'
if(!project.hasProperty("versionType")) versionType = 'official' if(!project.hasProperty("versionType")) versionType = 'official'
appName = 'Mindustry' appName = 'Mindustry'
gdxVersion = '1.9.10' gdxVersion = '1.9.10'
roboVMVersion = '2.3.6' roboVMVersion = '2.3.7'
steamworksVersion = '1.8.0'
arcHash = null arcHash = null
debugged = { debugged = {
return new File(projectDir.parent, '../debug').exists() && !project.hasProperty("release") && project.hasProperty("args") return new File(projectDir.parent, '../Mindustry-Debug').exists() && !project.hasProperty("release") && project.hasProperty("args")
} }
localArc = { localArc = {
return (!project.hasProperty("release")) && new File(projectDir.parent, '../Arc').exists() return !project.hasProperty("release") && new File(projectDir.parent, '../Arc').exists()
} }
getArcHash = { getArcHash = {
//get latest commit hash from github since JITPack's '-snapshot' version doesn't work correctly return new Properties().with{ p -> p.load(file('gradle.properties').newReader()); return p }["archash"]
if(arcHash == null){
try{
arcHash = 'git ls-remote https://github.com/Anuken/Arc.git'.execute().text.split("\t")[0]
}catch(e){
e.printStackTrace()
arcHash = "-SNAPSHOT"
}
}
return arcHash
} }
arcModule = { String name -> arcModule = { String name ->
@@ -57,11 +51,36 @@ allprojects{
} }
} }
generateDeployName = { String platform ->
if(platform == "windows"){
platform += "64"
}
platform = platform.capitalize()
if(platform.endsWith("64") || platform.endsWith("32")){
platform = "${platform.substring(0, platform.length() - 2)}-${platform.substring(platform.length() - 2)}bit"
}
return "[${platform}]${getModifierString()}[${getNeatVersionString()}]${appName}"
}
getVersionString = { getVersionString = {
String buildVersion = getBuildVersion() String buildVersion = getBuildVersion()
return "$versionNumber-$versionModifier-$buildVersion" return "$versionNumber-$versionModifier-$buildVersion"
} }
getNeatVersionString = {
String buildVersion = getBuildVersion()
return "v$buildVersion"
}
getModifierString = {
if(versionModifier != "release"){
return "[${versionModifier.toUpperCase()}]"
}
return ""
}
getBuildVersion = { getBuildVersion = {
if(!project.hasProperty("buildversion")) return "custom build" if(!project.hasProperty("buildversion")) return "custom build"
return project.getProperties()["buildversion"] return project.getProperties()["buildversion"]
@@ -94,6 +113,7 @@ allprojects{
props.load(new FileInputStream(pfile)) props.load(new FileInputStream(pfile))
String buildid = getBuildVersion() String buildid = getBuildVersion()
println("Compiling with build: '$buildid'")
props["type"] = versionType props["type"] = versionType
props["number"] = versionNumber props["number"] = versionNumber
@@ -122,29 +142,14 @@ project(":desktop"){
dependencies{ dependencies{
compile project(":core") compile project(":core")
compile project(":net")
if(debugged()) compile project(":debug") if(debugged()) compile project(":debug")
compile "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-desktop" compile "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-desktop"
compile "com.badlogicgames.gdx:gdx-freetype-platform:$gdxVersion:natives-desktop" compile "com.badlogicgames.gdx:gdx-freetype-platform:$gdxVersion:natives-desktop"
compile arcModule("backends:backend-lwjgl3") compile "com.code-disaster.steamworks4j:steamworks4j:$steamworksVersion"
compile 'com.github.MinnDevelopment:java-discord-rpc:v2.0.2' compile "com.code-disaster.steamworks4j:steamworks4j-server:$steamworksVersion"
}
}
project(":desktop-sdl"){
apply plugin: "java"
dependencies{
compile project(":core")
compile project(":net")
if(debugged()) compile project(":debug")
compile "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-desktop"
compile "com.badlogicgames.gdx:gdx-freetype-platform:$gdxVersion:natives-desktop"
compile arcModule("backends:backend-sdl") compile arcModule("backends:backend-sdl")
compile 'com.github.MinnDevelopment:java-discord-rpc:v2.0.2' compile 'com.github.MinnDevelopment:java-discord-rpc:v2.0.2'
@@ -164,7 +169,7 @@ project(":ios"){
} }
props['app.id'] = 'io.anuke.mindustry' props['app.id'] = 'io.anuke.mindustry'
props['app.version'] = '4.0' props['app.version'] = '4.2.1'
props['app.mainclass'] = 'io.anuke.mindustry.IOSLauncher' props['app.mainclass'] = 'io.anuke.mindustry.IOSLauncher'
props['app.executable'] = 'IOSLauncher' props['app.executable'] = 'IOSLauncher'
props['app.name'] = 'Mindustry' props['app.name'] = 'Mindustry'
@@ -174,7 +179,6 @@ project(":ios"){
dependencies{ dependencies{
compile project(":core") compile project(":core")
compile project(":net")
compileOnly project(":annotations") compileOnly project(":annotations")
compile arcModule("backends:backend-robovm") compile arcModule("backends:backend-robovm")
@@ -190,7 +194,9 @@ project(":core"){
apply plugin: "java" apply plugin: "java"
task preGen{ task preGen{
outputs.upToDateWhen{ false }
generateLocales() generateLocales()
writeVersion()
} }
dependencies{ dependencies{
@@ -221,6 +227,7 @@ project(":core"){
compileJava.dependsOn(preGen) compileJava.dependsOn(preGen)
compile "org.lz4:lz4-java:1.4.1"
compile arcModule("arc-core") compile arcModule("arc-core")
compile arcModule("extensions:freetype") compile arcModule("extensions:freetype")
compile arcModule("extensions:arcnet") compile arcModule("extensions:arcnet")
@@ -236,7 +243,6 @@ project(":server"){
dependencies{ dependencies{
compile project(":core") compile project(":core")
compile project(":net")
compile arcModule("backends:backend-headless") compile arcModule("backends:backend-headless")
} }
} }
@@ -264,7 +270,6 @@ project(":tools"){
dependencies{ dependencies{
compile project(":core") compile project(":core")
//for render tests
compile "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-desktop" compile "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-desktop"
compile "com.badlogicgames.gdx:gdx-freetype-platform:$gdxVersion:natives-desktop" compile "com.badlogicgames.gdx:gdx-freetype-platform:$gdxVersion:natives-desktop"
@@ -281,12 +286,23 @@ project(":annotations"){
} }
} }
project(":net"){ task deployAll{
apply plugin: "java" task cleanDeployOutput{
doFirst{
if("${getBuildVersion()}" == "custom build" || "${getBuildVersion()}" == "") throw new IllegalArgumentException("----\n\nSET A BUILD NUMBER FIRST!\n\n----")
if(!project.hasProperty("release")) throw new IllegalArgumentException("----\n\nSET THE RELEASE PROJECT PROPERTY FIRST!\n\n----")
dependencies{ delete{
compile project(":core") delete "deploy/"
compile "org.lz4:lz4-java:1.4.1"
compile 'com.github.Anuken:WaifUPnP:05eb46bc577fd7674596946ba288c96c0cedd893'
} }
}
}
dependsOn cleanDeployOutput
dependsOn "desktop:packrLinux64"
dependsOn "desktop:packrWindows64"
dependsOn "desktop:packrWindows32"
dependsOn "desktop:packrMacOS"
dependsOn "server:deploy"
dependsOn "android:deploy"
} }

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 KiB

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.7 KiB

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 KiB

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 KiB

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.9 KiB

After

Width:  |  Height:  |  Size: 5.5 KiB

View File

Before

Width:  |  Height:  |  Size: 91 B

After

Width:  |  Height:  |  Size: 91 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 109 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 104 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 95 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 168 B

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 165 B

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 297 B

After

Width:  |  Height:  |  Size: 2.7 KiB

View File

@@ -0,0 +1,8 @@
{
duplicatePadding: true,
combineSubdirectories: true,
flattenPaths: true,
maxWidth: 2048,
maxHeight: 2048,
fast: true
}

View File

Before

Width:  |  Height:  |  Size: 9.7 KiB

After

Width:  |  Height:  |  Size: 9.7 KiB

View File

Before

Width:  |  Height:  |  Size: 38 KiB

After

Width:  |  Height:  |  Size: 38 KiB

View File

Before

Width:  |  Height:  |  Size: 8.0 KiB

After

Width:  |  Height:  |  Size: 8.0 KiB

View File

Before

Width:  |  Height:  |  Size: 8.8 KiB

After

Width:  |  Height:  |  Size: 8.8 KiB

View File

Before

Width:  |  Height:  |  Size: 7.2 KiB

After

Width:  |  Height:  |  Size: 7.2 KiB

View File

Before

Width:  |  Height:  |  Size: 29 KiB

After

Width:  |  Height:  |  Size: 29 KiB

View File

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 15 KiB

View File

Before

Width:  |  Height:  |  Size: 33 KiB

After

Width:  |  Height:  |  Size: 33 KiB

View File

Before

Width:  |  Height:  |  Size: 19 KiB

After

Width:  |  Height:  |  Size: 19 KiB

View File

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 15 KiB

View File

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 17 KiB

View File

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 14 KiB

View File

@@ -17,6 +17,12 @@ gameover = Game Over
gameover.pvp = The[accent] {0}[] team is victorious! gameover.pvp = The[accent] {0}[] team is victorious!
highscore = [accent]New highscore! highscore = [accent]New highscore!
load.sound = Sounds
load.map = Maps
load.image = Images
load.content = Content
load.system = System
stat.wave = Waves Defeated:[accent] {0} stat.wave = Waves Defeated:[accent] {0}
stat.enemiesDestroyed = Enemies Destroyed:[accent] {0} stat.enemiesDestroyed = Enemies Destroyed:[accent] {0}
stat.built = Buildings Built:[accent] {0} stat.built = Buildings Built:[accent] {0}
@@ -25,9 +31,6 @@ stat.deconstructed = Buildings Deconstructed:[accent] {0}
stat.delivered = Resources Launched: stat.delivered = Resources Launched:
stat.rank = Final Rank: [accent]{0} stat.rank = Final Rank: [accent]{0}
placeline = You have selected a block.\nYou can[accent] place in a line[] by[accent] holding down your finger for a few seconds[] and dragging in a direction.\n\n[scarlet]DO IT.
removearea = You have selected removal mode.\nYou can[accent] remove blocks in a rectangle[] by[accent] holding down your finger for a few seconds[] and dragging.\n\n[scarlet]DO IT.
launcheditems = [accent]Launched Items launcheditems = [accent]Launched Items
map.delete = Are you sure you want to delete the map "[accent]{0}[]"? map.delete = Are you sure you want to delete the map "[accent]{0}[]"?
level.highscore = High Score: [accent]{0} level.highscore = High Score: [accent]{0}
@@ -46,10 +49,21 @@ newgame = New Game
none = <none> none = <none>
minimap = Minimap minimap = Minimap
close = Close close = Close
website = Website
quit = Quit quit = Quit
save.quit = Save & Quit
maps = Maps maps = Maps
maps.browse = Browse Maps
continue = Continue continue = Continue
maps.none = [lightgray]No maps found! maps.none = [lightgray]No maps found!
invalid = Invalid
preparingconfig = Preparing Config
preparingcontent = Preparing Content
uploadingcontent = Uploading Content
uploadingpreviewfile = Uploading Preview File
committingchanges = Comitting Changes
done = Done
about.button = About about.button = About
name = Name: name = Name:
noname = Pick a[accent] player name[] first. noname = Pick a[accent] player name[] first.
@@ -60,28 +74,35 @@ techtree = Tech Tree
research.list = [lightgray]Research: research.list = [lightgray]Research:
research = Research research = Research
researched = [lightgray]{0} researched. researched = [lightgray]{0} researched.
players = {0} players online players = {0} players
players.single = {0} player online players.single = {0} player
server.closing = [accent]Closing server... server.closing = [accent]Closing server...
server.kicked.kick = You have been kicked from the server! server.kicked.kick = You have been kicked from the server!
server.kicked.whitelist = You are not whitelisted here.
server.kicked.serverClose = Server closed. server.kicked.serverClose = Server closed.
server.kicked.vote = You have been vote-kicked. Goodbye.
server.kicked.clientOutdated = Outdated client! Update your game! server.kicked.clientOutdated = Outdated client! Update your game!
server.kicked.serverOutdated = Outdated server! Ask the host to update! server.kicked.serverOutdated = Outdated server! Ask the host to update!
server.kicked.banned = You are banned on this server. server.kicked.banned = You are banned on this server.
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. server.kicked.recentKick = You have been kicked recently.\nWait before connecting again.
server.kicked.nameInUse = There is someone with that name\nalready on this server. server.kicked.nameInUse = There is someone with that name\nalready on this server.
server.kicked.nameEmpty = Your chosen name is invalid. server.kicked.nameEmpty = Your chosen name is invalid.
server.kicked.idInUse = You are already on this server! Connecting with two accounts is not permitted. server.kicked.idInUse = You are already on this server! Connecting with two accounts is not permitted.
server.kicked.customClient = This server does not support custom builds. Download an official version. server.kicked.customClient = This server does not support custom builds. Download an official version.
server.kicked.gameover = Game over! server.kicked.gameover = Game over!
host.info = The [accent]host[] button hosts a server on port [scarlet]6567[]. \nAnybody on the same [lightgray]wifi or local network[] should be able to see your server in their server list.\n\nIf you want people to be able to connect from anywhere by IP, [accent]port forwarding[] is required.\n\n[lightgray]Note: If someone is experiencing trouble connecting to your LAN game, make sure you have allowed Mindustry access to your local network in your firewall settings. server.versions = Your version:[accent] {0}[]\nServer version:[accent] {1}[]
host.info = The [accent]host[] button hosts a server on port [scarlet]6567[]. \nAnybody on the same [lightgray]wifi or local network[] should be able to see your server in their server list.\n\nIf you want people to be able to connect from anywhere by IP, [accent]port forwarding[] is required.\n\n[lightgray]Note: If someone is experiencing trouble connecting to your LAN game, make sure you have allowed Mindustry access to your local network in your firewall settings. Note that public networks sometimes do not allow server discovery.
join.info = Here, you can enter a [accent]server IP[] to connect to, or discover [accent]local network[] servers to connect to.\nBoth LAN and WAN multiplayer is supported.\n\n[lightgray]Note: There is no automatic global server list; if you want to connect to someone by IP, you would need to ask the host for their IP. join.info = Here, you can enter a [accent]server IP[] to connect to, or discover [accent]local network[] servers to connect to.\nBoth LAN and WAN multiplayer is supported.\n\n[lightgray]Note: There is no automatic global server list; if you want to connect to someone by IP, you would need to ask the host for their IP.
hostserver = Host Game hostserver = Host Multiplayer Game
invitefriends = Invite Friends
hostserver.mobile = Host\nGame hostserver.mobile = Host\nGame
host = Host host = Host
hosting = [accent]Opening server... hosting = [accent]Opening server...
hosts.refresh = Refresh hosts.refresh = Refresh
hosts.discovering = Discovering LAN games hosts.discovering = Discovering LAN games
hosts.discovering.any = Discovering games
server.refreshing = Refreshing server server.refreshing = Refreshing server
hosts.none = [lightgray]No local games found! hosts.none = [lightgray]No local games found!
host.invalid = [scarlet]Can't connect to host. host.invalid = [scarlet]Can't connect to host.
@@ -102,28 +123,33 @@ server.edit = Edit Server
server.outdated = [crimson]Outdated Server![] server.outdated = [crimson]Outdated Server![]
server.outdated.client = [crimson]Outdated Client![] server.outdated.client = [crimson]Outdated Client![]
server.version = [gray]v{0} {1} server.version = [gray]v{0} {1}
server.custombuild = [yellow]Custom Build server.custombuild = [accent]Custom Build
confirmban = Are you sure you want to ban this player? confirmban = Are you sure you want to ban this player?
confirmkick = Are you sure you want to kick this player? confirmkick = Are you sure you want to kick this player?
confirmvotekick = Are you sure you want to vote-kick this player?
confirmunban = Are you sure you want to unban this player? confirmunban = Are you sure you want to unban this player?
confirmadmin = Are you sure you want to make this player an admin? confirmadmin = Are you sure you want to make this player an admin?
confirmunadmin = Are you sure you want to remove admin status from this player? confirmunadmin = Are you sure you want to remove admin status from this player?
joingame.title = Join Game joingame.title = Join Game
joingame.ip = Address: joingame.ip = Address:
disconnect = Disconnected. disconnect = Disconnected.
disconnect.error = Connection error.
disconnect.closed = Connection closed.
disconnect.timeout = Timed out.
disconnect.data = Failed to load world data! disconnect.data = Failed to load world data!
cantconnect = Unable to join game ([accent]{0}[]).
connecting = [accent]Connecting... connecting = [accent]Connecting...
connecting.data = [accent]Loading world data... connecting.data = [accent]Loading world data...
server.port = Port: server.port = Port:
server.addressinuse = Address already in use! server.addressinuse = Address already in use!
server.invalidport = Invalid port number! server.invalidport = Invalid port number!
server.error = [crimson]Error hosting server: [accent]{0} server.error = [crimson]Error hosting server.
save.old = This save is for an older version of the game, and can no longer be used.\n\n[lightgray]Save backwards compatibility will be implemented in the full 4.0 release. save.old = This save is for an older version of the game, and can no longer be used.\n\n[lightgray]Save backwards compatibility will be implemented in the full 4.0 release.
save.new = New Save save.new = New Save
save.overwrite = Are you sure you want to overwrite\nthis save slot? save.overwrite = Are you sure you want to overwrite\nthis save slot?
overwrite = Overwrite overwrite = Overwrite
save.none = No saves found! save.none = No saves found!
saveload = [accent]Saving... saveload = Saving...
savefail = Failed to save game! savefail = Failed to save game!
save.delete.confirm = Are you sure you want to delete this save? save.delete.confirm = Are you sure you want to delete this save?
save.delete = Delete save.delete = Delete
@@ -137,6 +163,7 @@ save.rename = Rename
save.rename.text = New name: save.rename.text = New name:
selectslot = Select a save. selectslot = Select a save.
slot = [accent]Slot {0} slot = [accent]Slot {0}
editmessage = Edit Message
save.corrupted = [accent]Save file corrupted or invalid!\nIf you have just updated your game, this is probably a change in the save format and [scarlet]not[] a bug. save.corrupted = [accent]Save file corrupted or invalid!\nIf you have just updated your game, this is probably a change in the save format and [scarlet]not[] a bug.
empty = <empty> empty = <empty>
on = On on = On
@@ -144,12 +171,13 @@ off = Off
save.autosave = Autosave: {0} save.autosave = Autosave: {0}
save.map = Map: {0} save.map = Map: {0}
save.wave = Wave {0} save.wave = Wave {0}
save.difficulty = Difficulty: {0} save.mode = Gamemode: {0}
save.date = Last Saved: {0} save.date = Last Saved: {0}
save.playtime = Playtime: {0} save.playtime = Playtime: {0}
warning = Warning. warning = Warning.
confirm = Confirm confirm = Confirm
delete = Delete delete = Delete
view.workshop = View In Workshop
ok = OK ok = OK
open = Open open = Open
customize = Customize Rules customize = Customize Rules
@@ -157,7 +185,15 @@ cancel = Cancel
openlink = Open Link openlink = Open Link
copylink = Copy Link copylink = Copy Link
back = Back back = Back
data.export = Export Data
data.import = Import Data
data.exported = Data exported.
data.invalid = This isn't valid game data.
data.import.confirm = Importing external data will erase[scarlet] all[] your current game data.\n[accent]This cannot be undone![]\n\nOnce the data is imported, your game will exit immediately.
classic.export = Export Classic Data
classic.export.text = [accent]Mindustry[] has just had a major update.\nClassic (v3.5 build 40) save or map data has been detected. Would you like to export these saves to your phone's home folder, for use in the Mindustry Classic app?
quit.confirm = Are you sure you want to quit? quit.confirm = Are you sure you want to quit?
quit.confirm.tutorial = Are you sure you know what you're doing?\nThe tutorial can be re-taken in[accent] Settings->Game->Re-Take Tutorial.[]
loading = [accent]Loading... loading = [accent]Loading...
saving = [accent]Saving... saving = [accent]Saving...
wave = [accent]Wave {0} wave = [accent]Wave {0}
@@ -174,10 +210,15 @@ custom = Custom
builtin = Built-In builtin = Built-In
map.delete.confirm = Are you sure you want to delete this map? This action cannot be undone! map.delete.confirm = Are you sure you want to delete this map? This action cannot be undone!
map.random = [accent]Random Map map.random = [accent]Random Map
map.nospawn = This map does not have any cores for the player to spawn in! Add a[ROYAL] blue[] core to this map in the editor. map.nospawn = This map does not have any cores for the player to spawn in! Add a[accent] orange[] core to this map in the editor.
map.nospawn.pvp = This map does not have any enemy cores for player to spawn into! Add[SCARLET] non-blue[] cores to this map in the editor. map.nospawn.pvp = This map does not have any enemy cores for player to spawn into! Add[SCARLET] non-orange[] cores to this map in the editor.
map.nospawn.attack = This map does not have any enemy cores for player to attack! Add[SCARLET] red[] cores to this map in the editor. map.nospawn.attack = This map does not have any enemy cores for player to attack! Add[SCARLET] red[] cores to this map in the editor.
map.invalid = Error loading map: corrupted or invalid map file. map.invalid = Error loading map: corrupted or invalid map file.
map.publish.error = Error publishing map: {0}
map.publish.confirm = Are you sure you want to publish this map?\n\n[lightgray]Make sure you agree to the Workshop EULA first, or your maps will not show up!
eula = Steam EULA
map.publish = Map published.
map.publishing = [accent]Publishing map...
editor.brush = Brush editor.brush = Brush
editor.openin = Open In Editor editor.openin = Open In Editor
editor.oregen = Ore Generation editor.oregen = Ore Generation
@@ -185,11 +226,14 @@ editor.oregen.info = Ore Generation:
editor.mapinfo = Map Info editor.mapinfo = Map Info
editor.author = Author: editor.author = Author:
editor.description = Description: editor.description = Description:
editor.nodescription = A map must have a description of at least 4 characters before being published.
editor.waves = Waves: editor.waves = Waves:
editor.rules = Rules: editor.rules = Rules:
editor.generation = Generation: editor.generation = Generation:
editor.ingame = Edit In-Game editor.ingame = Edit In-Game
editor.publish.workshop = Publish On Workshop
editor.newmap = New Map editor.newmap = New Map
workshop = Workshop
waves.title = Waves waves.title = Waves
waves.remove = Remove waves.remove = Remove
waves.never = <never> waves.never = <never>
@@ -206,15 +250,17 @@ waves.invalid = Invalid waves in clipboard.
waves.copied = Waves copied. waves.copied = Waves copied.
waves.none = No enemies defined.\nNote that empty wave layouts will automatically be replaced with the default layout. waves.none = No enemies defined.\nNote that empty wave layouts will automatically be replaced with the default layout.
editor.default = [lightgray]<Default> editor.default = [lightgray]<Default>
details = Details...
edit = Edit... edit = Edit...
editor.name = Name: editor.name = Name:
editor.spawn = Spawn Unit editor.spawn = Spawn Unit
editor.removeunit = Remove Unit editor.removeunit = Remove Unit
editor.teams = Teams editor.teams = Teams
editor.errorload = Error loading file:\n[accent]{0} editor.errorload = Error loading file.
editor.errorsave = Error saving file:\n[accent]{0} editor.errorsave = Error saving file.
editor.errorimage = That's an image, not a map. Don't go around changing extensions expecting it to work.\n\nIf you want to import a legacy map, use the 'import legacy map' button in the editor. editor.errorimage = That's an image, not a map.\n\nIf you want to import a 3.5/build 40 map, use the 'Import Legacy Map' button in the editor.
editor.errorlegacy = This map is too old, and uses a legacy map format that is no longer supported. editor.errorlegacy = This map is too old, and uses a legacy map format that is no longer supported.
editor.errornot = This is not a map file.
editor.errorheader = This map file is either not valid or corrupt. editor.errorheader = This map file is either not valid or corrupt.
editor.errorname = Map has no name defined. Are you trying to load a save file? editor.errorname = Map has no name defined. Are you trying to load a save file?
editor.update = Update editor.update = Update
@@ -233,7 +279,7 @@ editor.importmap = Import Map
editor.importmap.description = Import an already existing map editor.importmap.description = Import an already existing map
editor.importfile = Import File editor.importfile = Import File
editor.importfile.description = Import an external map file editor.importfile.description = Import an external map file
editor.importimage = Import Legacy Image editor.importimage = Import Legacy Map
editor.importimage.description = Import an external map image file editor.importimage.description = Import an external map image file
editor.export = Export... editor.export = Export...
editor.exportfile = Export File editor.exportfile = Export File
@@ -247,6 +293,7 @@ editor.resizemap = Resize Map
editor.mapname = Map Name: editor.mapname = Map Name:
editor.overwrite = [accent]Warning!\nThis overwrites an existing map. editor.overwrite = [accent]Warning!\nThis overwrites an existing map.
editor.overwrite.confirm = [scarlet]Warning![] A map with this name already exists. Are you sure you want to overwrite it? editor.overwrite.confirm = [scarlet]Warning![] A map with this name already exists. Are you sure you want to overwrite it?
editor.exists = A map with this name already exists.
editor.selectmap = Select a map to load: editor.selectmap = Select a map to load:
toolmode.replace = Replace toolmode.replace = Replace
@@ -309,6 +356,7 @@ ping = Ping: {0}ms
language.restart = Please restart your game for the language settings to take effect. language.restart = Please restart your game for the language settings to take effect.
settings = Settings settings = Settings
tutorial = Tutorial tutorial = Tutorial
tutorial.retake = Re-Take Tutorial
editor = Editor editor = Editor
mapeditor = Map Editor mapeditor = Map Editor
donate = Donate donate = Donate
@@ -325,9 +373,11 @@ launch.title = Launch Successful
launch.next = [lightgray]next opportunity at wave {0} launch.next = [lightgray]next opportunity at wave {0}
launch.unable2 = [scarlet]Unable to LAUNCH.[] launch.unable2 = [scarlet]Unable to LAUNCH.[]
launch.confirm = This will launch all resources in your core.\nYou will not be able to return to this base. launch.confirm = This will launch all resources in your core.\nYou will not be able to return to this base.
launch.skip.confirm = If you skip now, you will not be able to launch until later waves.
uncover = Uncover uncover = Uncover
configure = Configure Loadout configure = Configure Loadout
configure.locked = [lightgray]Unlock configuring loadout: Wave {0}. configure.locked = [lightgray]Unlock configuring loadout: Wave {0}.
configure.invalid = Amount must be a number between 0 and {0}.
zone.unlocked = [lightgray]{0} unlocked. zone.unlocked = [lightgray]{0} unlocked.
zone.requirement.complete = Wave {0} reached:\n{1} zone requirements met. zone.requirement.complete = Wave {0} reached:\n{1} zone requirements met.
zone.config.complete = Wave {0} reached:\nLoadout config unlocked. zone.config.complete = Wave {0} reached:\nLoadout config unlocked.
@@ -365,7 +415,7 @@ zone.crags.name = Crags
zone.fungalPass.name = Fungal Pass zone.fungalPass.name = Fungal Pass
zone.groundZero.description = The optimal location to begin once more. Low enemy threat. Few resources.\nGather as much lead and copper as possible.\nMove on. zone.groundZero.description = The optimal location to begin once more. Low enemy threat. Few resources.\nGather as much lead and copper as possible.\nMove on.
zone.frozenForest.description = Even here, closer to mountains, the spores have spread. The fridgid temperatures cannot contain them forever.\n\nBegin the venture into power. Build combustion generators. Learn to use menders. zone.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.
zone.desertWastes.description = These wastes are vast, unpredictable, and criss-crossed with derelict sector structures.\nCoal is present in the region. Burn it for power, or synthesize graphite.\n\n[lightgray]This landing location cannot be guaranteed. zone.desertWastes.description = These wastes are vast, unpredictable, and criss-crossed with derelict sector structures.\nCoal is present in the region. Burn it for power, or synthesize graphite.\n\n[lightgray]This landing location cannot be guaranteed.
zone.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. zone.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.
zone.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. zone.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.
@@ -380,6 +430,7 @@ zone.impact0078.description = <insert description here>
zone.crags.description = <insert description here> zone.crags.description = <insert description here>
settings.language = Language settings.language = Language
settings.data = Game Data
settings.reset = Reset to Defaults settings.reset = Reset to Defaults
settings.rebind = Rebind settings.rebind = Rebind
settings.controls = Controls settings.controls = Controls
@@ -427,18 +478,21 @@ blocks.boosteffect = Boost Effect
blocks.maxunits = Max Active Units blocks.maxunits = Max Active Units
blocks.health = Health blocks.health = Health
blocks.buildtime = Build Time blocks.buildtime = Build Time
blocks.buildcost = Build Cost
blocks.inaccuracy = Inaccuracy blocks.inaccuracy = Inaccuracy
blocks.shots = Shots blocks.shots = Shots
blocks.reload = Shots/Second blocks.reload = Shots/Second
blocks.ammo = Ammo blocks.ammo = Ammo
bar.drilltierreq = Better Drill Required
bar.drillspeed = Drill Speed: {0}/s bar.drillspeed = Drill Speed: {0}/s
bar.efficiency = Efficiency: {0}% bar.efficiency = Efficiency: {0}%
bar.powerbalance = Power: {0}/s bar.powerbalance = Power: {0}/s
bar.powerstored = Stored: {0}/{1}
bar.poweramount = Power: {0} bar.poweramount = Power: {0}
bar.poweroutput = Power Output: {0} bar.poweroutput = Power Output: {0}
bar.items = Items: {0} bar.items = Items: {0}
bar.capacity = Capacity: {0}
bar.liquid = Liquid bar.liquid = Liquid
bar.heat = Heat bar.heat = Heat
bar.power = Power bar.power = Power
@@ -485,6 +539,7 @@ setting.antialias.name = Antialias[lightgray] (requires restart)[]
setting.indicators.name = Enemy/Ally Indicators setting.indicators.name = Enemy/Ally Indicators
setting.autotarget.name = Auto-Target setting.autotarget.name = Auto-Target
setting.keyboard.name = Mouse+Keyboard Controls setting.keyboard.name = Mouse+Keyboard Controls
setting.touchscreen.name = Touchscreen Controls
setting.fpscap.name = Max FPS setting.fpscap.name = Max FPS
setting.fpscap.none = None setting.fpscap.none = None
setting.fpscap.text = {0} FPS setting.fpscap.text = {0} FPS
@@ -509,13 +564,16 @@ setting.lasers.name = Show Power Lasers
setting.pixelate.name = Pixelate[lightgray] (disables animations) setting.pixelate.name = Pixelate[lightgray] (disables animations)
setting.minimap.name = Show Minimap setting.minimap.name = Show Minimap
setting.musicvol.name = Music Volume setting.musicvol.name = Music Volume
setting.ambientvol.name = Ambient Volume
setting.mutemusic.name = Mute Music setting.mutemusic.name = Mute Music
setting.sfxvol.name = SFX Volume setting.sfxvol.name = SFX Volume
setting.mutesound.name = Mute Sound setting.mutesound.name = Mute Sound
setting.crashreport.name = Send Anonymous Crash Reports setting.crashreport.name = Send Anonymous Crash Reports
setting.savecreate.name = Auto-Create Saves
setting.publichost.name = Public Game Visibility
setting.chatopacity.name = Chat Opacity setting.chatopacity.name = Chat Opacity
setting.playerchat.name = Display In-Game Chat setting.playerchat.name = Display Player Bubble Chat
uiscale.reset = UI scale has been changed.\nPress "OK" to confirm this scale.\n[scarlet]Reverting and exiting in[accent] {0}[] settings... uiscale.reset = UI scale has been changed.\nPress "OK" to confirm this scale.\n[scarlet]Reverting and exiting in[accent] {0}[] seconds...
uiscale.cancel = Cancel & Exit uiscale.cancel = Cancel & Exit
setting.bloom.name = Bloom setting.bloom.name = Bloom
keybind.title = Rebind Keys keybind.title = Rebind Keys
@@ -524,8 +582,8 @@ category.general.name = General
category.view.name = View category.view.name = View
category.multiplayer.name = Multiplayer category.multiplayer.name = Multiplayer
command.attack = Attack command.attack = Attack
command.rally = Rally
command.retreat = Retreat command.retreat = Retreat
command.patrol = Patrol
keybind.gridMode.name = Block Select keybind.gridMode.name = Block Select
keybind.gridModeShift.name = Category Select keybind.gridModeShift.name = Category Select
keybind.press = Press a key... keybind.press = Press a key...
@@ -533,6 +591,7 @@ keybind.press.axis = Press an axis or key...
keybind.screenshot.name = Map Screenshot keybind.screenshot.name = Map Screenshot
keybind.move_x.name = Move x keybind.move_x.name = Move x
keybind.move_y.name = Move y keybind.move_y.name = Move y
keybind.fullscreen.name = Toggle Fullscreen
keybind.select.name = Select/Shoot keybind.select.name = Select/Shoot
keybind.diagonal_placement.name = Diagonal Placement keybind.diagonal_placement.name = Diagonal Placement
keybind.pick.name = Pick Block keybind.pick.name = Pick Block
@@ -743,10 +802,13 @@ block.hail.name = Hail
block.lancer.name = Lancer block.lancer.name = Lancer
block.conveyor.name = Conveyor block.conveyor.name = Conveyor
block.titanium-conveyor.name = Titanium Conveyor block.titanium-conveyor.name = Titanium Conveyor
block.armored-conveyor.name = Armored Conveyor
block.armored-conveyor.description = Moves items at the same speed as titanium conveyors, but possesses more armor. Does not accept inputs from the sides from anything but other conveyors.
block.junction.name = Junction block.junction.name = Junction
block.router.name = Router block.router.name = Router
block.distributor.name = Distributor block.distributor.name = Distributor
block.sorter.name = Sorter block.sorter.name = Sorter
block.message.name = Message
block.overflow-gate.name = Overflow Gate block.overflow-gate.name = Overflow Gate
block.silicon-smelter.name = Silicon Smelter block.silicon-smelter.name = Silicon Smelter
block.phase-weaver.name = Phase Weaver block.phase-weaver.name = Phase Weaver
@@ -799,6 +861,7 @@ block.blast-mixer.name = Blast Mixer
block.solar-panel.name = Solar Panel block.solar-panel.name = Solar Panel
block.solar-panel-large.name = Large Solar Panel block.solar-panel-large.name = Large Solar Panel
block.oil-extractor.name = Oil Extractor block.oil-extractor.name = Oil Extractor
block.command-center.name = Command Center
block.draug-factory.name = Draug Miner Drone Factory block.draug-factory.name = Draug Miner Drone Factory
block.spirit-factory.name = Spirit Repair Drone Factory block.spirit-factory.name = Spirit Repair Drone Factory
block.phantom-factory.name = Phantom Builder Drone Factory block.phantom-factory.name = Phantom Builder Drone Factory
@@ -861,27 +924,26 @@ unit.chaos-array.name = Chaos Array
unit.eradicator.name = Eradicator unit.eradicator.name = Eradicator
unit.lich.name = Lich unit.lich.name = Lich
unit.reaper.name = Reaper unit.reaper.name = Reaper
tutorial.begin = Your mission here is to eradicate the[lightgray] enemy[].\n\nBegin by[accent] mining copper[]. Tap a copper ore vein near your core to do this. tutorial.next = [lightgray]<Tap to continue>
tutorial.drill = Mining manually is inefficient.\n[accent]Drills []can mine automatically.\nPlace one on a copper vein. tutorial.intro = You have entered the[scarlet] Mindustry Tutorial.[]\nBegin by[accent] mining copper[]. Tap a copper ore vein near your core to do this.\n\n[accent]{0}/{1} copper
tutorial.conveyor = [accent]Conveyors[] are used to transport items to the core.\nMake a line of conveyors from the drill to the core. tutorial.drill = Mining manually is inefficient.\n[accent]Drills []can mine automatically.\nClick the drill tab in the bottom right.\nSelect the[accent] mechanical drill[]. Place it on a copper vein by clicking.\n[accent]Right-click[] to stop building, and[accent] Hold Ctrl while scrolling[] to zoom in and out.
tutorial.morecopper = More copper is required.\n\nEither mine it manually, or place more drills. tutorial.drill.mobile = Mining manually is inefficient.\n[accent]Drills []can mine automatically.\nTap the drill tab in the bottom right.\nSelect the[accent] mechanical drill[].\nPlace it on a copper vein by tapping, then press the[accent] checkmark[] below to confirm your selection.\nPress the[accent] X button[] to cancel placement.
tutorial.turret = Defensive structures must be built to repel the[lightgray] enemy[].\nBuild a duo turret near your base. tutorial.blockinfo = Each block has different stats. Each drill can only mine certain ores.\nTo check a block's info and stats,[accent] tap the "?" button while selecting it in the build menu.[]\n\n[accent]Access the Mechanical Drill's stats now.[]
tutorial.drillturret = Duo turrets require[accent] copper ammo []to shoot.\nPlace a drill next to the turret to supply it with mined copper. tutorial.conveyor = [accent]Conveyors[] are used to transport items to the core.\nMake a line of conveyors from the drill to the core.\n[accent]Hold down the mouse to place in a line.[]\nHold[accent] CTRL[] while selecting a line to place diagonally.\n\n[accent]Place 2 conveyors with the line tool, then deliver an item into the core.
tutorial.waves = The[lightgray] enemy[] approaches.\n\nDefend your core for 2 waves. Build more turrets. tutorial.conveyor.mobile = [accent]Conveyors[] are used to transport items to the core.\nMake a line of conveyors from the drill to the core.\n[accent] Place in a line by holding down your finger for a few seconds[] and dragging in a direction.\n\n[accent]Place 2 conveyors with the line tool, then deliver an item into the core.
tutorial.lead = More ores are available. Explore and mine[accent] lead[].\n\nDrag from your unit to the core to transfer resources. tutorial.turret = Once an item enters your core, it can be used for building.\nKeep in mind that not all items can be used for building.\nItems that are not used for building, such as[accent] coal[] or[accent] scrap[], cannot be put into the core.\nDefensive structures must be built to repel the[lightgray] enemy[].\nBuild a[accent] duo turret[] near your base.
tutorial.smelter = Copper and lead are weak metals.\nSuperior[accent] Dense Alloy[] can be created in a smelter.\n\nBuild one. tutorial.drillturret = Duo turrets require[accent] copper ammo []to shoot.\nPlace a drill near the turret.\nLead conveyors into the turret to supply it with copper.\n\n[accent]Ammo delivered: 0/1
tutorial.densealloy = The smelter will now produce alloy.\nGet some.\nImprove the production if necessary. tutorial.pause = During battle, you are able to[accent] pause the game.[]\nYou may queue buildings while paused.\n\n[accent]Press space to pause.
tutorial.siliconsmelter = The core will now create a[accent] spirit drone[] for mining and repairing blocks.\n\nFactories for other units can be created with [accent] silicon.\nMake a silicon smelter. tutorial.pause.mobile = During battle, you are able to[accent] pause the game.[]\nYou may queue buildings while paused.\n\n[accent]Press this button in the top left to pause.
tutorial.silicondrill = Silicon requires[accent] coal[] and[accent] sand[].\nStart by making drills. tutorial.unpause = Now press space again to unpause.
tutorial.generator = This technology requires power.\nCreate a[accent] combustion generator[] for it. tutorial.unpause.mobile = Now press it again to unpause.
tutorial.generatordrill = Combustion generators need fuel.\nFuel it with coal from a drill. tutorial.breaking = Blocks frequently need to be destroyed.\n[accent]Hold down right-click[] to destroy all blocks in a selection.[]\n\n[accent]Destroy all the scrap blocks to the left of your core using area selection.
tutorial.node = Power requires transport.\nCreate a[accent] power node[] next to your combustion generator to transfer its power. tutorial.breaking.mobile = Blocks frequently need to be destroyed.\n[accent]Select deconstruction mode[], then tap a block to begin breaking it.\nDestroy an area by holding down your finger for a few seconds[] and dragging in a direction.\nPress the checkmark button to confirm breaking.\n\n[accent]Destroy all the scrap blocks to the left of your core using area selection.
tutorial.nodelink = Power can be transferred through contacting power blocks and generators, or by linked power nodes.\n\nLink power by tapping the node and selecting the generator and silicon smelter. tutorial.withdraw = In some situations, taking items directly from blocks is necessary.\nTo do this, [accent]tap a block[] with items in it, then [accent]tap the item[] in the inventory.\nMultiple items can be withdrawn by [accent]tapping and holding[].\n\n[accent]Withdraw some copper from the core.[]
tutorial.silicon = Silicon is being produced. Get some.\n\nImproving the production system is advised. tutorial.deposit = Deposit items into blocks by dragging from your ship to the destination block.\n\n[accent]Deposit your copper back into the core.[]
tutorial.daggerfactory = Construct a[accent] dagger mech factory.[]\n\nThis will be used to create attack mechs. tutorial.waves = The[lightgray] enemy[] approaches.\n\nDefend the core for 2 waves.[accent] Click[] to shoot.\nBuild more turrets and drills. Mine more copper.
tutorial.router = Factories need resources to function.\nCreate a router to split conveyor resources. tutorial.waves.mobile = The[lightgray] enemy[] approaches.\n\nDefend the core for 2 waves. Your ship will automatically fire at enemies.\nBuild more turrets and drills. Mine more copper.
tutorial.dagger = Link power nodes to the factory.\nOnce requirements are met, a mech will be created.\n\nCreate more drills, generators and conveyors as necessary. tutorial.launch = Once you reach a specific wave, you are able to[accent] launch the core[], leaving your defenses behind and[accent] obtaining all the resources in your core.[]\nThese resources can then be used to research new technology.\n\n[accent]Press the launch button.
tutorial.battle = The[lightgray] enemy[] has revealed their core.\nDestroy it with your unit and dagger mechs.
item.copper.description = The most basic structural material. Used extensively in all types of blocks. item.copper.description = The most basic structural material. Used extensively in all types of blocks.
item.lead.description = A basic starter material. Used extensively in electronics and liquid transportation blocks. item.lead.description = A basic starter material. Used extensively in electronics and liquid transportation blocks.
@@ -919,13 +981,10 @@ unit.crawler.description = A ground unit consisting of a stripped-down frame wit
unit.titan.description = An advanced, armored ground unit. Attacks both ground and air targets. Equipped with two miniature Scorch-class flamethrowers. unit.titan.description = An advanced, armored ground unit. Attacks both ground and air targets. Equipped with two miniature Scorch-class flamethrowers.
unit.fortress.description = A heavy artillery mech. Equipped with two modified Hail-type cannons for long-range assault on enemy structures and units. unit.fortress.description = A heavy artillery mech. Equipped with two modified Hail-type cannons for long-range assault on enemy structures and units.
unit.eruptor.description = A heavy mech designed to take down structures. Fires a stream of slag at enemy fortifications, melting them and setting volatiles on fire. unit.eruptor.description = A heavy mech designed to take down structures. Fires a stream of slag at enemy fortifications, melting them and setting volatiles on fire.
unit.chaos-array.description =
unit.eradicator.description =
unit.wraith.description = A fast, hit-and-run interceptor unit. Targets power generators. unit.wraith.description = A fast, hit-and-run interceptor unit. Targets power generators.
unit.ghoul.description = A heavy carpet bomber. Rips through enemy structures, targeting critital infrastructure. unit.ghoul.description = A heavy carpet bomber. Rips through enemy structures, targeting critical infrastructure.
unit.revenant.description = A heavy, hovering missile array. unit.revenant.description = A heavy, hovering missile array.
unit.lich.description = block.message.description = Stores a message. Used for communication between allies.
unit.reaper.description =
block.graphite-press.description = Compresses chunks of coal into pure sheets of graphite. block.graphite-press.description = Compresses chunks of coal into pure sheets of graphite.
block.multi-press.description = An upgraded version of the graphite press. Employs water and power to process coal quickly and efficiently. block.multi-press.description = An upgraded version of the graphite press. Employs water and power to process coal quickly and efficiently.
block.silicon-smelter.description = Reduces sand with pure coal. Produces silicon. block.silicon-smelter.description = Reduces sand with pure coal. Produces silicon.
@@ -970,7 +1029,7 @@ block.junction.description = Acts as a bridge for two crossing conveyor belts. U
block.bridge-conveyor.description = Advanced item transport block. Allows transporting items over up to 3 tiles of any terrain or building. block.bridge-conveyor.description = Advanced item transport block. Allows transporting items over up to 3 tiles of any terrain or building.
block.phase-conveyor.description = Advanced item transport block. Uses power to teleport items to a connected phase conveyor over several tiles. block.phase-conveyor.description = Advanced item transport block. Uses power to teleport items to a connected phase conveyor over several tiles.
block.sorter.description = Sorts items. If an item matches the selection, it is allowed to pass. Otherwise, the item is outputted to the left and right. block.sorter.description = Sorts items. If an item matches the selection, it is allowed to pass. Otherwise, the item is outputted to the left and right.
block.router.description = Accepts items, then outputs them to up to 3 other directions equally. Useful for splitting the materials from one source to multiple targets. block.router.description = Accepts items, then outputs them to up to 3 other directions equally. Useful for splitting the materials from one source to multiple targets.\n\n[scarlet]Never use next to production inputs, as they will get clogged by output.[]
block.distributor.description = An advanced router. Splits items to up to 7 other directions equally. block.distributor.description = An advanced router. Splits items to up to 7 other directions equally.
block.overflow-gate.description = A combination splitter and router. Only outputs to the left and right if the front path is blocked. block.overflow-gate.description = A combination splitter and router. Only outputs to the left and right if the front path is blocked.
block.mass-driver.description = The ultimate item transport block. Collects several items and then shoots them to another mass driver over a long range. Requires power to operate. block.mass-driver.description = The ultimate item transport block. Collects several items and then shoots them to another mass driver over a long range. Requires power to operate.
@@ -984,7 +1043,7 @@ block.liquid-tank.description = Stores a large amount of liquids. Use for creati
block.liquid-junction.description = Acts as a bridge for two crossing conduits. Useful in situations with two different conduits carrying different liquids to different locations. block.liquid-junction.description = Acts as a bridge for two crossing conduits. Useful in situations with two different conduits carrying different liquids to different locations.
block.bridge-conduit.description = Advanced liquid transport block. Allows transporting liquids over up to 3 tiles of any terrain or building. block.bridge-conduit.description = Advanced liquid transport block. Allows transporting liquids over up to 3 tiles of any terrain or building.
block.phase-conduit.description = Advanced liquid transport block. Uses power to teleport liquids to a connected phase conduit over several tiles. block.phase-conduit.description = Advanced liquid transport block. Uses power to teleport liquids to a connected phase conduit over several tiles.
block.power-node.description = Transmits power to connected nodes. Up to four power sources, sinks or nodes can be connected. The node will receive power from or supply power to any adjacent blocks. block.power-node.description = Transmits power to connected nodes. The node will receive power from or supply power to any adjacent blocks.
block.power-node-large.description = An advanced power node with greater range and more connections. block.power-node-large.description = An advanced power node with greater range and more connections.
block.surge-tower.description = An extremely long-range power node with fewer available connections. block.surge-tower.description = An extremely long-range power node with fewer available connections.
block.battery.description = Stores power as a buffer in times of surplus energy. Outputs power in times of deficit. block.battery.description = Stores power as a buffer in times of surplus energy. Outputs power in times of deficit.
@@ -998,7 +1057,7 @@ block.solar-panel.description = Provides a small amount of power from the sun.
block.solar-panel-large.description = A significantly more efficient version of the standard solar panel. block.solar-panel-large.description = A significantly more efficient version of the standard solar panel.
block.thorium-reactor.description = Generates significant amounts of power from thorium. Requires constant cooling. Will explode violently if insufficient amounts of coolant are supplied. Power output depends on fullness, with base power generated at full capacity. block.thorium-reactor.description = Generates significant amounts of power from thorium. Requires constant cooling. Will explode violently if insufficient amounts of coolant are supplied. Power output depends on fullness, with base power generated at full capacity.
block.impact-reactor.description = An advanced generator, capable of creating massive amounts of power at peak efficiency. Requires a significant power input to kickstart the process. block.impact-reactor.description = An advanced generator, capable of creating massive amounts of power at peak efficiency. Requires a significant power input to kickstart the process.
block.mechanical-drill.description = A cheap drill. When placed on appropriate tiles, outputs items at a slow pace indefinitely. Only capable of mining copper, lead and coal. block.mechanical-drill.description = A cheap drill. When placed on appropriate tiles, outputs items at a slow pace indefinitely. Only capable of mining basic resources.
block.pneumatic-drill.description = An improved drill, capable of mining titanium. Mines at a faster pace than a mechanical drill. block.pneumatic-drill.description = An improved drill, capable of mining titanium. Mines at a faster pace than a mechanical drill.
block.laser-drill.description = Allows drilling even faster through laser technology, but requires power. Capable of mining thorium. block.laser-drill.description = Allows drilling even faster through laser technology, but requires power. Capable of mining thorium.
block.blast-drill.description = The ultimate drill. Requires large amounts of power. block.blast-drill.description = The ultimate drill. Requires large amounts of power.
@@ -1023,10 +1082,11 @@ block.arc.description = A small close-range electric turret. Fires arcs of elect
block.swarmer.description = A medium-sized missile turret. Attacks both air and ground enemies. Fires homing missiles. block.swarmer.description = A medium-sized missile turret. Attacks both air and ground enemies. Fires homing missiles.
block.salvo.description = A larger, more advanced version of the Duo turret. Fires quick salvos of bullets at the enemy. block.salvo.description = A larger, more advanced version of the Duo turret. Fires quick salvos of bullets at the enemy.
block.fuse.description = A large, close-range energy turret. Fires three piercing beams at nearby enemies. block.fuse.description = A large, close-range energy turret. Fires three piercing beams at nearby enemies.
block.ripple.description = An extremely poweful artillery turret. Shoots clusters of shells at enemies over long distances. block.ripple.description = An extremely powerful artillery turret. Shoots clusters of shells at enemies over long distances.
block.cyclone.description = A large anti-air and anti-ground turret. Fires explosive clumps of flak at nearby units. block.cyclone.description = A large anti-air and anti-ground turret. Fires explosive clumps of flak at nearby units.
block.spectre.description = A massive dual-barreled cannon. Shoots large armor-piercing bullets at air and ground targets. block.spectre.description = A massive dual-barreled cannon. Shoots large armor-piercing bullets at air and ground targets.
block.meltdown.description = A massive laser cannon. Charges and fires a persistent laser beam at nearby enemies. Requires coolant to operate. block.meltdown.description = A massive laser cannon. Charges and fires a persistent laser beam at nearby enemies. Requires coolant to operate.
block.command-center.description = Issues movement commands to allied units across the map.\nCauses units to patrol, attack an enemy core or retreat to the core/factory. When no enemy core is present, units will default to patrolling under the attack command.
block.draug-factory.description = Produces Draug mining drones. block.draug-factory.description = Produces Draug mining drones.
block.spirit-factory.description = Produces Spirit structural repair drones. block.spirit-factory.description = Produces Spirit structural repair drones.
block.phantom-factory.description = Produces advanced construction drones. block.phantom-factory.description = Produces advanced construction drones.

Some files were not shown because too many files have changed in this diff Show More