Compare commits

..

160 Commits
v122.1 ... v123

Author SHA1 Message Date
Anuken
ec73426bbc Smaller 1x1 block status indicators 2021-01-20 13:52:14 -05:00
Anuken
770d8506c5 MoveLightning ability bullet support 2021-01-20 12:31:35 -05:00
Anuken
10cd15a088 Merge remote-tracking branch 'origin/master' 2021-01-20 10:51:06 -05:00
Anuken
481e19b1ec Balancing to counteract double-splash-damage bug 2021-01-20 10:51:01 -05:00
彭瑞暄
e326e3a273 Updated zh-TW Steam & Android (#4382)
* removed "never", minor updates

* steam description

* translation moderation

* removed weird syntax

* Update full_description.txt

* Update full_description.txt
2021-01-20 09:22:49 -05:00
rMuchan
d747b1d96a update zh-cn translation (#4244)
* update zh-cn translation

* update zh-cn translation

* add missing item
2021-01-20 09:18:13 -05:00
Anuken
f64cb3ad9a Fixed #4385 2021-01-20 09:11:32 -05:00
Anuken
c4ea5a8256 Merge remote-tracking branch 'origin/master' 2021-01-19 19:55:25 -05:00
Anuken
fa8d43bbc9 Misc cleanup 2021-01-19 19:55:21 -05:00
MEEP of Faith
77f31fd86c Movement Lightning Ability Improvements (#3901)
* Movement Lightning Ability Improvements

* `Core.atlas.find` Might not always be avalable

* Default is null

* Fix
2021-01-19 19:20:25 -05:00
end
18fe2a1737 Update achievements.vdf (#4358) 2021-01-19 18:52:09 -05:00
YellOw139
e816f6110d [Fastlane][RO] Steam Translation (#3958)
* Create short-description.txt

* Add files via upload

* incomplete

* Update achievements.vdf

* finished

* import commit 032 b254

* [Steam] Update counts

Co-authored-by: Anuken <arnukren@gmail.com>
2021-01-19 18:50:49 -05:00
YellOw139
632887ddd2 [Metadata] Android desc = Steam desc (#4370)
Features:
- Kept the first 2 sentences intact. This means that roughly same text is displayed before clicking 'Read more'. 'Features include:' has been dropped for 'Gameplay Features', for Steam similarity.
- Steam-like formatting. I noticed that <h2> doesn't seem to do anything. Despite that, I've seen Gameloft using it. For something bigger, I'd recommend <big>.
- Updated blocks count. There's over 130 blocks. I triple checked.
- The old description still had 4 unique bosses. RIP.
- Steam Workshop & achievements and Android don't mix up.
- Checked against the character limit. It has less than 4000.
- Only cat-approved text.
2021-01-19 18:39:09 -05:00
MEEP of Faith
c53a6a7c04 hitColor colored beam effects. (#3471)
* hitColor colored beam effects.

* Same with lasers

* fix
2021-01-19 17:46:02 -05:00
Nikolass1000
532a4bc140 Update bundle_pl.properties (#4377) 2021-01-19 17:33:42 -05:00
Arnyyx
88086f5ba9 Update bundle_vi.properties (#4333) 2021-01-19 17:32:15 -05:00
Molovtov
0be39d43a2 better_thai_translate.properties (#4314)
* better_thai_translate.properties

Better thai translate but not done yet,by the red(need more blins)

* Better_thai_properties

Better thai by thai people,by the red(need more blins)
2021-01-19 17:30:40 -05:00
rnarko
e9abe273c7 Update Polish translation to fix eye-hurting typos (#4310) 2021-01-19 17:30:30 -05:00
Thomas Widyantoko
775ebd6e94 more in_ID translation (#4286)
* more in_ID translation

fixes, addition, etc

* changes to in_ID

translated rules.coreincinerates and removed waves.never to match up with the original bundle file
2021-01-19 17:24:03 -05:00
Esculap
b86201ea9b Update bundle_pl.properties (#4326)
Translated some tiles (not translated yet):
Dacite => Dacyt
Dacite Wall => Dacytowa Ściana
Dacite Boulder => Dacytowy Głaz
Stone Wall => Kamienna Ściana
Ice Wall => Lodowa Ściana
Snow Wall => Śnieżna Ściana
Dune Wall => Wydmowa Ściana
Dirt => Ziemia
Dirt Wall => Ziemna Ściana
Mud => Błoto
Basalt => Bazalt
2021-01-19 17:23:44 -05:00
彭瑞暄
e3ccde31d8 removed "never", minor updates (#4363) 2021-01-19 17:21:41 -05:00
Vajda Simon
32d1d7264c bundle_hu.properties (#4181)
Okay, so a lot of little ones go big.
2021-01-19 17:08:22 -05:00
Sharlotte
27d9718d4f update KO bundle + android (#4285)
* Update bundle_ko.properties

* oops!

* changelog update

* Update full_description.txt

* oh god, i forgot this again again... sorry

* Update bundle_ko.properties
2021-01-19 16:05:17 -05:00
Anuken
f812460164 New unit select fixes 2021-01-19 15:49:30 -05:00
VozDuh
da8ea84397 New Unit Select (#3672)
* New Unit Select

* Fix

* Facepalm

* Code Fix

* Texture Fix
2021-01-19 15:42:33 -05:00
机械师
52e47a28c4 Update servers_v6.json (#4132)
增加两个中国地区服务器,主要为挑战性地图。
Add two China region servers, mainly for challenging maps.
2021-01-19 15:36:27 -05:00
Petr Gašparík
b9b8fc66b1 Czech translation - ongoing effort (#3841) 2021-01-19 15:28:23 -05:00
YellOw139
c026d44cd3 [Bundle][RO] Translation update (#4192)
* [Bundle][RO] Translation update

This PR was tested in-game and is _**ready to merge at any time**_ (unless marked as draft).

Changelog:
- ~~New strings/changes up to commit~~ TBA
- Sector description improvements
- Typo fixes & various other improvements

* Update bundle_ro.properties

* Max

* repeated typo typo typo

* Welcome to 2020 when maps are no longer images

* <never> forget your position in the 20s
2021-01-19 15:26:36 -05:00
CPXMC
eb75cd5ae8 Update contributors (#3766)
Co-authored-by: Anuken <arnukren@gmail.com>
2021-01-19 15:26:12 -05:00
Antsiferov Andrew
7e10487926 [Bundle][RU] actual L10n (#4173)
* 1 line changed

- noname

* 1 line changed

- hint.placeTurret

* 3 new lines

- servers.disclaimer
- hint.coreUpgrade
- hint.presetLaunch

----
NOTE from Felix Corvus (@Remint32)

This commit and PR are the last ones I made to the repository.
I want to sincerely thank the people I worked with to enhance the game and translate it into Russian.

I want to thank you separately:
Prosta4ok_ua (@Prosta4okua), Vanguard (@XEN0PHIL), BasedUser (@BasedUser), Summet (@summetdev), Anuke (@Anuken), The_Slaylord (@TheSlaylord), Lonely_Ymomfe (@ymomfe), and XZimur (@XZimur)

* 5 changed lines; 2 new lines

Changed:
globalitems
sector.extractionOutpost.description
hint.launch
hint.launch.mobile
hint.presetLaunch

New:
hint.coreIncinerate
hint.coopCampaign

* 2 changed line

hint.coopCampaign
item.spore-pod.details
-
В споровом стручке всё же множественное число в описании, говорится про сами споры. THEY EMIT - они выделяют, IT EMITS - он выделяет.

* 2 changed lines

hint.coreIncinerate
block.interplanetary-accelerator.description

* 3 new line; 1 changed line

New:
setting.showweather.name
link.bug.description
rules.weather.always

Changed:
keybinds.mobile

* 4 new lines; 1 changed line; 1 deleted line

New:
public.confirm.really
bullet.buildingdamage
stat.ammouse
unit.pershot

Changed:
bullet.knockback

Deleted:
bar.limitreached

* Update bundle_ru.properties

падежи

* Update bundle_ru.properties

мелочи

* 1 changed line

stat.ammouse

* 1 new line

none.found

* 6 changed; 1 deleted

Changed:
mod.featured.dialog.title
mods.browser.add
mods.github.open
mod.import.github
mod.jarwarn
mods.guide

Deleted:
mod.featured.title

* 2 changed lines

link.bug.description
mod.scripts.disable

* Update achievements.vdf

* Update description.txt

* 1 changed line

item.thorium.description

* 1 new line

rules.coreincinerates

* 1 new line

bar.boost

* 1 new line

max

* Update bundle_ru.properties

* Update bundle_ru.properties

* rip v3.5 maps

* Update bundle_ru.properties

* Update bundle_ru.properties

Co-authored-by: Felix Corvus <remint32@yandex.ru>
Co-authored-by: Vanguard <55051135+XEN0PHIL@users.noreply.github.com>
Co-authored-by: Prosta4okua <31485341+Prosta4okua@users.noreply.github.com>
2021-01-19 15:24:59 -05:00
ZirKNkium611
ae921bf266 Update bundle_es.properties (#4027)
* Update bundle_es.properties

correcting and improving some translations

* Update bundle_es.properties

correcting team names
2021-01-19 15:22:47 -05:00
Phinner
ca62d2aa07 Rework and Update of the french bundles (Steam and bundle_fr) (#4350)
* Complete rework of bundle_fr

# Complete rework of bundle_fr
## Overview
Hello players. I made a pull in [Mindustry-Suggestions](https://github.com/Anuken/Mindustry-Suggestions/issues/1743) about merging bundle_fr and bundle_fr_be. The cat told he was unable to do that because:
> I don't understand either language, so I would be unable to merge the two bundles with any degree of accuracy. This is best discussed and implemented by other speakers of the language(s).
So I decided to do that with the help of senri on discord and Voila. There is the updated version of the french bundle for Belgians, Frenchs, Quebecois and everyone else who speaks or learns french !
## Changes
There are the words I changed that you may argue about:
```
FPS -> IPS
Raccourci clavier -> Touches
Foreshadow -> Présage
Mace -> Titan
Scepter -> Destructeur
Reign -> Eradicateur
Lancier -> Perforateur (Its just an idea)
Chat -> Tchat
Minuterie -> Compte à rebours (Makes more sense for the waves i think)
Minimap -> Mini-carte
Supporté -> Pas pris en charge (For errors, makes more sense)
Hébergeur -> Hôte (the shorter the better)
Foreuse à vérin -> foreuse pneumatique (I don't think being super precise might help normal players)
Onde -> Vague
Percussion -> Percuteur (C'est un nom qui percute !)
- Deleted the (e) until the file is reviewed by more people
- Made the whole file more coherent, I mean there were upper/lower case letters where it shouldn't be.
- Added translations for V6 content like logic blocks, sector description, turrets, units...
- Some more stuff I may have forgotten
```
## Lines to verify in priority
There are the lines I was strugulling with
```
16, 23, 27, 37, 100, 109, 128, 129, 140, 153, 159, 189, 204, 229, 251, 282, 291, 321, 341, 421, 468, 482, 515, 536, [598 -> 613], 703, 705, 715, 751, 777, 1254, 1402
```
## conclusion
Like I said, I merged fr and fr_be, taking the best translations one by one and translating the missing lines. That would be cool if you look quickly in the file and find some errors I could have made. Thank you for reading and I wish you a good day, or night...

* Hotfix

* Updated steam translations

Updated the achievements and Added the new ones. The only problem I had is the "NEW_ACHIEVEMENT_26_1_DESC", I think there's better translation for that but I'm unable to figure it out for some reasons.

Co-authored-by: Anuken <arnukren@gmail.com>
2021-01-19 15:18:38 -05:00
Anuken
2ba093c640 Merge remote-tracking branch 'origin/master' 2021-01-19 15:13:46 -05:00
Anuken
e3f388692f Misc cleanup & fixes 2021-01-19 15:13:41 -05:00
Loumardes
4fc805abbf launch core translated to "Lancement du noyau" (#4348) 2021-01-19 14:38:18 -05:00
Loumardes
cd81482b6b untranslated mods notification strings (#4347) 2021-01-19 14:38:11 -05:00
itcannotbe
3972e34dde Update bundle.properties (#4375)
Remove flowgate limitation in block description.
2021-01-19 14:37:40 -05:00
Rodrigo
01b24959c8 Typo (#3947)
Í
2021-01-19 13:53:56 -05:00
Anuken
40908589b9 Merge remote-tracking branch 'origin/master' 2021-01-19 10:46:38 -05:00
Anuken
774be56bde #4379 2021-01-19 10:46:33 -05:00
Rodrigo
68f19fdbcf Update bundle_pt_BR.properties (#4352)
Fixed a dumb error
2021-01-19 10:22:11 -05:00
reNemesic
50aab01a2e Perfecting of bundle_pt-BR [Finished] (#3863)
* Update bundle_pt_BR.properties

Added sector description [not finished]

* Update 2

Finished first translation of sector descriptions (fixes and did the last one)
Added some translations for not done entries.

* Upgrade #3

Started fixing consistency issues
Redid sector descriptions
Translated last untranslated elements

Co-authored-by: Anuken <arnukren@gmail.com>
2021-01-19 10:21:34 -05:00
RayanZ22
ead0158ef9 Update bundle_pt_BR.properties (#3612)
update
2021-01-19 10:17:08 -05:00
Anuken
d06a74e7a2 Fixed #4376 2021-01-19 09:58:41 -05:00
Anuken
8fab335b9d Merge remote-tracking branch 'origin/master' 2021-01-18 20:18:03 -05:00
Anuken
25b22b4f93 Duplicate IP prevention / Removed overflow inventories 2021-01-18 20:17:59 -05:00
alex
0061690631 Update servers_v6.json (#4342)
Adding a fast paced hex for V6.
2021-01-18 19:50:40 -05:00
Joshua Fan
26ad53ec50 Tweak highlight on plastanium sprite (#4373) 2021-01-18 19:42:47 -05:00
Anuken
4aa2d9097f Merge remote-tracking branch 'origin/master' 2021-01-18 18:04:21 -05:00
Anuken
82f8e78ec8 Fixed various rounding errors in database 2021-01-18 18:04:16 -05:00
Sunny Kim
f91910e84f conductsTo() returning whether to conduct itself to adjacent builds (#4354)
* conductsTo

* insulated block no longer conducts

* moved both checks to be symmetrical
2021-01-18 17:45:45 -05:00
Joshua Fan
2da128678a Always allow zoom while controlling unit that can't build (#4371) 2021-01-18 17:44:01 -05:00
genNAowl
18a382b07a Draw Conveyor Items under Blocks (#4372)
* Draw Conveyor Items under Blocks

* Remove new layer in favor of subtraction

Co-authored-by: Leonwang4234 <62972692+Leonwang4234@users.noreply.github.com>
2021-01-18 17:34:17 -05:00
Anuken
83a4f56679 Fixed #4368 2021-01-18 17:23:16 -05:00
Anuken
ffad9cb9a9 Merge remote-tracking branch 'origin/master' 2021-01-17 15:54:49 -05:00
Anuken
6a63956b71 Anuken/Mindustry-Suggestions/issues/1808 / Less fire in rain 2021-01-17 15:54:43 -05:00
Patrick 'Quezler' Mounier
32a1d91faf Use Player.deathDelay + 1 instead of magic number (#4344) 2021-01-17 15:33:19 -05:00
Anuken
634d9d1a40 Fixed #4357 / Fixed #4349 / Fixed #4345 / Fixed #4343 2021-01-17 15:31:22 -05:00
Anuken
f9adcfeed1 Ground units: Avoid stepping onto dangerous/deep floor 2021-01-17 09:21:11 -05:00
Anuken
02ef633529 Removed redundant parens 2021-01-15 17:10:38 -05:00
Patrick 'Quezler' Mounier
f3b1ef02e3 Scale impact reactor warmup time with boost (#4317) 2021-01-15 17:09:39 -05:00
Anuken
2d3a9b605a Fixed #4337 / Fixed #4336 2021-01-15 17:09:12 -05:00
Anuken
718a40d742 More pattern matching 2021-01-15 16:04:26 -05:00
Anuken
650d47991e Formatting 2021-01-15 12:43:37 -05:00
Anuken
6ec76409ef Fixed #4335 2021-01-15 12:38:42 -05:00
Anuken
136c8cfcd2 Cleanup + Generic cross rendering 2021-01-15 11:34:33 -05:00
Anuken
bceb7b5809 Merge remote-tracking branch 'origin/master' 2021-01-15 11:16:12 -05:00
Anuken
a342a7d638 Cleanup & bugfixes 2021-01-15 11:16:08 -05:00
MEEP of Faith
956f4659c7 Sound stuff (#4332) 2021-01-15 10:13:41 -05:00
Anuken
593a7b060c Fixed #4334 2021-01-15 10:04:56 -05:00
Anuken
81ce3a28a1 More distinct plastanium sprite 2021-01-14 13:46:27 -05:00
Anuken
32070a37f7 Fixed #4325 2021-01-14 11:26:16 -05:00
Anuken
95c04eb085 Minor sector damage calculation changes 2021-01-13 17:09:18 -05:00
Anuken
c2602fe6a0 Fixed #4319 2021-01-13 10:43:04 -05:00
Anuken
9ce5164a7e Merge remote-tracking branch 'origin/master' 2021-01-12 11:53:04 -05:00
Anuken
ee79bc5501 Replaced waves.never with ∞ 2021-01-12 11:52:51 -05:00
彭瑞暄
3dc70be516 Update zh-TW translations (#4290)
* Update zh-TW bundle, surge correction

Changed surge ammo characteristic "shock".
Thought "shock" as in only stunning or making the enemy flinch.
It means shocking the enemy with electricity and deal bonus damage when the unit is covered in water.

* Launch max UI

* Minor correction wave spawning
2021-01-12 11:25:41 -05:00
Anuken
e44c3899e8 Merge remote-tracking branch 'origin/master' 2021-01-12 10:19:36 -05:00
Anuken
e7885a405e Removed 3.5 map image message
Reasoning: 3.5 images and most other map images won't work in the editor. If you try to import a random image, it will give you an empty map. Only maps that were exported as images previously will work correctly.
2021-01-12 10:19:30 -05:00
MEEP of Faith
c6b60a2620 shootLength for other turrets that aren't PointDefenceTurrets (#4312) 2021-01-12 09:39:27 -05:00
Anuken
9b6c44757a Merge remote-tracking branch 'origin/master' 2021-01-11 16:07:55 -05:00
Anuken
0cbc4c0cc5 Fixed #4311 2021-01-11 16:07:46 -05:00
Patrick 'Quezler' Mounier
e83cfe6cab Display unit cap modifier for core blocks (#4163)
* Display unit cap modifier for core blocks

* Move maxUnits stat from crafting to general

* Omit string formatting
2021-01-11 14:30:58 -05:00
Anuken
912ea94828 Merge remote-tracking branch 'origin/master' 2021-01-11 10:14:28 -05:00
Anuken
6417073a82 Corrected parallax target check 2021-01-11 10:14:23 -05:00
BlueWolf
994194452d fix a comment typo (#4307) 2021-01-11 10:13:28 -05:00
Anuken
c716c16746 Fixed #4305 / Fixed #4309 2021-01-11 10:11:31 -05:00
Anuken
f188563052 Sort mod browser entries by date 2021-01-10 16:59:02 -05:00
Anuken
07e8b4334b Merge remote-tracking branch 'origin/master' 2021-01-10 16:33:27 -05:00
Anuken
c0e955dc1f Updated to Gradle 6.8 2021-01-10 16:33:20 -05:00
Slava0135
2927348a6c power info fixes (#4303)
* power info fixes

* a better solution

* one little detail
2021-01-10 15:46:29 -05:00
Milan
96c8e0f415 add resolveDependencies gradle task (#4302) 2021-01-10 15:39:50 -05:00
Anuken
21f05c9d8a Merge remote-tracking branch 'origin/master' 2021-01-10 15:39:11 -05:00
Anuken
9b1c66ba15 #4298 2021-01-10 15:39:00 -05:00
BlueWolf
8b9b11f77f 1mil source output (#4299) 2021-01-10 15:33:31 -05:00
Anuken
9c846bd2c9 Invasion chance tweaks (#4297) 2021-01-10 15:27:17 -05:00
Anuken
7372bf37c2 Fixed #4301 2021-01-10 15:23:15 -05:00
Anuken
0a5a301573 Save building enabled state 2021-01-09 22:13:41 -05:00
Anuken
462a5b941e Merge remote-tracking branch 'origin/master' 2021-01-09 10:31:52 -05:00
Anuken
21fd20ea5b Targetp support for allied targets 2021-01-09 10:31:44 -05:00
Antsiferov Andrew
a0c7b33ff1 Add ModMeta#toString (#4292) 2021-01-09 10:06:12 -05:00
Anuken
b762a5028b Merge remote-tracking branch 'origin/master' 2021-01-08 12:22:46 -05:00
Anuken
2f83ba7f5c Logic battery control + Slight swarmer range buff 2021-01-08 12:22:32 -05:00
_owler_#0954
01d972f015 Update servers_v6.json (#4194)
* Update servers_v6.json

* Update servers_v6.json

Co-authored-by: Antsiferov Andrew <summet.dev@gmail.com>

* Update servers_v6.json

Co-authored-by: Antsiferov Andrew <summet.dev@gmail.com>
2021-01-08 11:21:25 -05:00
alex
0435140bb5 Update servers_v6.json (#4287)
A new game mode to share with the public! Turbo PVP
2021-01-08 09:53:57 -05:00
xzarfs
ff84d788a6 Changes to finnish translation (#4144)
Made existing translations more user friendly and added new translations. There are still big areas the translation is lacking, e.g. the tutorial.
2021-01-07 17:11:06 -05:00
Anuken
4c2f330e51 Merge remote-tracking branch 'origin/master' 2021-01-07 15:18:49 -05:00
Anuken
bd0f47c325 Faster weapon copy 2021-01-07 15:18:44 -05:00
genNAowl
13fbcb9ba8 Launch UI Max Button (#4238)
* max

* Add @Nullable

Co-authored-by: Leonwang4234 <62972692+Leonwang4234@users.noreply.github.com>
2021-01-07 13:38:31 -05:00
Anuken
9774095df4 Merge remote-tracking branch 'origin/master' 2021-01-07 10:08:33 -05:00
Anuken
f231849a42 UnitCreateEvent / UnitDeployEvent split 2021-01-07 10:08:28 -05:00
Antsiferov Andrew
c7d059a58f Don't terminate socket server on connection reset (#4282) 2021-01-07 09:52:02 -05:00
Anuken
c420ad1a16 Merge remote-tracking branch 'origin/master' 2021-01-06 16:25:09 -05:00
Anuken
99aec4ad15 Fixed #4277 2021-01-06 16:25:05 -05:00
彭瑞暄
1be91961d6 core inc & boost meter (#4272) 2021-01-06 12:15:34 -05:00
Anuken
9f51e23206 Merge remote-tracking branch 'origin/master' 2021-01-05 18:59:51 -05:00
Anuken
ebf4435af4 Fixed #4270 2021-01-05 18:59:46 -05:00
Patrick 'Quezler' Mounier
f4bf8fd998 Add boost bars to overdrive projectors (#4255)
* Add boost bars to overdrive projectors

* Add bar.boost to bundle

* Intelij lied to me
2021-01-05 15:32:43 -05:00
VozDuh
5516435619 Custom Launch Pad Pod Textures (#4203)
* Custom Launch Pad Pod Textures

* Facepalm

* Fix

* Fix

* Fix

Co-authored-by: Anuken <arnukren@gmail.com>

* Fix

Anuke!

Co-authored-by: Anuken <arnukren@gmail.com>
2021-01-05 15:17:18 -05:00
PAP6
5c24254d84 Update servers_v6.json (#4263)
Reason: This server is currently running version 104.10, so it shouldn't be here.
2021-01-05 10:52:21 -05:00
Patrick 'Quezler' Mounier
fdf08ed51d Highlight all linked inventories on core selection (#4256)
* Highlight all linked inventories on core selection

* Loop cores instead of storage blocks
2021-01-05 10:43:36 -05:00
Patrick 'Quezler' Mounier
42fb6ffa0d Add core incineration to custom rules dialog (#4264)
* Update CustomRulesDialog.java

* Update bundle.properties

* Update core/assets/bundles/bundle.properties

Co-authored-by: YellOw139 <70975516+YellOw139@users.noreply.github.com>

Co-authored-by: YellOw139 <70975516+YellOw139@users.noreply.github.com>
2021-01-05 10:37:37 -05:00
Anuken
0c4750781a Sound cleanup 2021-01-04 19:50:49 -05:00
Anuken
69eb8faf67 Fixed #4261 / Basic rotation shine effect 2021-01-04 17:22:18 -05:00
Anuken
0ab4f01d5d Better suicide bomb trigger check 2021-01-04 11:20:01 -05:00
Anuken
6361b7e57d Merge remote-tracking branch 'origin/master' 2021-01-04 11:06:19 -05:00
Anuken
961331c832 Minor turret targeting fix 2021-01-04 11:06:11 -05:00
Quick-Korc
8cdb4c0831 Indonesian Gplay Translate (#3708)
* Indonesian Gplay Translate

* Create 29741.txt
2021-01-04 10:56:39 -05:00
彭瑞暄
6bd8f99be3 Updated Search Bar cleanup for zh-TW (#4186)
* Update bundle_zh_TW.properties

Corrected some machine translations. Modified some others for more clear understanding.

* Update bundle_zh_TW.properties

* Update bundle_zh_TW.properties

new translations 1

* Update bundle_zh_TW.properties

New translations 2

* Update bundle_zh_TW.properties

New translations 3

* New translations 1-3

Removed "zones" from v121.4: "Fixed sectors not auto-unlocking".
衝擊反應堆 -->動能反應爐

* New translations 1-4

* New translations 1-5

* New translations 1-6

up to line 1250

* Indexing finished. Translations 1-7

lines are now matching with English bundle.

* update bundle_zh_TW.properties

* edit zh_TW

* zh-tw

* community server disclaimer

* Finished sector descriptions, slight modifications

up to line 606

* zh-TW

* Many translations, include Always-on weather rule

* corrected missing character

* Update achievements.vdf

Oct not translated

* Update description.txt

* bundle_zh_TW.properties

* Bullet stats update, hints finished

* added line: public confirm really

* contributors

* Merging conflicts

Almost done...

* Synced

* Update ammo-stat translation

* Update contributors

* Unit names

* Update bundle_zh_TW.properties

* Unit names

* Update bundle_zh_TW.properties

* Review (#15)

* Update bundle_zh_TW.properties

* Unit names

* Update bundle_zh_TW.properties

* Finished

Please review

* minor correction

* minor correction

Hopefully there are no more "minor corrections" required.

* Review

* Close inspection

* Revisions, change chat mode

* Sapping Correction

* Merge down (#16, post 122)

* Fixed #4108

* [QoL] Chat modes (#3869)

Credits: Remint32 (idea); sk7725 (korean i18n); Volas171 (spanish i18n).

* add new io server (#4109)

soon to be up gamemode

* typo (#4110)

* Fixed mined item flashing on clients

* Block Forge improvements (#4112)

* minBlockSize, maxBlockSize, icon

* removed fixed size

* same line

* revert to 3

* I almost forgot

* Up-to-date zh-TW translations (#4083)

* Update bundle_zh_TW.properties

Corrected some machine translations. Modified some others for more clear understanding.

* Update bundle_zh_TW.properties

* Update bundle_zh_TW.properties

new translations 1

* Update bundle_zh_TW.properties

New translations 2

* Update bundle_zh_TW.properties

New translations 3

* New translations 1-3

Removed "zones" from v121.4: "Fixed sectors not auto-unlocking".
衝擊反應堆 -->動能反應爐

* New translations 1-4

* New translations 1-5

* New translations 1-6

up to line 1250

* Indexing finished. Translations 1-7

lines are now matching with English bundle.

* update bundle_zh_TW.properties

* edit zh_TW

* zh-tw

* community server disclaimer

* Finished sector descriptions, slight modifications

up to line 606

* zh-TW

* Many translations, include Always-on weather rule

* corrected missing character

* Update achievements.vdf

Oct not translated

* Update description.txt

* bundle_zh_TW.properties

* Bullet stats update, hints finished

* added line: public confirm really

* contributors

* Merging conflicts

Almost done...

* Synced

* Update ammo-stat translation

* Update contributors

* Unit names

* Update bundle_zh_TW.properties

* Unit names

* Update bundle_zh_TW.properties

* Review (#15)

* Update bundle_zh_TW.properties

* Unit names

* Update bundle_zh_TW.properties

* Finished

Please review

* minor correction

* minor correction

Hopefully there are no more "minor corrections" required.

* Review

* Close inspection

* Revisions, change chat mode

* Sapping Correction

Co-authored-by: simba-fs <simba.fs@gmail.com>
Co-authored-by: Simba-Fs <39305460+simba-fs@users.noreply.github.com>

* Higher power source output

* Update servers_v6.json (#4095)

* Update servers_v6.json

the ip changed to not make users confuse

* Update servers_v6.json

* Fixed #4120

* Fixed #4121

* Fixed #4122

* Better build beam visuals

* Don't render weather in full map screenshots

* Building priority fix

* Fixed #4128

* SearchBar class - add search bars to mods (#3267)

* Create SearchBar and make ModsDialog use it

* add search bar to servers

* Update core/src/mindustry/ui/SearchBar.java

Co-authored-by: Antsiferov Andrew <summet.dev@gmail.com>

* a

* fix mods menu not rowing

* remove search bar for remote servers

* h

* hide searchbar on landscape mobile

* anukes feedback

* Update core/src/mindustry/ui/SearchBar.java

Co-authored-by: Anuken <arnukren@gmail.com>

* java dumb

Co-authored-by: Antsiferov Andrew <summet.dev@gmail.com>
Co-authored-by: Anuken <arnukren@gmail.com>

* Search bar cleanup

* Block (un)loader major improvements (#4127)

* make it consider consVaild

* make this too

* pattern style and max block size

* Is there a better way to do this?

* Update BlockUnloader.java

* do not the /0

* prevent /0

* test 1

* yup it works for enabled

Co-authored-by: Anuken <arnukren@gmail.com>
Co-authored-by: Antsiferov Andrew <summet.dev@gmail.com>
Co-authored-by: fuzzbuck <54221024+fuzzbuck@users.noreply.github.com>
Co-authored-by: Sunny Kim <58885089+sk7725@users.noreply.github.com>
Co-authored-by: simba-fs <simba.fs@gmail.com>
Co-authored-by: Simba-Fs <39305460+simba-fs@users.noreply.github.com>
Co-authored-by: Volas171 <60143910+Volas171@users.noreply.github.com>
Co-authored-by: DeltaNedas <39013340+DeltaNedas@users.noreply.github.com>

* "Search bar cleanup" update

* Hope this fixes merge conflict

* Delete servers_v6.json

* pain

* Sync (#21)

* Fixed #4108

* [QoL] Chat modes (#3869)

Credits: Remint32 (idea); sk7725 (korean i18n); Volas171 (spanish i18n).

* add new io server (#4109)

soon to be up gamemode

* typo (#4110)

* Fixed mined item flashing on clients

* Block Forge improvements (#4112)

* minBlockSize, maxBlockSize, icon

* removed fixed size

* same line

* revert to 3

* I almost forgot

* Up-to-date zh-TW translations (#4083)

* Update bundle_zh_TW.properties

Corrected some machine translations. Modified some others for more clear understanding.

* Update bundle_zh_TW.properties

* Update bundle_zh_TW.properties

new translations 1

* Update bundle_zh_TW.properties

New translations 2

* Update bundle_zh_TW.properties

New translations 3

* New translations 1-3

Removed "zones" from v121.4: "Fixed sectors not auto-unlocking".
衝擊反應堆 -->動能反應爐

* New translations 1-4

* New translations 1-5

* New translations 1-6

up to line 1250

* Indexing finished. Translations 1-7

lines are now matching with English bundle.

* update bundle_zh_TW.properties

* edit zh_TW

* zh-tw

* community server disclaimer

* Finished sector descriptions, slight modifications

up to line 606

* zh-TW

* Many translations, include Always-on weather rule

* corrected missing character

* Update achievements.vdf

Oct not translated

* Update description.txt

* bundle_zh_TW.properties

* Bullet stats update, hints finished

* added line: public confirm really

* contributors

* Merging conflicts

Almost done...

* Synced

* Update ammo-stat translation

* Update contributors

* Unit names

* Update bundle_zh_TW.properties

* Unit names

* Update bundle_zh_TW.properties

* Review (#15)

* Update bundle_zh_TW.properties

* Unit names

* Update bundle_zh_TW.properties

* Finished

Please review

* minor correction

* minor correction

Hopefully there are no more "minor corrections" required.

* Review

* Close inspection

* Revisions, change chat mode

* Sapping Correction

Co-authored-by: simba-fs <simba.fs@gmail.com>
Co-authored-by: Simba-Fs <39305460+simba-fs@users.noreply.github.com>

* Higher power source output

* Update servers_v6.json (#4095)

* Update servers_v6.json

the ip changed to not make users confuse

* Update servers_v6.json

* Fixed #4120

* Fixed #4121

* Fixed #4122

* Better build beam visuals

* Don't render weather in full map screenshots

* Building priority fix

* Fixed #4128

* SearchBar class - add search bars to mods (#3267)

* Create SearchBar and make ModsDialog use it

* add search bar to servers

* Update core/src/mindustry/ui/SearchBar.java

Co-authored-by: Antsiferov Andrew <summet.dev@gmail.com>

* a

* fix mods menu not rowing

* remove search bar for remote servers

* h

* hide searchbar on landscape mobile

* anukes feedback

* Update core/src/mindustry/ui/SearchBar.java

Co-authored-by: Anuken <arnukren@gmail.com>

* java dumb

Co-authored-by: Antsiferov Andrew <summet.dev@gmail.com>
Co-authored-by: Anuken <arnukren@gmail.com>

* Search bar cleanup

* Block (un)loader major improvements (#4127)

* make it consider consVaild

* make this too

* pattern style and max block size

* Is there a better way to do this?

* Update BlockUnloader.java

* do not the /0

* prevent /0

* test 1

* yup it works for enabled

* bugfixes, call me the mother of the block forge (#4135)

(anuke is the father)

* Fixed #4141 / Fixed #4136

* Faster power graph reload / Fixed iOS editor margin

* Remove 4 square blocks from the accelerator (#4139)

* Normalize rule comment line endings

Just so i can get a new patch-## branch where i can drag my accelerator sprite on since github isn't smart enough yet to see that as a possible pull request by itself.

* Add files via upload

* Add files via upload

* Use sector preset name for maps if possible

* Fixed #4147

* Update servers_v6.json (#4148)

changed the port number for our attack server.
sorry for the inconvenience, i don't have control over the port number of this "alexmindustryattac.ddns.net" hosted server.

* Removed packed sprite section from CONTRIBUTING.md (#4152)

* Return large launchpad item costs (#4134)

* Return large launchpad item costs

hidden -> debugonly

* Remove the 4 orange squares from the large launch pad

Leaving the lights and launchpod alignments alone since that is campaign only.

* Sector damage tweaks

* Block loader/unloader progress bar changes (#4138)

* Change block loader/unloader progess bar color & bundle

ammo -> items

* Make block unloader bar go down

* Draw reconstructor in region during placement & unconnected (#4143)

* Draw reconstructor in region during placement & unconnected

* Same as the previous commit, but for block loaders & unloaders

* Bugfixes

* Fixed #4164 / Fixed #4159

* fix german translation for editor.unsaved (#4169)

* update KO bundles (#3956)

* Update steam description for 6.0 update

* Update achievements.vdf

* oops.

* Update full_description.txt

* Update summary.txt

* add recent changelog

* Update bundle_ko.properties

* last update on this week

(well, sunday)

* upload android recent change-log

* critical fix

* [KO] Small fix (#4133)

* why

* Update bundle_ko.properties

* bundle_hu.properties (#4170)

I'am continue translating and adding lines to v6.

* [Bundle][RO] Translation update (#4115)

* [Bundle][RO] Translation update

This PR was tested in-game and is _**ready to merge at any time**_ (unless marked as draft).

Changelog:
- New strings/changes up to commit 43757a247e
- Typo fixes & various other improvements

* no

* yet another in_ID translation update (#4086)

* yet another in_ID translation update

* more id translate

Co-authored-by: Quick-Korc <68910156+Quick-korkc@users.noreply.github.com>

* Cleanup

Co-authored-by: Anuken <arnukren@gmail.com>
Co-authored-by: Antsiferov Andrew <summet.dev@gmail.com>
Co-authored-by: fuzzbuck <54221024+fuzzbuck@users.noreply.github.com>
Co-authored-by: Sunny Kim <58885089+sk7725@users.noreply.github.com>
Co-authored-by: simba-fs <simba.fs@gmail.com>
Co-authored-by: Simba-Fs <39305460+simba-fs@users.noreply.github.com>
Co-authored-by: Volas171 <60143910+Volas171@users.noreply.github.com>
Co-authored-by: DeltaNedas <39013340+DeltaNedas@users.noreply.github.com>
Co-authored-by: Patrick 'Quezler' Mounier <Quezler@me.com>
Co-authored-by: alex <67626131+alexpvpmindustry@users.noreply.github.com>
Co-authored-by: Catchears <57631841+Catchears@users.noreply.github.com>
Co-authored-by: Sharlotte <60801210+sharlotte-mobile@users.noreply.github.com>
Co-authored-by: Vajda Simon <75036456+VajdaSimon@users.noreply.github.com>
Co-authored-by: YellOw139 <70975516+YellOw139@users.noreply.github.com>
Co-authored-by: Thomas Widyantoko <40286070+DaGamerFiles@users.noreply.github.com>
Co-authored-by: Quick-Korc <68910156+Quick-korkc@users.noreply.github.com>

* Update gradle.properties

* Update bundle_zh_TW.properties

Co-authored-by: simba-fs <simba.fs@gmail.com>
Co-authored-by: Simba-Fs <39305460+simba-fs@users.noreply.github.com>
Co-authored-by: Anuken <arnukren@gmail.com>
Co-authored-by: Antsiferov Andrew <summet.dev@gmail.com>
Co-authored-by: fuzzbuck <54221024+fuzzbuck@users.noreply.github.com>
Co-authored-by: Sunny Kim <58885089+sk7725@users.noreply.github.com>
Co-authored-by: Volas171 <60143910+Volas171@users.noreply.github.com>
Co-authored-by: DeltaNedas <39013340+DeltaNedas@users.noreply.github.com>
Co-authored-by: Patrick 'Quezler' Mounier <Quezler@me.com>
Co-authored-by: alex <67626131+alexpvpmindustry@users.noreply.github.com>
Co-authored-by: Catchears <57631841+Catchears@users.noreply.github.com>
Co-authored-by: Sharlotte <60801210+sharlotte-mobile@users.noreply.github.com>
Co-authored-by: Vajda Simon <75036456+VajdaSimon@users.noreply.github.com>
Co-authored-by: YellOw139 <70975516+YellOw139@users.noreply.github.com>
Co-authored-by: Thomas Widyantoko <40286070+DaGamerFiles@users.noreply.github.com>
Co-authored-by: Quick-Korc <68910156+Quick-korkc@users.noreply.github.com>
2021-01-04 10:38:18 -05:00
Antsiferov Andrew
4b71b4f80a Make mod browser case insensitive (#4258) 2021-01-04 10:33:43 -05:00
Anuken
5712190dab cleanup 2021-01-03 18:01:44 -05:00
Anuken
af636f74fc Core incineration tweaks 2021-01-03 16:52:54 -05:00
Patrick 'Quezler' Mounier
0cfdacdd28 Allow for core incineration via rules (#4242) 2021-01-03 16:48:25 -05:00
Patrick 'Quezler' Mounier
3eb0857906 Building tile > Building build @ Inputhandler.java (#4241)
Was weird to see `if(player != null) tile.lastAccessed = player.name;` in there.
2021-01-03 16:18:39 -05:00
Joshua Fan
0f3716b8dd Logic: Fix radar from value bug (#4236)
* Logic: Fix radar from value bug

* Use constructor to modify variable initialization
2021-01-03 15:38:09 -05:00
TranquillyUnpleasant
dbe2f7eefa Fix mirror being offset (#4248)
Because apparently it isn't a valid map even though its been a known issue for months.
2021-01-03 13:45:35 -05:00
Anuken
3497212b95 Merge remote-tracking branch 'origin/master' 2021-01-03 12:43:19 -05:00
Anuken
2ae864f4d3 Made logic processors reset variables on edit 2021-01-03 12:43:15 -05:00
Patrick 'Quezler' Mounier
200eb26b78 Added Call#clearItems (#4243) 2021-01-03 12:42:42 -05:00
Anuken
e9c93ab3a0 Revert radar statement changes 2021-01-02 17:38:04 -05:00
Anuken
e70221f6dd Fixed #4235 2021-01-02 16:05:22 -05:00
Anuken
c4d72eef39 Don't configure processor when no changes are made 2021-01-02 14:40:08 -05:00
Anuken
42ae5e90b0 Headless access of bridge/node opacity 2021-01-02 13:08:32 -05:00
Patrick 'Quezler' Mounier
fe92ce557f Draws build request bridges using bridge opacity (#4180)
* Update ItemBridge.java

* Introduce renderer.bridgeOpacity
2021-01-02 13:06:13 -05:00
Anuken
bf81565e93 Merge remote-tracking branch 'origin/master' 2021-01-02 11:58:43 -05:00
Anuken
981dec098a Fixed #4232 2021-01-02 11:58:34 -05:00
Marko Zajc
d65506e420 Support IPv6 addresses properly (#4225)
* Support IPv6 addresses properly

support the `[ipv6]:port` and `ipv6` formats
silly cat forgot that ipv6 is a thing

* unnecessary self promotion

* less split more substring

* also display ipv6 format properly

* important security fixes
2021-01-02 10:52:14 -05:00
Anuken
73d009666e Merge remote-tracking branch 'origin/master' 2021-01-01 15:34:40 -05:00
Anuken
a9c4ccdf48 Fixed #4222 2021-01-01 15:34:32 -05:00
Catchears
035d7fed77 update german bundle (#4218) 2021-01-01 13:50:30 -05:00
Anuken
0374ec5e4a Merge remote-tracking branch 'origin/master' 2021-01-01 12:00:51 -05:00
Joshua Fan
0a92e64498 Remove turret1 from uradar (#4207) 2021-01-01 11:32:58 -05:00
Lapis
0b6194cfc9 Update bundle_ja.properties (#4210)
* Update bundle_ja.properties

* Update bundle_ja.properties

* Update bundle_ja.properties
2021-01-01 11:32:15 -05:00
Lonami
044fb30b1b Support inline comments (#4196)
* Support inline comments

Closes https://github.com/Anuken/Mindustry-Suggestions/issues/1698.

* Apply suggestions from code review

Co-authored-by: Patrick 'Quezler' Mounier <Quezler@me.com>

* Stick with Mindustry formatting style

Co-authored-by: Patrick 'Quezler' Mounier <Quezler@me.com>
2020-12-31 16:30:35 -05:00
Anuken
727b47dba5 Preload naval paths on liquid spawns 2020-12-30 19:35:23 -05:00
MEEP of Faith
ab19e6ffbd Launchpad Launch Sound (#4146)
* Launchpad Launch Sound

* Update LaunchPad.java
2020-12-30 19:27:50 -05:00
Anuken
f5410c5712 #4129 2020-12-30 16:58:42 -05:00
Patrick 'Quezler' Mounier
b79a6f6b32 Fix block status of repair point and battery (#4187)
* Fix block status of repair point and battery

* Update Battery.java

* Update RepairPoint.java
2020-12-30 15:30:49 -05:00
Anuken
b672434e83 arc 2020-12-30 10:23:45 -05:00
Anuken
9b087dc55d Fixed #4183 2020-12-30 10:05:18 -05:00
164 changed files with 2822 additions and 3215 deletions

View File

@@ -45,6 +45,7 @@ public class AndroidLauncher extends AndroidApplication{
handler.uncaughtException(thread, error); handler.uncaughtException(thread, error);
}else{ }else{
error.printStackTrace(); error.printStackTrace();
Log.err(error);
System.exit(1); System.exit(1);
} }
}); });

View File

@@ -410,3 +410,12 @@ task deployAll{
dependsOn "server:deploy" dependsOn "server:deploy"
dependsOn "android:deploy" dependsOn "android:deploy"
} }
task resolveDependencies{
doLast{
rootProject.allprojects{ project ->
Set<Configuration> configurations = project.buildscript.configurations + project.configurations
configurations.findAll{c -> c.canBeResolved}.forEach{c -> c.resolve()}
}
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 310 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 481 B

After

Width:  |  Height:  |  Size: 320 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 611 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

View File

@@ -287,6 +287,7 @@ cancel = Cancel
openlink = Open Link openlink = Open Link
copylink = Copy Link copylink = Copy Link
back = Back back = Back
max = Max
crash.export = Export Crash Logs crash.export = Export Crash Logs
crash.none = No crash logs found. crash.none = No crash logs found.
crash.exported = Crash logs exported. crash.exported = Crash logs exported.
@@ -361,7 +362,6 @@ editor.center = Center
workshop = Workshop workshop = Workshop
waves.title = Waves waves.title = Waves
waves.remove = Remove waves.remove = Remove
waves.never = <never>
waves.every = every waves.every = every
waves.waves = wave(s) waves.waves = wave(s)
waves.perspawn = per spawn waves.perspawn = per spawn
@@ -390,7 +390,7 @@ editor.removeunit = Remove Unit
editor.teams = Teams editor.teams = Teams
editor.errorload = Error loading file. editor.errorload = Error loading file.
editor.errorsave = Error saving file. editor.errorsave = Error saving file.
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.errorimage = That's an image, not a map.
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.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.
@@ -720,6 +720,7 @@ bar.corereq = Core Base Required
bar.drillspeed = Drill Speed: {0}/s bar.drillspeed = Drill Speed: {0}/s
bar.pumpspeed = Pump Speed: {0}/s bar.pumpspeed = Pump Speed: {0}/s
bar.efficiency = Efficiency: {0}% bar.efficiency = Efficiency: {0}%
bar.boost = Boost: {0}%
bar.powerbalance = Power: {0}/s bar.powerbalance = Power: {0}/s
bar.powerstored = Stored: {0}/{1} bar.powerstored = Stored: {0}/{1}
bar.poweramount = Power: {0} bar.poweramount = Power: {0}
@@ -935,6 +936,7 @@ mode.custom = Custom Rules
rules.infiniteresources = Infinite Resources rules.infiniteresources = Infinite Resources
rules.reactorexplosions = Reactor Explosions rules.reactorexplosions = Reactor Explosions
rules.coreincinerates = Core Incinerates Overflow
rules.schematic = Schematics Allowed rules.schematic = Schematics Allowed
rules.wavetimer = Wave Timer rules.wavetimer = Wave Timer
rules.waves = Waves rules.waves = Waves
@@ -1381,8 +1383,8 @@ block.inverted-sorter.description = Similar to a standard sorter, but outputs se
block.router.description = Distributes input items to 3 output directions equally. block.router.description = Distributes input items to 3 output directions equally.
block.router.details = A necessary evil. Using next to production inputs is not advised, as they will get clogged by output. block.router.details = A necessary evil. Using next to production inputs is not advised, as they will get clogged by output.
block.distributor.description = Distributes input items to 7 output directions equally. block.distributor.description = Distributes input items to 7 output directions equally.
block.overflow-gate.description = Only outputs items to the left and right if the front path is blocked. Cannot be used next to other gates. block.overflow-gate.description = Only outputs items to the left and right if the front path is blocked.
block.underflow-gate.description = Opposite of an overflow gate. Outputs to the front if the left and right paths are blocked. Cannot be used next to other gates. block.underflow-gate.description = Opposite of an overflow gate. Outputs to the front if the left and right paths are blocked.
block.mass-driver.description = Long-range item transport structure. Collects batches of items and shoots them to other mass drivers. block.mass-driver.description = Long-range item transport structure. Collects batches of items and shoots them to other mass drivers.
block.mechanical-pump.description = Pumps and outputs liquids. Does not require power. block.mechanical-pump.description = Pumps and outputs liquids. Does not require power.
block.rotary-pump.description = Pumps and outputs liquids. Requires power. block.rotary-pump.description = Pumps and outputs liquids. Requires power.

View File

@@ -194,6 +194,7 @@ servers.local = Místní servery
servers.remote = Vzdálené servery servers.remote = Vzdálené servery
servers.global = Komunitní servery servers.global = Komunitní servery
servers.disclaimer = Komunitní servery [accent]nejsou[] vlastněny ani kontrolovány vývojářem této hry.\n\nServery mohou obsahovat obsah vytvořený uživateli, který může na některé uživatele působit nepatřičně či nevhodně.
servers.showhidden = Zobraz skryté servery servers.showhidden = Zobraz skryté servery
server.shown = Zobrazené server.shown = Zobrazené
server.hidden = Skryté server.hidden = Skryté
@@ -1278,6 +1279,10 @@ hint.payloadDrop.mobile = [accent]Ťupni a drž[] na prázdném místě pro polo
hint.waveFire = [accent]Naplň[] věže vodou místo munice pro automatické hašení okolních požárů. hint.waveFire = [accent]Naplň[] věže vodou místo munice pro automatické hašení okolních požárů.
hint.generator = \uf879 [accent]Spalovací generátory[] pálí uhlí a přenášení energii do sousedících bloků.\n\nPřenos energie na delší vzdálenost se provádí pomocí \uf87f [accent]Energetických uzlů[]. hint.generator = \uf879 [accent]Spalovací generátory[] pálí uhlí a přenášení energii do sousedících bloků.\n\nPřenos energie na delší vzdálenost se provádí pomocí \uf87f [accent]Energetických uzlů[].
hint.guardian = Jednotky [accent]Strážce[] jsou obrněné. Měkká munice, jako je například [accent]měď[] a [accent]olovo[] je [scarlet]neefektivní[].\n\nPoužij vylepšené věže nebo \uf835 [accent]grafitovou[] munici pro \uf861 Střílnu Duo/\uf859 Salvu, abys Strážce sejmul. hint.guardian = Jednotky [accent]Strážce[] jsou obrněné. Měkká munice, jako je například [accent]měď[] a [accent]olovo[] je [scarlet]neefektivní[].\n\nPoužij vylepšené věže nebo \uf835 [accent]grafitovou[] munici pro \uf861 Střílnu Duo/\uf859 Salvu, abys Strážce sejmul.
hint.coreUpgrade = Jádro může být vylepšeno [accent]překrytím jádrem vyšší úrovně[].\n\nUmísti jádro typu [accent]Základ[] přes jádro typu [accent]Odštěpek[]. Ujisti se, že v okolí nejsou žádné překážky.
hint.presetLaunch = Na šedé [accent]sektory v přistávací zóně[], jako je například [accent]Zamrzlý les[], se lze vyslat kdykoli. Nevyžadují polapení okolního teritoria.\n\n[accent]Číslované sektory[], jako je tento, jsou [accent]volitelné[].
hint.coreIncinerate = Poté, co je kapacita jádra určité položky naplněna, jakékoliv další stejné přijaté položky budou [accent]zničeny[].
hint.coopCampaign = Když hraješ [accent]kooperativní kampaň[], položky, které jsou vyrobeny v této mapě, budou též zaslány [accent]do Tvých místních sektorů[].\n\nJakýkoliv vývoj dosažený hostitelem se též přenáší.
item.copper.description = Používá se ve všech typech bloků a munice. item.copper.description = Používá se ve všech typech bloků a munice.
item.copper.details = Měď. Nezvykle nadpočetný kov na Serpulu. Konstrukčně slabý, pokud není rafinovaná. item.copper.details = Měď. Nezvykle nadpočetný kov na Serpulu. Konstrukčně slabý, pokud není rafinovaná.
@@ -1471,7 +1476,7 @@ unit.zenith.description = Střílí salvy raket na všechny blízké nepřátele
unit.antumbra.description = Střílí palbu střel na všechny blízké nepřátele. unit.antumbra.description = Střílí palbu střel na všechny blízké nepřátele.
unit.eclipse.description = Vystřelí dva pronikavé lasery a záplavu protivzdušných střel na všechny blízké nepřátele. unit.eclipse.description = Vystřelí dva pronikavé lasery a záplavu protivzdušných střel na všechny blízké nepřátele.
unit.mono.description = Samočinně těží měď a olovo a ukládá je do jádra. unit.mono.description = Samočinně těží měď a olovo a ukládá je do jádra.
unit.poly.description = Samočinně obnovuje poškozené konstrukce a pomáhá ostatním jednotkám při stavbě. unit.poly.description = Samočinně obnovuje zničené konstrukce a pomáhá ostatním jednotkám při stavbě.
unit.mega.description = Samočinně opravuje poškozené konstrukce. Je schopný přenést bloky a malé pozemní jednotky. unit.mega.description = Samočinně opravuje poškozené konstrukce. Je schopný přenést bloky a malé pozemní jednotky.
unit.quad.description = Pouští velké bomby na pozemní cíle, opravuje spojenecké konstrukce a poškozuje nepřátele. Je schopen přenést středně velké pozemní jednotky. unit.quad.description = Pouští velké bomby na pozemní cíle, opravuje spojenecké konstrukce a poškozuje nepřátele. Je schopen přenést středně velké pozemní jednotky.
unit.oct.description = Chrání blízké spojence pomocí regeneračního štítu. Je schopen přenést většinu pozemních jednotek. unit.oct.description = Chrání blízké spojence pomocí regeneračního štítu. Je schopen přenést většinu pozemních jednotek.

View File

@@ -41,11 +41,10 @@ be.ignore = Ignorieren
be.noupdates = Keine Aktualisierungen gefunden. be.noupdates = Keine Aktualisierungen gefunden.
be.check = Auf Aktualisierungen prüfen be.check = Auf Aktualisierungen prüfen
mod.featured.title = Mod Browser mod.featured.dialog.title = Mod Browser (unfertig)
mod.featured.dialog.title = Mod Browser
mods.browser.selected = Ausgewählter Mod mods.browser.selected = Ausgewählter Mod
mods.browser.add = Mod installieren mods.browser.add = Installieren
mods.github.open = Auf GitHub ansehen mods.github.open = Ansehen
schematic = Entwurf schematic = Entwurf
schematic.add = Entwurf speichern... schematic.add = Entwurf speichern...
@@ -90,6 +89,7 @@ joingame = Spiel beitreten
customgame = Benutzerdefiniertes Spiel customgame = Benutzerdefiniertes Spiel
newgame = Neues Spiel newgame = Neues Spiel
none = <nichts> none = <nichts>
none.found = [lightgray]<keine gefunden>
minimap = Minimap minimap = Minimap
position = Position position = Position
close = Schließen close = Schließen
@@ -918,6 +918,7 @@ keybind.toggle_menus.name = Menüs umschalten
keybind.chat_history_prev.name = Chat Historie zurück keybind.chat_history_prev.name = Chat Historie zurück
keybind.chat_history_next.name = Chat Historie vor keybind.chat_history_next.name = Chat Historie vor
keybind.chat_scroll.name = Chat scrollen keybind.chat_scroll.name = Chat scrollen
keybind.chat_mode.name = Chatmodus ändern
keybind.drop_unit.name = Einheit absetzen keybind.drop_unit.name = Einheit absetzen
keybind.zoom_minimap.name = Minimap-Zoom keybind.zoom_minimap.name = Minimap-Zoom
mode.help.title = Beschreibung der Modi mode.help.title = Beschreibung der Modi

View File

@@ -24,7 +24,7 @@ gameover.waiting = [accent]Esperando el próximo mapa...
highscore = [accent]¡Nuevo récord de puntuación! highscore = [accent]¡Nuevo récord de puntuación!
copied = Copiado copied = Copiado
indev.notready = Esta parte del juego no esta lista aún. indev.notready = Esta parte del juego no esta lista aún.
indev.campaign = [accent]Has llegado al final de la campaña![]\n\nEsto es todo lo lejos que puedes llegar por ahora.\nLos viajes interplanetarios se añadirán en futuras actualizaciones. indev.campaign = [accent]Has llegado al final de la campaña![]\n\nEsto es lo más lejos que puedes llegar por ahora.\nLos viajes interplanetarios se añadirán en futuras actualizaciones.
load.sound = Sonidos load.sound = Sonidos
load.map = Mapas load.map = Mapas
@@ -570,7 +570,7 @@ threat.low = Baja
threat.medium = Media threat.medium = Media
threat.high = Alta threat.high = Alta
threat.extreme = Extrema threat.extreme = Extrema
threat.eradication = Exterminio threat.eradication = Erradicación
planets = Planetas planets = Planetas
@@ -585,7 +585,7 @@ sector.ruinousShores.name = Costas Ruinosas
sector.stainedMountains.name = Montañas manchadas sector.stainedMountains.name = Montañas manchadas
sector.desolateRift.name = Grieta desolada sector.desolateRift.name = Grieta desolada
sector.nuclearComplex.name = Complejo de producción nuclear sector.nuclearComplex.name = Complejo de producción nuclear
sector.overgrowth.name = Crecimiento excesivo sector.overgrowth.name = Sobrecrecimiento
sector.tarFields.name = Campos de alquitrán sector.tarFields.name = Campos de alquitrán
sector.saltFlats.name = Llanuras de sal sector.saltFlats.name = Llanuras de sal
sector.fungalPass.name = Paso de hongos sector.fungalPass.name = Paso de hongos
@@ -594,13 +594,13 @@ sector.windsweptIslands.name = Islas Windswept
sector.extractionOutpost.name = Puesto de avanzada de Extracción sector.extractionOutpost.name = Puesto de avanzada de Extracción
sector.planetaryTerminal.name = Terminal de Lanzamiento Interplanetario sector.planetaryTerminal.name = Terminal de Lanzamiento Interplanetario
sector.groundZero.description = La ubicación adecuada para empezar una vez más. Baja amenaza enemiga. Pocos recursos.\nReúna la mayor cantidad de plomo y cobre posible y sigue adelante. sector.groundZero.description = La ubicación adecuada para empezar una vez más. Amenaza enemiga baja. Pocos recursos.\nReúna la mayor cantidad de plomo y cobre posible y sigue adelante.
sector.frozenForest.description = Incluso aquí, más cerca de las montañas, las esporas se han extendido. Las gélidas temperaturas no las contendrán para siempre.\n\nAprende a usar la energía. Construye generadores de combustión. Aprende a usar reparadores. sector.frozenForest.description = Incluso aquí, más cerca de las montañas, las esporas se han extendido. Las gélidas temperaturas no las contendrán para siempre.\n\nAprende a usar la energía. Construye generadores de combustión. Aprende a usar reparadores.
sector.saltFlats.description = En las afueras del desierto se encuentran las Salinas. No hay muchos recursos en esta ubicación.\n\nEl enemigo ha creado un complejo de almacenamiento de recursos aquí. Erradica su núcleo. No dejes nada en pie. sector.saltFlats.description = En las afueras del desierto se encuentran las Salinas. No hay muchos recursos en esta ubicación.\n\nEl enemigo ha creado un complejo de almacenamiento de recursos aquí. Erradica su núcleo. No dejes nada en pie.
sector.craters.description = El agua se ha acumulado en este cráter, reliquia de las viejas guerras. Recupera la zona. Recoge arena. Funde Metacristal. Bombea agua para enfriar torretas y taladros. sector.craters.description = El agua se ha acumulado en este cráter, reliquia de las viejas guerras. Recupera la zona. Recoge arena. Funde Metacristal. Bombea agua para enfriar torretas y taladros.
sector.ruinousShores.description = Más allá de los páramos, se encuentra la costa. Una vez, esta ubicación albergó una serie de defensa costera. No queda mucho. Solo las estructuras de defensa más básicas han quedado ilesas, todo lo demás está reducido a chatarra.\nContinúa la expansión. Redescubre la tecnología. sector.ruinousShores.description = Más allá de los páramos, se encuentra la costa. Una vez, esta ubicación albergó una serie de defensa costera. No queda mucho. Solo las estructuras de defensa más básicas han quedado ilesas, todo lo demás está reducido a chatarra.\nContinúa la expansión. Redescubre la tecnología.
sector.stainedMountains.description = Más adentro se encuentran las montañas, aún intactas por las esporas.\nExtrae el abundante titanio de esta zona. Aprende a usarlo.\n\nLa presencia enemiga es mayor aquí. No les des tiempo para enviar sus unidades más fuertes. sector.stainedMountains.description = Más adentro se encuentran las montañas, aún intactas por las esporas.\nExtrae el abundante titanio de esta zona. Aprende a usarlo.\n\nLa presencia enemiga es mayor aquí. No les des tiempo para enviar sus unidades más fuertes.
sector.overgrowth.description = El área está cubierta de maleza, más cerca de la fuente de las esporas.\nEl enemigo ha establecido un puesto de avanzada aquí. Construye unidades Titán. Destruyelo. Recupera lo que se perdió. sector.overgrowth.description = El área está cubierta de maleza, más cerca de la fuente de las esporas.\nEl enemigo ha establecido un puesto de avanzada aquí. Construye unidades Mace. Destruyelo. Recupera lo que se perdió.
sector.tarFields.description = Las afueras de una zona de producción de petróleo, entre la montaña y el desierto. Una de las pocas áreas con reservas de alquitrán utilizables.\nAunque está abandonada, esta zona tiene algunas fuerzas enemigas peligrosas cerca. No los subestimes.\n\n[lightgray]Investiga la tecnología de procesamiento de petróleo si es posible. sector.tarFields.description = Las afueras de una zona de producción de petróleo, entre la montaña y el desierto. Una de las pocas áreas con reservas de alquitrán utilizables.\nAunque está abandonada, esta zona tiene algunas fuerzas enemigas peligrosas cerca. No los subestimes.\n\n[lightgray]Investiga la tecnología de procesamiento de petróleo si es posible.
sector.desolateRift.description = Una zona extremadamente peligrosa. Recursos abundantes, pero poco espacio. Alto riesgo de destrucción. Abandona el lugar lo antes posible. No te dejes engañar por el intervalo entre los ataques enemigos. sector.desolateRift.description = Una zona extremadamente peligrosa. Recursos abundantes, pero poco espacio. Alto riesgo de destrucción. Abandona el lugar lo antes posible. No te dejes engañar por el intervalo entre los ataques enemigos.
sector.nuclearComplex.description = Antigua instalación de producción y procesamiento de torio, reducida a ruinas.\n[lightgray] Investiga el torio y sus múltiples usos.\n\nEl enemigo está presente aquí,superando en número a sus atacantes. sector.nuclearComplex.description = Antigua instalación de producción y procesamiento de torio, reducida a ruinas.\n[lightgray] Investiga el torio y sus múltiples usos.\n\nEl enemigo está presente aquí,superando en número a sus atacantes.
@@ -706,11 +706,11 @@ stat.abilities = Habilidades
stat.canboost = Tiene Propulsores stat.canboost = Tiene Propulsores
stat.flying = Aéreo stat.flying = Aéreo
ability.forcefield = Zona de Escudo ability.forcefield = Campo de Fuerza
ability.repairfield = Zona de Reparación ability.repairfield = Campo de Reparación
ability.statusfield = Zona de Estado ability.statusfield = Campo de Estado
ability.unitspawn = {0} Fábrica de Drones ability.unitspawn = {0} Fábrica de Drones
ability.shieldregenfield = Regeneración de Escudos ability.shieldregenfield = Campo de Regeneración de Escudos
ability.movelightning = Movimiento Relámpago ability.movelightning = Movimiento Relámpago
bar.drilltierreq = Requiere un taladro mejor bar.drilltierreq = Requiere un taladro mejor
@@ -735,7 +735,7 @@ bar.progress = Progreso de construcción
bar.input = Entrada bar.input = Entrada
bar.output = Salida bar.output = Salida
units.processorcontrol = [lightgray]Procesador Controlado units.processorcontrol = [lightgray]Controlado por Procesador
bullet.damage = [stat]{0}[lightgray] Daño bullet.damage = [stat]{0}[lightgray] Daño
bullet.splashdamage = [stat]{0}[lightgray] daño de área ~[stat] {1}[lightgray] casillas bullet.splashdamage = [stat]{0}[lightgray] daño de área ~[stat] {1}[lightgray] casillas
@@ -796,7 +796,7 @@ setting.indicators.name = Indicadores de Enemigos
setting.autotarget.name = Auto-Apuntado setting.autotarget.name = Auto-Apuntado
setting.keyboard.name = Controles de Ratón+Teclado setting.keyboard.name = Controles de Ratón+Teclado
setting.touchscreen.name = Controles Táctiles setting.touchscreen.name = Controles Táctiles
setting.fpscap.name = Máximos FPS setting.fpscap.name = FPS Maxímos
setting.fpscap.none = Nada setting.fpscap.none = Nada
setting.fpscap.text = {0} FPS setting.fpscap.text = {0} FPS
setting.uiscale.name = Escala de Interfaz[lightgray] (necesita reiniciar)[] setting.uiscale.name = Escala de Interfaz[lightgray] (necesita reiniciar)[]
@@ -823,7 +823,7 @@ setting.smoothcamera.name = Movimiento de cámara suave
setting.vsync.name = VSync (Limita los fps a los Hz de tu pantalla) setting.vsync.name = VSync (Limita los fps a los Hz de tu pantalla)
setting.pixelate.name = Pixelar setting.pixelate.name = Pixelar
setting.minimap.name = Mostrar Minimapa setting.minimap.name = Mostrar Minimapa
setting.coreitems.name = Mostrar elementos en el nucleo (WIP) setting.coreitems.name = Mostrar Objetos en el nucleo (WIP)
setting.position.name = Mostrar indicadores de posición de jugadores. setting.position.name = Mostrar indicadores de posición de jugadores.
setting.musicvol.name = Volumen de la Música setting.musicvol.name = Volumen de la Música
setting.atmosphere.name = Mostrar Atmósfera del planeta setting.atmosphere.name = Mostrar Atmósfera del planeta
@@ -852,7 +852,7 @@ category.view.name = Visión
category.multiplayer.name = Multijugador category.multiplayer.name = Multijugador
category.blocks.name = Seleccionar bloques category.blocks.name = Seleccionar bloques
command.attack = Atacar command.attack = Atacar
command.rally = Patrullar command.rally = Reunirse
command.retreat = Retirarse command.retreat = Retirarse
command.idle = Esperar command.idle = Esperar
placement.blockselectkeys = \n[lightgray]Códigos: [{0}, placement.blockselectkeys = \n[lightgray]Códigos: [{0},
@@ -1232,7 +1232,7 @@ block.disassembler.name = Desensamblador
block.silicon-crucible.name = Crisol de silicio block.silicon-crucible.name = Crisol de silicio
block.overdrive-dome.name = Campo de Aceleración block.overdrive-dome.name = Campo de Aceleración
#experimental, puede ser eliminado #experimental, puede ser eliminado
block.block-forge.name = Fundidor de Bloques block.block-forge.name = Forja de Bloques
block.block-loader.name = Cargador de Bloques block.block-loader.name = Cargador de Bloques
block.block-unloader.name = Descargador de Bloques block.block-unloader.name = Descargador de Bloques
block.interplanetary-accelerator.name = Acelerador Interplanetario block.interplanetary-accelerator.name = Acelerador Interplanetario
@@ -1247,10 +1247,10 @@ block.memory-cell.name = Unidad de memoria
block.memory-bank.name = Servidor de memoria block.memory-bank.name = Servidor de memoria
team.blue.name = azul team.blue.name = azul
team.crux.name = rojo team.crux.name = crux
team.sharded.name = naranja team.sharded.name = sharded
team.orange.name = naranja team.orange.name = naranja
team.derelict.name = abandonado team.derelict.name = delerict
team.green.name = verde team.green.name = verde
team.purple.name = morado team.purple.name = morado
@@ -1269,7 +1269,7 @@ hint.placeConveyor = Las cintas transportadoras pueden sacar objetos de los tala
hint.placeConveyor.mobile = Las cintas transportadoras pueden mover objetos de los taladros hasta otros bloques. Selecciona un \uf896 [accent]Transportador[] de la pestaña \ue814 [accent]Distribución[].\n\nMantén el dedo un segundo y arrastra para crear múltiples cintas transportadoras. hint.placeConveyor.mobile = Las cintas transportadoras pueden mover objetos de los taladros hasta otros bloques. Selecciona un \uf896 [accent]Transportador[] de la pestaña \ue814 [accent]Distribución[].\n\nMantén el dedo un segundo y arrastra para crear múltiples cintas transportadoras.
hint.placeTurret = Construye \uf861 [accent]Torretas[] para defender tu base de los enemigos.\n\nLas torretas necesitan munición - en este caso, \uf838cobre.\nUsa cintas transportadoras y taladros para abastecerlas con cobre. hint.placeTurret = Construye \uf861 [accent]Torretas[] para defender tu base de los enemigos.\n\nLas torretas necesitan munición - en este caso, \uf838cobre.\nUsa cintas transportadoras y taladros para abastecerlas con cobre.
hint.breaking = Pulsa [accent]Clic-derecho[] y arrastra para destruir bloques. hint.breaking = Pulsa [accent]Clic-derecho[] y arrastra para destruir bloques.
hint.breaking.mobile = Activa el botón con el \ue817 [accent]martillo[] situado abajo a la derecha y selecciona bloque para eliminarlos.\n\nMantén el dedo un segundo y arrastra para eliminar bloques directamente en esa selección. hint.breaking.mobile = Activa el botón con el \ue817 [accent]martillo[] situado abajo a la derecha y selecciona bloques para eliminarlos.\n\nMantén el dedo un segundo y arrastra para eliminar bloques directamente en esa selección.
hint.research = Usa el botón \ue875 [accent]Investigación[] para acceder al menú de descubrimientos tecnológicos. hint.research = Usa el botón \ue875 [accent]Investigación[] para acceder al menú de descubrimientos tecnológicos.
hint.research.mobile = Usa el botón \ue875 [accent]Investigación[] para acceder al menú de descubrimientos tecnológicos. hint.research.mobile = Usa el botón \ue875 [accent]Investigación[] para acceder al menú de descubrimientos tecnológicos.
hint.unitControl = Mantén [accent][[L-ctrl][] y [accent]haz clic[] sobre unidades o torretas aliadas para controlarlas manualmente. hint.unitControl = Mantén [accent][[L-ctrl][] y [accent]haz clic[] sobre unidades o torretas aliadas para controlarlas manualmente.
@@ -1286,7 +1286,7 @@ hint.payloadPickup = Pulsa [accent][[[] para recoger bloques pequeños o unidade
hint.payloadPickup.mobile = [accent]Mantén[] sobre un bloque pequeño o unidad para recogerlo. hint.payloadPickup.mobile = [accent]Mantén[] sobre un bloque pequeño o unidad para recogerlo.
hint.payloadDrop = Pulsa [accent]][] para soltar la carga. hint.payloadDrop = Pulsa [accent]][] para soltar la carga.
hint.payloadDrop.mobile = [accent]Mantén[] sobre un lugar vacío para soltar la carga. hint.payloadDrop.mobile = [accent]Mantén[] sobre un lugar vacío para soltar la carga.
hint.waveFire = Cuando las torretas [accent]Wave[] usan agua como munición, apagarán fuego e incendios cercanos automáticamente. hint.waveFire = Cuando las torretas [accent]Wave[] usen agua como munición, apagarán fuego e incendios cercanos automáticamente.
hint.generator = Los \uf879[accent]Generadores de combustión[] querman carbón para transmitir energía a bloques adyacentes.\n\nEl alcance de transmisión de energía se puede extender usando \uf87f[accent]Nodos de energía[]. hint.generator = Los \uf879[accent]Generadores de combustión[] querman carbón para transmitir energía a bloques adyacentes.\n\nEl alcance de transmisión de energía se puede extender usando \uf87f[accent]Nodos de energía[].
hint.guardian = Los [accent]Guardianes[] poseen una robusta armadura. Municiones débiles como el [accent]Cobre[] o el [accent]Plomo[] no son [scarlet]effectivas[] contra él.\n\nUsa torretas de mayor categoría o por ejemplo, munición de \uf835[accent]Grafito[] \uf861Duo/\uf859 en torretas Salvo para derribar a los Guardianes. hint.guardian = Los [accent]Guardianes[] poseen una robusta armadura. Municiones débiles como el [accent]Cobre[] o el [accent]Plomo[] no son [scarlet]effectivas[] contra él.\n\nUsa torretas de mayor categoría o por ejemplo, munición de \uf835[accent]Grafito[] \uf861Duo/\uf859 en torretas Salvo para derribar a los Guardianes.
hint.coreUpgrade = Los núcleos se pueden mejorar [accent]construyendo núcleos de mayor calidad encima[].\n\nColoca un  núcleo [accent]Foundation[] sobre el  núcleo [accent]Shard[]. Asegúrate de que no hay obstáculos cerca. hint.coreUpgrade = Los núcleos se pueden mejorar [accent]construyendo núcleos de mayor calidad encima[].\n\nColoca un  núcleo [accent]Foundation[] sobre el  núcleo [accent]Shard[]. Asegúrate de que no hay obstáculos cerca.
@@ -1294,7 +1294,7 @@ hint.presetLaunch = Las zonas de aterrizaje de los [accent]sectores grises[], co
hint.coreIncinerate = Tras completar la capacidad máxima de almacenamiento en el núcleo para un tipo de objeto, cualquier recurso adicional de ese tipo que reciba el núcleo será [accent]incinerado[]. hint.coreIncinerate = Tras completar la capacidad máxima de almacenamiento en el núcleo para un tipo de objeto, cualquier recurso adicional de ese tipo que reciba el núcleo será [accent]incinerado[].
hint.coopCampaign = Sí estás jugando el modo [accent]campaña en multijugador[], los objetos producidos en el mapa actual también se enviarán [accent]a los sectores locales de cada jugador[].\n\nCualquier nueva investigación tecnológica realizada por el anfitrión también se desbloqueará para los demás jugadores. hint.coopCampaign = Sí estás jugando el modo [accent]campaña en multijugador[], los objetos producidos en el mapa actual también se enviarán [accent]a los sectores locales de cada jugador[].\n\nCualquier nueva investigación tecnológica realizada por el anfitrión también se desbloqueará para los demás jugadores.
item.copper.description = Un práctico material de estructura. Usado en todo tipo de bloques. item.copper.description = Un práctico material para construcción. Usado en todo tipo de bloques y munición.
item.copper.details = Cobre. Metal anormalmente abundante en Serpulo. Estructuralmente débil a menos que sea reforzado. item.copper.details = Cobre. Metal anormalmente abundante en Serpulo. Estructuralmente débil a menos que sea reforzado.
item.lead.description = Un material básico. Usado en electrónicos y transferencia de líquidos. item.lead.description = Un material básico. Usado en electrónicos y transferencia de líquidos.
item.lead.details = Denso. Inerte. Extensamente usado en baterías.\nNota: Suele ser tóxico para la mayoría de formas de vida biológicas. Aunque ya no quedan muchas de esas por aquí. item.lead.details = Denso. Inerte. Extensamente usado en baterías.\nNota: Suele ser tóxico para la mayoría de formas de vida biológicas. Aunque ya no quedan muchas de esas por aquí.
@@ -1445,7 +1445,7 @@ block.parallax.description = Dispara un rayo tractor que atrae enemigos aéreos,
block.tsunami.description = Dispara poderosos torrentes de líquido a los enemigos. También apaga fuegos automáticamente si se lo abastece con agua. block.tsunami.description = Dispara poderosos torrentes de líquido a los enemigos. También apaga fuegos automáticamente si se lo abastece con agua.
block.silicon-crucible.description = Refina silicio a partir de arena y carbón, usando pirotita como una fuente de calor adicional. Es más eficiente en lugares cálidos. block.silicon-crucible.description = Refina silicio a partir de arena y carbón, usando pirotita como una fuente de calor adicional. Es más eficiente en lugares cálidos.
block.disassembler.description = Separa magma cantidades moderadas de componentes minerales exóticos con baja eficiencia. Puede producir Torio. block.disassembler.description = Separa magma cantidades moderadas de componentes minerales exóticos con baja eficiencia. Puede producir Torio.
block.overdrive-dome.description = Incrementa la velocidad de estructuras cercanas. Requiere Tejido de Fase, y Silicio para operar. block.overdrive-dome.description = Incrementa la velocidad de estructuras cercanas. Requiere Tejido de Fase y Silicio para operar.
block.payload-conveyor.description = Mueve tanto grandes cargas, como unidades recién ensambladas de sus fábricas. block.payload-conveyor.description = Mueve tanto grandes cargas, como unidades recién ensambladas de sus fábricas.
block.payload-router.description = Divide las cargas entrantes en 3 direcciones de salida. block.payload-router.description = Divide las cargas entrantes en 3 direcciones de salida.
block.command-center.description = Controla el comportamiento de las unidades con diferentes órdenes. block.command-center.description = Controla el comportamiento de las unidades con diferentes órdenes.
@@ -1479,7 +1479,7 @@ unit.corvus.description = Dispara poderosos láseres que dañan enemigos, y repa
unit.crawler.description = Corre hacia enemigos y se autodestruye, provocando una gran explosión. unit.crawler.description = Corre hacia enemigos y se autodestruye, provocando una gran explosión.
unit.atrax.description = Dispara orbes de magma debilitantes a enemigos terrestres. Puede pisar sobre la mayoría de terreno. unit.atrax.description = Dispara orbes de magma debilitantes a enemigos terrestres. Puede pisar sobre la mayoría de terreno.
unit.spiroct.description = Dispara láseres que debilitan al enemigo, reparándose en el proceso. Puede pisar sobre la mayoría de terreno. unit.spiroct.description = Dispara láseres que debilitan al enemigo, reparándose en el proceso. Puede pisar sobre la mayoría de terreno.
unit.arkyid.description = Dispara grandes rayos láser que debilitan al enemigo, repairing itself in the process. Puede pisar sobre la mayoría de terreno. unit.arkyid.description = Dispara grandes rayos láser que debilitan al enemigo, reparándose en el proceso. Puede pisar sobre la mayoría de terreno.
unit.toxopid.description = Dispara grandes fragmentos electrizados y láseres perforantes. Puede pisar sobre la mayoría de terreno. unit.toxopid.description = Dispara grandes fragmentos electrizados y láseres perforantes. Puede pisar sobre la mayoría de terreno.
unit.flare.description = Dispara proyectiles básicos a enemigos cercanos. unit.flare.description = Dispara proyectiles básicos a enemigos cercanos.
unit.horizon.description = Suelta fragmentos explosivos sobre objetivos terrestres. unit.horizon.description = Suelta fragmentos explosivos sobre objetivos terrestres.

View File

@@ -1,9 +1,9 @@
credits.text = Pelin tehnyt [royal]Anuken[] - [sky]anukendev@gmail.com[] credits.text = Pelin on luonut [royal]Anuken[] - [sky]anukendev@gmail.com[]
credits = Tekijät credits = Tekijät
contributors = Kääntäjät ja avustajat contributors = Kääntäjät ja avustajat
discord = Liity Mindustryn Discordiin! discord = Liity Mindustryn Discordiin!
link.discord.description = Mindustryn virallinen Discord-keskusteluhuone link.discord.description = Mindustryn virallinen Discord-keskusteluhuone
link.reddit.description = Mindustryn alireddit link.reddit.description = Mindustryn reddit sivu
link.github.description = Pelin lähdekoodi link.github.description = Pelin lähdekoodi
link.changelog.description = Lista päivityksien muutoksista link.changelog.description = Lista päivityksien muutoksista
link.dev-builds.description = Epävakaat kehitysversiot link.dev-builds.description = Epävakaat kehitysversiot
@@ -15,7 +15,7 @@ link.wiki.description = Virallinen Mindustry wiki
link.suggestions.description = Ehdota uusia ominaisuuksia link.suggestions.description = Ehdota uusia ominaisuuksia
linkfail = Linkin avaaminen epäonnistui!\nOsoite on kopioitu leikepöydällesi. linkfail = Linkin avaaminen epäonnistui!\nOsoite on kopioitu leikepöydällesi.
screenshot = Kuvankaappaus tallennettu sijaintiin {0} screenshot = Kuvankaappaus tallennettu sijaintiin {0}
screenshot.invalid = Kartta liian laaja, kuvankaappaukselle ei mahdollisesti ole tarpeeksi tilaa. screenshot.invalid = Kartta liian laaja, levytila voi olla liian vähissä kuvankaappausta varten.
gameover = Peli ohi gameover = Peli ohi
gameover.pvp = [accent] {0}[] joukkue voittaa! gameover.pvp = [accent] {0}[] joukkue voittaa!
highscore = [accent]Uusi ennätys! highscore = [accent]Uusi ennätys!
@@ -46,7 +46,7 @@ schematic.exists = Kaavio tällä nimellä on jo olemassa.
schematic.import = Tuo kaavio... schematic.import = Tuo kaavio...
schematic.exportfile = Vie tiedosto schematic.exportfile = Vie tiedosto
schematic.importfile = Tuo tiedosto schematic.importfile = Tuo tiedosto
schematic.browseworkshop = Selaa Workshoppia schematic.browseworkshop = Selaa Steam Workshoppia
schematic.copy = Kopioi leikepöydälle schematic.copy = Kopioi leikepöydälle
schematic.copy.import = Tuo leikepöydältä schematic.copy.import = Tuo leikepöydältä
schematic.shareworkshop = Jaa Workshoppiin schematic.shareworkshop = Jaa Workshoppiin
@@ -64,15 +64,15 @@ stat.destroyed = Rakennuksia tuhottu:[accent] {0}
stat.deconstructed = Rakennuksia purettu:[accent] {0} stat.deconstructed = Rakennuksia purettu:[accent] {0}
stat.delivered = Resursseja laukaistu: stat.delivered = Resursseja laukaistu:
stat.playtime = Pelattu aika:[accent] {0} stat.playtime = Pelattu aika:[accent] {0}
stat.rank = Lopullinen arvosana: [accent]{0} stat.rank = Arvosana: [accent]{0}
globalitems = [accent]Global Items globalitems = [accent]Yhteiset tavarat
map.delete = Oletko varma että haluat poistaa kartan "[accent]{0}[]"? map.delete = Oletko varma että haluat poistaa kartan: "[accent]{0}[]"?
level.highscore = Ennätys: [accent]{0} level.highscore = Ennätys: [accent]{0}
level.select = Tason valinta level.select = Tason valinta
level.mode = Pelimuoto: level.mode = Pelimuoto:
coreattack = < Ytimeen hyökätään! > coreattack = < Ytimeen hyökätään! >
nearpoint = [[ [scarlet]POISTU PUDOTUSPISTEELTÄ VÄLITTÖMÄSTI[]\nvälitön tuhoutuminen nearpoint = [[ [scarlet]POISTU VIHOLLISEN PUDOTUSPISTEELTÄ VÄLITTÖMÄSTI[]\nvälitön tuhoutuminen
database = Ytimen tietokanta database = Ytimen tietokanta
savegame = Tallenna peli savegame = Tallenna peli
loadgame = Lataa peli loadgame = Lataa peli
@@ -92,11 +92,11 @@ continue = Jatka
maps.none = [lightgray]Karttoja ei löytynyt! maps.none = [lightgray]Karttoja ei löytynyt!
invalid = Virheellinen invalid = Virheellinen
pickcolor = Valitse väri pickcolor = Valitse väri
preparingconfig = Preparing Config preparingconfig = Valmistellaan asetuksia
preparingcontent = Preparing Content preparingcontent = Valmistellaan sisältöä
uploadingcontent = Uploading Content uploadingcontent = Julkaistaan sisältöä
uploadingpreviewfile = Uploading Preview File uploadingpreviewfile = Julkaistaan esikatseltavaa tiedostoa
committingchanges = Comitting Changes committingchanges = Varmistetaan muutokset
done = Valmis done = Valmis
feature.unsupported = Laitteesi ei tue tätä toimintoa. feature.unsupported = Laitteesi ei tue tätä toimintoa.
@@ -139,16 +139,16 @@ mod.scripts.disable = Laitteesi ei tue modeja skripteillä. Sinun on sammutettav
about.button = Tietoa about.button = Tietoa
name = Nimi: name = Nimi:
noname = Valitse ensin[accent] pelaajanimi[]. noname = Valitse ensin[accent] pelaajanimi[].
planetmap = Planet Map planetmap = Avaruuskartta
launchcore = Launch Core launchcore = Laukaise tukikohta
filename = Tiedostonimi: filename = Tiedostonimi:
unlocked = Uutta sisältöä avattu! unlocked = Uutta sisältöä avattu!
completed = [accent]Suoritettu completed = [accent]Suoritettu
techtree = Tekniikkapuu techtree = Edistyspuu
research.list = [lightgray]Tutki: research.list = [lightgray]Tutki:
research = Tutki research = Tutki
researched = [lightgray]{0} tutkittu. researched = [lightgray]{0} tutkittu.
research.progress = {0}% complete research.progress = {0}% valmis
players = {0} pelaajaa paikalla players = {0} pelaajaa paikalla
players.single = {0} pelaaja paikalla players.single = {0} pelaaja paikalla
players.search = etsiä players.search = etsiä
@@ -180,7 +180,7 @@ host = Isäntä
hosting = [accent]Avataan palvelinta... hosting = [accent]Avataan palvelinta...
hosts.refresh = Päivitä hosts.refresh = Päivitä
hosts.discovering = Etsitään LAN pelejä hosts.discovering = Etsitään LAN pelejä
hosts.discovering.any = Etsitään Pelejä hosts.discovering.any = Etsitään pelejä
server.refreshing = Päivitetään palvelimen tietoja server.refreshing = Päivitetään palvelimen tietoja
hosts.none = [lightgray]Paikallisia pelejä ei löytynyt! hosts.none = [lightgray]Paikallisia pelejä ei löytynyt!
host.invalid = [scarlet]Isäntään ei voitu yhdistää. host.invalid = [scarlet]Isäntään ei voitu yhdistää.
@@ -192,8 +192,8 @@ servers.global = Yhteisön palvelimet
trace = Seuraa pelaajaa trace = Seuraa pelaajaa
trace.playername = Pelaajanimi: [accent]{0} trace.playername = Pelaajanimi: [accent]{0}
trace.ip = IP-osoite: [accent]{0} trace.ip = IP-osoite: [accent]{0}
trace.id = Uniikki tunniste: [accent]{0} trace.id = Pelaajakohtainen tunniste: [accent]{0}
trace.mobile = Mobile Client: [accent]{0} trace.mobile = Mobiililaite: [accent]{0}
trace.modclient = Custom Client: [accent]{0} trace.modclient = Custom Client: [accent]{0}
invalidid = Invalid client ID! Submit a bug report. invalidid = Invalid client ID! Submit a bug report.
server.bans = Porttikiellot server.bans = Porttikiellot
@@ -225,7 +225,7 @@ connecting = [accent]Yhdistetään...
connecting.data = [accent]Ladataan maailman tietoja... connecting.data = [accent]Ladataan maailman tietoja...
server.port = Portti: server.port = Portti:
server.addressinuse = Osoite on jo käytössä! server.addressinuse = Osoite on jo käytössä!
server.invalidport = Invalid port number! server.invalidport = Tällä portilla ei löytynyt peliä!
server.error = [crimson]Error hosting server: [accent]{0} server.error = [crimson]Error hosting server: [accent]{0}
save.new = Uusi tallennus save.new = Uusi tallennus
save.overwrite = Haluatko varmasti korvata \ntämän tallennuspaikan?? save.overwrite = Haluatko varmasti korvata \ntämän tallennuspaikan??
@@ -260,39 +260,39 @@ confirm = Vahvista
delete = Poista delete = Poista
view.workshop = View In Workshop view.workshop = View In Workshop
workshop.listing = Edit Workshop Listing workshop.listing = Edit Workshop Listing
ok = OK ok = Juu
open = Avaa open = Avaa
customize = Muokkaa sääntöjä customize = Muokkaa sääntöjä
cancel = Peruuta cancel = Peruuta
openlink = Avaa linkki openlink = Avaa linkki
copylink = Kopioi linkki copylink = Kopioi linkki
back = Takaisin back = Takaisin
data.export = Vie data data.export = Vie dataa
data.import = Tuo data data.import = Tuo dataa
data.openfolder = Avaa datakansio data.openfolder = Avaa datakansio
data.exported = Data viety. data.exported = Dataa on viety.
data.invalid = This isn't valid game data. data.invalid = This isn't valid game data.
data.import.confirm = Importing external data will overwrite[scarlet] all[] your current game data.\n[accent]This cannot be undone![]\n\nOnce the data is imported, your game will exit immediately. data.import.confirm = Importing external data will overwrite[scarlet] all[] your current game data.\n[accent]This cannot be undone![]\n\nOnce the data is imported, your game will exit immediately.
quit.confirm = Oletko varma että haluat poistua? quit.confirm = Oletko varma että haluat poistua?
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.[] quit.confirm.tutorial = Oletko varma että tiedät mitä teet?\nVoit tehdä tutoriaalin milloin vain[accent] Asetukset->Peli->Tee Tutoriaali Uudelleen[]
loading = [accent]Ladataan... loading = [accent]Ladataan...
reloading = [accent]Ladataan Modeja... reloading = [accent]Ladataan Modeja...
saving = [accent]Tallennetaan... saving = [accent]Tallennetaan...
respawn = [accent][[{0}][] to respawn in core respawn = [accent][[{0}][] uudelleensyntymiseen ytimessä
cancelbuilding = [accent][[{0}][] to clear plan cancelbuilding = [accent][[{0}][] tyhjentääksesi suunnitelman
selectschematic = [accent][[{0}][] to select+copy selectschematic = [accent][[{0}][] jotta voisit kopioida ja liittää
pausebuilding = [accent][[{0}][] to pause building pausebuilding = [accent][[{0}][] pysäyttääksesi rakentamisen
resumebuilding = [scarlet][[{0}][] to resume building resumebuilding = [scarlet][[{0}][] jatkaaksesi rakentamista
wave = [accent]Taso {0} wave = [accent]Taso {0}
wave.cap = [accent]Wave {0}/{1} wave.cap = [accent]Wave {0}/{1}
wave.waiting = [lightgray]Seuraava taso {0} wave.waiting = [lightgray]Seuraava taso {0}
wave.waveInProgress = [lightgray]Wave in progress wave.waveInProgress = [lightgray]Taso käynnissä
waiting = [lightgray]Odotetaan... waiting = [lightgray]Odotetaan...
waiting.players = Odotetaan pelaajia... waiting.players = Odotetaan pelaajia...
wave.enemies = [lightgray]{0} vihollista jäljellä wave.enemies = [lightgray]{0} vihollista jäljellä
wave.enemy = [lightgray]{0} vihollinen jäljellä wave.enemy = [lightgray]{0} vihollinen jäljellä
wave.guardianwarn = Guardian approaching in [accent]{0}[] waves. wave.guardianwarn = Suojelija tulossa [accent]{0}[] tason päästä.
wave.guardianwarn.one = Guardian approaching in [accent]{0}[] wave. wave.guardianwarn.one = Suojelija tulee rökittämään sinut [accent]{0}[] tasolla.
loadimage = Lataa kuva loadimage = Lataa kuva
saveimage = Tallenna kuva saveimage = Tallenna kuva
unknown = Tuntematon unknown = Tuntematon
@@ -306,10 +306,10 @@ map.nospawn.attack = This map does not have any enemy cores for player to attack
map.invalid = Virhe ladatessa karttaa: korruptoitunut tai väärä karttatiedosto. map.invalid = Virhe ladatessa karttaa: korruptoitunut tai väärä karttatiedosto.
workshop.update = Update Item workshop.update = Update Item
workshop.error = Error fetching workshop details: {0} workshop.error = Error fetching workshop details: {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! map.publish.confirm = Oletko varma että haluat julkaista tämän kartan?\n\n[lightgray]Hyväksy Workshopin EULA ehdot, muuten karttasi ei tule näkyviin!
workshop.menu = Select what you would like to do with this item. workshop.menu = Mitä haluat tehdä tälle asialle?
workshop.info = Kohteen Tiedot workshop.info = Kohteen Tiedot
changelog = Muutosloki (valinnainen): changelog = Loki (valinnainen):
eula = Steam EULA eula = Steam EULA
missing = This item has been deleted or moved.\n[lightgray]The workshop listing has now been automatically un-linked. missing = This item has been deleted or moved.\n[lightgray]The workshop listing has now been automatically un-linked.
publishing = [accent]Publishing... publishing = [accent]Publishing...
@@ -402,9 +402,9 @@ editor.exists = Kartta tällä nimellä on jo olemassa.
editor.selectmap = Valitse kartta ladattavaksi: editor.selectmap = Valitse kartta ladattavaksi:
toolmode.replace = Korvaa toolmode.replace = Korvaa
toolmode.replace.description = Draws only on solid blocks. toolmode.replace.description = Piirtää vain kiinteille objekteille.
toolmode.replaceall = Korvaa kaikki toolmode.replaceall = Korvaa kaikki
toolmode.replaceall.description = Replace all blocks in map. toolmode.replaceall.description = Korvaa kaikki palikat kartassa.
toolmode.orthogonal = Orthogonal toolmode.orthogonal = Orthogonal
toolmode.orthogonal.description = Draws only orthogonal lines. toolmode.orthogonal.description = Draws only orthogonal lines.
toolmode.square = Square toolmode.square = Square
@@ -423,15 +423,15 @@ filter.enemyspawn = Enemy Spawn Select
filter.spawnpath = Path To Spawn filter.spawnpath = Path To Spawn
filter.corespawn = Valitse Ydin filter.corespawn = Valitse Ydin
filter.median = Mediaani filter.median = Mediaani
filter.oremedian = Malmin mediaani filter.oremedian = Malmin keskiarvo
filter.blend = Sekoitus filter.blend = Sekoitus
filter.defaultores = Oletuksena malmit filter.defaultores = Oletus malmit
filter.ore = Malmi filter.ore = Malmi
filter.rivernoise = Jokien melu filter.rivernoise = Jokien melu
filter.mirror = Peili filter.mirror = Peili
filter.clear = Selkeä filter.clear = Selkeä
filter.option.ignore = Ohittaa filter.option.ignore = Ohitta
filter.scatter = Scatter filter.scatter = Hajauta
filter.terrain = Maasto filter.terrain = Maasto
filter.option.scale = Mittakaava filter.option.scale = Mittakaava
filter.option.chance = Mahdollisuus filter.option.chance = Mahdollisuus
@@ -448,10 +448,10 @@ filter.option.flooronto = Target Floor
filter.option.target = Target filter.option.target = Target
filter.option.wall = Seinä filter.option.wall = Seinä
filter.option.ore = Malmi filter.option.ore = Malmi
filter.option.floor2 = Secondary Floor filter.option.floor2 = Toinen lattia
filter.option.threshold2 = Secondary Threshold filter.option.threshold2 = Secondary Threshold
filter.option.radius = Radius filter.option.radius = Säde
filter.option.percentile = Percentile filter.option.percentile = Prosentti
width = Leveys: width = Leveys:
height = Korkeus: height = Korkeus:
@@ -483,7 +483,7 @@ research.multiplayer = Only the host can research items.
uncover = Paljasta uncover = Paljasta
configure = Configure Loadout configure = Configure Loadout
loadout = Loadout loadout = Loadout
resources = Resources resources = Resurssit
bannedblocks = Kielletyt Palikat bannedblocks = Kielletyt Palikat
addall = Lisää kaikki addall = Lisää kaikki
launch.destination = Destination: {0} launch.destination = Destination: {0}
@@ -508,37 +508,37 @@ error.io = Network I/O error.
error.any = Unknown network error. error.any = Unknown network error.
error.bloom = Failed to initialize bloom.\nYour device may not support it. error.bloom = Failed to initialize bloom.\nYour device may not support it.
weather.rain.name = Rain weather.rain.name = Sade
weather.snow.name = Snow weather.snow.name = Lumi
weather.sandstorm.name = Sandstorm weather.sandstorm.name = Hiekkamyrsky
weather.sporestorm.name = Sporestorm weather.sporestorm.name = Sienimyräkkä
weather.fog.name = Fog weather.fog.name = Sumu
sectors.unexplored = [lightgray]Unexplored sectors.unexplored = [lightgray]Unexplored
sectors.resources = Resources: sectors.resources = Resurssit:
sectors.production = Production: sectors.production = Produktio:
sectors.stored = Stored: sectors.stored = Säilötty:
sectors.resume = Resume sectors.resume = Jatka
sectors.launch = Launch sectors.launch = Laukaise
sectors.select = Select sectors.select = Valitse
sectors.nonelaunch = [lightgray]none (sun) sectors.nonelaunch = [lightgray]ei mitään (sun)
sectors.rename = Rename Sector sectors.rename = Nimeä sektori
sector.missingresources = [scarlet]Insufficient Core Resources sector.missingresources = [scarlet]Sinulla ei ole tarpeeksi resursseja.
planet.serpulo.name = Serpulo planet.serpulo.name = Serpulo
planet.sun.name = Sun planet.sun.name = Aurinko
sector.groundZero.name = Ground Zero sector.groundZero.name = Tapahtumahorisontti
sector.craters.name = The Craters sector.craters.name = Kraatterit
sector.frozenForest.name = Frozen Forest sector.frozenForest.name = Jäätyneet Metsät
sector.ruinousShores.name = Ruinous Shores sector.ruinousShores.name = Taistelujen Ranta
sector.stainedMountains.name = Stained Mountains sector.stainedMountains.name = Kalliovuoret
sector.desolateRift.name = Desolate Rift sector.desolateRift.name = Musta Kanjoni
sector.nuclearComplex.name = Nuclear Production Complex sector.nuclearComplex.name = Hylätty Ydinvoimalaitos
sector.overgrowth.name = Overgrowth sector.overgrowth.name = Jätti Viidakko
sector.tarFields.name = Tar Fields sector.tarFields.name = Tervakentät
sector.saltFlats.name = Salt Flats sector.saltFlats.name = Suola Autio
sector.fungalPass.name = Fungal Pass sector.fungalPass.name = Sienirihmasto
sector.groundZero.description = The optimal location to begin once more. Low enemy threat. Few resources.\nGather as much lead and copper as possible.\nMove on. sector.groundZero.description = The optimal location to begin once more. Low enemy threat. Few resources.\nGather as much lead and copper as possible.\nMove on.
sector.frozenForest.description = Even here, closer to mountains, the spores have spread. The frigid temperatures cannot contain them forever.\n\nBegin the venture into power. Build combustion generators. Learn to use menders. sector.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.
@@ -633,15 +633,15 @@ stat.lightningdamage = Lightning Damage
stat.flammability = Flammability stat.flammability = Flammability
stat.radioactivity = Radioactivity stat.radioactivity = Radioactivity
stat.heatcapacity = HeatCapacity stat.heatcapacity = HeatCapacity
stat.viscosity = Viscosity stat.viscosity = Tahmeus
stat.temperature = Temperature stat.temperature = Lämpötila
stat.speed = Speed stat.speed = Nopeus
stat.buildspeed = Build Speed stat.buildspeed = Build Speed
stat.minespeed = Mine Speed stat.minespeed = Mine Speed
stat.minetier = Mine Tier stat.minetier = Mine Tier
stat.payloadcapacity = Payload Capacity stat.payloadcapacity = Payload Capacity
stat.commandlimit = Command Limit stat.commandlimit = Command Limit
stat.abilities = Abilities stat.abilities = Erikoisvoimat
ability.forcefield = Force Field ability.forcefield = Force Field
ability.repairfield = Repair Field ability.repairfield = Repair Field
@@ -684,11 +684,11 @@ bullet.pierce = [stat]{0}[lightgray]x pierce
bullet.infinitepierce = [stat]pierce bullet.infinitepierce = [stat]pierce
bullet.freezing = [stat]jäädyttävä bullet.freezing = [stat]jäädyttävä
bullet.tarred = [stat]tervattu bullet.tarred = [stat]tervattu
bullet.multiplier = [stat]{0}[lightgray]x ammusten kerroin bullet.multiplier = [stat]{0}[lightgray]x ammusmäärän kerroin
bullet.reload = [stat]{0}[lightgray]x ampumisnopeus bullet.reload = [stat]{0}[lightgray]x ampumisnopeus
unit.blocks = palikat unit.blocks = palikat
unit.blockssquared = blocks² unit.blockssquared = palikat²
unit.powersecond = energiayksikköä/sekunti unit.powersecond = energiayksikköä/sekunti
unit.liquidsecond = nesteyksikköä/sekunti unit.liquidsecond = nesteyksikköä/sekunti
unit.itemssecond = esinettä/sekunti unit.itemssecond = esinettä/sekunti
@@ -696,12 +696,12 @@ unit.liquidunits = nesteyksikköä
unit.powerunits = energiayksikköä unit.powerunits = energiayksikköä
unit.degrees = astetta unit.degrees = astetta
unit.seconds = sekunttia unit.seconds = sekunttia
unit.minutes = mins unit.minutes = minuuttia
unit.persecond = /s unit.persecond = /s
unit.perminute = /min unit.perminute = /min
unit.timesspeed = x nopeus unit.timesspeed = x nopeus
unit.percent = % unit.percent = %
unit.shieldhealth = shield health unit.shieldhealth = suojan elinpisteet
unit.items = esinettä unit.items = esinettä
unit.thousands = t unit.thousands = t
unit.millions = mil unit.millions = mil
@@ -733,24 +733,24 @@ setting.fpscap.none = Ei Mitään
setting.fpscap.text = {0} FPS setting.fpscap.text = {0} FPS
setting.uiscale.name = UI Koko[lightgray] (vaatii uudelleenkäynnistyksen)[] setting.uiscale.name = UI Koko[lightgray] (vaatii uudelleenkäynnistyksen)[]
setting.swapdiagonal.name = Aina vino korvaus setting.swapdiagonal.name = Aina vino korvaus
setting.difficulty.training = Treeni setting.difficulty.training = Treenaus
setting.difficulty.easy = Helppo setting.difficulty.easy = Huoleton
setting.difficulty.normal = Keskivaikea setting.difficulty.normal = Haasteeton
setting.difficulty.hard = Haastava setting.difficulty.hard = Taidonnäyte
setting.difficulty.insane = Järjetön setting.difficulty.insane = Hullun Vaikea
setting.difficulty.name = Vaikeustaso: setting.difficulty.name = Vaikeustaso:
setting.screenshake.name = Näytön keikkuminen setting.screenshake.name = Näytön keikkuminen
setting.effects.name = Naytön Efektit setting.effects.name = Naytön Efektit
setting.destroyedblocks.name = Näytä tuhoutuneet palikat setting.destroyedblocks.name = Näytä tuhoutuneet palikat
setting.blockstatus.name = Display Block Status setting.blockstatus.name = Näytä Palikan Toimintakunto
setting.conveyorpathfinding.name = Conveyor Placement Pathfinding setting.conveyorpathfinding.name = Conveyor Placement Pathfinding
setting.sensitivity.name = Ohjauksen herkkyys setting.sensitivity.name = Ohjauksen herkkyys
setting.saveinterval.name = Tallennuksen Aikaväli setting.saveinterval.name = Tallennuksen Aikaväli
setting.seconds = {0} Sekunttia setting.seconds = {0} Sekuntia
setting.blockselecttimeout.name = Block Select Timeout setting.blockselecttimeout.name = Block Select Timeout
setting.milliseconds = {0} millisekunttia setting.milliseconds = {0} millisekuntia
setting.fullscreen.name = Fullscreen setting.fullscreen.name = Täysnäyttö
setting.borderlesswindow.name = Borderless Window[lightgray] (vaatii uudelleenkäynnistyksen) setting.borderlesswindow.name = Reunaton Ikkuna[lightgray] (vaatii uudelleenkäynnistyksen)
setting.fps.name = Näytä FPS setting.fps.name = Näytä FPS
setting.smoothcamera.name = Smooth Camera setting.smoothcamera.name = Smooth Camera
setting.vsync.name = VSync setting.vsync.name = VSync
@@ -776,8 +776,8 @@ public.confirm = Do you want to make your game public?\n[accent]Anyone will be a
public.beta = Note that beta versions of the game cannot make public lobbies. public.beta = Note that beta versions of the game cannot make public lobbies.
uiscale.reset = UI scale has been changed.\nPress "OK" to confirm this scale.\n[scarlet]Reverting and exiting in[accent] {0}[] seconds... uiscale.reset = UI scale has been changed.\nPress "OK" to confirm this scale.\n[scarlet]Reverting and exiting in[accent] {0}[] seconds...
uiscale.cancel = Peruuta ja poistu uiscale.cancel = Peruuta ja poistu
setting.bloom.name = Bloom setting.bloom.name = Hehkeys
keybind.title = Rebind Keys keybind.title = Kontrollit
keybinds.mobile = [scarlet]Most keybinds here are not functional on mobile. Only basic movement is supported. keybinds.mobile = [scarlet]Most keybinds here are not functional on mobile. Only basic movement is supported.
category.general.name = General category.general.name = General
category.view.name = View category.view.name = View
@@ -786,10 +786,10 @@ category.blocks.name = Block Select
command.attack = Hyökkäys command.attack = Hyökkäys
command.rally = Kokoontuminen command.rally = Kokoontuminen
command.retreat = Perääntyminen command.retreat = Perääntyminen
command.idle = Idle command.idle = AFK
placement.blockselectkeys = \n[lightgray]Key: [{0}, placement.blockselectkeys = \n[lightgray]Key: [{0},
keybind.respawn.name = Respawn keybind.respawn.name = Synny Uudelleen
keybind.control.name = Control Unit keybind.control.name = Käytä Yksikköä
keybind.clear_building.name = Clear Building keybind.clear_building.name = Clear Building
keybind.press = Press a key... keybind.press = Press a key...
keybind.press.axis = Press an axis or key... keybind.press.axis = Press an axis or key...
@@ -907,19 +907,19 @@ item.graphite.name = Grafiitti
item.titanium.name = Titaani item.titanium.name = Titaani
item.thorium.name = Torium item.thorium.name = Torium
item.silicon.name = Pii item.silicon.name = Pii
item.plastanium.name = Plastaniumi item.plastanium.name = Plastiikkaseos
item.phase-fabric.name = Kiihdekuitu item.phase-fabric.name = Kiihtokuitu
item.surge-alloy.name = Taiteseos item.surge-alloy.name = Venttikovete
item.spore-pod.name = Itiöpalko item.spore-pod.name = Itiöpalko
item.sand.name = Hiekka item.sand.name = Hiekka
item.blast-compound.name = Räjähdeyhdiste item.blast-compound.name = Erikoisruuti
item.pyratite.name = Pyratiitti item.pyratite.name = Rikkikiisu
item.metaglass.name = Metallilasi item.metaglass.name = Teräslasi
item.scrap.name = Romu item.scrap.name = Romu
liquid.water.name = Vesi liquid.water.name = Vesi
liquid.slag.name = Kuona liquid.slag.name = Kuona
liquid.oil.name = Öljy liquid.oil.name = Öljy
liquid.cryofluid.name = Kryoneste liquid.cryofluid.name = Kryölitku
unit.dagger.name = Tikari unit.dagger.name = Tikari
unit.mace.name = Mace unit.mace.name = Mace
@@ -991,9 +991,9 @@ block.spawn.name = Vihollisten syntymispiste
block.core-shard.name = Ydin: Siru block.core-shard.name = Ydin: Siru
block.core-foundation.name = Ydin: Pohjaus block.core-foundation.name = Ydin: Pohjaus
block.core-nucleus.name = Ydin: Tuma block.core-nucleus.name = Ydin: Tuma
block.deepwater.name = Syvä vesi block.deepwater.name = Syvää vettä
block.water.name = Vesi block.water.name = Vettä
block.tainted-water.name = Pilaantunut vesi block.tainted-water.name = Saastevettä
block.darksand-tainted-water.name = Dark Sand Tainted Water block.darksand-tainted-water.name = Dark Sand Tainted Water
block.tar.name = Terva block.tar.name = Terva
block.stone.name = Kivi block.stone.name = Kivi
@@ -1057,7 +1057,7 @@ block.titanium-conveyor.name = Titanium Conveyor
block.plastanium-conveyor.name = Plastanium Conveyor block.plastanium-conveyor.name = Plastanium Conveyor
block.armored-conveyor.name = Armored 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 conveyor belts. 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 conveyor belts.
block.junction.name = Junction block.junction.name = Junktio
block.router.name = Reititin block.router.name = Reititin
block.distributor.name = Distributor block.distributor.name = Distributor
block.sorter.name = Lajittelija block.sorter.name = Lajittelija

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -87,7 +87,7 @@ database = Mag adatbázis
savegame = Játék mentése savegame = Játék mentése
loadgame = Játék betöltése loadgame = Játék betöltése
joingame = Csatlakozás játékhoz joingame = Csatlakozás játékhoz
customgame = Custom Game customgame = Egyedi játék
newgame = Új játék newgame = Új játék
none = <semmi> none = <semmi>
minimap = Minimap minimap = Minimap
@@ -307,8 +307,8 @@ selectschematic = Használd a(z) [accent][[{0}][] gombot, hogy kijelölj és má
pausebuilding = Használd a(z) [accent][[{0}][] gombot, hogy megállítsd az építkezést. pausebuilding = Használd a(z) [accent][[{0}][] gombot, hogy megállítsd az építkezést.
resumebuilding = Használd a(z) [scarlet][[{0}][] gombot, hogy folytasd az építkezést. resumebuilding = Használd a(z) [scarlet][[{0}][] gombot, hogy folytasd az építkezést.
showui = A kezelőfelület elrejtve.\nNyomja meg a(z) [accent][[{0}][] gombot a megjelenítéséhez. showui = A kezelőfelület elrejtve.\nNyomja meg a(z) [accent][[{0}][] gombot a megjelenítéséhez.
wave = [accent]Hullám {0} wave = [accent]{0}. Hullám
wave.cap = [accent]Hullám {0}/{1} wave.cap = [accent]{0}/{1}. Hullám
wave.waiting = [lightgray]Következő hullám {0} wave.waiting = [lightgray]Következő hullám {0}
wave.waveInProgress = [lightgray]Hullám folyamatban wave.waveInProgress = [lightgray]Hullám folyamatban
waiting = [lightgray]Várakozás... waiting = [lightgray]Várakozás...
@@ -782,7 +782,7 @@ category.items = Items
category.crafting = Input/Output category.crafting = Input/Output
category.function = Function category.function = Function
category.optional = Optional Enhancements category.optional = Optional Enhancements
setting.landscape.name = Lock Landscape setting.landscape.name = Fekvő mód zárolása
setting.shadows.name = Árnyékok setting.shadows.name = Árnyékok
setting.blockreplace.name = Automatikus blokk javaslatok setting.blockreplace.name = Automatikus blokk javaslatok
setting.linear.name = Lineáris szűrés setting.linear.name = Lineáris szűrés
@@ -793,17 +793,17 @@ setting.buildautopause.name = Automatikus szünet építéskor
setting.animatedwater.name = Animált víz setting.animatedwater.name = Animált víz
setting.animatedshields.name = Animált pajzsok setting.animatedshields.name = Animált pajzsok
setting.antialias.name = Antialias[lightgray] (újra kell indítani)[] setting.antialias.name = Antialias[lightgray] (újra kell indítani)[]
setting.playerindicators.name = Player Indicators setting.playerindicators.name = Játékos mutató
setting.indicators.name = Enemy Indicators setting.indicators.name = Ellenség mutató
setting.autotarget.name = Auto-Target setting.autotarget.name = Automatikus lövés
setting.keyboard.name = Mouse+Keyboard Controls setting.keyboard.name = Irányítás egérrel és billentyűzettel
setting.touchscreen.name = Touchscreen Controls setting.touchscreen.name = Irányítás érintőképernyővel
setting.fpscap.name = Max FPS setting.fpscap.name = Max FPS
setting.fpscap.none = None setting.fpscap.none = Nincs
setting.fpscap.text = {0} FPS setting.fpscap.text = {0} FPS
setting.uiscale.name = UI Scaling[lightgray] (restart required)[] setting.uiscale.name = UI Scaling[lightgray] (restart required)[]
setting.swapdiagonal.name = Always Diagonal Placement setting.swapdiagonal.name = Always Diagonal Placement
setting.difficulty.training = Training setting.difficulty.training = Kiképzés
setting.difficulty.easy = Könnyű setting.difficulty.easy = Könnyű
setting.difficulty.normal = közepes setting.difficulty.normal = közepes
setting.difficulty.hard = Nehéz setting.difficulty.hard = Nehéz
@@ -812,42 +812,42 @@ setting.difficulty.name = Nehézség:
setting.screenshake.name = Screen Shake setting.screenshake.name = Screen Shake
setting.effects.name = Display Effects setting.effects.name = Display Effects
setting.destroyedblocks.name = Display Destroyed Blocks setting.destroyedblocks.name = Display Destroyed Blocks
setting.blockstatus.name = Display Block Status setting.blockstatus.name = Blokk állapotának megjelenítése
setting.conveyorpathfinding.name = Conveyor Placement Pathfinding setting.conveyorpathfinding.name = Conveyor Placement Pathfinding
setting.sensitivity.name = Controller Sensitivity setting.sensitivity.name = Controller Sensitivity
setting.saveinterval.name = Save Interval setting.saveinterval.name = Save Interval
setting.seconds = {0} seconds setting.seconds = {0} másodperc
setting.milliseconds = {0} milliseconds setting.milliseconds = {0} ezredmásodperc
setting.fullscreen.name = Fullscreen setting.fullscreen.name = Teljesképernyő
setting.borderlesswindow.name = Borderless Window[lightgray] (restart may be required) setting.borderlesswindow.name = Keret nélküli ablak[lightgray] (újraindításra lehet szükség)
setting.fps.name = Show FPS & Ping setting.fps.name = FPS és Ping mutatása
setting.smoothcamera.name = Smooth Camera setting.smoothcamera.name = Sima kamera
setting.vsync.name = VSync setting.vsync.name = VSync
setting.pixelate.name = Pixelate setting.pixelate.name = Pixeles
setting.minimap.name = Show Minimap setting.minimap.name = Minimap
setting.coreitems.name = Display Core Items setting.coreitems.name = Az alapvető elemek megjelenítése
setting.position.name = Show Player Position setting.position.name = A játékos pozíciójának megjelenítése
setting.musicvol.name = Music Volume setting.musicvol.name = Zene hangerő
setting.atmosphere.name = Show Planet Atmosphere setting.atmosphere.name = Bolygó atmoszféra
setting.ambientvol.name = Ambient Volume setting.ambientvol.name = Környezeti hangerő
setting.mutemusic.name = Mute Music setting.mutemusic.name = Néma zene
setting.sfxvol.name = SFX Volume setting.sfxvol.name = SFX hangerő
setting.mutesound.name = Mute Sound setting.mutesound.name = Néma hang
setting.crashreport.name = Send Anonymous Crash Reports setting.crashreport.name = Send Anonymous Crash Reports
setting.savecreate.name = Auto-Create Saves setting.savecreate.name = Automatikus mentés
setting.publichost.name = Public Game Visibility setting.publichost.name = Public Game Visibility
setting.playerlimit.name = Player Limit setting.playerlimit.name = Játékos limit
setting.chatopacity.name = Chat Opacity setting.chatopacity.name = Chat átlátszatlanság
setting.lasersopacity.name = Power Laser Opacity setting.lasersopacity.name = Power Laser Opacity
setting.bridgeopacity.name = Bridge Opacity setting.bridgeopacity.name = Híd átlátszatlanság
setting.playerchat.name = Display Player Bubble Chat setting.playerchat.name = A játékos buborékos csevegésének megjelenítése
setting.showweather.name = Show Weather Graphics setting.showweather.name = Időjárás grafika megjelenítése
public.confirm = Do you want to make your game public?\n[accent]Anyone will be able to join your games.\n[lightgray]This can be changed later in Settings->Game->Public Game Visibility. public.confirm = Do you want to make your game public?\n[accent]Anyone will be able to join your games.\n[lightgray]This can be changed later in Settings->Game->Public Game Visibility.
public.confirm.really = If you want to play with friends, use [green]Invite Friend[] instead of a [scarlet]Public server[]!\nAre you sure you want to make your game [scarlet]public[]? public.confirm.really = If you want to play with friends, use [green]Invite Friend[] instead of a [scarlet]Public server[]!\nAre you sure you want to make your game [scarlet]public[]?
public.beta = Note that beta versions of the game cannot make public lobbies. public.beta = Note that beta versions of the game cannot make public lobbies.
uiscale.reset = UI scale has been changed.\nPress "OK" to confirm this scale.\n[scarlet]Reverting and exiting in[accent] {0}[] seconds... 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 = Mégse és Kilépés
setting.bloom.name = Bloom setting.bloom.name = Virágzás
keybind.title = Rebind Keys keybind.title = Rebind Keys
keybinds.mobile = [scarlet]Most keybinds here are not functional on mobile. Only basic movement is supported. keybinds.mobile = [scarlet]Most keybinds here are not functional on mobile. Only basic movement is supported.
category.general.name = General category.general.name = General
@@ -967,14 +967,14 @@ rules.explosions = Block/Unit Explosion Damage
rules.ambientlight = Ambient Light rules.ambientlight = Ambient Light
rules.weather = Weather rules.weather = Weather
rules.weather.frequency = Frequency: rules.weather.frequency = Frequency:
rules.weather.always = Always rules.weather.always = Mindig
rules.weather.duration = Duration: rules.weather.duration = Duration:
content.item.name = Items content.item.name = Itemek
content.liquid.name = Liquids content.liquid.name = Folyadékok
content.unit.name = Units content.unit.name = Egységek
content.block.name = Blocks content.block.name = Blokkok
content.sector.name = Sectors content.sector.name = Szektor
item.copper.name = Copper item.copper.name = Copper
item.lead.name = Lead item.lead.name = Lead
@@ -1250,21 +1250,21 @@ block.large-logic-display.name = Large Logic Display
block.memory-cell.name = Memory Cell block.memory-cell.name = Memory Cell
block.memory-bank.name = Memory Bank block.memory-bank.name = Memory Bank
team.blue.name = blue team.blue.name = kék
team.crux.name = red team.crux.name = piros
team.sharded.name = orange team.sharded.name = narancssárga
team.orange.name = orange team.orange.name = narancssárga
team.derelict.name = derelict team.derelict.name = elhagyott
team.green.name = green team.green.name = zöld
team.purple.name = purple team.purple.name = lila
hint.skip = Skip hint.skip = Átugrás
hint.desktopMove = Use [accent][[WASD][] to move. hint.desktopMove = Használd a [accent][[WASD][] gombokat a mozgáshoz.
hint.zoom = [accent]Scroll[] to zoom in or out. hint.zoom = Használd a [accent]görgőt[] a zoomhoz..
hint.mine = Move near the \uf8c4 copper ore and [accent]tap[] it to mine manually. hint.mine = Mozogjon a \uf8c4 copper közelében, és [accent]érintse meg[] a kézi bányászathoz.
hint.desktopShoot = [accent][[Left-click][] to shoot. hint.desktopShoot = Használja a [accent]bal egér gombot[] a lövéshez.
hint.depositItems = To transfer items, drag from your ship to the core. hint.depositItems = Az átviteléhez húzzaaz itemeket a hajóról a magra.
hint.respawn = To respawn as a ship, press [accent][[V][]. hint.respawn = Ha újból hajóvá akar válni, nyomja meg a [accent][[V][] gombot.
hint.respawn.mobile = You have switched control to a unit/structure. To respawn as a ship, [accent]tap the avatar in the top left.[] hint.respawn.mobile = You have switched control to a unit/structure. To respawn as a ship, [accent]tap the avatar in the top left.[]
hint.desktopPause = Press [accent][[Space][] to pause and unpause the game. hint.desktopPause = Press [accent][[Space][] to pause and unpause the game.
hint.placeDrill = Select the \ue85e [accent]Drill[] tab in the menu at the bottom right, then select a \uf870 [accent]Drill[] and click on a copper patch to place it. hint.placeDrill = Select the \ue85e [accent]Drill[] tab in the menu at the bottom right, then select a \uf870 [accent]Drill[] and click on a copper patch to place it.

View File

@@ -287,9 +287,10 @@ cancel = Batal
openlink = Buka Tautan openlink = Buka Tautan
copylink = Salin Tautan copylink = Salin Tautan
back = Kembali back = Kembali
crash.export = Export Crash Logs max = Maks
crash.none = No crash logs found. crash.export = Ekspor Crash Log
crash.exported = Crash logs exported. crash.none = Tidak ada crash log ditemukan.
crash.exported = Crash log diekspor.
data.export = Ekspor Data data.export = Ekspor Data
data.import = Impor Data data.import = Impor Data
data.openfolder = Buka Folder Data data.openfolder = Buka Folder Data
@@ -361,7 +362,6 @@ editor.center = Pusat
workshop = Workshop workshop = Workshop
waves.title = Gelombang waves.title = Gelombang
waves.remove = Hapus waves.remove = Hapus
waves.never = <tidak pernah>
waves.every = setiap waves.every = setiap
waves.waves = gelombang waves.waves = gelombang
waves.perspawn = per muncul waves.perspawn = per muncul
@@ -720,6 +720,7 @@ bar.corereq = Memerlukan Inti Dasar
bar.drillspeed = Kecepatan Bor: {0}/s bar.drillspeed = Kecepatan Bor: {0}/s
bar.pumpspeed = Kecepatan Pompa: {0}/s bar.pumpspeed = Kecepatan Pompa: {0}/s
bar.efficiency = Daya Guna: {0}% bar.efficiency = Daya Guna: {0}%
bar.boost = Percepatan: {0}%
bar.powerbalance = Tenaga: {0}/s bar.powerbalance = Tenaga: {0}/s
bar.powerstored = Disimpan: {0}/{1} bar.powerstored = Disimpan: {0}/{1}
bar.poweramount = Tenaga: {0} bar.poweramount = Tenaga: {0}
@@ -918,6 +919,7 @@ keybind.toggle_menus.name = Muncul Tidaknya Menu
keybind.chat_history_prev.name = Sejarah Pesan Sebelumnya keybind.chat_history_prev.name = Sejarah Pesan Sebelumnya
keybind.chat_history_next.name = Sejarah Pesan Setelahnya keybind.chat_history_next.name = Sejarah Pesan Setelahnya
keybind.chat_scroll.name = Scroll Pesan keybind.chat_scroll.name = Scroll Pesan
keybind.chat_mode.name = Ubah Mode Pesan
keybind.drop_unit.name = Jatuhkan Unit keybind.drop_unit.name = Jatuhkan Unit
keybind.zoom_minimap.name = Perbesar Peta Kecil keybind.zoom_minimap.name = Perbesar Peta Kecil
mode.help.title = Deskripsi mode mode.help.title = Deskripsi mode
@@ -925,7 +927,7 @@ mode.survival.name = Bertahan Hidup
mode.survival.description = Mode normal. Sumber daya terbatas dan gelombang otomatis. mode.survival.description = Mode normal. Sumber daya terbatas dan gelombang otomatis.
mode.sandbox.name = Mode Sandbox/Bebas mode.sandbox.name = Mode Sandbox/Bebas
mode.sandbox.description = Sumber daya tak terbatas dan tidak ada gelombang otomatis. mode.sandbox.description = Sumber daya tak terbatas dan tidak ada gelombang otomatis.
mode.editor.name = Sunting mode.editor.name = Penyunting
mode.pvp.name = PvP mode.pvp.name = PvP
mode.pvp.description = Melawan pemain lain. Membutuhkan setidaknya 2 inti berbeda warna didalam peta untuk main. mode.pvp.description = Melawan pemain lain. Membutuhkan setidaknya 2 inti berbeda warna didalam peta untuk main.
mode.attack.name = Penyerangan mode.attack.name = Penyerangan
@@ -934,6 +936,7 @@ mode.custom = Pengaturan Modifikasi
rules.infiniteresources = Sumber Daya Tak Terbatas rules.infiniteresources = Sumber Daya Tak Terbatas
rules.reactorexplosions = Ledakan Reaktor rules.reactorexplosions = Ledakan Reaktor
rules.coreincinerates = Penghangusan Luapan Inti
rules.schematic = Skema Diperbolehkan rules.schematic = Skema Diperbolehkan
rules.wavetimer = Pengaturan Waktu Gelombang rules.wavetimer = Pengaturan Waktu Gelombang
rules.waves = Gelombang rules.waves = Gelombang
@@ -1219,6 +1222,7 @@ block.meltdown.name = Meltdown
block.foreshadow.name = Foreshadow block.foreshadow.name = Foreshadow
block.container.name = Kontainer block.container.name = Kontainer
block.launch-pad.name = Alas Peluncur block.launch-pad.name = Alas Peluncur
block.launch-pad-large.name = Alas Peluncur Besar
block.segment.name = Segment block.segment.name = Segment
block.command-center.name = Pusat Perintah block.command-center.name = Pusat Perintah
block.ground-factory.name = Pabrik Unit Darat block.ground-factory.name = Pabrik Unit Darat

View File

@@ -13,13 +13,14 @@ link.google-play.description = Google Play ストアを開く
link.f-droid.description = F-Droid を開く link.f-droid.description = F-Droid を開く
link.wiki.description = 公式 Mindustry Wiki link.wiki.description = 公式 Mindustry Wiki
link.suggestions.description = 新機能を提案する link.suggestions.description = 新機能を提案する
link.bug.description = Found one? Report it here
linkfail = リンクを開けませんでした!\nURLをクリップボードにコピーしました。 linkfail = リンクを開けませんでした!\nURLをクリップボードにコピーしました。
screenshot = スクリーンショットを {0} に保存しました。 screenshot = スクリーンショットを {0} に保存しました。
screenshot.invalid = マップが広すぎます。スクリーンショットに必要なメモリが足りない可能性があります。 screenshot.invalid = マップが広すぎます。スクリーンショットに必要なメモリが足りない可能性があります。
gameover = ゲームオーバー gameover = ゲームオーバー
gameover.disconnect = Disconnect gameover.disconnect = 切断
gameover.pvp = [accent] {0}[] チームの勝利! gameover.pvp = [accent] {0}[] チームの勝利!
gameover.waiting = [accent]Waiting for next map... gameover.waiting = [accent]次のマップを待っています...
highscore = [accent]ハイスコアを更新! highscore = [accent]ハイスコアを更新!
copied = コピーしました。 copied = コピーしました。
indev.notready = This part of the game isn't ready yet indev.notready = This part of the game isn't ready yet
@@ -40,6 +41,11 @@ be.ignore = 無視する
be.noupdates = 更新が見つかりません。 be.noupdates = 更新が見つかりません。
be.check = 更新を確認します。 be.check = 更新を確認します。
mod.featured.dialog.title = Mod ブラウザー (作業中)
mods.browser.selected = 選択されたmod
mods.browser.add = インストール
mods.github.open = 見る
schematic = 設計図 schematic = 設計図
schematic.add = 設計図を保存 schematic.add = 設計図を保存
schematics = 設計図一覧 schematics = 設計図一覧
@@ -83,6 +89,7 @@ joingame = マルチプレイ
customgame = カスタムプレイ customgame = カスタムプレイ
newgame = 新しく始める newgame = 新しく始める
none = <なし> none = <なし>
none.found = [lightgray]<見つかりません>
minimap = ミニマップ minimap = ミニマップ
position = 位置 position = 位置
close = 閉じる close = 閉じる
@@ -196,9 +203,10 @@ servers.local = ローカルサーバー
servers.remote = リモートサーバー servers.remote = リモートサーバー
servers.global = コミュニティサーバー servers.global = コミュニティサーバー
servers.showhidden = Show Hidden Servers servers.disclaimer = コミュニティサーバーは、[accent]開発者が所有、管理していません。[] \n\nサーバーには全ての年齢層に適さないコンテンツが存在する可能性があります。
server.shown = Shown servers.showhidden = 非表示のサーバーを表示する
server.hidden = Hidden server.shown = 表示
server.hidden = 非表示
trace = プレイヤーの記録 trace = プレイヤーの記録
trace.playername = プレイヤー名: [accent]{0} trace.playername = プレイヤー名: [accent]{0}
@@ -464,7 +472,7 @@ filter.option.amount = 量
filter.option.block = ブロック filter.option.block = ブロック
filter.option.floor = 地面 filter.option.floor = 地面
filter.option.flooronto = 対象の地面 filter.option.flooronto = 対象の地面
filter.option.target = Target filter.option.target = ターゲット
filter.option.wall = filter.option.wall =
filter.option.ore = 鉱石 filter.option.ore = 鉱石
filter.option.floor2 = 2番目の地面 filter.option.floor2 = 2番目の地面
@@ -537,7 +545,7 @@ sectors.resources = 資源:
sectors.production = 生産: sectors.production = 生産:
sectors.export = 搬出: sectors.export = 搬出:
sectors.time = 時間: sectors.time = 時間:
sectors.threat = 難易度: sectors.threat = 脅威:
sectors.wave = ウェーブ: sectors.wave = ウェーブ:
sectors.stored = 保存済み: sectors.stored = 保存済み:
sectors.resume = 再開 sectors.resume = 再開
@@ -561,8 +569,8 @@ sector.captured = セクター [accent]{0}[white]制圧!
threat.low = threat.low =
threat.medium = threat.medium =
threat.high = threat.high =
threat.extreme = Extreme threat.extreme = 過激
threat.eradication = Eradication threat.eradication = 根絶
planets = 惑星 planets = 惑星
@@ -697,6 +705,7 @@ stat.commandlimit = 指揮上限
stat.abilities = 能力 stat.abilities = 能力
stat.canboost = ブースト可能 stat.canboost = ブースト可能
stat.flying = 飛行 stat.flying = 飛行
stat.ammouse = 使用弾薬
ability.forcefield = フォースフィールド ability.forcefield = フォースフィールド
ability.repairfield = リペアフィールド ability.repairfield = リペアフィールド
@@ -719,7 +728,6 @@ bar.powerlines = 接続数: {0}/{1}
bar.items = アイテム: {0} bar.items = アイテム: {0}
bar.capacity = 容量: {0} bar.capacity = 容量: {0}
bar.unitcap = {0} {1}/{2} bar.unitcap = {0} {1}/{2}
bar.limitreached = [scarlet] {0} / {1}[white] {2}\n[lightgray][[unit disabled]
bar.liquid = 液体 bar.liquid = 液体
bar.heat = bar.heat =
bar.power = 電力 bar.power = 電力
@@ -736,6 +744,7 @@ bullet.sapping = [stat]sapping
bullet.homing = [stat]追尾弾 bullet.homing = [stat]追尾弾
bullet.shock = [stat]電撃 bullet.shock = [stat]電撃
bullet.frag = [stat]爆発弾 bullet.frag = [stat]爆発弾
bullet.buildingdamage = [stat]{0}%[lightgray] 対物ダメージ
bullet.knockback = [stat]{0}[lightgray] ノックバック bullet.knockback = [stat]{0}[lightgray] ノックバック
bullet.pierce = [stat]{0}[lightgray]x レーザー弾 bullet.pierce = [stat]{0}[lightgray]x レーザー弾
bullet.infinitepierce = [stat]レーザー弾 bullet.infinitepierce = [stat]レーザー弾
@@ -764,6 +773,7 @@ unit.items = アイテム
unit.thousands = k unit.thousands = k
unit.millions = mil unit.millions = mil
unit.billions = b unit.billions = b
unit.pershot = /発
category.purpose = 説明 category.purpose = 説明
category.general = 一般 category.general = 一般
category.power = 電力 category.power = 電力
@@ -831,7 +841,9 @@ setting.chatopacity.name = チャットの透明度
setting.lasersopacity.name = レーザーの透明度 setting.lasersopacity.name = レーザーの透明度
setting.bridgeopacity.name = ブリッジの透明度 setting.bridgeopacity.name = ブリッジの透明度
setting.playerchat.name = ゲーム内にチャットを表示 setting.playerchat.name = ゲーム内にチャットを表示
setting.showweather.name = 天気のグラフィックを表示
public.confirm = ゲームを公開しますか?\n[accent]誰でもゲームに参加できるようになります。\n[lightgray]あとから設定で変更できます。 public.confirm = ゲームを公開しますか?\n[accent]誰でもゲームに参加できるようになります。\n[lightgray]あとから設定で変更できます。
public.confirm.really = If you want to play with friends, use [green]Invite Friend[] instead of a [scarlet]Public server[]!\nAre you sure you want to make your game [scarlet]public[]?
public.beta = ベータ版では使用できません。 public.beta = ベータ版では使用できません。
uiscale.reset = UIサイズが変更されました。\nこのままでよければ「OK」を押してください。\n[scarlet][accent]{0}[] 秒で元の設定に戻ります... uiscale.reset = UIサイズが変更されました。\nこのままでよければ「OK」を押してください。\n[scarlet][accent]{0}[] 秒で元の設定に戻ります...
uiscale.cancel = キャンセル & 終了 uiscale.cancel = キャンセル & 終了
@@ -906,6 +918,7 @@ keybind.toggle_menus.name = メニュー切り替え
keybind.chat_history_prev.name = 前のチャット履歴 keybind.chat_history_prev.name = 前のチャット履歴
keybind.chat_history_next.name = 次のチャット履歴 keybind.chat_history_next.name = 次のチャット履歴
keybind.chat_scroll.name = チャットスクロール keybind.chat_scroll.name = チャットスクロール
keybind.chat_mode.name = Change Chat Mode
keybind.drop_unit.name = ドロップユニット keybind.drop_unit.name = ドロップユニット
keybind.zoom_minimap.name = ミニマップのズーム keybind.zoom_minimap.name = ミニマップのズーム
mode.help.title = モード説明 mode.help.title = モード説明
@@ -954,6 +967,7 @@ rules.explosions = 爆発ダメージ
rules.ambientlight = 霧の色 rules.ambientlight = 霧の色
rules.weather = 気象 rules.weather = 気象
rules.weather.frequency = 頻度: rules.weather.frequency = 頻度:
rules.weather.always = Always
rules.weather.duration = 継続時間: rules.weather.duration = 継続時間:
content.item.name = アイテム content.item.name = アイテム
@@ -1163,7 +1177,7 @@ block.power-source.name = 無限電源
block.unloader.name = 搬出機 block.unloader.name = 搬出機
block.vault.name = ボールト block.vault.name = ボールト
block.wave.name = ウェーブ block.wave.name = ウェーブ
block.tsunami.name = 津波 block.tsunami.name = ツナミ
block.swarmer.name = スウォーマー block.swarmer.name = スウォーマー
block.salvo.name = サルボー block.salvo.name = サルボー
block.ripple.name = リップル block.ripple.name = リップル
@@ -1244,7 +1258,7 @@ team.derelict.name = 廃墟
team.green.name = グリーン team.green.name = グリーン
team.purple.name = パープル team.purple.name = パープル
hint.skip = Skip hint.skip = スキップ
hint.desktopMove = Use [accent][[WASD][] to move. hint.desktopMove = Use [accent][[WASD][] to move.
hint.zoom = [accent]Scroll[] to zoom in or out. hint.zoom = [accent]Scroll[] to zoom in or out.
hint.mine = Move near the \uf8c4 copper ore and [accent]tap[] it to mine manually. hint.mine = Move near the \uf8c4 copper ore and [accent]tap[] it to mine manually.
@@ -1279,6 +1293,10 @@ hint.payloadDrop.mobile = [accent]Tap and hold[] an empty location to drop a pay
hint.waveFire = [accent]Wave[] turrets with water as ammunition will automatically put out nearby fires. hint.waveFire = [accent]Wave[] turrets with water as ammunition will automatically put out nearby fires.
hint.generator = \uf879 [accent]Combustion Generators[] burn coal and transmit power to adjacent blocks.\n\nPower transmission range can be extended with \uf87f [accent]Power Nodes[]. hint.generator = \uf879 [accent]Combustion Generators[] burn coal and transmit power to adjacent blocks.\n\nPower transmission range can be extended with \uf87f [accent]Power Nodes[].
hint.guardian = [accent]Guardian[] units are armored. Weak ammo such as [accent]Copper[] and [accent]Lead[] is [scarlet]not effective[].\n\nUse higher tier turrets or \uf835 [accent]Graphite[] \uf861Duo/\uf859Salvo ammunition to take Guardians down. hint.guardian = [accent]Guardian[] units are armored. Weak ammo such as [accent]Copper[] and [accent]Lead[] is [scarlet]not effective[].\n\nUse higher tier turrets or \uf835 [accent]Graphite[] \uf861Duo/\uf859Salvo ammunition to take Guardians down.
hint.coreUpgrade = Cores can be upgraded by [accent]placing higher-tier cores over them[].\n\nPlace a  [accent]Foundation[] core over the  [accent]Shard[] core. Make sure it is free from nearby obstructions.
hint.presetLaunch = Gray [accent]landing zone sectors[], such as [accent]Frozen Forest[], can be launched to from anywhere. They do not require capture of nearby territory.\n\n[accent]Numbered sectors[], such as this one, are [accent]optional[].
hint.coreIncinerate = After the core is filled to capacity with an item, any extra items of that type it receives will be [accent]incinerated[].
hint.coopCampaign = When playing the [accent]co-op campaign[], items that are produced in the current map will also be sent [accent]to your local sectors[].\n\nAny new research done by the host also carries over.
item.copper.description = 便利な鉱石です。様々なブロックの材料として幅広く使われています。 item.copper.description = 便利な鉱石です。様々なブロックの材料として幅広く使われています。
item.copper.details = セルプロに豊富な金属。補強しない限り構造的に弱い。 item.copper.details = セルプロに豊富な金属。補強しない限り構造的に弱い。
@@ -1460,7 +1478,7 @@ unit.reign.description = Fires a barrage of massive piercing bullets at all near
unit.nova.description = Fires laser bolts that damage enemies and repair allied structures. Capable of flight. unit.nova.description = Fires laser bolts that damage enemies and repair allied structures. Capable of flight.
unit.pulsar.description = Fires arcs of electricity that damage enemies and repair allied structures. Capable of flight. unit.pulsar.description = Fires arcs of electricity that damage enemies and repair allied structures. Capable of flight.
unit.quasar.description = Fires piercing laser beams that damage enemies and repair allied structures. Capable of flight. Shielded. unit.quasar.description = Fires piercing laser beams that damage enemies and repair allied structures. Capable of flight. Shielded.
unit.vela.description = Fires a massive continuous laser beam that damages enemies, causes fires and repair allied structures. Capable of flight. unit.vela.description = Fires a massive continuous laser beam that damages enemies, causes fires and repairs allied structures. Capable of flight.
unit.corvus.description = Fires a massive laser blast that damages enemies and repairs allied structures. Can step over most terrain. unit.corvus.description = Fires a massive laser blast that damages enemies and repairs allied structures. Can step over most terrain.
unit.crawler.description = Runs toward enemies and self-destructs, causing a large explosion. unit.crawler.description = Runs toward enemies and self-destructs, causing a large explosion.
unit.atrax.description = Fires debilitating orbs of slag at ground targets. Can step over most terrain. unit.atrax.description = Fires debilitating orbs of slag at ground targets. Can step over most terrain.
@@ -1473,12 +1491,12 @@ unit.zenith.description = Fires salvos of missiles at all nearby enemies.
unit.antumbra.description = Fires a barrage of bullets at all nearby enemies. unit.antumbra.description = Fires a barrage of bullets at all nearby enemies.
unit.eclipse.description = Fires two piercing lasers and a barrage of flak at all nearby enemies. unit.eclipse.description = Fires two piercing lasers and a barrage of flak at all nearby enemies.
unit.mono.description = Automatically mines copper and lead, depositing it into the core. unit.mono.description = Automatically mines copper and lead, depositing it into the core.
unit.poly.description = Automatically rebuilds damaged structures and assists other units in construction. unit.poly.description = Automatically rebuilds destroyed structures and assists other units in construction.
unit.mega.description = Automatically repairs damaged structures. Capable of carrying blocks and small ground units. unit.mega.description = Automatically repairs damaged structures. Capable of carrying blocks and small ground units.
unit.quad.description = Drops large bombs on ground targets, repairing allied structures and damaging enemies. Capable of carrying medium-sized ground units. unit.quad.description = Drops large bombs on ground targets, repairing allied structures and damaging enemies. Capable of carrying medium-sized ground units.
unit.oct.description = Protects nearby allies with its regenerating shield. Capable of carrying most ground units. unit.oct.description = Protects nearby allies with its regenerating shield. Capable of carrying most ground units.
unit.risso.description = Fires a barrage of missiles and bullets at all nearby enemies. unit.risso.description = Fires a barrage of missiles and bullets at all nearby enemies.
unit.minke.description = Fires incendiary shells and standard bullets at nearby ground targets. unit.minke.description = Fires shells and standard bullets at nearby ground targets.
unit.bryde.description = Fires long-range artillery shells and missiles at enemies. unit.bryde.description = Fires long-range artillery shells and missiles at enemies.
unit.sei.description = Fires a barrage of missiles and armor-piercing bullets at enemies. unit.sei.description = Fires a barrage of missiles and armor-piercing bullets at enemies.
unit.omura.description = Fires a long-range piercing railgun bolt at enemies. Constructs flare units. unit.omura.description = Fires a long-range piercing railgun bolt at enemies. Constructs flare units.

View File

@@ -81,7 +81,7 @@ level.highscore = 최고 점수: [accent]{0}
level.select = 맵 선택 level.select = 맵 선택
level.mode = 게임 모드: level.mode = 게임 모드:
coreattack = < 코어가 공격을 받고 있습니다! > coreattack = < 코어가 공격을 받고 있습니다! >
nearpoint = [[ [scarlet]즉시 적 소환구역에서 떠나십시오[] ]\n단계가 시작하는 순간 인근 건물들과 유닛들이 전멸니다! nearpoint = [[ [scarlet]즉시 적 소환구역에서 떠나십시오[] ]\n단계가 시작하는 순간 인근 건물들과 유닛들이 전멸니다!
database = 코어 데이터베이스 database = 코어 데이터베이스
savegame = 게임 저장 savegame = 게임 저장
loadgame = 게임 불러오기 loadgame = 게임 불러오기
@@ -126,7 +126,7 @@ mod.content = 콘텐츠:
mod.delete.error = 모드를 삭제할 수 없습니다. 파일이 사용 중일 수 있습니다. mod.delete.error = 모드를 삭제할 수 없습니다. 파일이 사용 중일 수 있습니다.
mod.requiresversion = [scarlet]필요한 최소 게임 버전: [accent]{0} mod.requiresversion = [scarlet]필요한 최소 게임 버전: [accent]{0}
mod.outdated = [scarlet]V6 버전과 호환되지 않음 (minGameVersion이 105 이하인 모드는 사용할 수 없습니다.) mod.outdated = [scarlet]V6 버전과 호환되지 않음 (minGameVersion이 105 이하인 모드는 사용할 수 없습니다.)
mod.missingdependencies = [scarlet]누락된 요 모드: {0} mod.missingdependencies = [scarlet]누락된 요 모드: {0}
mod.erroredcontent = [scarlet]콘텐츠 오류 mod.erroredcontent = [scarlet]콘텐츠 오류
mod.errors = 콘텐츠를 불러오는 중에 오류가 발생함. mod.errors = 콘텐츠를 불러오는 중에 오류가 발생함.
mod.noerrorplay = [scarlet]오류가 있는 모드가 있습니다.[] 영향을 받는 모드를 비활성화하거나 플레이하기 전에 오류를 수정하세요. mod.noerrorplay = [scarlet]오류가 있는 모드가 있습니다.[] 영향을 받는 모드를 비활성화하거나 플레이하기 전에 오류를 수정하세요.
@@ -137,11 +137,11 @@ mod.reloadrequired = [scarlet]재시작 필요
mod.import = 모드 가져오기 mod.import = 모드 가져오기
mod.import.file = 파일 가져오기 mod.import.file = 파일 가져오기
mod.import.github = Github 에서 모드 가져오기 mod.import.github = Github 에서 모드 가져오기
mod.jarwarn = [scarlet]JAR 모드는 안전하지 않습니다.[]\n신뢰할 수 있는 소스에서 얻은 모드만을 사용해야 합니다! mod.jarwarn = [scarlet]JAR 모드는 안전하지 않습니다.[]\n신뢰할 수 있는 모드 개발자에게서 얻은 모드만을 사용해야 합니다!
mod.item.remove = 이 자원은[accent] '{0}' 모드의 일부입니다. 이를 제거하려면 해당 모드를 제거하세요. mod.item.remove = 이 자원은[accent] '{0}' 모드의 일부입니다. 이를 제거하려면 해당 모드를 제거하세요.
mod.remove.confirm = 이 모드가 삭제될 것입니다. mod.remove.confirm = 이 모드가 삭제될 것입니다.
mod.author = [lightgray]제작자:[] {0} mod.author = [lightgray]제작자:[] {0}
mod.missing = 이 저장 파일에는 최근에 업데이트되었거나 현재 기기에 설치되지 않은 모드가 포함되어 있습니다. 저장 파일이 손상될 수 있습니다. 정말로 불러오시겠습니까?\n[lighthray]모드들:\n{0} mod.missing = 이 저장 파일에는 최근에 업데이트되었거나 현재 기기에 설치되지 않은 모드가 포함되어 있습니다. 저장 파일이 손상될 수 있습니다. 정말로 불러오시겠습니까?\n[lightgray]모드들:\n{0}
mod.preview.missing = 창작마당에 모드를 올리기 전에 미리 보기 이미지를 추가해야 합니다.\n[accent]preview.png[] 라는 이름의 미리 보기 이미지를 모드 폴더에 넣고 다시 시도하세요. mod.preview.missing = 창작마당에 모드를 올리기 전에 미리 보기 이미지를 추가해야 합니다.\n[accent]preview.png[] 라는 이름의 미리 보기 이미지를 모드 폴더에 넣고 다시 시도하세요.
mod.folder.missing = 창작마당에는 폴더 형태의 모드만 게시할 수 있습니다.\n모드를 폴더 형태로 바꾸려면 모드 파일을 모드 폴더에 압축을 풀고 이전 모드 파일을 삭제 후, 게임을 재시작하거나 모드를 다시 불러오십시오. mod.folder.missing = 창작마당에는 폴더 형태의 모드만 게시할 수 있습니다.\n모드를 폴더 형태로 바꾸려면 모드 파일을 모드 폴더에 압축을 풀고 이전 모드 파일을 삭제 후, 게임을 재시작하거나 모드를 다시 불러오십시오.
mod.scripts.disable = 이 기기는 스크립트가 있는 모드를 지원하지 않습니다. 게임을 플레이하려면 이 모드를 비활성화해야 합니다. mod.scripts.disable = 이 기기는 스크립트가 있는 모드를 지원하지 않습니다. 게임을 플레이하려면 이 모드를 비활성화해야 합니다.
@@ -287,6 +287,7 @@ cancel = 취소
openlink = 링크 열기 openlink = 링크 열기
copylink = 링크 복사 copylink = 링크 복사
back = 뒤로가기 back = 뒤로가기
max = 최대
crash.export = 오류 로그 내보내기 crash.export = 오류 로그 내보내기
crash.none = 오류 로그가 발견되지 않았습니다. crash.none = 오류 로그가 발견되지 않았습니다.
crash.exported = 오류 로그가 추출되었습니다. crash.exported = 오류 로그가 추출되었습니다.
@@ -361,7 +362,6 @@ editor.center = 중앙
workshop = 창작마당 workshop = 창작마당
waves.title = 단계 waves.title = 단계
waves.remove = 삭제 waves.remove = 삭제
waves.never = 여기까지 유닛 생성
waves.every = waves.every =
waves.waves = 단계마다 waves.waves = 단계마다
waves.perspawn = 마리씩 생성됨 waves.perspawn = 마리씩 생성됨
@@ -390,7 +390,7 @@ editor.removeunit = 유닛 삭제
editor.teams = editor.teams =
editor.errorload = 파일을 불러오지 못했습니다. editor.errorload = 파일을 불러오지 못했습니다.
editor.errorsave = 파일을 저장하지 못했습니다. editor.errorsave = 파일을 저장하지 못했습니다.
editor.errorimage = 이것은 맵이 아니라 사진입니다.\n\n3.5/build 40 맵을 가져올려면 편집기에서 '예전 맵 가져오기' 버튼을 사용하세요. editor.errorimage = 이것은 맵이 아니라 사진입니다.
editor.errorlegacy = 이 맵은 너무 오래되어 더 이상 지원되지 않는 구형 맵 형식을 사용합니다. editor.errorlegacy = 이 맵은 너무 오래되어 더 이상 지원되지 않는 구형 맵 형식을 사용합니다.
editor.errornot = 맵 파일이 아닙니다. editor.errornot = 맵 파일이 아닙니다.
editor.errorheader = 이 맵 파일은 유효하지 않거나 손상되었습니다. editor.errorheader = 이 맵 파일은 유효하지 않거나 손상되었습니다.
@@ -720,6 +720,7 @@ bar.corereq = 코어 필요
bar.drillspeed = 드릴 속도: {0}/s bar.drillspeed = 드릴 속도: {0}/s
bar.pumpspeed = 펌프 속도: {0}/s bar.pumpspeed = 펌프 속도: {0}/s
bar.efficiency = 효율: {0}% bar.efficiency = 효율: {0}%
bar.boost = 가속: {0}%
bar.powerbalance = 전력: {0}/s bar.powerbalance = 전력: {0}/s
bar.powerstored = 저장량: {0}/{1} bar.powerstored = 저장량: {0}/{1}
bar.poweramount = 전력: {0} bar.poweramount = 전력: {0}
@@ -871,7 +872,7 @@ keybind.move_x.name = X축 이동
keybind.move_y.name = Y축 이동 keybind.move_y.name = Y축 이동
keybind.mouse_move.name = 커서를 따라서 이동 keybind.mouse_move.name = 커서를 따라서 이동
keybind.pan.name = 펜 보기 keybind.pan.name = 펜 보기
keybind.boost.name = 부스트 keybind.boost.name = 비행
keybind.schematic_select.name = 영역 설정 keybind.schematic_select.name = 영역 설정
keybind.schematic_menu.name = 설계도 메뉴 keybind.schematic_menu.name = 설계도 메뉴
keybind.schematic_flip_x.name = 설계도 X축 뒤집기 keybind.schematic_flip_x.name = 설계도 X축 뒤집기
@@ -935,6 +936,7 @@ mode.custom = 사용자 정의 규칙
rules.infiniteresources = 무한 자원 rules.infiniteresources = 무한 자원
rules.reactorexplosions = 원자로 폭발 허용 rules.reactorexplosions = 원자로 폭발 허용
rules.coreincinerates = 코어 방화 비허용
rules.schematic = 설계도 허용 rules.schematic = 설계도 허용
rules.wavetimer = 시간 제한이 있는 단계 rules.wavetimer = 시간 제한이 있는 단계
rules.waves = 일반 단계 rules.waves = 일반 단계
@@ -961,13 +963,13 @@ rules.title.unit = 유닛
rules.title.experimental = 실험적인 기능 rules.title.experimental = 실험적인 기능
rules.title.environment = 환경 rules.title.environment = 환경
rules.lighting = 조명 rules.lighting = 조명
rules.enemyLights = 상대에게 조명 rules.enemyLights = 상대에게 조명 표시
rules.fire = 방화 rules.fire = 방화
rules.explosions = 블록/유닛 폭발 데미지 rules.explosions = 블록/유닛 폭발 데미지
rules.ambientlight = 자연 조명 rules.ambientlight = 자연 조명 표시
rules.weather = 날씨 rules.weather = 날씨
rules.weather.frequency = 빈도: rules.weather.frequency = 빈도:
rules.weather.always = 항상 rules.weather.always = 항상
rules.weather.duration = 지속 시간: rules.weather.duration = 지속 시간:
content.item.name = 자원 content.item.name = 자원
@@ -1154,7 +1156,7 @@ block.coal-centrifuge.name = 석탄 정제기
block.power-node.name = 전력 노드 block.power-node.name = 전력 노드
block.power-node-large.name = 대형 전력 노드 block.power-node-large.name = 대형 전력 노드
block.surge-tower.name = 설금 타워 block.surge-tower.name = 설금 타워
block.diode.name = 전력 비교기 block.diode.name = 다이오드
block.battery.name = 배터리 block.battery.name = 배터리
block.battery-large.name = 대형 배터리 block.battery-large.name = 대형 배터리
block.combustion-generator.name = 화력 발전기 block.combustion-generator.name = 화력 발전기
@@ -1263,17 +1265,17 @@ hint.desktopMove = [accent][[WASD][] 키를 이용해 자신의 유닛을 조종
hint.zoom = [accent]마우스 스크롤[]를 사용해 확대 또는 축소가 가능합니다. hint.zoom = [accent]마우스 스크롤[]를 사용해 확대 또는 축소가 가능합니다.
hint.mine = \uf8c4 주변의 구리광석을 수동으로 채굴하려면 광석을 [accent]누르십시오[]. (추가설명)마우스가 있을 경우 마우스 오른쪽 클릭을 하면 채굴 중단이 가능합니다. hint.mine = \uf8c4 주변의 구리광석을 수동으로 채굴하려면 광석을 [accent]누르십시오[]. (추가설명)마우스가 있을 경우 마우스 오른쪽 클릭을 하면 채굴 중단이 가능합니다.
hint.desktopShoot = [accent][[마우스 왼클릭][]으로 발사할수 있습니다. hint.desktopShoot = [accent][[마우스 왼클릭][]으로 발사할수 있습니다.
hint.depositItems = 아이템을 코어로 옮기려면, 당신의 기체의 아이템을 코어로 끌어놓으세요. hint.depositItems = 자원을 코어로 옮기려면, 당신의 기체의 자원을 코어로 끌어놓으세요.
hint.respawn = 당신의 기체를 떠나려면 [accent][[V][]를 누르십시오. hint.respawn = 당신의 기체를 떠나려면 [accent][[V][]를 누르십시오.
hint.respawn.mobile = 당신은 유닛 혹은 포탑을 조종할 수 있습니다. 당신의 기체를 떠나려면 [accent]왼쪽 위에 있는 아바타를 누르십시오.[] hint.respawn.mobile = 당신은 유닛 혹은 포탑을 조종할 수 있습니다. 당신의 기체를 떠나려면 [accent]왼쪽 위에 있는 아바타를 누르십시오.[]
hint.desktopPause = 게임을 일시정지/재시작 하기 위해 [accent][[Space][]를 누르십시오. hint.desktopPause = 게임을 일시정지/재시작 하기 위해 [accent][[Space][]를 누르십시오.
hint.placeDrill = 드릴을 설치하려면 오른쪽 아래의 \ue85e [accent]드릴[]을 선택하고, \uf870 [accent]드릴[]을 선택해서 구리 광석 위를 누르십시오. hint.placeDrill = 드릴을 설치하려면 오른쪽 아래의 \ue85e [accent]드릴[]을 선택하고, \uf870 [accent]드릴[]을 선택해서 구리 광석 위를 누르십시오.
hint.placeDrill.mobile = 오른쪽 아래 메뉴의 \ue85e [accent]드릴[]을 선택하고, \uf870 [accent]드릴[] 를 선택해서 구리 광석 위를 누르십시오.\n\n설치를 완료하려면 오른쪽 아래의 \ue800 [accent]완료 버튼[]을 누르십시오. hint.placeDrill.mobile = 오른쪽 아래 메뉴의 \ue85e [accent]드릴[]을 선택하고, \uf870 [accent]드릴[] 를 선택해서 구리 광석 위를 누르십시오.\n\n설치를 완료하려면 오른쪽 아래의 \ue800 [accent]완료 버튼[]을 누르십시오.
hint.placeConveyor = 컨베이어는 아이템을 드릴에서 다른 블록으로 이동시켜줍니다. \ue814 [accent]분배[] 카테고리에서 \uf896 [accent]컨베이어[]를 선택하십시오.\n\n클릭하거나 드래그로 다수의 컨베이어를 설치할 수 있습니다.\n클릭하고 놓지 않은채로 마우스 [accent]휠을 돌리면 돌아갑니다. hint.placeConveyor = 컨베이어는 자원을 드릴에서 다른 블록으로 이동시켜줍니다. \ue814 [accent]분배[] 카테고리에서 \uf896 [accent]컨베이어[]를 선택하십시오.\n\n클릭하거나 드래그로 다수의 컨베이어를 설치할 수 있습니다.\n클릭하고 놓지 않은채로 마우스 [accent]휠을 돌리면 돌아갑니다.
hint.placeConveyor.mobile = 컨베이어는 아이템을 드릴에서 다른 블록으로 이동시켜줍니다. \ue814 [accent]분배[] 카테고리에서 \uf896 [accent]컨베이어[]를 선택하십시오.\n\n여러개의 컨베이어를 놓으려면 손가락으로 누른채로 끌어서 설치 범위를 지정하십시오. hint.placeConveyor.mobile = 컨베이어는 자원을 드릴에서 다른 블록으로 이동시켜줍니다. \ue814 [accent]분배[] 카테고리에서 \uf896 [accent]컨베이어[]를 선택하십시오.\n\n여러개의 컨베이어를 놓으려면 손가락으로 누른채로 끌어서 설치 범위를 지정하십시오.
hint.placeTurret = 적에게서 당신의 기지를 막아내려면 \uf861 [accent]포탑[]를 설치하십시오.\n\n포탑 탄약 필요 - 지금은 \uf838 구리가 필요합니다.\n컨베이어를 사용해 드릴에 구리를 공급하십시오. hint.placeTurret = 적에게서 당신의 기지를 막아내려면 \uf861 [accent]포탑[]를 설치하십시오.\n\n포탑 탄약 필요 - 지금은 \uf838 구리가 필요합니다.\n컨베이어를 사용해 드릴에 구리를 공급하십시오.
hint.breaking = 블록을 부수려면 [accent]오른클릭[]이나 드래그를 하십시오. hint.breaking = 블록을 부수려면 [accent]오른클릭[]이나 드래그를 하십시오.
hint.breaking.mobile = 을 부수려면 오른쪽 아래의 \ue817 [accent]망치[]를 눌러 해체 모드를 활성화 하십시오.\n\n손가락으로 누른채로 끌어서 해체 범위를 지정하십시오. hint.breaking.mobile = 을 부수려면 오른쪽 아래의 \ue817 [accent]망치[]를 눌러 해체 모드를 활성화 하십시오.\n\n손가락으로 누른채로 끌어서 해체 범위를 지정하십시오.
hint.research = 새 기술을 연구하려면 \ue875 [accent]연구[]버튼을 누르십시오. hint.research = 새 기술을 연구하려면 \ue875 [accent]연구[]버튼을 누르십시오.
hint.research.mobile = 새 기술을 연구하려면 \ue88c [accent]메뉴[] 아래의 \ue875 [accent]연구[]버튼을 누르십시오. hint.research.mobile = 새 기술을 연구하려면 \ue88c [accent]메뉴[] 아래의 \ue875 [accent]연구[]버튼을 누르십시오.
hint.unitControl = 아군 유닛과 포탑을 조종하려면 [accent][[왼쪽 ctrl][]을 누른채로 [accent]클릭[] 하십시오. hint.unitControl = 아군 유닛과 포탑을 조종하려면 [accent][[왼쪽 ctrl][]을 누른채로 [accent]클릭[] 하십시오.
@@ -1286,8 +1288,8 @@ hint.conveyorPathfind.mobile = \ue844 [accent]diagonal mode[]를 활성화하고
hint.boost = 당신의 유닛과 같이 장애물을 넘어가려면 [accent][[L-Shift][]을 누르고 이동하십시오. \n\n 적은 수의 지상 유닛만 날 수 있습니다. hint.boost = 당신의 유닛과 같이 장애물을 넘어가려면 [accent][[L-Shift][]을 누르고 이동하십시오. \n\n 적은 수의 지상 유닛만 날 수 있습니다.
hint.command = 주변의 아군 유닛을 데리고 다니려면 비슷한 단계의 유닛 무리 주변에서 [accent][[G][]를 누르십시오. \n\n 지상 유닛을 데리고 다니기 위해서는 먼저 다른 지상 유닛을 조종하고 있어야 합니다. hint.command = 주변의 아군 유닛을 데리고 다니려면 비슷한 단계의 유닛 무리 주변에서 [accent][[G][]를 누르십시오. \n\n 지상 유닛을 데리고 다니기 위해서는 먼저 다른 지상 유닛을 조종하고 있어야 합니다.
hint.command.mobile = 아군 유닛을 데리고 다니려면 비슷한 단계의 유닛 무리 주변에서 [accent]빠르게 두번 누르십시오[]. hint.command.mobile = 아군 유닛을 데리고 다니려면 비슷한 단계의 유닛 무리 주변에서 [accent]빠르게 두번 누르십시오[].
hint.payloadPickup = 작은 블이나 유닛을 집으려면 [accent][[[]를 누르십시오. hint.payloadPickup = 작은 블이나 유닛을 집으려면 [accent][[[]를 누르십시오.
hint.payloadPickup.mobile = 작은 블이나 유닛을 집으려면 [accent]잠깐 누르십시오[]. hint.payloadPickup.mobile = 작은 블이나 유닛을 집으려면 [accent]잠깐 누르십시오[].
hint.payloadDrop = 다시 내려놓으려면 [accent]][]를 누르십시오. hint.payloadDrop = 다시 내려놓으려면 [accent]][]를 누르십시오.
hint.payloadDrop.mobile = 다시 내려놓으려면 빈 공간에서 [accent]화면을 잠깐 누르십시오[]. hint.payloadDrop.mobile = 다시 내려놓으려면 빈 공간에서 [accent]화면을 잠깐 누르십시오[].
hint.waveFire = [accent]Wave[]포탑에 탄약으로 물을 넣으면 주변의 불을 자동으로 꺼줍니다. hint.waveFire = [accent]Wave[]포탑에 탄약으로 물을 넣으면 주변의 불을 자동으로 꺼줍니다.
@@ -1295,11 +1297,11 @@ hint.generator = \uf879 [accent]화력 발전기[]는 석탄을 태워서 주변
hint.guardian = [accent]수호자[] 유닛들은 방어력을 가집니다. [accent]구리[]와 [accent]납[]같은 약한 탄약으로는 [scarlet]아무런 효과도 없습니다[].\n\n그런 수호자를 없애려면 높은 단계의 포탑 또는 \uf835 [accent]흑연[]을 탄약으로 넣은 \uf861듀오/\uf859살보를 사용하십시오. hint.guardian = [accent]수호자[] 유닛들은 방어력을 가집니다. [accent]구리[]와 [accent]납[]같은 약한 탄약으로는 [scarlet]아무런 효과도 없습니다[].\n\n그런 수호자를 없애려면 높은 단계의 포탑 또는 \uf835 [accent]흑연[]을 탄약으로 넣은 \uf861듀오/\uf859살보를 사용하십시오.
hint.coreUpgrade = 코어는 [accent]상위 코어를 위에 설치함[]으로써 업그레이드할 수 있습니다.\n\n [accent]기반[] 코어를  [accent]조각[] 코어 위에 설치하십시오. 주변에 장애물이 없는지도 확인하십시오. hint.coreUpgrade = 코어는 [accent]상위 코어를 위에 설치함[]으로써 업그레이드할 수 있습니다.\n\n [accent]기반[] 코어를  [accent]조각[] 코어 위에 설치하십시오. 주변에 장애물이 없는지도 확인하십시오.
hint.presetLaunch = [accent]얼어붙은 숲[]과 같은 회색[accent]캠페인 지역[]은 어디에서나 출격해서 올 수 있습니다. 주변 지역을 점령하지 않아도 됩니다.\n\n이와 같은 [accent]네임드 지역[]들은 [accent]선택적[]입니다. hint.presetLaunch = [accent]얼어붙은 숲[]과 같은 회색[accent]캠페인 지역[]은 어디에서나 출격해서 올 수 있습니다. 주변 지역을 점령하지 않아도 됩니다.\n\n이와 같은 [accent]네임드 지역[]들은 [accent]선택적[]입니다.
hint.coreIncinerate = 코어가 아이템으로 가득 찬 후에 받는 모든 아이템들은 [accent]소각[]될 것입니다. hint.coreIncinerate = 코어가 자원으로 가득 찬 후에 받는 모든 자원들은 [accent]소각[]될 것입니다.
hint.coopCampaign = [accent]협동 캠페인[]을 할 떄, 현재 맵에서 생산된 아이템들은 [accent]당신의 캠페인 지역으로[]도 보내집니다.\n\n호스트가 새로 해금한 모든 것들도 가져갑니다. hint.coopCampaign = [accent]협동 캠페인[]을 할 떄, 현재 맵에서 생산된 자원들은 [accent]당신의 캠페인 지역으로[]도 보내집니다.\n\n호스트가 새로 해금한 모든 것들도 가져갑니다.
item.copper.description = 가장 기본적인 건설 재료. 모든 유형의 블록에서 광범위하게 사용됩니다. item.copper.description = 가장 기본적인 건설 재료. 모든 유형의 블록에서 광범위하게 사용됩니다.
item.copper.details = 평범한 구리. 세르플로에 비정상적으로 많이 분포되어 있습니다. 별다른 보강재 없이는 구조적 문제 때문에 내구성이 비교적 약합니다. item.copper.details = 평범한 구리. 세르플로에 비정상적으로 많이 분포니다. 별다른 보강재 없이는 구조적 문제 때문에 내구성이 비교적 약합니다.
item.lead.description = 기본 초반 재료. 전자 및 액체 수송 블록에서 광범위하게 사용되는 자원입니다. item.lead.description = 기본 초반 재료. 전자 및 액체 수송 블록에서 광범위하게 사용되는 자원입니다.
item.lead.details = 밀도가 높으며 반응성이 적은 자원. 배터리에 주로 사용됩니다. item.lead.details = 밀도가 높으며 반응성이 적은 자원. 배터리에 주로 사용됩니다.
item.metaglass.description = 초강력 방탄유리. 액체 분배 및 저장에 광범위하게 사용됩니다. item.metaglass.description = 초강력 방탄유리. 액체 분배 및 저장에 광범위하게 사용됩니다.
@@ -1325,8 +1327,8 @@ liquid.slag.description = 다양한 종류의 금속들이 함께 섞여 녹아
liquid.oil.description = 고급 재료 생산에 사용되는 액체. 석탄으로 전환하거나 무기로 뿌려서 불을 지를 수 있습니다. liquid.oil.description = 고급 재료 생산에 사용되는 액체. 석탄으로 전환하거나 무기로 뿌려서 불을 지를 수 있습니다.
liquid.cryofluid.description = 물과 티타늄으로 만든 비 부식성 액체. 열 용량이 매우 높으며 냉각수로 광범위하게 사용됩니다. liquid.cryofluid.description = 물과 티타늄으로 만든 비 부식성 액체. 열 용량이 매우 높으며 냉각수로 광범위하게 사용됩니다.
block.resupply-point.description = 주변 유닛들에게 구리 탄약을 보급합니다. 터리 전력이 필요한 유닛들은 호환되지 않습니다. block.resupply-point.description = 주변 유닛들에게 구리 탄약을 보급합니다. 터리 전력이 필요한 유닛들은 호환되지 않습니다.
block.armored-conveyor.description = 앞으로 아이템들을 운반합니다. 측면에서 아이템들을 받아들이지 않습니다. block.armored-conveyor.description = 앞으로 자원들을 운반합니다. 측면에서 자원들을 받아들이지 않습니다.
block.illuminator.description = 발광합니다. block.illuminator.description = 발광합니다.
block.message.description = 아군 간의 소통을 위한 메시지를 저장합니다. block.message.description = 아군 간의 소통을 위한 메시지를 저장합니다.
block.graphite-press.description = 석탄을 흑연으로 압축합니다. block.graphite-press.description = 석탄을 흑연으로 압축합니다.
@@ -1409,7 +1411,7 @@ block.rtg-generator.description = 간단하고 안정적인 발전기. 붕괴하
block.solar-panel.description = 태양으로부터 소량의 전력을 생성합니다. block.solar-panel.description = 태양으로부터 소량의 전력을 생성합니다.
block.solar-panel-large.description = 표준 태양 전지판보다 훨씬 더 효율적인 버전. block.solar-panel-large.description = 표준 태양 전지판보다 훨씬 더 효율적인 버전.
block.thorium-reactor.description = 토륨으로부터 상당한 양의 전력을 생산합니다. 지속적인 냉각이 필요하며, 충분한 양의 냉각수가 공급되지 않으면 크게 폭발합니다. 전력 출력은 토륨의 양에 따라 달라집니다. block.thorium-reactor.description = 토륨으로부터 상당한 양의 전력을 생산합니다. 지속적인 냉각이 필요하며, 충분한 양의 냉각수가 공급되지 않으면 크게 폭발합니다. 전력 출력은 토륨의 양에 따라 달라집니다.
block.impact-reactor.description = 최고 효율로 대량의 전력을 생산할 수 있는 고급 발전기. 프로세스를 시작하려면 상당한 전력 공급이 필요합니다. block.impact-reactor.description = 최고 효율로 대량의 전력을 생산할 수 있는 고급 발전기. 가동을 시작하려면 상당한 전력 공급이 필요합니다.
block.mechanical-drill.description = 가격이 싼 드릴. 적절한 타일에 설치하면 자원을 천천히 느린 속도로 출력합니다. 기본 자원만 채굴할 수 있습니다. block.mechanical-drill.description = 가격이 싼 드릴. 적절한 타일에 설치하면 자원을 천천히 느린 속도로 출력합니다. 기본 자원만 채굴할 수 있습니다.
block.pneumatic-drill.description = 티타늄을 캘 수 있는 향상된 드릴. 기계식 드릴보다 더 빠른 속도로 채굴합니다. block.pneumatic-drill.description = 티타늄을 캘 수 있는 향상된 드릴. 기계식 드릴보다 더 빠른 속도로 채굴합니다.
block.laser-drill.description = 레이저 기술을 통해 더욱 빠르게 채광할 수 있지만, 전력이 필요합니다. 토륨 채굴 가능. block.laser-drill.description = 레이저 기술을 통해 더욱 빠르게 채광할 수 있지만, 전력이 필요합니다. 토륨 채굴 가능.
@@ -1444,7 +1446,7 @@ block.spectre.description = 공중 및 지상 목표물에게 큰 관통 철갑
block.meltdown.description = 주변 적에게 지속적인 레이저 빔을 충전하여 발사합니다. 냉각 액체가 있어야 작동합니다. block.meltdown.description = 주변 적에게 지속적인 레이저 빔을 충전하여 발사합니다. 냉각 액체가 있어야 작동합니다.
block.foreshadow.description = 장거리에 걸친 거대한 단일 목표 저격탄을 발사합니다. block.foreshadow.description = 장거리에 걸친 거대한 단일 목표 저격탄을 발사합니다.
block.repair-point.description = 인근에 가장 가까운 유닛을 지속적으로 치료합니다. block.repair-point.description = 인근에 가장 가까운 유닛을 지속적으로 치료합니다.
block.segment.description = 날아오는 발사체를 요격합니다. 큰 발사체에겐 조준지 않습니다. block.segment.description = 날아오는 발사체를 요격합니다. 큰 발사체에겐 조준지 않습니다.
block.parallax.description = 공중 목표물을 끌어오는 견인 광선을 발사하며, 견인 과정에서 데미지를 줍니다. block.parallax.description = 공중 목표물을 끌어오는 견인 광선을 발사하며, 견인 과정에서 데미지를 줍니다.
block.tsunami.description = 적에게 강력한 액체 줄기를 발사합니다. 물이 공급되면 자동으로 주변의 화재를 진압합니다. block.tsunami.description = 적에게 강력한 액체 줄기를 발사합니다. 물이 공급되면 자동으로 주변의 화재를 진압합니다.
block.silicon-crucible.description = 추가적으로 파이라타이트를 사용하여 더 높은 온도에서 석탄과 모래를 제련합니다. 뜨거운 곳에서 더 효율적입니다. block.silicon-crucible.description = 추가적으로 파이라타이트를 사용하여 더 높은 온도에서 석탄과 모래를 제련합니다. 뜨거운 곳에서 더 효율적입니다.

View File

@@ -41,7 +41,6 @@ be.ignore = Zignoruj
be.noupdates = Nie znaleziono aktualizacji. be.noupdates = Nie znaleziono aktualizacji.
be.check = Sprawdź aktualizacje be.check = Sprawdź aktualizacje
mod.featured.title = Wyszukiwarka Modów
mod.featured.dialog.title = Wyszukiwarka Modów mod.featured.dialog.title = Wyszukiwarka Modów
mods.browser.selected = Wybrany Mod mods.browser.selected = Wybrany Mod
mods.browser.add = Zainstaluj Moda mods.browser.add = Zainstaluj Moda
@@ -90,6 +89,7 @@ joingame = Dołącz Do Gry
customgame = Własna Gra customgame = Własna Gra
newgame = Nowa Gra newgame = Nowa Gra
none = <brak> none = <brak>
none.found = [lightgray]<żaden znaleziony>
minimap = Minimapa minimap = Minimapa
position = Pozycja position = Pozycja
close = Zamknij close = Zamknij
@@ -110,7 +110,6 @@ committingchanges = Zatwierdzanie Zmian
done = Gotowe done = Gotowe
feature.unsupported = Twoje urządzenie nie wspiera tej funkcji. feature.unsupported = Twoje urządzenie nie wspiera tej funkcji.
mods.alphainfo = Pamiętaj, że mody są wersji alpha, i[scarlet] mogą być pełne błędów[].\nZgłaszaj wszystkie znalezione problemy na Mindustry GitHub lub Discord. mods.alphainfo = Pamiętaj, że mody są wersji alpha, i[scarlet] mogą być pełne błędów[].\nZgłaszaj wszystkie znalezione problemy na Mindustry GitHub lub Discord.
mods = Mody mods = Mody
mods.none = [lightgray]Nie znaleziono modów! mods.none = [lightgray]Nie znaleziono modów!
@@ -288,6 +287,7 @@ cancel = Anuluj
openlink = Otwórz Link openlink = Otwórz Link
copylink = Kopiuj Link copylink = Kopiuj Link
back = Wróć back = Wróć
max = Max
crash.export = Eksportuj logi błędów. crash.export = Eksportuj logi błędów.
crash.none = Nie znaleziono logów błędów. crash.none = Nie znaleziono logów błędów.
crash.exported = Logi zostały przeniesione. crash.exported = Logi zostały przeniesione.
@@ -362,7 +362,6 @@ editor.center = Center
workshop = Warsztat workshop = Warsztat
waves.title = Fale waves.title = Fale
waves.remove = Usuń waves.remove = Usuń
waves.never = <nigdy>
waves.every = co waves.every = co
waves.waves = fal(e) waves.waves = fal(e)
waves.perspawn = co pojawienie waves.perspawn = co pojawienie
@@ -706,6 +705,7 @@ stat.commandlimit = Limit Jednostek Zarządanych
stat.abilities = Umiejętności stat.abilities = Umiejętności
stat.canboost = Może przyspieszyć stat.canboost = Może przyspieszyć
stat.flying = Latanie stat.flying = Latanie
stat.ammouse = Zużycie Amunicji
ability.forcefield = Pole Mocy ability.forcefield = Pole Mocy
ability.repairfield = Pole Naprawy ability.repairfield = Pole Naprawy
@@ -720,6 +720,7 @@ bar.corereq = Wymagany Rdzeń
bar.drillspeed = Prędkość wiertła: {0}/s bar.drillspeed = Prędkość wiertła: {0}/s
bar.pumpspeed = Prędkość pompy: {0}/s bar.pumpspeed = Prędkość pompy: {0}/s
bar.efficiency = Efektywność: {0}% bar.efficiency = Efektywność: {0}%
bar.boost = Przyspieszenie: {0}%
bar.powerbalance = Moc: {0} bar.powerbalance = Moc: {0}
bar.powerstored = Zmagazynowano: {0}/{1} bar.powerstored = Zmagazynowano: {0}/{1}
bar.poweramount = Moc: {0} bar.poweramount = Moc: {0}
@@ -728,7 +729,6 @@ bar.powerlines = Połączenia: {0}/{1}
bar.items = Przedmiotów: {0} bar.items = Przedmiotów: {0}
bar.capacity = Pojemność: {0} bar.capacity = Pojemność: {0}
bar.unitcap = {0} {1}/{2} bar.unitcap = {0} {1}/{2}
bar.limitreached = [scarlet] {0} / {1}[white] {2}\n[lightgray][[unit disabled]
bar.liquid = Płyn bar.liquid = Płyn
bar.heat = Ciepło bar.heat = Ciepło
bar.power = Prąd bar.power = Prąd
@@ -745,6 +745,7 @@ bullet.sapping = [stat]wyczerpujący
bullet.homing = [stat]naprowadzający bullet.homing = [stat]naprowadzający
bullet.shock = [stat]piorunowy bullet.shock = [stat]piorunowy
bullet.frag = [stat]fragmentacyjny bullet.frag = [stat]fragmentacyjny
bullet.buildingdamage = [stat]{0}%[lightgray] obrażeń budynkom
bullet.knockback = [stat]{0}[lightgray] odrzut bullet.knockback = [stat]{0}[lightgray] odrzut
bullet.pierce = [stat]{0}[lightgray]x przebicia bullet.pierce = [stat]{0}[lightgray]x przebicia
bullet.infinitepierce = [stat]przebijający bullet.infinitepierce = [stat]przebijający
@@ -773,6 +774,7 @@ unit.items = przedmioty
unit.thousands = tys. unit.thousands = tys.
unit.millions = mln unit.millions = mln
unit.billions = b unit.billions = b
unit.pershot = /szczał
category.purpose = Opis category.purpose = Opis
category.general = Główne category.general = Główne
category.power = Prąd category.power = Prąd
@@ -842,6 +844,7 @@ setting.bridgeopacity.name = Przezroczystość mostów
setting.playerchat.name = Wyświetlaj czat w grze setting.playerchat.name = Wyświetlaj czat w grze
setting.showweather.name = Pokaż pogodę setting.showweather.name = Pokaż pogodę
public.confirm = Czy chcesz ustawić swoją grę jako publiczną?\n[accent]Każdy będzie mógł dołączyć do Twojej gry.\n[lightgray]Można to później zmienić w Ustawienia->Gra->Widoczność Gry Publicznej. public.confirm = Czy chcesz ustawić swoją grę jako publiczną?\n[accent]Każdy będzie mógł dołączyć do Twojej gry.\n[lightgray]Można to później zmienić w Ustawienia->Gra->Widoczność Gry Publicznej.
public.confirm.really = Jeśli chcesz grać z przyjaciółmi, użyj [green]Zaproś Przyjaciela[] zamiast [scarlet]Punliczny serwer[]!\nJesteś pewny że chcesz rozpocząć grę [scarlet]publiczą[]?
public.beta = Wersje beta gry nie mogą tworzyć publicznych pokoi. public.beta = Wersje beta gry nie mogą tworzyć publicznych pokoi.
uiscale.reset = Skala interfejsu uległa zmianie.\nNaciśnij "OK" by potwierdzić zmiany.\n[scarlet]Cofanie zmian i wyjście z gry za[accent] {0}[] uiscale.reset = Skala interfejsu uległa zmianie.\nNaciśnij "OK" by potwierdzić zmiany.\n[scarlet]Cofanie zmian i wyjście z gry za[accent] {0}[]
uiscale.cancel = Anuluj i Wyjdź uiscale.cancel = Anuluj i Wyjdź
@@ -916,6 +919,7 @@ keybind.toggle_menus.name = Zmiana widoczności menu
keybind.chat_history_prev.name = Przewiń wiadomości w górę keybind.chat_history_prev.name = Przewiń wiadomości w górę
keybind.chat_history_next.name = Przewiń wiadomości w dół keybind.chat_history_next.name = Przewiń wiadomości w dół
keybind.chat_scroll.name = Przewijaj Wiadomości keybind.chat_scroll.name = Przewijaj Wiadomości
keybind.chat_mode.name = Zmień tryb czatu
keybind.drop_unit.name = Wyrzucanie przedmiot keybind.drop_unit.name = Wyrzucanie przedmiot
keybind.zoom_minimap.name = Powiększenie mapy keybind.zoom_minimap.name = Powiększenie mapy
mode.help.title = Opis trybów mode.help.title = Opis trybów
@@ -932,6 +936,7 @@ mode.custom = Własny Tryb
rules.infiniteresources = Nieskończone Zasoby rules.infiniteresources = Nieskończone Zasoby
rules.reactorexplosions = Eksplozje Reaktorów rules.reactorexplosions = Eksplozje Reaktorów
rules.coreincinerates = Rdzeń Spala Przepełnienie
rules.schematic = Schematy Są Dozwolone rules.schematic = Schematy Są Dozwolone
rules.wavetimer = Zegar Fal rules.wavetimer = Zegar Fal
rules.waves = Fale rules.waves = Fale
@@ -964,6 +969,7 @@ rules.explosions = Uszkodzenia Wybuchu Klocka/Jednostki
rules.ambientlight = Otaczające Światło rules.ambientlight = Otaczające Światło
rules.weather = Pogoda rules.weather = Pogoda
rules.weather.frequency = Częstotliwość: rules.weather.frequency = Częstotliwość:
rules.weather.always = Zawsze
rules.weather.duration = Czas trwania: rules.weather.duration = Czas trwania:
content.item.name = Przedmioty content.item.name = Przedmioty
@@ -1078,18 +1084,18 @@ block.craters.name = Kratery
block.sand-water.name = Woda z Piaskiem block.sand-water.name = Woda z Piaskiem
block.darksand-water.name = Woda z Ciemnym Piaskiem block.darksand-water.name = Woda z Ciemnym Piaskiem
block.char.name = Popiół block.char.name = Popiół
block.dacite.name = Dacite block.dacite.name = Dacyt
block.dacite-wall.name = Dacite Wall block.dacite-wall.name = Dacytowa Ściana
block.dacite-boulder.name = Dacite Boulder block.dacite-boulder.name = Dacytowy Głaz
block.ice-snow.name = Lodowy Śnieg block.ice-snow.name = Lodowy Śnieg
block.stone-wall.name = Stone Wall block.stone-wall.name = Kamienna Ściana
block.ice-wall.name = Ice Wall block.ice-wall.name = Lodowa Ściana
block.snow-wall.name = Snow Wall block.snow-wall.name = Śnieżna Ściana
block.dune-wall.name = Dune Wall block.dune-wall.name = Wydmowa Ściana
block.pine.name = Sosna block.pine.name = Sosna
block.dirt.name = Dirt block.dirt.name = Ziemia
block.dirt-wall.name = Dirt Wall block.dirt-wall.name = Ziemna Ściana
block.mud.name = Mud block.mud.name = Błoto
block.white-tree-dead.name = Białe Martwe Drzewo block.white-tree-dead.name = Białe Martwe Drzewo
block.white-tree.name = Białe Drzewo block.white-tree.name = Białe Drzewo
block.spore-cluster.name = Skupisko Zarodników block.spore-cluster.name = Skupisko Zarodników
@@ -1105,7 +1111,7 @@ block.dark-panel-4.name = Ciemny Panel 4
block.dark-panel-5.name = Ciemny Panel 5 block.dark-panel-5.name = Ciemny Panel 5
block.dark-panel-6.name = Ciemny Panel 6 block.dark-panel-6.name = Ciemny Panel 6
block.dark-metal.name = Ciemny Metal block.dark-metal.name = Ciemny Metal
block.basalt.name = Basalt block.basalt.name = Bazalt
block.hotrock.name = Gorący Kamień block.hotrock.name = Gorący Kamień
block.magmarock.name = Skała magmowa block.magmarock.name = Skała magmowa
block.copper-wall.name = Miedziana Ściana block.copper-wall.name = Miedziana Ściana
@@ -1272,9 +1278,9 @@ hint.breaking = Użyj [accent]Prawego przycisku myszy[] i przeciągnij by zniszc
hint.breaking.mobile = Aktywuj \ue817 [accent]ikonę młota[] w dolnym prawym rogu by zniszczyć bloki.\n\nPrzytrymaj swój palec i przeciągij by wybrać wiele bloków do zniszczenia. hint.breaking.mobile = Aktywuj \ue817 [accent]ikonę młota[] w dolnym prawym rogu by zniszczyć bloki.\n\nPrzytrymaj swój palec i przeciągij by wybrać wiele bloków do zniszczenia.
hint.research = Klikij przycisk \ue875 [accent]Badań[] by odkrwyać nowe technologie. hint.research = Klikij przycisk \ue875 [accent]Badań[] by odkrwyać nowe technologie.
hint.research.mobile = Użyj przycisku \ue875 [accent]Badań[] w \ue88c [accent]Menu[] by odkrwyać nowe technologie. hint.research.mobile = Użyj przycisku \ue875 [accent]Badań[] w \ue88c [accent]Menu[] by odkrwyać nowe technologie.
hint.unitControl = Przytrzymaj [accent][[Lewy CTRL][] i [accent]kliknij[] to control by kontrolować sojusznicze jednostki i działka. hint.unitControl = Przytrzymaj [accent][[Lewy CTRL][] i [accent]kliknij[] by kontrolować sojusznicze jednostki i działka.
hint.unitControl.mobile = [accent][Kliknij dwukrotnie[] by kontrolować sojusznicze jednostki i działka. hint.unitControl.mobile = [accent][Kliknij dwukrotnie[] by kontrolować sojusznicze jednostki i działka.
hint.launch = Gdy zebrałeś wystarczająco materiałów możesz [accent]Wystrzelić[] wybierając \ue827 [accent]Mape[] w dolnym prawym rogu. hint.launch = Gdy zebrałeś wystarczająco materiałów możesz [accent]Wystrzelić[] wybierając \ue827 [accent]Mapę[] w dolnym prawym rogu.
hint.launch.mobile = Gdy zebrałeś wystarczająco materiałów możesz [accent]Wystrzelić[] do pobliskich sektorów klikając w \ue827 [accent]Mape[] w \ue88c [accent]Menu[]. hint.launch.mobile = Gdy zebrałeś wystarczająco materiałów możesz [accent]Wystrzelić[] do pobliskich sektorów klikając w \ue827 [accent]Mape[] w \ue88c [accent]Menu[].
hint.schematicSelect = Przytrzymaj [accent][[F][] by kopiować i wkleić bloki.\n\n[accent][[Środkowy przycisk myszy][] kopiuje pojedyńczy blok. hint.schematicSelect = Przytrzymaj [accent][[F][] by kopiować i wkleić bloki.\n\n[accent][[Środkowy przycisk myszy][] kopiuje pojedyńczy blok.
hint.conveyorPathfind = Przeciągij i przytrzymaj [accent][[Lewy CTRL][] w trakcie budowania przenośników by wygenerować ścieżkę. hint.conveyorPathfind = Przeciągij i przytrzymaj [accent][[Lewy CTRL][] w trakcie budowania przenośników by wygenerować ścieżkę.
@@ -1287,12 +1293,12 @@ hint.payloadPickup.mobile = [accent]Kliknij i przytrzymaj[] mały blok by go pod
hint.payloadDrop = Kliknij [accent]][] by opuścić podniesoiny towar. hint.payloadDrop = Kliknij [accent]][] by opuścić podniesoiny towar.
hint.payloadDrop.mobile = [accent]Kliknij i przytrzymaj[] w puste miejsce by opuścić podniesoiny towar. hint.payloadDrop.mobile = [accent]Kliknij i przytrzymaj[] w puste miejsce by opuścić podniesoiny towar.
hint.waveFire = [accent]Strumień[] wypełniony wodą będzie gasić pobiskie pożary. hint.waveFire = [accent]Strumień[] wypełniony wodą będzie gasić pobiskie pożary.
hint.generator = \uf879 [accent]Generatory Spalinowe[] spalają węgiel i przekuzują moc do pobliskich bloków.\n\nMożesz powiększyć odległość transmitowanej mocy używająć \uf87f [accent]Węzeły Prądu[]. hint.generator = \uf879 [accent]Generatory Spalinowe[] spalają węgiel i przekuzują moc do pobliskich bloków.\n\nMożesz powiększyć odległość transmitowanej mocy używająć \uf87f [accent]Węzły Prądu[].
hint.guardian = Jednostki [accent]Strażnicze[] są uzbrojone. Słaba amunicja - taka jak [accent]Miedź[] oraz [accent]Ołów[] [scarlet]nie jest efektywna[].\n\nUżyj lepszych działek takich jak \uf835 [accent]Naładowane Grafitem[] \uf861Duo/\uf859Salwa by pozbyć się strażników. hint.guardian = Jednostki [accent]Strażnicze[] są uzbrojone. Słaba amunicja - taka jak [accent]Miedź[] oraz [accent]Ołów[] [scarlet]nie jest efektywna[].\n\nUżyj lepszych działek takich jak \uf835 [accent]Naładowane Grafitem[] \uf861Duo/\uf859Salwa by pozbyć się strażników.
hint.coreUpgrade = Rdzenie mogą być ulepszone poprzez [accent]płożenie na nich rdzeń wyższego poziomu[].\n\nPołóż  rdzeń [accent]Fundacji[] na  rdzeń:[accent]Odłamek[] core. Żadna przeszkoda ani blok nie może stać na miejscu rdzenia. hint.coreUpgrade = Rdzenie mogą być ulepszone poprzez [accent]płożenie na nich rdzeń wyższego poziomu[].\n\nPołóż  rdzeń [accent]Fundacji[] na  rdzeń:[accent]Odłamek[] core. Żadna przeszkoda ani blok nie może stać na miejscu rdzenia.
hint.presetLaunch = Szare [accent]sektory[], takie jak [accent]Zamrożony Las[], to sektory do których możesz dotrzeć z każdego miejsca. Nie wymagają podbicia pobliskiego terenu.\n\n[accent]Ponumerowane sektory[], takie jak ten, [accent]są dodatkowe[]. hint.presetLaunch = Szare [accent]sektory[], takie jak [accent]Zamrożony Las[], to sektory do których możesz dotrzeć z każdego miejsca. Nie wymagają podbicia pobliskiego terenu.\n\n[accent]Ponumerowane sektory[], takie jak ten, [accent]są dodatkowe[].
hint.coreIncinerate = Jak rdzeń zostanie w pełni wypełniony danym przedmiotem, reszta przedmiotów tego typu zostanie [accent]spalona[]. hint.coreIncinerate = Jak rdzeń zostanie w pełni wypełniony danym przedmiotem, reszta przedmiotów tego typu zostanie [accent]spalona[].
hint.coopCampaign = Gdy grasz [accent]kooperacyjną kampanie[], przedmioty które są produkowane na mapie trafią także [accent]dotwoich lokalnych sektorów[].\n\nWszelkie nowe badania przeprowadzone przez hosta są również przenoszone. hint.coopCampaign = Gdy grasz [accent]kooperacyjną kampanię[], przedmioty które są produkowane na mapie trafią także [accent]do twoich lokalnych sektorów[].\n\nWszelkie nowe badania przeprowadzone przez hosta są również przenoszone.
item.copper.description = Przydatny materiał budowlany. Szeroko używany w prawie każdej konstrukcji. item.copper.description = Przydatny materiał budowlany. Szeroko używany w prawie każdej konstrukcji.
item.copper.details = Miedź. Nienormalnie obfity metal na Serpulo. Strukturalnie słaba, chyba że zostanie wzmocniona. item.copper.details = Miedź. Nienormalnie obfity metal na Serpulo. Strukturalnie słaba, chyba że zostanie wzmocniona.

View File

@@ -34,7 +34,7 @@ load.scripts = Scripts
be.update = Uma nova versão beta está disponível: be.update = Uma nova versão beta está disponível:
be.update.confirm = Baixar e reiniciar o jogo agora? be.update.confirm = Baixar e reiniciar o jogo agora?
be.updating = Atualizando... be.updating = Atualizando...
be.ignore = Ignore be.ignore = Ignorar
be.noupdates = Nenhuma atualização encontrada. be.noupdates = Nenhuma atualização encontrada.
be.check = Cheque por atualizações be.check = Cheque por atualizações
@@ -50,7 +50,7 @@ schematic.browseworkshop = Navegar pela oficina
schematic.copy = Copiar para a área de transferência schematic.copy = Copiar para a área de transferência
schematic.copy.import = Importar da área de transferência schematic.copy.import = Importar da área de transferência
schematic.shareworkshop = Compartilhar na Oficina schematic.shareworkshop = Compartilhar na Oficina
schematic.flip = [accent][[{0}][]/[accent][[{1}][]: Virar o Esquema schematic.flip = [accent][[{0}][]/[accent][[{1}][]: Virar o esquema
schematic.saved = Esquema salvo. schematic.saved = Esquema salvo.
schematic.delete.confirm = Esse esquema será apagado. Tem certeza? schematic.delete.confirm = Esse esquema será apagado. Tem certeza?
schematic.rename = Renomear esquema schematic.rename = Renomear esquema
@@ -71,7 +71,7 @@ map.delete = Certeza que quer deletar o mapa "[accent]{0}[]"?
level.highscore = Melhor\npontuação: [accent] {0} level.highscore = Melhor\npontuação: [accent] {0}
level.select = Seleção de fase level.select = Seleção de fase
level.mode = Modo de jogo: level.mode = Modo de jogo:
coreattack = < O núcleo está sobre ataque! > coreattack = < O núcleo está sob ataque! >
nearpoint = [[ [scarlet]SAIA DO PONTO DE SPAWN IMEDIATAMENTE[] ]\nANIQUILAÇÃO IMINENTE nearpoint = [[ [scarlet]SAIA DO PONTO DE SPAWN IMEDIATAMENTE[] ]\nANIQUILAÇÃO IMINENTE
database = Banco de dados database = Banco de dados
savegame = Salvar jogo savegame = Salvar jogo
@@ -100,7 +100,7 @@ committingchanges = Enviando mudanças
done = Feito done = Feito
feature.unsupported = Seu dispositivo não suporta essa função. feature.unsupported = Seu dispositivo não suporta essa função.
mods.alphainfo = Tenha em mente que os mods estão em alpha, e[scarlet] talvez eles contenham erros e instabilidades[].\nReporte quaisquer problemas no Discord ou GitHub do Mindustry. mods.alphainfo = Lembre-se que o sistema de mods está em alpha, e[scarlet] que eles talvez contenham erros e instabilidades[].\nReporte quaisquer problemas no Discord ou GitHub do Mindustry.
mods = Mods mods = Mods
mods.none = [lightgray]Nenhum mod encontrado! mods.none = [lightgray]Nenhum mod encontrado!
mods.guide = Guia de mods mods.guide = Guia de mods
@@ -133,7 +133,7 @@ mod.remove.confirm = Este mod será deletado.
mod.author = [lightgray]Autor:[] {0} mod.author = [lightgray]Autor:[] {0}
mod.missing = Esse jogo salvo foi criado antes de você atualizar ou desinstalar um mod. Pode ocorrer uma corrupção no salvamento. Você tem certeza que quer carregar?\n[lightgray]Mods:\n{0} mod.missing = Esse jogo salvo foi criado antes de você atualizar ou desinstalar um mod. Pode ocorrer uma corrupção no salvamento. Você tem certeza que quer carregar?\n[lightgray]Mods:\n{0}
mod.preview.missing = Antes de publicar esse mod na oficina, você deve adicionar uma imagem de pré-visualização.\nColoque uma imagem com o nome[accent] preview.png[] na pasta do mod e tente novamente. mod.preview.missing = Antes de publicar esse mod na oficina, você deve adicionar uma imagem de pré-visualização.\nColoque uma imagem com o nome[accent] preview.png[] na pasta do mod e tente novamente.
mod.folder.missing = Somente mods no formato de pasta serão publicados na oficina.\nPara converter qualquer Mod em uma pasta, Simplesmente descompacte seu arquivo numa pasta e delete a compactação antiga, então reinicie seu jogo ou recarregue os mods. mod.folder.missing = Somente mods no formato de pasta serão publicados na oficina.\nPara converter qualquer Mod em uma pasta, simplesmente descompacte seu arquivo numa pasta e delete o arquivo ZIP antigo, então reinicie seu jogo ou recarregue os mods.
mod.scripts.disable = Seu dispositivo não suporta mods com scripts. Você precisa desabilitar esses mods para conseguir jogar. mod.scripts.disable = Seu dispositivo não suporta mods com scripts. Você precisa desabilitar esses mods para conseguir jogar.
about.button = Sobre about.button = Sobre
@@ -168,11 +168,11 @@ server.kicked.nameInUse = Este nome já está sendo usado\nneste servidor.
server.kicked.nameEmpty = Você deve ter pelo menos uma letra ou número no nome. server.kicked.nameEmpty = Você deve ter pelo menos uma letra ou número no nome.
server.kicked.idInUse = Você ja está neste servidor! Conectar com duas contas não é permitido. server.kicked.idInUse = Você ja está neste servidor! Conectar com duas contas não é permitido.
server.kicked.customClient = Este servidor não suporta versões customizadas. Baixe a versão original. server.kicked.customClient = Este servidor não suporta versões customizadas. Baixe a versão original.
server.kicked.gameover = Fim de jogo! server.kicked.gameover = Fim do jogo!
server.kicked.serverRestarting = O servidor esta reiniciando. server.kicked.serverRestarting = O servidor esta reiniciando.
server.versions = Sua versão:[accent] {0}[]\nVersão do servidor:[accent] {1}[] server.versions = Sua versão:[accent] {0}[]\nVersão do servidor:[accent] {1}[]
host.info = O botão de [accent]Hospedar[] hospeda um servidor no Host[scarlet]6567[] e [scarlet]6568.[]\nQualquer um no [lightgray]Wi-fi ou internet local[] pode ver este servidor na lista de servidores.\n\nSe você quer poder entrar em qualquer servidor em seu ip, [accent]port forwarding[] é requerido.\n\n[lightgray]Nota: Se alguém esta com problemas em conectar no seu servidor lan, Tenha certeza que deixou mindustry Acessar sua internet local nas configurações de firewall host.info = O botão de [accent]Hospedar[] hospeda um servidor no Host[scarlet]6567[] e [scarlet]6568.[]\nQualquer um no [lightgray]Wi-fi ou internet local[] pode ver este servidor na lista de servidores.\n\nSe você quiser poder entrar em qualquer servidor em seu ip, [accent]port forwarding[] é necessário.\n\n[lightgray]Nota: Se alguém está com problemas em conectar no seu servidor lan, tenha certeza que mindustry tem acesso a sua internet local nas configurações do seu firewall
join.info = Aqui, você pode entar em um [accent]IP de servidor[] para conectar, ou descobrir [accent]servidores[] da rede local.\nAmbos os servidores LAN e WAN são suportados.\n\n[lightgray]Nota: Não há uma lista de servidores automáticos; Se você quer conectar ao IP de alguém, você precisa pedir o IP ao anfitrião. join.info = Aqui, você pode entar em um [accent]IP de servidor[] para conectar, ou descobrir [accent]servidores[] da rede local.\nAmbos os servidores LAN e WAN são suportados.\n\n[lightgray]Nota: Não há uma lista de servidores automáticos; Se você quiser se conectar ao IP de alguém, você precisa pedir o IP ao anfitrião.
hostserver = Hospedar servidor hostserver = Hospedar servidor
invitefriends = Convidar amigos invitefriends = Convidar amigos
hostserver.mobile = Hospedar\nJogo hostserver.mobile = Hospedar\nJogo
@@ -272,7 +272,7 @@ data.import = Importar dados
data.openfolder = Abrir pasta de dados data.openfolder = Abrir pasta de dados
data.exported = Dados exportados. data.exported = Dados exportados.
data.invalid = Estes dados de jogo não são válidos. data.invalid = Estes dados de jogo não são válidos.
data.import.confirm = Importar dados externos irá deletar[scarlet] todos[] os seus dados atuais.\n[accent]Isso não pode ser desfeito![]\n\nQuando sua data é importada, seu jogo ira sair imediatamente. data.import.confirm = Importar dados externos irá deletar[scarlet] todos[] os seus dados atuais.\n[accent]Isso não pode ser desfeito![]\n\nQuando seus dados serão importados, seu jogo irá sair imediatamente.
quit.confirm = Você tem certeza que quer sair? quit.confirm = Você tem certeza que quer sair?
quit.confirm.tutorial = Você tem certeza que você sabe o que você esta fazendo?\nO tutorial pode ser refeito nas [accent] Configurações->Jogo->Refazer Tutorial.[] quit.confirm.tutorial = Você tem certeza que você sabe o que você esta fazendo?\nO tutorial pode ser refeito nas [accent] Configurações->Jogo->Refazer Tutorial.[]
loading = [accent]Carregando... loading = [accent]Carregando...
@@ -298,7 +298,7 @@ saveimage = Salvar\nimagem
unknown = Desconhecido unknown = Desconhecido
custom = Customizado custom = Customizado
builtin = Padrão builtin = Padrão
map.delete.confirm = Certeza que quer deletar este mapa? Isto não pode ser desfeito! map.delete.confirm = Certeza que quer deletar este mapa? Isto não pode ser anulado!
map.random = [accent]Mapa aleatório map.random = [accent]Mapa aleatório
map.nospawn = Este mapa não possui nenhum núcleo para o jogador nascer! Adicione um núcleo[accent] amarelo[] para este mapa no editor. map.nospawn = Este mapa não possui nenhum núcleo para o jogador nascer! Adicione um núcleo[accent] amarelo[] para este mapa no editor.
map.nospawn.pvp = Esse mapa não tem núcleos inimigos para os jogadores nascerem! Adicione[scarlet] núcleos vermelhos[] no mapa no editor. map.nospawn.pvp = Esse mapa não tem núcleos inimigos para os jogadores nascerem! Adicione[scarlet] núcleos vermelhos[] no mapa no editor.
@@ -324,7 +324,7 @@ editor.oregen.info = Geração de minério:
editor.mapinfo = Informação do mapa editor.mapinfo = Informação do mapa
editor.author = Autor: editor.author = Autor:
editor.description = Descrição: editor.description = Descrição:
editor.nodescription = Um mapa deve ter uma descrição de no mínimo 4 caracteres antes de ser publicado. editor.nodescription = Um mapa deve ter uma descrição de ao mínimo 4 caracteres antes de ser publicado.
editor.waves = Hordas: editor.waves = Hordas:
editor.rules = Regras: editor.rules = Regras:
editor.generation = Geração: editor.generation = Geração:
@@ -341,7 +341,7 @@ waves.waves = Horda(s)
waves.perspawn = por spawn waves.perspawn = por spawn
waves.shields = Escudo/Horda waves.shields = Escudo/Horda
waves.to = para waves.to = para
waves.guardian = Guardian waves.guardian = Guardião
waves.preview = Pré-visualizar waves.preview = Pré-visualizar
waves.edit = Editar... waves.edit = Editar...
waves.copy = Copiar para área de transferência waves.copy = Copiar para área de transferência
@@ -419,9 +419,9 @@ toolmode.drawteams.description = Muda o time do qual o bloco pertence.
filters.empty = [lightgray]Sem filtro! Adicione um usando o botão abaixo. filters.empty = [lightgray]Sem filtro! Adicione um usando o botão abaixo.
filter.distort = Distorcedor filter.distort = Distorcedor
filter.noise = Geração aleatória filter.noise = Geração aleatória
filter.enemyspawn = Enemy Spawn Select filter.enemyspawn = Seleção de Spawn do Inimigo
filter.spawnpath = Path To Spawn filter.spawnpath = Caminho para o Spawn
filter.corespawn = Core Select filter.corespawn = Seleção de Núcleo
filter.median = Medio filter.median = Medio
filter.oremedian = Minério mediano filter.oremedian = Minério mediano
filter.blend = Misturar filter.blend = Misturar
@@ -475,18 +475,18 @@ locked = Trancado
complete = [lightgray]Completo: complete = [lightgray]Completo:
requirement.wave = Alcançar a Horda {0} em {1} requirement.wave = Alcançar a Horda {0} em {1}
requirement.core = Destruir o núcleo inimigo em {0} requirement.core = Destruir o núcleo inimigo em {0}
requirement.research = Research {0} requirement.research = Pesquise {0}
requirement.capture = Capture {0} requirement.capture = Capture {0}
bestwave = [lightgray]Melhor: {0} bestwave = [lightgray]Melhor: {0}
launch.text = Launch launch.text = Lançar
research.multiplayer = Only the host can research items. research.multiplayer = Apenas o host pode pesquisar itens.
uncover = Descobrir uncover = Descobrir
configure = Configurar carregamento configure = Configurar carregamento
loadout = Loadout loadout = Carregamento
resources = Resources resources = Recursos
bannedblocks = Blocos Banidos bannedblocks = Blocos Banidos
addall = Adicionar Todos addall = Adicionar Todos
launch.destination = Destination: {0} launch.destination = Destino: {0}
configure.invalid = A quantidade deve ser um número entre 0 e {0}. configure.invalid = A quantidade deve ser um número entre 0 e {0}.
zone.unlocked = [lightgray]{0} Desbloqueado. zone.unlocked = [lightgray]{0} Desbloqueado.
zone.requirement.complete = Horda {0} alcançada:\n{1} Requerimentos da zona alcançada. zone.requirement.complete = Horda {0} alcançada:\n{1} Requerimentos da zona alcançada.
@@ -500,7 +500,7 @@ boss.health = Vida do Chefão
connectfail = [crimson]Falha ao entrar no servidor: [accent]{0} connectfail = [crimson]Falha ao entrar no servidor: [accent]{0}
error.unreachable = Servidor fora de alcance. error.unreachable = Servidor fora de alcance.
error.invalidaddress = Endereço inválido. error.invalidaddress = Endereço inválido.
error.timedout = Desconectado!\nTenha certeza que o anfitrião tenha feito redirecionamento de portas e que o endereço esteja correto! error.timedout = Desconectado!\nTenha certeza que o anfitrião tenha feito o port forwarding e que o endereço esteja correto!
error.mismatch = Erro de pacote:\nPossivel incompatibilidade com a versão do cliente/servidor.\nTenha certeza que você e o anfitrião tenham a última versão! error.mismatch = Erro de pacote:\nPossivel incompatibilidade com a versão do cliente/servidor.\nTenha certeza que você e o anfitrião tenham a última versão!
error.alreadyconnected = Já conectado. error.alreadyconnected = Já conectado.
error.mapnotfound = Arquivo de mapa não encontrado! error.mapnotfound = Arquivo de mapa não encontrado!
@@ -508,49 +508,49 @@ error.io = Erro I/O de internet.
error.any = Erro de rede desconhecido. error.any = Erro de rede desconhecido.
error.bloom = Falha ao inicializar bloom.\nSeu dispositivo talvez não o suporte. error.bloom = Falha ao inicializar bloom.\nSeu dispositivo talvez não o suporte.
weather.rain.name = Rain weather.rain.name = Chuva
weather.snow.name = Snow weather.snow.name = Neve
weather.sandstorm.name = Sandstorm weather.sandstorm.name = Tempestade de Areia
weather.sporestorm.name = Sporestorm weather.sporestorm.name = Tempestade de Esporos
weather.fog.name = Fog weather.fog.name = Névoa
sectors.unexplored = [lightgray]Unexplored sectors.unexplored = [lightgray]Inexplorado
sectors.resources = Resources: sectors.resources = Recursos:
sectors.production = Production: sectors.production = Produção:
sectors.stored = Stored: sectors.stored = Armazenado:
sectors.resume = Resume sectors.resume = Continuar
sectors.launch = Launch sectors.launch = Lançar
sectors.select = Select sectors.select = Selecione
sectors.nonelaunch = [lightgray]none (sun) sectors.nonelaunch = [lightgray]nenhum (sun)
sectors.rename = Rename Sector sectors.rename = Renomear Setor
sector.missingresources = [scarlet]Insufficient Core Resources sector.missingresources = [scarlet]Recursos Insuficientes no Núcleo
planet.serpulo.name = Serpulo planet.serpulo.name = Serpulo
planet.sun.name = Sun planet.sun.name = Sol
sector.groundZero.name = Ground Zero sector.groundZero.name = Marco Zero
sector.craters.name = The Craters sector.craters.name = As Crateras
sector.frozenForest.name = Frozen Forest sector.frozenForest.name = Floresta Congelada
sector.ruinousShores.name = Ruinous Shores sector.ruinousShores.name = Costas Ruinosas
sector.stainedMountains.name = Stained Mountains sector.stainedMountains.name = Montanhas Manchadas
sector.desolateRift.name = Desolate Rift sector.desolateRift.name = Fenda Desolada
sector.nuclearComplex.name = Nuclear Production Complex sector.nuclearComplex.name = Complexo de Prodção Nuclear
sector.overgrowth.name = Overgrowth sector.overgrowth.name = Supercrescimento
sector.tarFields.name = Tar Fields sector.tarFields.name = Campos de Piche
sector.saltFlats.name = Salt Flats sector.saltFlats.name = Planícies de Sal
sector.fungalPass.name = Fungal Pass sector.fungalPass.name = Passagem Fúngica
sector.groundZero.description = The optimal location to begin once more. Low enemy threat. Few resources.\nGather as much lead and copper as possible.\nMove on. sector.groundZero.description = Um lugar bom para recomeçar. Baixa ameaça inimiga. Poucos recursos.\nConsiga o máximo possível de chumbo e cobre.\nContinue.
sector.frozenForest.description = Even here, closer to mountains, the spores have spread. The frigid temperatures cannot contain them forever.\n\nBegin the venture into power. Build combustion generators. Learn to use menders. sector.frozenForest.description = Mesmo aqui, perto das montanhas, os esporos se espalharam. As temperaturas baixas não conseguirão contê-los para sempre.\n\nComeçe a aventura com energia. Construa geradores a combustão. Aprenda a usar reparadores.
sector.saltFlats.description = On the outskirts of the desert lie the Salt Flats. Few resources can be found in this location.\n\nThe enemy has erected a resource storage complex here. Eradicate their core. Leave nothing standing. sector.saltFlats.description = Nos arredores do deserto ficam as planícies de sal. Muitos recursos podem ser encontrados nesse local.\n\nO inimigo construiu um complexo de armazenamento de recursos aqui. Destrua o núcleo deles. Não deixe nada sobrando.
sector.craters.description = Water has accumulated in this crater, relic of the old wars. Reclaim the area. Collect sand. Smelt metaglass. Pump water to cool turrets and drills. sector.craters.description = A água se acumulou nessa cratera, relíquias de guerras antigas. Re-conquiste a área. Colete areia. Faça metavidro. Use a água para melhorar suas brocas e torretas.
sector.ruinousShores.description = Past the wastes, is the shoreline. Once, this location housed a coastal defense array. Not much of it remains. Only the most basic defense structures have remained unscathed, everything else reduced to scrap.\nContinue the expansion outwards. Rediscover the technology. sector.ruinousShores.description = Passando o terreno desolado, está localizada a costa. Antigamente, este local abrigava uma rede de defesa costeira. Não restou muita coisa. Apenas as estruturas de defesas básicas permaneceram ilesas, o resto foi reduzido a sucata.\nContinue expandindo seus territórios, re-descubra a tecnologia.
sector.stainedMountains.description = Further inland lie the mountains, yet untainted by spores.\nExtract the abundant titanium in this area. Learn how to use it.\n\nThe enemy presence is greater here. Do not give them time to send their strongest units. sector.stainedMountains.description = Mais para o interior estão as montanhas, ainda não contaminadas pelos esporos.\nExtraia o titânio que é abundante nessa área. Aprenda a usá-lo.\n\nA presença inimiga é maior aqui. Não dê tempo a eles de trazerem fortes unidades.
sector.overgrowth.description = This area is overgrown, closer to the source of the spores.\nThe enemy has established an outpost here. Build Titan units. Destroy it. Reclaim that which was lost. sector.overgrowth.description = Essa área coberta por vegetação, próxima ao local de origem dos esporos.\nO inimigo estabeleceu um posto de controle aqui. Faça unidades Titan. Destrua eles. Recupere o que foi perdido.
sector.tarFields.description = The outskirts of an oil production zone, between the mountains and desert. One of the few areas with usable tar reserves.\nAlthough abandoned, this area has some dangerous enemy forces nearby. Do not underestimate them.\n\n[lightgray]Research oil processing technology if possible. sector.tarFields.description = Nos arredores de uma zone de produção de petróleo, entre as montanhas e o deserto. Uma das poucas áreas com reservas de piche utilizáveis.\nMesmo abandonada, essa área tem forças inimigas por perto. Não subestime-os.\n\n[lightgray]Pesquise a tecnologia de processamento de petróleo se possível.
sector.desolateRift.description = An extremely dangerous zone. Plentiful resources, but little space. High risk of destruction. Leave as soon as possible. Do not be fooled by the long spacing between enemy attacks. sector.desolateRift.description = Uma zona extremamente perigosa. Uma zona com recursos abundantes, mas pouco espaço. Grande risco de destruição. Saia o quanto antes. Não se deixe levar pelo tempo entre os ataques inimigos.
sector.nuclearComplex.description = A former facility for the production and processing of thorium, reduced to ruins.\n[lightgray]Research the thorium and its many uses.\n\nThe enemy is present here in great numbers, constantly scouting for attackers. sector.nuclearComplex.description = Uma antiga instalação de produção e processamento de tório, reduzida a ruínas.\n[lightgray]Pesquise sobre o tório e seu vários usos.\n\nO inimigo está presente aqui em grande número, constantemente procurando por atacantes.
sector.fungalPass.description = A transition area between high mountains and lower, spore-ridden lands. A small enemy reconnaissance base is located here.\nDestroy it.\nUse Dagger and Crawler units. Take out the two cores. sector.fungalPass.description = Uma área de transição entre altas montanhas e terras baixas, repletas de esporos. Uma pequena base de reconhecimento inimiga está aqui.\nDestrua o núcleo.
settings.language = Idioma settings.language = Idioma
settings.data = Dados do jogo settings.data = Dados do jogo
@@ -564,30 +564,30 @@ settings.graphics = Gráficos
settings.cleardata = Apagar dados settings.cleardata = Apagar dados
settings.clear.confirm = Certeza que quer limpar a os dados?\nOque é feito não pode ser desfeito! settings.clear.confirm = Certeza que quer limpar a os dados?\nOque é feito não pode ser desfeito!
settings.clearall.confirm = [scarlet]Aviso![]\nIsso vai limpar todo os arquivos, incluindo jogos salvos, mapas, teclas personalizadas e desbloqueados.\nQuando apertar 'ok' todos os arquivos serão apagados e o jogo irá sair automaticamente. settings.clearall.confirm = [scarlet]Aviso![]\nIsso vai limpar todo os arquivos, incluindo jogos salvos, mapas, teclas personalizadas e desbloqueados.\nQuando apertar 'ok' todos os arquivos serão apagados e o jogo irá sair automaticamente.
settings.clearsaves.confirm = Are you sure you want to clear all your saves? settings.clearsaves.confirm = Você tem certeza que quer apagar todos os seus saves?
settings.clearsaves = Clear Saves settings.clearsaves = Apagar Saves
settings.clearresearch = Clear Research settings.clearresearch = Apagar Pesquisas
settings.clearresearch.confirm = Are you sure you want to clear all of your campaign research? settings.clearresearch.confirm = Você tem certeza que quer apagar todas as suas pesquisas da campanha?
settings.clearcampaignsaves = Clear Campaign Saves settings.clearcampaignsaves = Apagar Saves da Campanha
settings.clearcampaignsaves.confirm = Are you sure you want to clear all of your campaign saves? settings.clearcampaignsaves.confirm = Você tem certeza que quer apagar todos os seus saves da campanha?
paused = Pausado paused = Pausado
clear = Limpo clear = Limpo
banned = [scarlet]BANIDO banned = [scarlet]BANIDO
unplaceable.sectorcaptured = [scarlet]Requires captured sector unplaceable.sectorcaptured = [scarlet]Requer captura de setor
yes = Sim yes = Sim
no = Não no = Não
info.title = [accent]Informação info.title = [accent]Informação
error.title = [crimson]Ocorreu um Erro. error.title = [crimson]Ocorreu um Erro.
error.crashtitle = Ocorreu um Erro error.crashtitle = Ocorreu um Erro
unit.nobuild = [scarlet]Unit can't build unit.nobuild = [scarlet]Unidades não podem construir
lastaccessed = [lightgray]Last Accessed: {0} lastaccessed = [lightgray]Último Acesso: {0}
block.unknown = [lightgray]??? block.unknown = [lightgray]???
stat.input = Entrada stat.input = Entrada
stat.output = Saída stat.output = Saída
stat.booster = Apoio stat.booster = Apoio
stat.tiles = Required Tiles stat.tiles = Required Tiles
stat.affinities = Affinities stat.affinities = Afinidades
stat.powercapacity = Capacidade de Energia stat.powercapacity = Capacidade de Energia
stat.powershot = Energia/tiro stat.powershot = Energia/tiro
stat.damage = Dano stat.damage = Dano
@@ -597,16 +597,16 @@ stat.itemsmoved = Velocidade de movimento
stat.launchtime = Tempo entre Disparos. stat.launchtime = Tempo entre Disparos.
stat.shootrange = Alcance stat.shootrange = Alcance
stat.size = Tamanho stat.size = Tamanho
stat.displaysize = Display Size stat.displaysize = Tamanho do Display
stat.liquidcapacity = Capacidade de Líquido stat.liquidcapacity = Capacidade de Líquido
stat.powerrange = Alcance da Energia stat.powerrange = Alcance da Energia
stat.linkrange = Link Range stat.linkrange = Alcance do Link
stat.instructions = Instructions stat.instructions = Instruções
stat.powerconnections = Conexões Máximas stat.powerconnections = Conexões Máximas
stat.poweruse = Uso de energia stat.poweruse = Uso de energia
stat.powerdamage = Dano/Poder stat.powerdamage = Dano / Poder
stat.itemcapacity = Capacidade de Itens stat.itemcapacity = Capacidade de Itens
stat.memorycapacity = Memory Capacity stat.memorycapacity = Capacidade de Memória
stat.basepowergeneration = Geração de poder base stat.basepowergeneration = Geração de poder base
stat.productiontime = Tempo de produção stat.productiontime = Tempo de produção
stat.repairtime = Tempo de reparo total do bloco stat.repairtime = Tempo de reparo total do bloco
@@ -624,34 +624,35 @@ stat.inaccuracy = Imprecisão
stat.shots = Tiros stat.shots = Tiros
stat.reload = Tempo de recarga stat.reload = Tempo de recarga
stat.ammo = Munição stat.ammo = Munição
stat.shieldhealth = Shield Health
stat.cooldowntime = Tempo de espera
stat.explosiveness = Explosiveness
stat.basedeflectchance = Base Deflect Chance
stat.lightningchance = Lightning Chance
stat.lightningdamage = Lightning Damage
stat.flammability = Flammability
stat.radioactivity = Radioactivity
stat.heatcapacity = HeatCapacity
stat.viscosity = Viscosity
stat.temperature = Temperature
stat.speed = Speed
stat.buildspeed = Build Speed
stat.minespeed = Mine Speed
stat.minetier = Mine Tier
stat.payloadcapacity = Payload Capacity
stat.commandlimit = Command Limit
stat.abilities = Abilities
ability.forcefield = Force Field stat.shieldhealth = Vida do Escudo
ability.repairfield = Repair Field stat.cooldowntime = Tempo de espera
stat.explosiveness = Explosividade
stat.basedeflectchance = Chance Base de Esquiva
stat.lightningchance = Lightning Chance
stat.lightningdamage = Dano por Raio
stat.flammability = Inflamabilidade
stat.radioactivity = Radioatividade
stat.heatcapacity = Capacidade de Aquecimento
stat.viscosity = Viscosidade
stat.temperature = Temperatura
stat.speed = Velocidade
stat.buildspeed = Velocidade de Construção
stat.minespeed = Velocidade de Mineração
stat.minetier = Nível de Mineração
stat.payloadcapacity = Capacidade de Carga
stat.commandlimit = Limite de Comando
stat.abilities = Habilidades
ability.forcefield = Campo de Força
ability.repairfield = Campo de Reparação
ability.statusfield = Status Field ability.statusfield = Status Field
ability.unitspawn = {0} Factory ability.unitspawn = {0} Fábrica
ability.shieldregenfield = Shield Regen Field ability.shieldregenfield = Raio de Regeneração do Escudo
bar.drilltierreq = Broca melhor necessária. bar.drilltierreq = Broca melhor necessária.
bar.noresources = Missing Resources bar.noresources = Recursos Insuficientes
bar.corereq = Core Base Required bar.corereq = Base do Núcleo Necessária
bar.drillspeed = Velocidade da Broca: {0}/s bar.drillspeed = Velocidade da Broca: {0}/s
bar.pumpspeed = Velocidade da Bomba: {0}/s bar.pumpspeed = Velocidade da Bomba: {0}/s
bar.efficiency = Eficiência: {0}% bar.efficiency = Eficiência: {0}%
@@ -659,7 +660,7 @@ bar.powerbalance = Energia: {0}
bar.powerstored = Armazenada: {0}/{1} bar.powerstored = Armazenada: {0}/{1}
bar.poweramount = Energia: {0} bar.poweramount = Energia: {0}
bar.poweroutput = Saída de energia: {0} bar.poweroutput = Saída de energia: {0}
bar.powerlines = Connections: {0}/{1} bar.powerlines = Conexões: {0}/{1}
bar.items = Itens: {0} bar.items = Itens: {0}
bar.capacity = Capacidade: {0} bar.capacity = Capacidade: {0}
bar.unitcap = {0} {1}/{2} bar.unitcap = {0} {1}/{2}
@@ -669,7 +670,7 @@ bar.heat = Aquecer
bar.power = Poder bar.power = Poder
bar.progress = Progresso da construção bar.progress = Progresso da construção
bar.input = Entrada bar.input = Entrada
bar.output = Sainda bar.output = Saída
units.processorcontrol = [lightgray]Processor Controlled units.processorcontrol = [lightgray]Processor Controlled
@@ -680,15 +681,15 @@ bullet.homing = [stat]Guiado
bullet.shock = [stat]Choque bullet.shock = [stat]Choque
bullet.frag = [stat]Fragmentação bullet.frag = [stat]Fragmentação
bullet.knockback = [stat]{0}[lightgray]Impulso bullet.knockback = [stat]{0}[lightgray]Impulso
bullet.pierce = [stat]{0}[lightgray]x pierce bullet.pierce = [stat]{0}[lightgray]x perfuração
bullet.infinitepierce = [stat]pierce bullet.infinitepierce = [stat]perfuração
bullet.freezing = [stat]Congelamento bullet.freezing = [stat]Congelamento
bullet.tarred = [stat]Grudento bullet.tarred = [stat]Grudento
bullet.multiplier = [stat]{0}[lightgray]x multiplicador de munição bullet.multiplier = [stat]{0}[lightgray]x multiplicador de munição
bullet.reload = [stat]{0}[lightgray]x cadência de tiro bullet.reload = [stat]{0}[lightgray]x cadência de tiro
unit.blocks = Blocos unit.blocks = Blocos
unit.blockssquared = block unit.blockssquared = Bloco
unit.powersecond = unidades de energia por segundo unit.powersecond = unidades de energia por segundo
unit.liquidsecond = líquido segundo unit.liquidsecond = líquido segundo
unit.itemssecond = itens por segundo unit.itemssecond = itens por segundo
@@ -701,7 +702,7 @@ unit.persecond = por segundo
unit.perminute = /min unit.perminute = /min
unit.timesspeed = x Velocidade unit.timesspeed = x Velocidade
unit.percent = % unit.percent = %
unit.shieldhealth = shield health unit.shieldhealth = Saúde do escudo
unit.items = itens unit.items = itens
unit.thousands = k unit.thousands = k
unit.millions = m unit.millions = m
@@ -711,19 +712,19 @@ category.power = Energia
category.liquids = Líquidos category.liquids = Líquidos
category.items = Itens category.items = Itens
category.crafting = Entrada/Saída category.crafting = Entrada/Saída
category.function = Function category.function = Função
category.optional = Melhoras opcionais category.optional = Melhoras opcionais
setting.landscape.name = Travar panorama setting.landscape.name = Travar panorama
setting.shadows.name = Sombras setting.shadows.name = Sombras
setting.blockreplace.name = Sugestões automáticas de blocos setting.blockreplace.name = Sugestões automáticas de blocos
setting.linear.name = Filtragem linear setting.linear.name = Filtragem linear
setting.hints.name = Dicas setting.hints.name = Dicas
setting.flow.name = Display Resource Flow Rate[scarlet] (experimental) setting.flow.name = Mostrar Fluxo de Recursos[scarlet] (experimental)
setting.buildautopause.name = Pausar construções automaticamente setting.buildautopause.name = Pausar construções automaticamente
setting.animatedwater.name = Água animada setting.animatedwater.name = Água animada
setting.animatedshields.name = Escudos animados setting.animatedshields.name = Escudos animados
setting.antialias.name = Filtro suavizante[lightgray] (reinicialização requerida)[] setting.antialias.name = Filtro suavizante[lightgray] (reinicialização requerida)[]
setting.playerindicators.name = Player Indicators setting.playerindicators.name = Indicador de Jogadores
setting.indicators.name = Indicador de aliados/inimigos setting.indicators.name = Indicador de aliados/inimigos
setting.autotarget.name = Alvo automatico setting.autotarget.name = Alvo automatico
setting.keyboard.name = Controles de mouse e teclado setting.keyboard.name = Controles de mouse e teclado
@@ -756,7 +757,7 @@ setting.smoothcamera.name = Suavizar movimentos da câmera
setting.vsync.name = VSync setting.vsync.name = VSync
setting.pixelate.name = Pixelizado [lightgray](Pode diminuir a performace) setting.pixelate.name = Pixelizado [lightgray](Pode diminuir a performace)
setting.minimap.name = Mostrar minimapa setting.minimap.name = Mostrar minimapa
setting.coreitems.name = Display Core Items (WIP) setting.coreitems.name = Mostrar Itens no Núcleo (WIP)
setting.position.name = Mostrar a posição do Jogador setting.position.name = Mostrar a posição do Jogador
setting.musicvol.name = Volume da Música setting.musicvol.name = Volume da Música
setting.atmosphere.name = Mostrar a atmosfera do planeta setting.atmosphere.name = Mostrar a atmosfera do planeta
@@ -767,18 +768,18 @@ setting.mutesound.name = Desligar Som
setting.crashreport.name = Enviar denúncias anônimas de erros setting.crashreport.name = Enviar denúncias anônimas de erros
setting.savecreate.name = Criar salvamentos automaticamente setting.savecreate.name = Criar salvamentos automaticamente
setting.publichost.name = Visibilidade do jogo público setting.publichost.name = Visibilidade do jogo público
setting.playerlimit.name = Player Limit setting.playerlimit.name = Limites de Player
setting.chatopacity.name = Opacidade do chat setting.chatopacity.name = Opacidade do chat
setting.lasersopacity.name = Opacidade do laser setting.lasersopacity.name = Opacidade do laser
setting.bridgeopacity.name = Opacidade da ponte setting.bridgeopacity.name = Opacidade da ponte
setting.playerchat.name = Mostrar chat em jogo setting.playerchat.name = Mostrar chat em jogo
public.confirm = Você quer fazer sua partida pública?\n[accent]Qualquer um será capaz de entrar na sua partida.\n[lightgray]Isso pode ser mudado depois em Configurações->Jogo->Visibilidade da partida pública. public.confirm = Você quer fazer sua partida pública?\n[accent]Qualquer um será capaz de entrar na sua partida.\n[lightgray]Isso pode ser mudado depois em Configurações->Jogo->Visibilidade da partida pública.
public.beta = Note que as versões beta do jogo não podem fazer salas publicas. public.beta = Note que as versões beta do jogo não podem fazer salas públicas.
uiscale.reset = A escala da interface foi mudada.\nPressione "OK" para confirmar esta escala.\n[scarlet]Revertendo e saindo em[accent] {0}[] segundos... uiscale.reset = A escala da interface foi mudada.\nPressione "OK" para confirmar esta escala.\n[scarlet]Revertendo e saindo em[accent] {0}[] segundos...
uiscale.cancel = Cancelar e sair uiscale.cancel = Cancelar e sair
setting.bloom.name = Bloom setting.bloom.name = Bloom
keybind.title = Refazer teclas keybind.title = Refazer teclas
keybinds.mobile = [scarlet]A maior parte das teclas aqui não são funcionais em dispositivos móveis. Apenas movimento básico é suportado. keybinds.mobile = [scarlet]A maior parte das teclas aqui não são funcionais em dispositivos móveis. É unicamente suportado movimento básico.
category.general.name = Geral category.general.name = Geral
category.view.name = Ver category.view.name = Ver
category.multiplayer.name = Multijogador category.multiplayer.name = Multijogador
@@ -786,7 +787,7 @@ category.blocks.name = Selecionar bloco
command.attack = Atacar command.attack = Atacar
command.rally = Reunir command.rally = Reunir
command.retreat = Recuar command.retreat = Recuar
command.idle = Ausente command.idle = Parado
placement.blockselectkeys = \n[lightgray]Tecla: [{0}, placement.blockselectkeys = \n[lightgray]Tecla: [{0},
keybind.respawn.name = Reaparecer keybind.respawn.name = Reaparecer
keybind.control.name = Controlar unidade keybind.control.name = Controlar unidade
@@ -795,7 +796,7 @@ keybind.press = Pressione uma tecla...
keybind.press.axis = Pressione um eixo ou tecla... keybind.press.axis = Pressione um eixo ou tecla...
keybind.screenshot.name = Captura do mapa keybind.screenshot.name = Captura do mapa
keybind.toggle_power_lines.name = Mudar lasers keybind.toggle_power_lines.name = Mudar lasers
keybind.toggle_block_status.name = Mostrar a propriedade dos blocos keybind.toggle_block_status.name = Mostrar as propriedades dos blocos
keybind.move_x.name = Mover no eixo x keybind.move_x.name = Mover no eixo x
keybind.move_y.name = Mover no eixo Y keybind.move_y.name = Mover no eixo Y
keybind.mouse_move.name = Seguir o Cursor keybind.mouse_move.name = Seguir o Cursor
@@ -854,25 +855,25 @@ mode.sandbox.name = Criativo
mode.sandbox.description = Recursos infinitos e sem tempo para ataques. mode.sandbox.description = Recursos infinitos e sem tempo para ataques.
mode.editor.name = Editor mode.editor.name = Editor
mode.pvp.name = JxJ mode.pvp.name = JxJ
mode.pvp.description = Lutar contra outros jogadores locais. mode.pvp.description = Luta contra outros jogadores locais.
mode.attack.name = Ataque mode.attack.name = Ataque
mode.attack.description = Sem hordas, com o objetivo de destruir a base inimiga. mode.attack.description = Sem hordas, com o objetivo de destruir a base inimiga.
mode.custom = Regras personalizadas mode.custom = Regras personalizadas
rules.infiniteresources = Recursos infinitos rules.infiniteresources = Recursos infinitos
rules.reactorexplosions = Reatores explodem rules.reactorexplosions = Reatores explodem
rules.schematic = Schematics Allowed rules.schematic = Permitir Esquemas
rules.wavetimer = Tempo de horda rules.wavetimer = Tempo de horda
rules.waves = Hordas rules.waves = Hordas
rules.attack = Modo de ataque rules.attack = Modo de ataque
rules.buildai = Habilitar construção da IA rules.buildai = Habilitar construção da IA
rules.enemyCheat = Recursos de IA Infinitos rules.enemyCheat = Recursos de IA Infinitos
rules.blockhealthmultiplier = Multiplicador de vida do bloco rules.blockhealthmultiplier = Multiplicador de vida do bloco
rules.blockdamagemultiplier = Block Damage Multiplier rules.blockdamagemultiplier = Multiplicador de dano do bloco
rules.unitbuildspeedmultiplier = Multiplicador de velocidade de criação de unidade rules.unitbuildspeedmultiplier = Multiplicador de velocidade de criação de unidade
rules.unithealthmultiplier = Multiplicador de vida de unidade rules.unithealthmultiplier = Multiplicador de vida de unidade
rules.unitdamagemultiplier = Multiplicador de dano de Unidade rules.unitdamagemultiplier = Multiplicador de dano de Unidade
rules.enemycorebuildradius = Raio de "Não-criação" de core inimigo:[lightgray] (blocos) rules.enemycorebuildradius = Raio de "não-criação" de core inimigo:[lightgray] (blocos)
rules.wavespacing = Espaço de tempo entre hordas:[lightgray] (seg) rules.wavespacing = Espaço de tempo entre hordas:[lightgray] (seg)
rules.buildcostmultiplier = Multiplicador de custo de construção rules.buildcostmultiplier = Multiplicador de custo de construção
rules.buildspeedmultiplier = Multiplicador de velocidade de construção rules.buildspeedmultiplier = Multiplicador de velocidade de construção
@@ -887,7 +888,7 @@ rules.title.unit = Unidades
rules.title.experimental = Experimental rules.title.experimental = Experimental
rules.title.environment = Ambiente rules.title.environment = Ambiente
rules.lighting = Iluminação rules.lighting = Iluminação
rules.enemyLights = Enemy Lights rules.enemyLights = Iluminação Inimiga
rules.fire = Fogo rules.fire = Fogo
rules.explosions = Dano de explosão de unidades/blocos rules.explosions = Dano de explosão de unidades/blocos
rules.ambientlight = Luz ambiente rules.ambientlight = Luz ambiente
@@ -906,13 +907,13 @@ item.coal.name = Carvão
item.graphite.name = Grafite item.graphite.name = Grafite
item.titanium.name = Titânio item.titanium.name = Titânio
item.thorium.name = Tório item.thorium.name = Tório
item.silicon.name = licio item.silicon.name = Silício
item.plastanium.name = Plastânio item.plastanium.name = Plastânio
item.phase-fabric.name = Tecido de fase item.phase-fabric.name = Tecido de fase
item.surge-alloy.name = Liga de surto item.surge-alloy.name = Liga de súrgio
item.spore-pod.name = Cápsula de esporos item.spore-pod.name = Pedaço de esporo
item.sand.name = Areia item.sand.name = Areia
item.blast-compound.name = Composto de explosão item.blast-compound.name = Composto Explosivo
item.pyratite.name = Piratita item.pyratite.name = Piratita
item.metaglass.name = Metavidro item.metaglass.name = Metavidro
item.scrap.name = Sucata item.scrap.name = Sucata
@@ -934,7 +935,7 @@ unit.arkyid.name = Arkyid
unit.toxopid.name = Toxopid unit.toxopid.name = Toxopid
unit.flare.name = Flare unit.flare.name = Flare
unit.horizon.name = Horizon unit.horizon.name = Horizon
unit.zenith.name = Zenith unit.zenith.name = Zênite
unit.antumbra.name = Antumbra unit.antumbra.name = Antumbra
unit.eclipse.name = Eclipse unit.eclipse.name = Eclipse
unit.mono.name = Mono unit.mono.name = Mono
@@ -950,7 +951,7 @@ unit.omura.name = Omura
unit.alpha.name = Alpha unit.alpha.name = Alpha
unit.beta.name = Beta unit.beta.name = Beta
unit.gamma.name = Gamma unit.gamma.name = Gamma
unit.scepter.name = Scepter unit.scepter.name = Sceptro
unit.reign.name = Reign unit.reign.name = Reign
unit.vela.name = Vela unit.vela.name = Vela
unit.corvus.name = Corvus unit.corvus.name = Corvus
@@ -963,12 +964,12 @@ block.grass.name = Grama
block.slag.name = Escória block.slag.name = Escória
block.space.name = Space block.space.name = Space
block.salt.name = Sal block.salt.name = Sal
block.salt-wall.name = Parede de Sal block.salt-wall.name = Parede de sal
block.pebbles.name = Pedrinhas block.pebbles.name = Pedrinhas
block.tendrils.name = Gavinhas block.tendrils.name = Gavinhas
block.sand-wall.name = Sand Wall block.sand-wall.name = Muro de Areia
block.spore-pine.name = Pinheiro de esporo block.spore-pine.name = Pinheiro de esporo
block.spore-wall.name = Spore Wall block.spore-wall.name = Muro de Esporos
block.boulder.name = Rochedo block.boulder.name = Rochedo
block.snow-boulder.name = Monte de neve block.snow-boulder.name = Monte de neve
block.snow-pine.name = Pinheiro com neve block.snow-pine.name = Pinheiro com neve
@@ -993,8 +994,8 @@ block.core-foundation.name = Fundação do núcleo
block.core-nucleus.name = Centro do núcleo block.core-nucleus.name = Centro do núcleo
block.deepwater.name = Água profunda block.deepwater.name = Água profunda
block.water.name = Água block.water.name = Água
block.tainted-water.name = Água contaminada block.tainted-water.name = Água tinta
block.darksand-tainted-water.name = Água contaminada sobre areia escura block.darksand-tainted-water.name = Água tinta sobre areia escura
block.tar.name = Piche block.tar.name = Piche
block.stone.name = Pedra block.stone.name = Pedra
block.sand.name = Areia block.sand.name = Areia
@@ -1064,10 +1065,10 @@ block.sorter.name = Ordenador
block.inverted-sorter.name = Ordenador invertido block.inverted-sorter.name = Ordenador invertido
block.message.name = Mensagem block.message.name = Mensagem
block.illuminator.name = Iluminador block.illuminator.name = Iluminador
block.illuminator.description = Uma pequena, compacta e configurável fonte de luz. Precisa de energia para funcionar. block.illuminator.description = Uma fonte de luz pequena, configurável e compacta. Precisa de energia para funcionar.
block.overflow-gate.name = Portão de Fluxo block.overflow-gate.name = Portão de Fluxo
block.underflow-gate.name = Portão de Fluxo invertido block.underflow-gate.name = Portão de Fluxo invertido
block.silicon-smelter.name = Fundidora de silicio block.silicon-smelter.name = Fundidora de silício
block.phase-weaver.name = Palheta de fase block.phase-weaver.name = Palheta de fase
block.pulverizer.name = Pulverizador block.pulverizer.name = Pulverizador
block.cryofluid-mixer.name = Misturador de Crio Fluido block.cryofluid-mixer.name = Misturador de Crio Fluido
@@ -1075,10 +1076,10 @@ block.melter.name = Aparelho de fusão
block.incinerator.name = Incinerador block.incinerator.name = Incinerador
block.spore-press.name = Prensa de Esporo block.spore-press.name = Prensa de Esporo
block.separator.name = Separador block.separator.name = Separador
block.coal-centrifuge.name = Centrífuga de Carvão block.coal-centrifuge.name = Centrífugador de Carvão
block.power-node.name = Célula de energia block.power-node.name = Célula de energia
block.power-node-large.name = Célula de energia grande block.power-node-large.name = Célula de energia grande
block.surge-tower.name = Torre de surto block.surge-tower.name = Torre de súrgio
block.diode.name = Diodo block.diode.name = Diodo
block.battery.name = Bateria block.battery.name = Bateria
block.battery-large.name = Bateria grande block.battery-large.name = Bateria grande
@@ -1105,7 +1106,7 @@ block.wave.name = Onda
block.tsunami.name = Tsunami block.tsunami.name = Tsunami
block.swarmer.name = Enxame block.swarmer.name = Enxame
block.salvo.name = Salvo block.salvo.name = Salvo
block.ripple.name = Morteiro block.ripple.name = Ondulação
block.phase-conveyor.name = Transportador de Fase block.phase-conveyor.name = Transportador de Fase
block.bridge-conveyor.name = Esteira-Ponte block.bridge-conveyor.name = Esteira-Ponte
block.plastanium-compressor.name = Compressor de Plastânio block.plastanium-compressor.name = Compressor de Plastânio
@@ -1143,7 +1144,7 @@ block.rtg-generator.name = Gerador GTR
block.spectre.name = Espectro block.spectre.name = Espectro
block.meltdown.name = Fusão block.meltdown.name = Fusão
block.foreshadow.name = Foreshadow block.foreshadow.name = Foreshadow
block.container.name = Contâiner block.container.name = Contêiner
block.launch-pad.name = Plataforma de lançamento block.launch-pad.name = Plataforma de lançamento
block.launch-pad-large.name = Plataforma de lançamento grande block.launch-pad-large.name = Plataforma de lançamento grande
block.segment.name = Segmento block.segment.name = Segmento
@@ -1168,7 +1169,7 @@ block.hyper-processor.name = Hiper Processador
block.logic-display.name = Monitor Lógico block.logic-display.name = Monitor Lógico
block.large-logic-display.name = Monitor lógico grande block.large-logic-display.name = Monitor lógico grande
block.memory-cell.name = Célula de Memória block.memory-cell.name = Célula de Memória
block.memory-bank.name = Memory Bank block.memory-bank.name = Banco de Memória
team.blue.name = Azul team.blue.name = Azul
team.crux.name = Vermelho team.crux.name = Vermelho
@@ -1198,7 +1199,7 @@ tutorial.withdraw = Em algumas situações é necessário pegar itens diretament
tutorial.deposit = Deposite itens em blocos arrastando da sua nave até o bloco.\n\n[accent]Deposite seu cobre de volta no núcleo.[] tutorial.deposit = Deposite itens em blocos arrastando da sua nave até o bloco.\n\n[accent]Deposite seu cobre de volta no núcleo.[]
tutorial.waves = O[lightgray] inimigo[] se aproxima.\n\nDefenda seu núcleo por 2 hordas. Construa mais torretas. tutorial.waves = O[lightgray] inimigo[] se aproxima.\n\nDefenda seu núcleo por 2 hordas. Construa mais torretas.
tutorial.waves.mobile = O[lightgray] inimigo[] se aproxima.\n\nDefenda seu núcleo por 2 hordas. Seu drone vai atirar nos inimigos automaticamente.\nConstrua mais torretas e brocas. Minere mais cobre. tutorial.waves.mobile = O[lightgray] inimigo[] se aproxima.\n\nDefenda seu núcleo por 2 hordas. Seu drone vai atirar nos inimigos automaticamente.\nConstrua mais torretas e brocas. Minere mais cobre.
tutorial.launch = Quando você atinge uma horda específica, Você é capaz de[accent] lançar o núcleo[], deixando suas defesas para trás e[accent] obtendo todos os recursos em seu núcleo.[]\nEstes recursos podem ser usados para pesquisar novas tecnologias.\n\n[accent]Pressione o botão lançar. tutorial.launch = Quando você atinge uma horda específica, você é capaz de[accent] lançar o núcleo[], deixando suas defesas para trás e[accent] obtendo todos os recursos em seu núcleo.[]\nEstes recursos podem ser usados para pesquisar novas tecnologias.\n\n[accent]Pressione o botão lançar.
item.copper.description = O material mais básico. Usado em todos os tipos de blocos. item.copper.description = O material mais básico. Usado em todos os tipos de blocos.
item.lead.description = Material de começo basico. usado extensivamente em blocos de transporte de líquidos e eletrônicos. item.lead.description = Material de começo basico. usado extensivamente em blocos de transporte de líquidos e eletrônicos.
@@ -1221,14 +1222,14 @@ liquid.slag.description = Vários metais derretidos misturados juntos. Pode ser
liquid.oil.description = Um líquido usado na produção de materias avançados. Pode ser convertido em carvão como combustível, ou pulverizado e incendiado como arma. liquid.oil.description = Um líquido usado na produção de materias avançados. Pode ser convertido em carvão como combustível, ou pulverizado e incendiado como arma.
liquid.cryofluid.description = A maneira mais eficiente de resfriar qualquer coisa, até seu corpo quando está calor, mas não faça isto. liquid.cryofluid.description = A maneira mais eficiente de resfriar qualquer coisa, até seu corpo quando está calor, mas não faça isto.
block.message.description = Armazena uma mensagem. Usado para comunicação entre aliados. block.message.description = Mostra uma mensagem. Usado para comunicação entre aliados.
block.graphite-press.description = Comprime pedaços de carvão em lâminas de grafite puro. block.graphite-press.description = Comprime pedaços de carvão em lâminas de grafite puro.
block.multi-press.description = Uma versão melhorada da prensa de grafite. Usa água e energia para processar carvão rápida e eficientemente. block.multi-press.description = Uma versão melhorada da prensa de grafite. Usa água e energia para processar carvão rápida e eficientemente.
block.silicon-smelter.description = Reduz areia a silicio usando carvão puro. Produz silício. block.silicon-smelter.description = Reduz areia a silício usando carvão puro. Produz silício.
block.kiln.description = Derrete chumbo e areia no composto conhecido como metavidro. Requer pequenas quantidades de energia. block.kiln.description = Derrete chumbo e areia no composto conhecido como metavidro. Requer pequenas quantidades de energia.
block.plastanium-compressor.description = Produz plastânio usando petróleo e titânio. block.plastanium-compressor.description = Produz plastânio usando petróleo e titânio.
block.phase-weaver.description = Produz tecido de fase usando tório radioativo e areia. Requer massivas quantidades de energia para funcionar. block.phase-weaver.description = Produz tecido de fase usando tório radioativo e areia. Requer massivas quantidades de energia para funcionar.
block.alloy-smelter.description = Combina titânio, chumbo, silicio e cobre para produzir liga de surto. block.alloy-smelter.description = Combina titânio, chumbo, silício e cobre para produzir liga de surto.
block.cryofluid-mixer.description = Mistura água e pó fino de titânio para produzir criofluido. Essencial para o uso do reator a tório. block.cryofluid-mixer.description = Mistura água e pó fino de titânio para produzir criofluido. Essencial para o uso do reator a tório.
block.blast-mixer.description = Quebra e mistura aglomerados de esporos com piratita para produzir composto de explosão. block.blast-mixer.description = Quebra e mistura aglomerados de esporos com piratita para produzir composto de explosão.
block.pyratite-mixer.description = Mistura carvão, chumbo e areia em piratita altamente inflamável. block.pyratite-mixer.description = Mistura carvão, chumbo e areia em piratita altamente inflamável.
@@ -1238,14 +1239,14 @@ block.spore-press.description = Comprime cápsulas de esporos em petróleo.
block.pulverizer.description = Esmaga sucata em areia. Util quando esta em falta de areia natural. block.pulverizer.description = Esmaga sucata em areia. Util quando esta em falta de areia natural.
block.coal-centrifuge.description = Solidifica petróleo em carvão. block.coal-centrifuge.description = Solidifica petróleo em carvão.
block.incinerator.description = Se livra de itens em excesso ou liquidos. block.incinerator.description = Se livra de itens em excesso ou liquidos.
block.power-void.description = Destroi qualquer energia que entre dentro. Apenas caixa de areia. block.power-void.description = Destroi qualquer energia que entra dentro. Apenas no modo sandbox.
block.power-source.description = Infinitivamente da energia. Apenas caixa de areia. block.power-source.description = Infinitivamente da energia. Apenas no modo sandbox.
block.item-source.description = Infinivamente da itens. Apenas caixa de areia. block.item-source.description = Infinitamente dá itens. Apenas caixa de areia.
block.item-void.description = Destroi qualquer item que entre sem requerir energia. Apenas caixa de areia. block.item-void.description = Destroi qualquer item que entre sem requerir energia. Apenas no modo sandbox.
block.liquid-source.description = Infinitivamente da Liquidos. Apenas caixa de areia. block.liquid-source.description = Infinitivamente dá Liquidos. Apenas no modo sanbox.
block.liquid-void.description = Remove todos os líquidos. Apenas sandbox. block.liquid-void.description = Destroi qualquer líquidos que entrar dentro. Apenas no modo sandbox.
block.copper-wall.description = Um bloco defensivo e barato.\nUtil para proteger o núcleo e torretas no começo. block.copper-wall.description = Um bloco defensivo barato.\nUtil para proteger o núcleo e torretas no começo.
block.copper-wall-large.description = Um bloco defensivo e barato.\nUtil para proteger o núcleo e torretas no começo.\nOcupa múltiplos blocos. block.copper-wall-large.description = Um bloco defensivo barato.\nUtil para proteger o núcleo e torretas no começo.\nOcupa múltiplos blocos.
block.titanium-wall.description = Um bloco defensivo moderadamente forte.\nProvidencia defesa moderada contra inimigos. block.titanium-wall.description = Um bloco defensivo moderadamente forte.\nProvidencia defesa moderada contra inimigos.
block.titanium-wall-large.description = Um bloco defensivo moderadamente forte.\nProvidencia defesa moderada contra inimigos.\nOcupa múltiplos blocos. block.titanium-wall-large.description = Um bloco defensivo moderadamente forte.\nProvidencia defesa moderada contra inimigos.\nOcupa múltiplos blocos.
block.plastanium-wall.description = Um tipo especial de muro que absorve arcos elétricos e bloqueia conexões automáticas de células de energia. block.plastanium-wall.description = Um tipo especial de muro que absorve arcos elétricos e bloqueia conexões automáticas de células de energia.
@@ -1253,30 +1254,30 @@ block.plastanium-wall-large.description = Um tipo especial de muro que absorve a
block.thorium-wall.description = Um bloco defensivo forte.\nBoa proteção contra inimigos. block.thorium-wall.description = Um bloco defensivo forte.\nBoa proteção contra inimigos.
block.thorium-wall-large.description = Um bloco defensivo forte.\nBoa proteção contra inimigos.\nOcupa múltiplos blocos. block.thorium-wall-large.description = Um bloco defensivo forte.\nBoa proteção contra inimigos.\nOcupa múltiplos blocos.
block.phase-wall.description = Um muro revestido com um composto especial baseado em tecido de fase. Desvia a maioria das balas no impacto. block.phase-wall.description = Um muro revestido com um composto especial baseado em tecido de fase. Desvia a maioria das balas no impacto.
block.phase-wall-large.description = Um muro revestido com um composto especial baseado em tecido de fase. Desvia a maioria das balas no impacto.\nOcupa múltiplos blocos. block.phase-wall-large.description = Um muro revestido com um composto especial baseado em tecido de fase. Desvia a maioria das balas ao impacto.\nOcupa múltiplos blocos.
block.surge-wall.description = Um bloco defensivo extremamente durável.\nSe carrega com eletricidade no contato com as balas, soltando-s aleatoriamente. block.surge-wall.description = Um bloco defensivo extremamente durável.\nSe carrega com eletricidade no contato com as balas, soltando-as aleatoriamente.
block.surge-wall-large.description = Um bloco defensivo extremamente durável.\nSe carrega com eletricidade no contato com as balas, soltando-s aleatoriamente.\nOcupa multiplos blocos. block.surge-wall-large.description = Um bloco defensivo extremamente durável.\nSe carrega com eletricidade no contato com as balas, soltando-as aleatoriamente.\nOcupa multiplos blocos.
block.door.description = Uma pequeda porta. Pode ser aberta e fechada ao tocar. block.door.description = Uma pequeda porta. Pode ser aberta e fechada ao tocar.
block.door-large.description = Uma grande porta. Pode ser aberta e fechada ao tocar.\nOcupa múltiplos blocos. block.door-large.description = Uma grande porta. Pode ser aberta e fechada ao tocar.\nOcupa múltiplos blocos.
block.mender.description = Periodicamente repara blocos vizinhos. Mantem as defesas reparadas em e entre ondas.\nPode usar silício para aumentar o alcance e a eficiência. block.mender.description = Periodicamente repara blocos vizinhos. Mantem as defesas reparadas em e entre ondas.\nPode usar silício para aumentar o alcance e a eficácia.
block.mend-projector.description = Uma versão melhorada do reparador. Repara blocos vizinhos.\nPode usar tecido de fase para aumentar o alcance e a eficiência. block.mend-projector.description = Uma versão melhorada do reparador. Repara blocos vizinhos.\nPode usar tecido de fase para aumentar o alcance e a eficácia.
block.overdrive-projector.description = Aumenta a velocidade de construções vizinhas.\nPode usar tecido de fase para aumentar o alcance e a eficiência. block.overdrive-projector.description = Aumenta a velocidade de construções vizinhas.\nPode usar tecido de fase para aumentar o alcance e a eficácia.
block.force-projector.description = Cria um campo de força hexagonal ao redor de si, protegendo construções e unidades.\nSuperaquece se suportar muito dano. Pode usar líquidos para evitar superaquecimento. Pode-se usar tecido de fase para aumentar o tamanho do escudo. block.force-projector.description = Cria um campo de força hexagonal ao redor de si, protegendo construções e unidades.\nAquece demais se o escudo tomar dano. Pode usar líquidos para evitar superaquecimento. Pode-se usar tecido de fase para aumentar o tamanho do escudo.
block.shock-mine.description = Danifica inimigos em cima da mina. Quase invisivel ao inimigo. block.shock-mine.description = Danifica inimigos em cima da mina. Quase invisivel ao inimigo.
block.conveyor.description = Bloco de transporte de item basico. Move os itens a frente e os deposita automaticamente em torretas ou construtores. Rotacionável. block.conveyor.description = Bloco de transporte de item basico. Move os itens a frente e os deposita automaticamente em torretas ou construtores. Rotacionável.
block.titanium-conveyor.description = Bloco de transporte de item avançado. Move itens mais rapidos que esteiras padrões. block.titanium-conveyor.description = Bloco de transporte de item avançado. Move itens mais rapidos que esteiras padrões.
block.plastanium-conveyor.description = Moves items in batches.\nAccepts items at the back, and unloads them in three directions at the front. block.plastanium-conveyor.description = Move os itens por grupos.\nRecebe os itens por trás, e despeja eles nas três outras direções.
block.junction.description = Funciona como uma ponte Para duas esteiras que estejam se cruzando. Util em situações que tenha duas esteiras diferentes carregando materiais diferentes para lugares diferentes. block.junction.description = Funciona como uma ponte para duas esteiras que estejam se cruzando. Util em situações que tenha duas esteiras separadas carregando materiais diferentes para lugares diferentes.
block.bridge-conveyor.description = Bloco de transporte de itens avancado. Possibilita o transporte de itens acima de 3 blocos de construção ou paredes. block.bridge-conveyor.description = Bloco de transporte de itens avancado. Possibilita o transporte de itens acima de 3 blocos de construção ou paredes.
block.phase-conveyor.description = Bloco de transporte de item avançado. Usa energia para teleportar itens a uma esteira de fase sobre uma severa distancia. block.phase-conveyor.description = Bloco de transporte de item avançado. Usa energia para teleportar itens a uma esteira de fase sobre uma severa distancia.
block.sorter.description = Filtra itens passando o selecionado para frente e os outros para os lados. block.sorter.description = Filtra itens passando o selecionado para frente e os outros para os lados.
block.inverted-sorter.description = Filtra os itens como um ordenador normal, porém, os itens escolhidos sairão pelas laterais. block.inverted-sorter.description = Filtra os itens como um ordenador normal, porém, os itens escolhidos sairão pelas laterais.
block.router.description = Aceita itens de uma direção e os divide em 3 direções igualmente. Util para espalhar materiais da fonte para multiplos alvos. block.router.description = Aceita itens de uma direção e os divide em 3 direções igualmente. Util para espalhar materiais de uma fonte para multiplos alvos.
block.distributor.description = Um roteador avançado que espalhas os itens em 7 outras direções igualmente. block.distributor.description = Um roteador avançado que espalhas os itens em 7 direções igualmente.
block.overflow-gate.description = Uma combinação de roteador e divisor Que apenas manda para a esquerda e Direita se a frente estiver bloqueada. block.overflow-gate.description = Uma combinação de roteador e divisor que apenas manda para a esquerda e direita se a frente estiver bloqueada.
block.underflow-gate.description = O oposto de um portão de sobrecarga. Manda pra frente se a esquerda e a direita estiverem bloqueadas. block.underflow-gate.description = O oposto de um portão de sobrecarga. Manda pra frente se a esquerda e a direita estiverem bloqueadas.
block.mass-driver.description = Bloco de transporte de itens supremo. Coleta itens severos e atira eles em outro mass driver de uma longa distancia. block.mass-driver.description = Bloco de transporte de itens supremo. Coleta itens severos e atira eles em outro mass driver de uma longa distancia.
block.mechanical-pump.description = Uma bomba barata com baixa saída de líquidos, mas sem consumo de energia. block.mechanical-pump.description = Uma bomba barata com baixa saída de líquidos, sem consumo de energia.
block.rotary-pump.description = Uma bomba avançada. Bombeia mais líquido, mas requer energia. block.rotary-pump.description = Uma bomba avançada. Bombeia mais líquido, mas requer energia.
block.thermal-pump.description = A bomba final. block.thermal-pump.description = A bomba final.
block.conduit.description = Bloco básico de transporte de líquidos. Move líquidos para a frente. Usado em conjunto com bombas e outros canos. block.conduit.description = Bloco básico de transporte de líquidos. Move líquidos para a frente. Usado em conjunto com bombas e outros canos.
@@ -1290,38 +1291,38 @@ block.phase-conduit.description = Bloco avancado de transporte de liquido. Usa e
block.power-node.description = Transmite energia para células conectadas. A célula vai receber energia ou alimentar qualquer bloco adjacente. block.power-node.description = Transmite energia para células conectadas. A célula vai receber energia ou alimentar qualquer bloco adjacente.
block.power-node-large.description = Uma célula de energia avançada com maior alcance e mais conexões. block.power-node-large.description = Uma célula de energia avançada com maior alcance e mais conexões.
block.surge-tower.description = Uma célula de energia com um extremo alcance mas com menos conexões disponíveis. block.surge-tower.description = Uma célula de energia com um extremo alcance mas com menos conexões disponíveis.
block.diode.description = A energia de baterias pode fluir através desse bloco em apenas uma direção, mas apenas se o outro lado possuir menos energia armazenada. block.diode.description = A energia de baterias pode fluir através desse bloco em apenas uma direção, mas sómente se o outro lado possuir menos energia armazenada.
block.battery.description = Armazena energia em tempos de energia excedente. Libera energia em tempos de déficit. block.battery.description = Armazena energia em tempos de energia excedente. Libera energia em tempos de déficit.
block.battery-large.description = Guarda muito mais energia que uma bateria comum. block.battery-large.description = Guarda muito mais energia que uma bateria comum.
block.combustion-generator.description = Gera energia queimando materiais inflamáveis, como carvão. block.combustion-generator.description = Gera energia queimando materiais inflamáveis, como carvão.
block.thermal-generator.description = Gera energia quando colocado em lugares quentes. block.thermal-generator.description = Gera energia quando colocado em lugares quentes.
block.steam-generator.description = Mais eficiente que o gerador à combustão, mas requer água adicional para a geração de vapor. block.steam-generator.description = Mais eficiente que o gerador à combustão, mas requer água adicional para a geração de vapor.
block.differential-generator.description = Gera grandes quantidades de energia. Utiliza a diferença de temperatura entre o Fluido Criogênico e a Piratita. block.differential-generator.description = Gera grandes quantidades de energia. Utiliza a diferença de temperatura entre o fluido friogênico e a piratita.
block.rtg-generator.description = Um Gerador termoelétrico de radioisótopos que não precisa de refriamento mas dá muito menos energia que o reator de tório. block.rtg-generator.description = Um Gerador termoelétrico de radioisótopos que não precisa de resfriamento mas dá muito menos energia que o reator de tório.
block.solar-panel.description = Gera pequenas quantidades de energia do sol. block.solar-panel.description = Gera pequenas quantidades de energia do sol.
block.solar-panel-large.description = Uma versão significantemente mais eficiente que o painel solar padrão. block.solar-panel-large.description = Uma versão significantemente mais eficiente que o painel solar padrão.
block.thorium-reactor.description = Gera altas quantidades de energia do torio radioativo. Requer resfriamento constante. Vai explodir violentamente Se resfriamento insuficiente for fornecido. block.thorium-reactor.description = Gera altas quantidades de energia pelo tório radioativo. Requer resfriamento constante. Explodirá violentamente se o resfriamento for insuficiente.
block.impact-reactor.description = Um gerador avançado, capaz de criar quantidades enormes de energia em seu poder total. Requer uma entrada significativa de energia ao iniciar. block.impact-reactor.description = Um gerador avançado, capaz de criar quantidades enormes de energia em seu poder total. Requer uma entrada significativa de energia ao iniciar.
block.mechanical-drill.description = Uma broca barata. Quando colocado em blocos apropriados, retira itens em um ritmo lento e indefinitavamente. block.mechanical-drill.description = Uma broca barata. Quando colocado nos blocos apropriados, retira itens em um ritmo lento, eternamente.
block.pneumatic-drill.description = Uma broca improvisada que é mais rápida e capaz de processar materiais mais duros usando a pressão do ar block.pneumatic-drill.description = Uma broca improvisada que é mais rápida e capaz de extrair materiais mais duros usando a pressão do ar.
block.laser-drill.description = Possibilita a mineração ainda mais rapida usando tecnologia a laser, Mas requer poder adcionalmente torio radioativo pode ser recuperado com essa mineradora block.laser-drill.description = Possibilita mineração ainda mais rapida usando tecnologia a laser, mas requer poder adicionalmente. Tório pode ser recuperado com essa mineradora.
block.blast-drill.description = A melhor mineradora. Requer muita energia. block.blast-drill.description = A melhor mineradora. Requer muita energia.
block.water-extractor.description = Extrai água subterrânea. Usado em locais sem água superficial disponível. block.water-extractor.description = Extrai água subterrânea. Usado em locais sem água disponível na superficie.
block.cultivator.description = Cultiva pequenas concentrações de esporos na atmosfera em cápsulas prontas. block.cultivator.description = Cultiva pequenas concentrações de esporos na atmosfera em cápsulas prontas.
block.oil-extractor.description = Usa altas quantidades de energia para extrair petróleo da areia. Use quando não tiver fontes de petróleo por perto. block.oil-extractor.description = Usa altas quantidades de energia para extrair petróleo da areia. Use quando não tiver fontes de petróleo por perto.
block.core-shard.description = A primeira iteração do núcleo. Uma vez destruído, todo o contato com a região é perdido. Não deixe isso acontecer. block.core-shard.description = A primeira iteração do núcleo. Uma vez destruído, todo o contato com a região é perdido. Não deixe isso acontecer.
block.core-foundation.description = A segunda versão do núcleo. Mais bem armadurado. Armazena mais recursos. block.core-foundation.description = A segunda versão do núcleo. Armadurado melhor. Armazena mais recursos.
block.core-nucleus.description = A terceira e ultima iteração do núcleo. Extremamente bem armadurada. Guarda quantidades massivas de recursos. block.core-nucleus.description = A terceira e última versão do núcleo. Extremamente bem armadurada. Guarda quantidades massivas de recursos.
block.vault.description = Carrega uma alta quantidade de itens. Usado para criar fontes Quando não tem uma necessidade constante de materiais. Um[lightgray] Descarregador[] pode ser usado para recuperar esses itens do container. block.vault.description = Carrega uma alta quantidade de itens. Usado para criar fontes quando não uma entrada constante de materiais. Um[lightgray] descarregador[] pode ser usado para recuperar esses itens do container.
block.container.description = Carrega uma baixa quantidade de itens. Usado para criar fontes Quando não tem uma necessidade constante de materiais. Um[lightgray] Descarregador[] pode ser usado para recuperar esses itens do container. block.container.description = Guarda uma pequena quantidade de itens. Usado para criar fontes quando não uma entrada constante de materiais. Um[lightgray] descarregador[] pode ser usado para recuperar esses itens do container.
block.unloader.description = Descarrega itens de um container, Descarrega em uma esteira ou diretamente em um bloco adjacente. O tipo de item que pode ser descarregado pode ser mudado clicando no descarregador. block.unloader.description = Descarrega itens de um container, Descarrega em uma esteira ou diretamente em um bloco adjacente. O tipo de item que pode ser descarregado pode ser mudado clicando no descarregador.
block.launch-pad.description = Lança montes de itens sem qualquer necessidade de um lançamento de núcleo. block.launch-pad.description = Lança montes de itens sem qualquer necessidade de um lançamento de núcleo.
block.launch-pad-large.description = Uma versão melhorada da plataforma de lançamento. Guarda mais itens. Lança mais frequentemente. block.launch-pad-large.description = Uma versão melhorada da plataforma de lançamento. Guarda mais itens. Lança mais frequentemente.
block.duo.description = Uma pequena torre de baixo custo. Útil contra unidades terrestres. block.duo.description = Uma pequena torre de baixo custo. Útil contra unidades terrestres.
block.scatter.description = Uma torre antiaérea essencial para a defesa. Dispara vários tiros aglomerados de chumbo, sucata ou metavidro. block.scatter.description = Uma torre antiaérea essencial para a defesa. Dispara vários tiros aglomerados de chumbo, sucata ou metavidro.
block.scorch.description = Uma torre que queima qualquer unidade que estiver próxima. Altamente efetivo se for a queima-roupa. block.scorch.description = Uma torre que queima qualquer unidade que estiver próxima. Altamente efetivo se for de perto.
block.hail.description = Uma pequena torre de artilharia com grande alcance. block.hail.description = Uma pequena torre de artilharia com grande alcance.
block.wave.description = Uma torre de tamanho médio. Lança jatos de líquidos nos seus inimigos. Automaticamente apaga incêndios se for abastecido com água ou crio fluido. block.wave.description = Uma torre de tamanho médio. Lança jatos de líquidos nos seus inimigos. Automaticamente apaga incêndios se for abastecido com água ou fluido criogênico.
block.lancer.description = Uma torre laser anti-terrestre média. Carrega e dispara poderosos feixes de energia. block.lancer.description = Uma torre laser anti-terrestre média. Carrega e dispara poderosos feixes de energia.
block.arc.description = Uma pequena torre elétrica com curto alcance. Dispara arcos de eletricidade nos seus inimigos. block.arc.description = Uma pequena torre elétrica com curto alcance. Dispara arcos de eletricidade nos seus inimigos.
block.swarmer.description = Uma torre de mísseis de tamanho médio. Ataca ambos terrestre e aéreo disparando misseis teleguiados. block.swarmer.description = Uma torre de mísseis de tamanho médio. Ataca ambos terrestre e aéreo disparando misseis teleguiados.

View File

@@ -288,6 +288,7 @@ cancel = Anulare
openlink = Deschide Linkul openlink = Deschide Linkul
copylink = Copiază Linkul copylink = Copiază Linkul
back = Înapoi back = Înapoi
max = Maximum
crash.export = Exportă Crash Logs crash.export = Exportă Crash Logs
crash.none = Nu s-au găsit crash logs. crash.none = Nu s-au găsit crash logs.
crash.exported = Crash logs exportate. crash.exported = Crash logs exportate.
@@ -362,7 +363,6 @@ editor.center = Centrează
workshop = Workshop workshop = Workshop
waves.title = Valuri waves.title = Valuri
waves.remove = Elimină waves.remove = Elimină
waves.never = <niciodată>
waves.every = la fiecare waves.every = la fiecare
waves.waves = val(uri) waves.waves = val(uri)
waves.perspawn = per apariție waves.perspawn = per apariție
@@ -393,7 +393,7 @@ editor.errorload = Eroare la încărcarea fișierului.
memory = Mem: {0}mb memory = Mem: {0}mb
memory2 = Mem:\n {0}mb +\n {1}mb memory2 = Mem:\n {0}mb +\n {1}mb
editor.errorsave = Eroare la salvarea fișierului. editor.errorsave = Eroare la salvarea fișierului.
editor.errorimage = Aceasta este o imagine, nu o hartă.\n\nDacă vrei să imporți o hartă din versiunile 3.5/build 40, folosește butonul 'Importă Hartă Veche' din editor. editor.errorimage = Aceasta este o imagine, nu o hartă.
editor.errorlegacy = Hartă aceasta este prea veche, și folosește un format învechit care nu mai este suportat. editor.errorlegacy = Hartă aceasta este prea veche, și folosește un format învechit care nu mai este suportat.
editor.errornot = Acesta nu este un fișier cu o hartă. editor.errornot = Acesta nu este un fișier cu o hartă.
editor.errorheader = Acest fișier de hartă este invalid sau corupf. editor.errorheader = Acest fișier de hartă este invalid sau corupf.
@@ -599,17 +599,17 @@ sector.groundZero.description = Locația optimă pt a începe încă odată. Ris
sector.frozenForest.description = Chiar și aici, aproape de munți, sporii s-au împrăștiat. Temperaturile reci nu-i pot reține la infinit.\n\nÎncepe călătoria către electricitate. Construiește generatoare de combustie. Învață să folosești reparatoare. sector.frozenForest.description = Chiar și aici, aproape de munți, sporii s-au împrăștiat. Temperaturile reci nu-i pot reține la infinit.\n\nÎncepe călătoria către electricitate. Construiește generatoare de combustie. Învață să folosești reparatoare.
sector.saltFlats.description = La periferia deșertului stau Podișurile Saline. Puține resurse pot fi găsite în această locație.\n\nInamicul a ridicat un complex de depozitare aici. Distruge-le nucleul. Nu lăsa nimic în urmă. sector.saltFlats.description = La periferia deșertului stau Podișurile Saline. Puține resurse pot fi găsite în această locație.\n\nInamicul a ridicat un complex de depozitare aici. Distruge-le nucleul. Nu lăsa nimic în urmă.
sector.craters.description = Apa s-a acumulat în acest crater, rămășiță a vechilor războaie. Cucerește din nou zona. Adună nisip. Toarnă-l în metasticlă. Pompează apă pt a răci armele și burghiele. sector.craters.description = Apa s-a acumulat în acest crater, rămășiță a vechilor războaie. Cucerește din nou zona. Adună nisip. Toarnă-l în metasticlă. Pompează apă pt a răci armele și burghiele.
sector.ruinousShores.description = După deșerturi vine țărmul. Odată, locația aceasta a avut un sistem de apărare de coastă. N-a rămas mult din el. Doar structurile de apărare cele mai simple au rămas în picioare, restul fiind redus la fier vechi.\nContinuă expansiunea înspre exterior. Redescoperă tehnologia. sector.ruinousShores.description = După deșerturi vine țărmul. Odată, locația aceasta avea un sistem de apărare de coastă. N-a rămas mult din el. Doar structurile de apărare cele mai simple au rămas în picioare, restul fiind redus la fier vechi.\nContinuă expansiunea înspre exterior. Redescoperă tehnologia.
sector.stainedMountains.description = Mai spre mijlocul continentului sunt munții, încă neatinși de spori.\nExtrage abundentele resurse de titan din zonă. Învață cum să-l folosești.\n\nPrezența inamicului e mai mare aici. Nu le da timp să-și trimită cele mai puternice unități. sector.stainedMountains.description = Mai spre mijlocul continentului sunt munții, încă neatinși de spori.\nExtrage abundentele resurse de titan din zonă. Învață cum să-l folosești.\n\nPrezența inamicului e mai mare aici. Nu le da timp să trimită cele mai puternice unități.
sector.overgrowth.description = Această zonă este plină de buruieni, mai aproape de sursa sporilor.\nInamicul și-a stabilit un avanpost aici. Construiește unități Mace. Distruge-l. sector.overgrowth.description = Această zonă este plină de buruieni, mai aproape de sursa sporilor.\nInamicul și-a stabilit un avanpost aici. Construiește unități Mace. Distruge-l.
sector.tarFields.description = O zonă aflată la periferia unui complex de producție petrolieră, între munți și deșert. Una din puținele zone cu resurse utilizabile de țiței.\nDeși abandonată, în apropierea zonei se află de forțe inamice periculoase. Nu le subestima.\n\n[lightgray]Cercetează tehnologie de procesare a petrolului pe cât posibil. sector.tarFields.description = O zonă aflată la periferia unui complex de producție petrolieră, între munți și deșert. Una din puținele zone cu resurse utilizabile de țiței.\nDeși abandonată, în apropierea zonei se află forțe inamice periculoase. Nu le subestima.\n\n[lightgray]Cercetează tehnologia de procesare a petrolului pe cât posibil.
sector.desolateRift.description = O zonă extrem de periculoasă. Multe resurse, dar puțin spațiu. Mare risc de distrugere. Pleacă curând, cât mai curând. Nu te lăsa păcălit de pauzele mari dintre atacurile inamice. sector.desolateRift.description = O zonă extrem de periculoasă. Multe resurse, dar puțin spațiu. Mare risc de distrugere. Pleacă curând, cât mai curând. Nu te lăsa păcălit de pauzele mari dintre atacurile inamice.
sector.nuclearComplex.description = O fostă facilitate pt producerea și procesarea de toriu, redusă la ruine.\n[lightgray]Cercetează toriul și multele sale utilizări.\n\nInamicul e prezent aici în mari numere, căutând constant atacatori. sector.nuclearComplex.description = O fostă facilitate pt producerea și procesarea de toriu, redusă la ruine.\n[lightgray]Cercetează toriul și multele sale utilizări.\n\nInamicul e prezent aici în mari numere, căutând constant atacatori.
sector.fungalPass.description = O zonă de tranziție dintre munții înalți și zonele joase, pline cu spori. O mică bază de recunoaștere a inamicului este localizată aici.\nDistruge-o.\nFolosește unități Dagger și Crawler. Distruge cele 2 nuclee. sector.fungalPass.description = O zonă de tranziție dintre munții înalți și zonele joase, pline cu spori. O mică bază de recunoaștere a inamicului este localizată aici.\nDistruge-o.\nFolosește unități Dagger și Crawler. Distruge cele 2 nuclee.
sector.biomassFacility.description = Originea sporilor. Aceasta este facilitatea în care au fost cercetați și produși inițial.\nCercetează tehnologia ce poate fi găsită aici. Cultivă spori pt producția de combustibil și mase plastice.\n\n[lightgray]Când facilitatea a decăzut, sporii au fost eliberați. Nimic din din ecosistemul local nu a putut concura cu un organism atât de invaziv. sector.biomassFacility.description = Originea sporilor. Aceasta este facilitatea în care au fost cercetați și produși inițial.\nCercetează tehnologia ce poate fi găsită aici. Cultivă spori pt producția de combustibil și mase plastice.\n\n[lightgray]Când facilitatea a decăzut, sporii au fost eliberați. Nimic din din ecosistemul local nu a putut concura cu un organism atât de invaziv.
sector.windsweptIslands.description = Acest arhipelag izolat se află mai departe, după țărm. Datele arată că odată aveau structuri care produceau [accent]Plastaniu[].\n\nApără-te de unitățile navale ale inamicului. Construiește o bază pe insule. Cercetează fabricile necesare. sector.windsweptIslands.description = Acest arhipelag izolat se află mai departe, după țărm. Datele arată că odată aveau structuri care produceau [accent]Plastaniu[].\n\nApără-te de unitățile navale ale inamicului. Construiește o bază pe insule. Cercetează fabricile necesare.
sector.extractionOutpost.description = Un avanpost izolat, construit de inamic cu scopul de a lansa resurse către alte sectoare.\n\nTehnologia de transport intersectorial este esențială pt cuceririle ce urmează. Distruge baza. Cercetează platformele lor de lansare. sector.extractionOutpost.description = Un avanpost izolat, construit de inamic cu scopul de a lansa resurse către alte sectoare.\n\nTehnologia de transport intersectorial este esențială pt cuceririle ce urmează. Distruge baza. Cercetează platformele lor de lansare.
sector.impact0078.description = Aici se află rămășițele primei nave de transport interstelar care a intrat în acest sistem stelar.\n\nSalvează cât mai mult posibil din epavă. Cercetează orice tehnologie intactă. sector.impact0078.description = Aici se află rămășițele primei nave de transport interstelar care a intrat în acest sistem stelar.\n\nSalvează cât de mult posibil din epavă. Cercetează orice tehnologie intactă.
sector.planetaryTerminal.description = Ținta finală.\n\nAceastă bază de coastă conține o structură capabilă să lanseze nuclee către alte planete locale. Este extrem de bine păzită.\n\nProdu unități navale. Elimină inamicul cât de rapid se poate. Cercetează structura de lansare. sector.planetaryTerminal.description = Ținta finală.\n\nAceastă bază de coastă conține o structură capabilă să lanseze nuclee către alte planete locale. Este extrem de bine păzită.\n\nProdu unități navale. Elimină inamicul cât de rapid se poate. Cercetează structura de lansare.
settings.language = Limbă settings.language = Limbă
@@ -721,6 +721,7 @@ bar.corereq = Plasare pe Nucleu Necesară
bar.drillspeed = Viteză Minare: {0}/s bar.drillspeed = Viteză Minare: {0}/s
bar.pumpspeed = Viteză Pompare: {0}/s bar.pumpspeed = Viteză Pompare: {0}/s
bar.efficiency = Eficiență: {0}% bar.efficiency = Eficiență: {0}%
bar.boost = Efect Grăbire: {0}%
bar.powerbalance = Electricitate: {0}/s bar.powerbalance = Electricitate: {0}/s
bar.powerstored = Stocată: {0}/{1} bar.powerstored = Stocată: {0}/{1}
bar.poweramount = Electricitate: {0} bar.poweramount = Electricitate: {0}
@@ -936,6 +937,7 @@ mode.custom = Reguli Personalizate
rules.infiniteresources = Resurse Infinite rules.infiniteresources = Resurse Infinite
rules.reactorexplosions = Reactoarele Explodează rules.reactorexplosions = Reactoarele Explodează
rules.coreincinerates = Nucleul Incinerează Resursele în Plus
rules.schematic = Se Pot Folosi Scheme rules.schematic = Se Pot Folosi Scheme
rules.wavetimer = Valuri pe Timp rules.wavetimer = Valuri pe Timp
rules.waves = Valuri rules.waves = Valuri
@@ -1456,10 +1458,10 @@ block.command-center.description = Controlează comportamentul unităților mili
block.ground-factory.description = Produce unități de artilerie. Unitățile produse pot fi folosite direct sau mutate în reconstructoare pt îmbunătățiri. block.ground-factory.description = Produce unități de artilerie. Unitățile produse pot fi folosite direct sau mutate în reconstructoare pt îmbunătățiri.
block.air-factory.description = Produce unități aeriene. Unitățile produse pot fi folosite direct sau mutate în reconstructoare pt îmbunătățiri. block.air-factory.description = Produce unități aeriene. Unitățile produse pot fi folosite direct sau mutate în reconstructoare pt îmbunătățiri.
block.naval-factory.description = Produce unități navale. Unitățile produse pot fi folosite direct sau mutate în reconstructoare pt îmbunătățiri. block.naval-factory.description = Produce unități navale. Unitățile produse pot fi folosite direct sau mutate în reconstructoare pt îmbunătățiri.
block.additive-reconstructor.description = Îmbunătățește unitățile primite, tranformându-le în unități de nivel doi. block.additive-reconstructor.description = Îmbunătățește unitățile primite, transformându-le în unități de nivel doi.
block.multiplicative-reconstructor.description = Îmbunătățește unitățile primite, tranformându-le în unități de nivel trei. block.multiplicative-reconstructor.description = Îmbunătățește unitățile primite, transformându-le în unități de nivel trei.
block.exponential-reconstructor.description = Îmbunătățește unitățile primite, tranformându-le în unități de nivel patru. block.exponential-reconstructor.description = Îmbunătățește unitățile primite, transformându-le în unități de nivel patru.
block.tetrative-reconstructor.description =Îmbunătățește unitățile primite, tranformându-le în unități de ltimă generație: nivelul cinci. block.tetrative-reconstructor.description = Îmbunătățește unitățile primite, transformându-le în unități de ltimă generație: nivelul cinci.
block.switch.description = Un întrerupător. Poate fi pornit sau oprit. Statusul său poate fi citit și controlat de procesoarele logice. block.switch.description = Un întrerupător. Poate fi pornit sau oprit. Statusul său poate fi citit și controlat de procesoarele logice.
block.micro-processor.description = Rulează într-o buclă continuă o secvență de instrucțiuni logice. Poate fi folosit pt a controla unități și diverse clădiri. block.micro-processor.description = Rulează într-o buclă continuă o secvență de instrucțiuni logice. Poate fi folosit pt a controla unități și diverse clădiri.
block.logic-processor.description = Rulează într-o buclă continuă o secvență de instrucțiuni logice. Poate fi folosit pt a controla unități și diverse clădiri. Mai rapid decât microprocesorul. block.logic-processor.description = Rulează într-o buclă continuă o secvență de instrucțiuni logice. Poate fi folosit pt a controla unități și diverse clădiri. Mai rapid decât microprocesorul.

View File

@@ -13,7 +13,7 @@ link.google-play.description = Скачать для Android с Google Play
link.f-droid.description = Скачать для Android с F-Droid link.f-droid.description = Скачать для Android с F-Droid
link.wiki.description = Официальная вики link.wiki.description = Официальная вики
link.suggestions.description = Предложить новые возможности link.suggestions.description = Предложить новые возможности
link.bug.description = Нашли одну? Доложите о ней здесь link.bug.description = Нашли ошибку? Доложите о ней здесь
linkfail = Не удалось открыть ссылку!\nURL-адрес был скопирован в буфер обмена. linkfail = Не удалось открыть ссылку!\nURL-адрес был скопирован в буфер обмена.
screenshot = Скриншот сохранён в {0} screenshot = Скриншот сохранён в {0}
screenshot.invalid = Карта слишком большая, возможно, не хватает памяти для скриншота. screenshot.invalid = Карта слишком большая, возможно, не хватает памяти для скриншота.
@@ -41,11 +41,10 @@ be.ignore = Игнорировать
be.noupdates = Обновления не найдены. be.noupdates = Обновления не найдены.
be.check = Проверить обновления be.check = Проверить обновления
mod.featured.title = Обозреватель модов mod.featured.dialog.title = Браузер модификаций
mod.featured.dialog.title = Обозреватель модов
mods.browser.selected = Выбранный мод mods.browser.selected = Выбранный мод
mods.browser.add = Установить мод mods.browser.add = Скачать
mods.github.open = Открыть GitHub страницу mods.github.open = Открыть
schematic = Схема schematic = Схема
schematic.add = Сохранить схему… schematic.add = Сохранить схему…
@@ -64,7 +63,7 @@ schematic.saved = Схема сохранена.
schematic.delete.confirm = Эта схема будет поджарена Испепелителем. schematic.delete.confirm = Эта схема будет поджарена Испепелителем.
schematic.rename = Переименовать схему schematic.rename = Переименовать схему
schematic.info = {0}x{1}, {2} блоков schematic.info = {0}x{1}, {2} блоков
schematic.disabled = [scarlet]Схемы отключены[]\nНа этой [accent]карте[] или [accent]сервере запрещено использование схем. schematic.disabled = [scarlet]Схемы отключены[]\nНа этой [accent]карте[] или [accent]сервере[] запрещено использование схем.
stats = Статистика stats = Статистика
stat.wave = Волн отражено:[accent] {0} stat.wave = Волн отражено:[accent] {0}
@@ -90,6 +89,7 @@ joingame = Сетевая игра
customgame = Пользовательская игра customgame = Пользовательская игра
newgame = Новая игра newgame = Новая игра
none = <ничего> none = <ничего>
none.found = [lightgray]<ничего не найдено>
minimap = Мини-карта minimap = Мини-карта
position = Координаты position = Координаты
close = Закрыть close = Закрыть
@@ -113,7 +113,7 @@ feature.unsupported = Ваше устройство не поддерживае
mods.alphainfo = Имейте в виду, что модификации находятся в альфа-версии и [scarlet]могут содержать много ошибок[]. Докладывайте о любых проблемах, которые вы найдете в Mindustry Github. mods.alphainfo = Имейте в виду, что модификации находятся в альфа-версии и [scarlet]могут содержать много ошибок[]. Докладывайте о любых проблемах, которые вы найдете в Mindustry Github.
mods = Модификации mods = Модификации
mods.none = [lightgray]Модификации не найдены! mods.none = [lightgray]Модификации не найдены!
mods.guide = Руководство по модам mods.guide = Руководство по модификациям
mods.report = Доложить об ошибке mods.report = Доложить об ошибке
mods.openfolder = Открыть папку с модификациями mods.openfolder = Открыть папку с модификациями
mods.reload = Перезагрузить mods.reload = Перезагрузить
@@ -136,15 +136,15 @@ mod.requiresrestart = Теперь игра закроется, чтобы пр
mod.reloadrequired = [scarlet]Необходим перезапуск mod.reloadrequired = [scarlet]Необходим перезапуск
mod.import = Импортировать модификацию mod.import = Импортировать модификацию
mod.import.file = Импортировать файл mod.import.file = Импортировать файл
mod.import.github = Импортировать мод с GitHub mod.import.github = Импортировать модификацию с GitHub
mod.jarwarn = [scarlet]JAR-модификации по сути не безопасны.[]\nУбедитесь, что вы импортируете этот мод из надежного источника! mod.jarwarn = [scarlet]JAR-модификации по сути не безопасны.[]\nУбедитесь, что вы импортируете эту модификацию из надёжного источника!
mod.item.remove = Этот предмет является частью модификации [accent]«{0}[accent]»[white]. Чтобы удалить его, удалите саму модификацию. mod.item.remove = Этот предмет является частью модификации [accent]«{0}[accent]»[white]. Чтобы удалить его, удалите саму модификацию.
mod.remove.confirm = Эта модификация будет удалена. mod.remove.confirm = Эта модификация будет удалена.
mod.author = [lightgray]Автор(ы):[] {0} mod.author = [lightgray]Автор(ы):[] {0}
mod.missing = В этом сохранении есть следы модификации, которая отсутствует или установлена её обновлённая версия. Может произойти повреждение сохранения. Вы уверены, что хотите загрузить его?\n[lightgray]Модификации:\n{0} mod.missing = В этом сохранении есть следы модификации, которая отсутствует или установлена её обновлённая версия. Может произойти повреждение сохранения. Вы уверены, что хотите загрузить его?\n[lightgray]Модификации:\n{0}
mod.preview.missing = Перед публикацией этой модификации в Мастерской, вы должны добавить изображение предпросмотра.\nРазместите изображение с именем[accent] preview.png[] в папке модификации и попробуйте снова. mod.preview.missing = Перед публикацией этой модификации в Мастерской, вы должны добавить изображение предпросмотра.\nРазместите изображение с именем[accent] preview.png[] в папке модификации и попробуйте снова.
mod.folder.missing = Модификации могут быть опубликованы в Мастерской только в виде папки.\nЧтобы конвертировать любой мод в папку, просто извлеките его из архива и удалите старый архив .zip, затем перезапустите игру или перезагрузите модификации. mod.folder.missing = Модификации могут быть опубликованы в Мастерской только в виде папки.\nЧтобы конвертировать любой мод в папку, просто извлеките его из архива и удалите старый архив .zip, затем перезапустите игру или перезагрузите модификации.
mod.scripts.disable = Ваше устройство не поддерживает модификации со скриптами. Отключите такие моды, чтобы играть. mod.scripts.disable = Ваше устройство не поддерживает модификации со скриптами. Отключите такие модификации, чтобы играть.
about.button = Об игре about.button = Об игре
name = Имя: name = Имя:
@@ -287,6 +287,7 @@ cancel = Отмена
openlink = Открыть ссылку openlink = Открыть ссылку
copylink = Скопировать ссылку copylink = Скопировать ссылку
back = Назад back = Назад
max = Заполнить полностью
crash.export = Экспорт отчёта об ошибках crash.export = Экспорт отчёта об ошибках
crash.none = Отчёты об ошибках не найдены. crash.none = Отчёты об ошибках не найдены.
crash.exported = Отчёты об ошибках экспортированы. crash.exported = Отчёты об ошибках экспортированы.
@@ -361,12 +362,11 @@ editor.center = Центрировать
workshop = Мастерская workshop = Мастерская
waves.title = Волны waves.title = Волны
waves.remove = Удалить waves.remove = Удалить
waves.never =
waves.every = каждый waves.every = каждый
waves.waves = волна(ы) waves.waves = волна(ы)
waves.perspawn = за появление waves.perspawn = за появление
waves.shields = ед. щита/волну waves.shields = ед. щита/волну
waves.to = к waves.to = до
waves.guardian = Страж waves.guardian = Страж
waves.preview = Предварительный просмотр waves.preview = Предварительный просмотр
waves.edit = Редактировать… waves.edit = Редактировать…
@@ -390,7 +390,7 @@ editor.removeunit = Удалить боевую единицу
editor.teams = Команды editor.teams = Команды
editor.errorload = Ошибка загрузки файла. editor.errorload = Ошибка загрузки файла.
editor.errorsave = Ошибка сохранения файла. editor.errorsave = Ошибка сохранения файла.
editor.errorimage = Это изображение, а не карта.\n\nЕсли вы хотите импортировать карту версии 3.5/40 сборки, то используйте кнопку [accent][Импортировать устаревшую карту][] в редакторе. editor.errorimage = Это изображение, а не карта.
editor.errorlegacy = Эта карта слишком старая и использует устаревший формат карты, который больше не поддерживается. editor.errorlegacy = Эта карта слишком старая и использует устаревший формат карты, который больше не поддерживается.
editor.errornot = Это не файл карты. editor.errornot = Это не файл карты.
editor.errorheader = Этот файл карты недействителен или повреждён. editor.errorheader = Этот файл карты недействителен или повреждён.
@@ -720,6 +720,7 @@ bar.corereq = Требуется основа ядра
bar.drillspeed = Скорость бурения: {0}/с bar.drillspeed = Скорость бурения: {0}/с
bar.pumpspeed = Скорость выкачивания: {0}/с bar.pumpspeed = Скорость выкачивания: {0}/с
bar.efficiency = Эффективность: {0}% bar.efficiency = Эффективность: {0}%
bar.boost = Ускорение: {0}%
bar.powerbalance = Энергия: {0}/с bar.powerbalance = Энергия: {0}/с
bar.powerstored = Накоплено: {0}/{1} bar.powerstored = Накоплено: {0}/{1}
bar.poweramount = Энергия: {0} bar.poweramount = Энергия: {0}
@@ -935,6 +936,7 @@ mode.custom = Пользовательские правила
rules.infiniteresources = Бесконечные ресурсы (Игрок) rules.infiniteresources = Бесконечные ресурсы (Игрок)
rules.reactorexplosions = Взрывы реакторов rules.reactorexplosions = Взрывы реакторов
rules.coreincinerates = Ядро сжигает избыток ресурсов
rules.schematic = Схемы разрешены rules.schematic = Схемы разрешены
rules.wavetimer = Интервал волн rules.wavetimer = Интервал волн
rules.waves = Волны rules.waves = Волны
@@ -1308,7 +1310,7 @@ item.sand.description = Используется в производстве д
item.coal.description = Используется как топливо и в производстве обработанных материалов. item.coal.description = Используется как топливо и в производстве обработанных материалов.
item.coal.details = Похоже, что это окаменевшее растительное вещество, образовавшееся задолго до Посева. item.coal.details = Похоже, что это окаменевшее растительное вещество, образовавшееся задолго до Посева.
item.titanium.description = Широко используется в транспортировке жидкостей, бурах и авиации. item.titanium.description = Широко используется в транспортировке жидкостей, бурах и авиации.
item.thorium.description = Используется в прочных постройках и как ядерного топлива. item.thorium.description = Используется в прочных постройках и как ядерное топливо.
item.scrap.description = Используется в плавильнях и измельчителях для получения других материалов. item.scrap.description = Используется в плавильнях и измельчителях для получения других материалов.
item.scrap.details = Остатки старых построек и единиц. item.scrap.details = Остатки старых построек и единиц.
item.silicon.description = Используется в солнечных панелях, сложной электронике и самонаводящихся боеприпасах для турелей. item.silicon.description = Используется в солнечных панелях, сложной электронике и самонаводящихся боеприпасах для турелей.

View File

@@ -331,7 +331,7 @@ editor.generation = การเกิด:
editor.ingame = แก้ไขในเกม editor.ingame = แก้ไขในเกม
editor.publish.workshop = เผยแพร่บน Workshop editor.publish.workshop = เผยแพร่บน Workshop
editor.newmap = แมพใหม่ editor.newmap = แมพใหม่
editor.center = Center editor.center = ศูนย์กลางแมพ
workshop = Workshop workshop = Workshop
waves.title = Waves waves.title = Waves
waves.remove = ลบ waves.remove = ลบ
@@ -352,7 +352,7 @@ waves.none = ไม่ได้กำหนดศัตรู\nwave layouts เ
wavemode.counts = จำนวน wavemode.counts = จำนวน
wavemode.totals = ทั้งหมด wavemode.totals = ทั้งหมด
wavemode.health = health wavemode.health = เลือด
editor.default = [lightgray]<ค่าเริ่่มต้น> editor.default = [lightgray]<ค่าเริ่่มต้น>
details = รสยละเอียด... details = รสยละเอียด...
@@ -512,7 +512,7 @@ weather.rain.name = ฝน
weather.snow.name = หิมะ weather.snow.name = หิมะ
weather.sandstorm.name = พายุทราย weather.sandstorm.name = พายุทราย
weather.sporestorm.name = พายุสปอร์ weather.sporestorm.name = พายุสปอร์
weather.fog.name = Fog weather.fog.name = หมอก
sectors.unexplored = [lightgray]ยังไม่ได้สำรวจ sectors.unexplored = [lightgray]ยังไม่ได้สำรวจ
sectors.resources = ทรัพยากร: sectors.resources = ทรัพยากร:
@@ -523,7 +523,7 @@ sectors.launch = ส่ง
sectors.select = เลือก sectors.select = เลือก
sectors.nonelaunch = [lightgray]none (sun) sectors.nonelaunch = [lightgray]none (sun)
sectors.rename = Rename Sector sectors.rename = Rename Sector
sector.missingresources = [scarlet]Insufficient Core Resources sector.missingresources = [scarlet]สิ่งของทำ core ไม่ครบ
planet.serpulo.name = Serpulo planet.serpulo.name = Serpulo
planet.sun.name = Sun planet.sun.name = Sun
@@ -566,10 +566,10 @@ settings.clear.confirm = คุณแน่ใจหรือว่าจะเ
settings.clearall.confirm = [scarlet]คำเตือน![]\nการกระทำนี้จะลบข้อมูลทั้งหมด นั้นรวมไปถึงเซฟ, แมพ, สิ่งที่ปลดล็อคแล้วและ keybinds.\nเมื่อคุณกด 'โอเค' เกมจะลบข้อมูลทุกอย่างและออกโดยอัตโนมัติ settings.clearall.confirm = [scarlet]คำเตือน![]\nการกระทำนี้จะลบข้อมูลทั้งหมด นั้นรวมไปถึงเซฟ, แมพ, สิ่งที่ปลดล็อคแล้วและ keybinds.\nเมื่อคุณกด 'โอเค' เกมจะลบข้อมูลทุกอย่างและออกโดยอัตโนมัติ
settings.clearsaves.confirm = คุณแน่ใจหรือว่าคุณต้องการเคลียร์เซฟทั้งหมด? settings.clearsaves.confirm = คุณแน่ใจหรือว่าคุณต้องการเคลียร์เซฟทั้งหมด?
settings.clearsaves = เคลียร์เซฟ settings.clearsaves = เคลียร์เซฟ
settings.clearresearch = Clear Research settings.clearresearch = ลบการ Research
settings.clearresearch.confirm = Are you sure you want to clear all of your campaign research? settings.clearresearch.confirm = แน่ใจที่จะลบการ Research หรือไม่?
settings.clearcampaignsaves = Clear Campaign Saves settings.clearcampaignsaves = ลบเซฟ Campaign
settings.clearcampaignsaves.confirm = Are you sure you want to clear all of your campaign saves? settings.clearcampaignsaves.confirm = แน่ใจที่จะลบเซฟ Campaign หรือไม่?
paused = [accent]< หยุดชั่วคราว > paused = [accent]< หยุดชั่วคราว >
clear = เคลียร์ clear = เคลียร์
banned = [scarlet]แบน banned = [scarlet]แบน
@@ -580,14 +580,14 @@ info.title = ข้อมูล
error.title = [crimson]มีบางอย่างผิดพลาดเกิดขึ้น error.title = [crimson]มีบางอย่างผิดพลาดเกิดขึ้น
error.crashtitle = มีบางอย่างผิดพลาดเกิดขึ้น error.crashtitle = มีบางอย่างผิดพลาดเกิดขึ้น
unit.nobuild = [scarlet]ยูนิตไม่สามารถสร้างได้ unit.nobuild = [scarlet]ยูนิตไม่สามารถสร้างได้
lastaccessed = [lightgray]Last Accessed: {0} lastaccessed = [lightgray]:คนที่แตะเป็นคนสุดท้าย {0}
block.unknown = [lightgray]??? block.unknown = [lightgray]???
stat.input = นำเข้า stat.input = นำเข้า
stat.output = ส่งออก stat.output = ส่งออก
stat.booster = บูสเตอร์ stat.booster = บูสเตอร์
stat.tiles = ต้องการ Tiles stat.tiles = ต้องการ Tiles
stat.affinities = Affinities stat.affinities = affinities
stat.powercapacity = ความจุพลังงาน stat.powercapacity = ความจุพลังงาน
stat.powershot = หน่วยพลังงาน/นัด stat.powershot = หน่วยพลังงาน/นัด
stat.damage = ดาเมจ stat.damage = ดาเมจ
@@ -600,13 +600,13 @@ stat.size = ขนาด
stat.displaysize = ขนาดที่โชว์ stat.displaysize = ขนาดที่โชว์
stat.liquidcapacity = จุของเหลว stat.liquidcapacity = จุของเหลว
stat.powerrange = ระยะพลังงาน stat.powerrange = ระยะพลังงาน
stat.linkrange = Link Range stat.linkrange = ระยะการเชื่อมต่อ
stat.instructions = คำแนะนำ stat.instructions = คำแนะนำ
stat.powerconnections = จำนวนการเชื่อมต่อสูงสุด stat.powerconnections = จำนวนการเชื่อมต่อสูงสุด
stat.poweruse = ใช้พลังงาน stat.poweruse = ใช้พลังงาน
stat.powerdamage = หน่วยพลังงาน/ดาเมจ stat.powerdamage = หน่วยพลังงาน/ดาเมจ
stat.itemcapacity = จุไอเท็ม stat.itemcapacity = จุไอเท็ม
stat.memorycapacity = Memory Capacity stat.memorycapacity = ความจุหน่วยความจำ
stat.basepowergeneration = กำเนิดพลังงานพื้นฐาน stat.basepowergeneration = กำเนิดพลังงานพื้นฐาน
stat.productiontime = เวลาที่ใช้ในการผลิต stat.productiontime = เวลาที่ใช้ในการผลิต
stat.repairtime = เวลาที่ใช้ในการซ่อมแซมให้สมบูรณ์ stat.repairtime = เวลาที่ใช้ในการซ่อมแซมให้สมบูรณ์
@@ -626,28 +626,28 @@ stat.reload = นัด/วินาที
stat.ammo = กระสุน stat.ammo = กระสุน
stat.shieldhealth = เลือดของเกราะ stat.shieldhealth = เลือดของเกราะ
stat.cooldowntime = เวลา Cooldown stat.cooldowntime = เวลา Cooldown
stat.explosiveness = Explosiveness stat.explosiveness = ความแรงของระเบิด
stat.basedeflectchance = Base Deflect Chance stat.basedeflectchance = โอกาสกระสุนกระเด็นกลับ
stat.lightningchance = Lightning Chance stat.lightningchance = โอกาสที่จะเกิดสายฟ้า
stat.lightningdamage = Lightning Damage stat.lightningdamage = ความแรงของสายฟ้า
stat.flammability = Flammability stat.flammability = ความไวไฟ
stat.radioactivity = Radioactivity stat.radioactivity = ความแรงของรังสี
stat.heatcapacity = HeatCapacity stat.heatcapacity = ความจุความร้อน
stat.viscosity = Viscosity stat.viscosity = Viscosity
stat.temperature = Temperature stat.temperature = อุณหภูมิ
stat.speed = Speed stat.speed = ความไว
stat.buildspeed = Build Speed stat.buildspeed = ความไวในการก่อสร้าง
stat.minespeed = Mine Speed stat.minespeed = ความไวในการขุด
stat.minetier = Mine Tier stat.minetier = ความแรงของเลเซอร์ขุด
stat.payloadcapacity = Payload Capacity stat.payloadcapacity = ความจุการขนของ
stat.commandlimit = Command Limit stat.commandlimit = จำนวน Unit ที่สามารถสูงสุด
stat.abilities = Abilities stat.abilities = ทักษะ
ability.forcefield = Force Field ability.forcefield = สนามพลัง
ability.repairfield = Repair Field ability.repairfield = รักษา Unit รอบข้าง
ability.statusfield = Status Field ability.statusfield = บัฟ Unit รอบข้าง
ability.unitspawn = {0} Factory ability.unitspawn = โรงงานทำ {0}
ability.shieldregenfield = Shield Regen Field ability.shieldregenfield = บัฟโล่รอบข้าง
bar.drilltierreq = จำเป็นต้องใช้เครื่องขุดที่ดีกว่า bar.drilltierreq = จำเป็นต้องใช้เครื่องขุดที่ดีกว่า
bar.noresources = ทรัพยากรหาย bar.noresources = ทรัพยากรหาย
@@ -671,7 +671,7 @@ bar.progress = ความคืบหน้าในการสร้าง
bar.input = นำเข้า bar.input = นำเข้า
bar.output = ส่งออก bar.output = ส่งออก
units.processorcontrol = [lightgray]Processor Controlled units.processorcontrol = [lightgray]ถูก Processor ควบคุม
bullet.damage = [stat]{0}[lightgray] ดาเมจ bullet.damage = [stat]{0}[lightgray] ดาเมจ
bullet.splashdamage = [stat]{0}[lightgray] ดาเมจกระจาย ~[stat] {1}[lightgray] ช่อง bullet.splashdamage = [stat]{0}[lightgray] ดาเมจกระจาย ~[stat] {1}[lightgray] ช่อง
@@ -680,8 +680,8 @@ bullet.homing = [stat]ติดตาม
bullet.shock = [stat]ช็อค bullet.shock = [stat]ช็อค
bullet.frag = [stat]แตกออก bullet.frag = [stat]แตกออก
bullet.knockback = [stat]{0}[lightgray] ดันกลับ bullet.knockback = [stat]{0}[lightgray] ดันกลับ
bullet.pierce = [stat]{0}[lightgray]x pierce bullet.pierce = [stat]{0}[lightgray]x ทะลุ
bullet.infinitepierce = [stat]pierce bullet.infinitepierce = [stat]ทะลุ
bullet.freezing = [stat]แช่แข็ง bullet.freezing = [stat]แช่แข็ง
bullet.tarred = [stat]เปื้อนน้ำมัน bullet.tarred = [stat]เปื้อนน้ำมัน
bullet.multiplier = [stat]{0}[lightgray]x จำนวนกระสุนต่อ 1 ไอเท็ม bullet.multiplier = [stat]{0}[lightgray]x จำนวนกระสุนต่อ 1 ไอเท็ม
@@ -696,9 +696,9 @@ unit.liquidunits = หน่วยของเหลว
unit.powerunits = หน่วยพลังงาน unit.powerunits = หน่วยพลังงาน
unit.degrees = องศา unit.degrees = องศา
unit.seconds = วินาที unit.seconds = วินาที
unit.minutes = mins unit.minutes = นาที
unit.persecond = /วินาที unit.persecond = /วินาที
unit.perminute = /min unit.perminute = /ต่อนาที
unit.timesspeed = เท่าเร็วขึ้น unit.timesspeed = เท่าเร็วขึ้น
unit.percent = % unit.percent = %
unit.shieldhealth = เลือดเกราะ unit.shieldhealth = เลือดเกราะ
@@ -729,7 +729,7 @@ setting.autotarget.name = เล็งเป้าอัตโนมัติ
setting.keyboard.name = การควบคุมแบบ เม้าส์+คีย์บอร์ด setting.keyboard.name = การควบคุมแบบ เม้าส์+คีย์บอร์ด
setting.touchscreen.name = การควบคุมแบบหน้าจอสัมผัส setting.touchscreen.name = การควบคุมแบบหน้าจอสัมผัส
setting.fpscap.name = FPS setting.fpscap.name = FPS
setting.fpscap.none = ไม่มี setting.fpscap.none =
setting.fpscap.text = {0} FPS setting.fpscap.text = {0} FPS
setting.uiscale.name = ขนาด UI[lightgray] (จำเป็นต้องรีสตาร์ท)[] setting.uiscale.name = ขนาด UI[lightgray] (จำเป็นต้องรีสตาร์ท)[]
setting.swapdiagonal.name = การวางเป็นเส้นทแยงเสมอ setting.swapdiagonal.name = การวางเป็นเส้นทแยงเสมอ
@@ -803,8 +803,8 @@ keybind.pan.name = แพนวิว
keybind.boost.name = บูสต์ keybind.boost.name = บูสต์
keybind.schematic_select.name = เลือกภูมิภาค keybind.schematic_select.name = เลือกภูมิภาค
keybind.schematic_menu.name = เมนู Schematic keybind.schematic_menu.name = เมนู Schematic
keybind.schematic_flip_x.name = กลับ Schematic ในแกน X keybind.schematic_flip_x.name = กลับแผนผังแกน X
keybind.schematic_flip_y.name = กลับ Schematic ในแกน Y keybind.schematic_flip_y.name = กลับแผนผังแกน Y
keybind.category_prev.name = หมวดหมู่ก่อนหน้า keybind.category_prev.name = หมวดหมู่ก่อนหน้า
keybind.category_next.name = หมวดหมู่ถ้ดไป keybind.category_next.name = หมวดหมู่ถ้ดไป
keybind.block_select_left.name = เลือกบล็อค ซ้าย keybind.block_select_left.name = เลือกบล็อค ซ้าย
@@ -821,7 +821,7 @@ keybind.block_select_07.name = หมวดหมู่/เลือกบล็
keybind.block_select_08.name = หมวดหมู่/เลือกบล็อค 8 keybind.block_select_08.name = หมวดหมู่/เลือกบล็อค 8
keybind.block_select_09.name = หมวดหมู่/เลือกบล็อค 9 keybind.block_select_09.name = หมวดหมู่/เลือกบล็อค 9
keybind.block_select_10.name = หมวดหมู่/เลือกบล็อค 10 keybind.block_select_10.name = หมวดหมู่/เลือกบล็อค 10
keybind.fullscreen.name = เปิด/ปิด Fullscreen keybind.fullscreen.name = เปิด/ปิด เต็มจอ
keybind.select.name = เลือก/ยิง keybind.select.name = เลือก/ยิง
keybind.diagonal_placement.name = วางเป็นแนวทแยง keybind.diagonal_placement.name = วางเป็นแนวทแยง
keybind.pick.name = เลือกบล็อค keybind.pick.name = เลือกบล็อค
@@ -861,7 +861,7 @@ mode.custom = กฎแบบกำหนดเอง
rules.infiniteresources = ทรัพยากรไม่จำกัด rules.infiniteresources = ทรัพยากรไม่จำกัด
rules.reactorexplosions = การระเบิดของ rules.reactorexplosions = การระเบิดของ
rules.schematic = Schematics Allowed rules.schematic = อนุญาตแผนผัง
rules.wavetimer = ตัวนับเวลาปล่อยคลื่น(รอบ) rules.wavetimer = ตัวนับเวลาปล่อยคลื่น(รอบ)
rules.waves = คลื่น(รอบ) rules.waves = คลื่น(รอบ)
rules.attack = โหมดการโจมตี rules.attack = โหมดการโจมตี
@@ -884,10 +884,10 @@ rules.title.waves = คลื่น(รอบ)
rules.title.resourcesbuilding = ทรัพยากรและสิ่งก่อสร้าง rules.title.resourcesbuilding = ทรัพยากรและสิ่งก่อสร้าง
rules.title.enemy = ศัตรู rules.title.enemy = ศัตรู
rules.title.unit = ยูนิต rules.title.unit = ยูนิต
rules.title.experimental = Experimental rules.title.experimental = ทดลอง
rules.title.environment = สิ่งแวดล้อม rules.title.environment = สิ่งแวดล้อม
rules.lighting = แสง rules.lighting = แสง
rules.enemyLights = Enemy Lights rules.enemyLights = ไฟศัตรู
rules.fire = ไฟ rules.fire = ไฟ
rules.explosions = ดาเมจบล็อค/ยูนิตระเบิด rules.explosions = ดาเมจบล็อค/ยูนิตระเบิด
rules.ambientlight = แสงจากแวดล้อม rules.ambientlight = แสงจากแวดล้อม
@@ -960,8 +960,8 @@ block.parallax.name = พาราแล็ซ
block.cliff.name = หน้าผ่า block.cliff.name = หน้าผ่า
block.sand-boulder.name = ก้อนหินทราย block.sand-boulder.name = ก้อนหินทราย
block.grass.name = หญ้า block.grass.name = หญ้า
block.slag.name = Slag block.slag.name = กากแร่
block.space.name = Space block.space.name = อวกาศ
block.salt.name = เกลือ block.salt.name = เกลือ
block.salt-wall.name = กำแพงเกลือ block.salt-wall.name = กำแพงเกลือ
block.pebbles.name = ก้อนกรวด block.pebbles.name = ก้อนกรวด
@@ -1007,7 +1007,7 @@ block.darksand-water.name = น้ำบนทรายดำ
block.char.name = ถ่าน block.char.name = ถ่าน
block.dacite.name = ดาไซต์ block.dacite.name = ดาไซต์
block.dacite-wall.name = กำแพงดาไซต์ block.dacite-wall.name = กำแพงดาไซต์
block.dacite-boulder.name = Dacite Boulder block.dacite-boulder.name = โขดหินดาไซต์
block.ice-snow.name = น้ำแข็งหิมะ block.ice-snow.name = น้ำแข็งหิมะ
block.stone-wall.name = กำแพงหิน block.stone-wall.name = กำแพงหิน
block.ice-wall.name = กำแพงน้ำแข็ง block.ice-wall.name = กำแพงน้ำแข็ง
@@ -1102,7 +1102,7 @@ block.power-source.name = จุดกำเนิดพลังงาน
block.unloader.name = ตัวถ่ายไอเทม block.unloader.name = ตัวถ่ายไอเทม
block.vault.name = ตู้นิรภัย block.vault.name = ตู้นิรภัย
block.wave.name = เวฟ block.wave.name = เวฟ
block.tsunami.name = Tsunami block.tsunami.name = สึนามิ
block.swarmer.name = สวอร์มเมอร์ block.swarmer.name = สวอร์มเมอร์
block.salvo.name = ซัลโว block.salvo.name = ซัลโว
block.ripple.name = ริปเปิล block.ripple.name = ริปเปิล
@@ -1142,11 +1142,11 @@ block.arc.name = อาร์ค
block.rtg-generator.name = เครื่องกำเนิดไฟฟ้า RTG block.rtg-generator.name = เครื่องกำเนิดไฟฟ้า RTG
block.spectre.name = สเปคเตอร์ block.spectre.name = สเปคเตอร์
block.meltdown.name = เมลท์ดาวน์ block.meltdown.name = เมลท์ดาวน์
block.foreshadow.name = Foreshadow block.foreshadow.name = ฟอร์ชาโดว์
block.container.name = ตู้เก็บของ block.container.name = ตู้เก็บของ
block.launch-pad.name = ฐานส่งของ block.launch-pad.name = ฐานส่งของ
block.launch-pad-large.name = ฐานส่งของขนาดใหญ่ block.launch-pad-large.name = ฐานส่งของขนาดใหญ่
block.segment.name = Segment block.segment.name = เซ็กเมนต์
block.command-center.name = ศูนย์ควบคุม block.command-center.name = ศูนย์ควบคุม
block.ground-factory.name = โรงงานภาคพื้นดิน block.ground-factory.name = โรงงานภาคพื้นดิน
block.air-factory.name = โรงงานภาคอากาศ block.air-factory.name = โรงงานภาคอากาศ

View File

@@ -83,13 +83,13 @@ joingame = Tham gia trò chơi
customgame = Tùy chỉnh customgame = Tùy chỉnh
newgame = Trò chơi mới newgame = Trò chơi mới
none = <trống> none = <trống>
minimap = Bản đồ mini minimap = Bản đồ nhỏ
position = Vị trí position = Vị trí
close = Đóng close = Đóng
website = Website website = Website
quit = Thoát quit = Thoát
save.quit = Lưu & Thoát save.quit = Lưu & Thoát
maps = Maps maps = Bản đồ
maps.browse = Duyệt bản đồ maps.browse = Duyệt bản đồ
continue = Tiếp tục continue = Tiếp tục
maps.none = [lightgray]Không có bản đồ nào được tìm thấy! maps.none = [lightgray]Không có bản đồ nào được tìm thấy!
@@ -971,19 +971,19 @@ item.graphite.name = Than chì
item.titanium.name = Titan item.titanium.name = Titan
item.thorium.name = Thorium item.thorium.name = Thorium
item.silicon.name = Silicon item.silicon.name = Silicon
item.plastanium.name = Plastanium item.plastanium.name = Nhựa
item.phase-fabric.name = Phase Fabric item.phase-fabric.name = Phase Fabric
item.surge-alloy.name = Surge Alloy item.surge-alloy.name = Hợp kim
item.spore-pod.name = Vỏ bào tử item.spore-pod.name = Vỏ bào tử
item.sand.name = Cát item.sand.name = Cát
item.blast-compound.name = Chất nổ item.blast-compound.name = Chất nổ
item.pyratite.name = Pyratite item.pyratite.name = Tiền chất nổ
item.metaglass.name = Metaglass item.metaglass.name = Thuỷ tinh
item.scrap.name = Phế liệu item.scrap.name = Phế liệu
liquid.water.name = Nước liquid.water.name = Nước
liquid.slag.name = Xỉ nóng chảy liquid.slag.name = Xỉ nóng chảy
liquid.oil.name = Dầu liquid.oil.name = Dầu
liquid.cryofluid.name = Cryofluid liquid.cryofluid.name = Chất làm lạnh
#Why we should translate this ??? #Why we should translate this ???
unit.dagger.name = Dagger unit.dagger.name = Dagger
@@ -1050,8 +1050,8 @@ block.scrap-wall-huge.name = Tường phế liệu khổng lồ
block.scrap-wall-gigantic.name = Tường phế liệu siêu khổng lồ block.scrap-wall-gigantic.name = Tường phế liệu siêu khổng lồ
block.thruster.name = Thruster block.thruster.name = Thruster
block.kiln.name = Lò nung block.kiln.name = Lò nung
block.graphite-press.name = Máy nén thang chì block.graphite-press.name = Máy nén than chì
block.multi-press.name = Máy nén thang chì lớn block.multi-press.name = Máy nén than chì lớn
block.constructing = {0} [lightgray](Đang xây dựng) block.constructing = {0} [lightgray](Đang xây dựng)
block.spawn.name = Khu vực tạo ra kẻ địch block.spawn.name = Khu vực tạo ra kẻ địch
block.core-shard.name = Căn cứ: Cơ sở block.core-shard.name = Căn cứ: Cơ sở
@@ -1120,21 +1120,21 @@ block.hail.name = Hail
block.lancer.name = Lancer block.lancer.name = Lancer
block.conveyor.name = Băng chuyền block.conveyor.name = Băng chuyền
block.titanium-conveyor.name = Băng chuyền titan block.titanium-conveyor.name = Băng chuyền titan
block.plastanium-conveyor.name = Băng chuyền Plastanium block.plastanium-conveyor.name = Băng chuyền nhựa
block.armored-conveyor.name = Băng chuyền bọc thép block.armored-conveyor.name = Băng chuyền bọc giáp
block.junction.name = Junction block.junction.name = Junction
block.router.name = Router block.router.name = Bộ định tuyến
block.distributor.name = Distributor block.distributor.name = Bộ phân phát
block.sorter.name = Sorter block.sorter.name = Bộ lọc
block.inverted-sorter.name = Sorter ngược block.inverted-sorter.name = Bộ lọc ngược
block.message.name = Thông điệp block.message.name = Thông điệp
block.illuminator.name = Đèn block.illuminator.name = Đèn
block.overflow-gate.name = Overflow Gate block.overflow-gate.name = Cổng tràn
block.underflow-gate.name = Underflow Gate block.underflow-gate.name = Cổng tràn ngược
block.silicon-smelter.name = Máy nấu silicon block.silicon-smelter.name = Máy nấu silicon
block.phase-weaver.name = Máy tạo Phase block.phase-weaver.name = Máy tạo Phase
block.pulverizer.name = Máy nghiền block.pulverizer.name = Máy nghiền
block.cryofluid-mixer.name = Máy trộn Cryofluid block.cryofluid-mixer.name = Máy sản xuất chất làm mát
block.melter.name = Máy nung chảy block.melter.name = Máy nung chảy
block.incinerator.name = Máy phân hủy block.incinerator.name = Máy phân hủy
block.spore-press.name = Máy nén bào tử block.spore-press.name = Máy nén bào tử
@@ -1142,7 +1142,7 @@ block.separator.name = Máy phân tách
block.coal-centrifuge.name = Máy tạo than block.coal-centrifuge.name = Máy tạo than
block.power-node.name = Chốt điện block.power-node.name = Chốt điện
block.power-node-large.name = Chốt điện lớn block.power-node-large.name = Chốt điện lớn
block.surge-tower.name = Tháp Surge block.surge-tower.name = Tháp điện
block.diode.name = Diode pin block.diode.name = Diode pin
block.battery.name = Pin block.battery.name = Pin
block.battery-large.name = Pin lớn block.battery-large.name = Pin lớn
@@ -1151,7 +1151,7 @@ block.steam-generator.name = Máy phát điện hơi nước
block.differential-generator.name = Máy phát điện vi sai block.differential-generator.name = Máy phát điện vi sai
block.impact-reactor.name = Lò phản ứng nhiệt hạch block.impact-reactor.name = Lò phản ứng nhiệt hạch
block.mechanical-drill.name = Máy khoan cơ khí block.mechanical-drill.name = Máy khoan cơ khí
block.pneumatic-drill.name = Khoan khí nén block.pneumatic-drill.name = Máy khoan khí nén
block.laser-drill.name = Máy khoan laser block.laser-drill.name = Máy khoan laser
block.water-extractor.name = Máy khoan nước block.water-extractor.name = Máy khoan nước
block.cultivator.name = Máy nuôi cấy bào tử block.cultivator.name = Máy nuôi cấy bào tử
@@ -1163,8 +1163,8 @@ block.liquid-source.name = Nguồn chất lỏng
block.liquid-void.name = Hủy chất lỏng block.liquid-void.name = Hủy chất lỏng
block.power-void.name = Hủy năng lượng block.power-void.name = Hủy năng lượng
block.power-source.name = Vô hạn năng lượng block.power-source.name = Vô hạn năng lượng
block.unloader.name = Unloader block.unloader.name = Điểm dỡ hàng
block.vault.name = Vault block.vault.name = Nhà kho
block.wave.name = Wave block.wave.name = Wave
block.tsunami.name = Tsunami block.tsunami.name = Tsunami
block.swarmer.name = Swarmer block.swarmer.name = Swarmer
@@ -1172,31 +1172,31 @@ block.salvo.name = Salvo
block.ripple.name = Ripple block.ripple.name = Ripple
block.phase-conveyor.name = Phase Conveyor block.phase-conveyor.name = Phase Conveyor
block.bridge-conveyor.name = Bridge Conveyor block.bridge-conveyor.name = Bridge Conveyor
block.plastanium-compressor.name = Máy nén Plastanium block.plastanium-compressor.name = Máy sản xuất nhựa
block.pyratite-mixer.name = Máy trộn Pyratite block.pyratite-mixer.name = Máy trộn tiền chất nổ
block.blast-mixer.name = Máy trộn chất nổ block.blast-mixer.name = Máy trộn chất nổ
block.solar-panel.name = Pin mặt trời block.solar-panel.name = Pin mặt trời
block.solar-panel-large.name = Pin mặt trời lớn block.solar-panel-large.name = Pin mặt trời lớn
block.oil-extractor.name = Máy khoan dầu block.oil-extractor.name = Máy khoan dầu
block.repair-point.name = Điểm sửa chữa block.repair-point.name = Điểm sửa chữa
block.pulse-conduit.name = Ống dẫn titan block.pulse-conduit.name = Ống dẫn titan
block.plated-conduit.name = Ống dẫn bọc thép block.plated-conduit.name = Ống dẫn bọc giáp
block.phase-conduit.name = Ống dẫn Phase block.phase-conduit.name = Ống dẫn Phase
block.liquid-router.name = Liquid Router block.liquid-router.name = Bộ định tuyến chất lỏng
block.liquid-tank.name = Thùng chất lỏng block.liquid-tank.name = Thùng chất lỏng
block.liquid-junction.name = Liquid Junction block.liquid-junction.name = Liquid Junction
block.bridge-conduit.name = Bridge Conduit block.bridge-conduit.name = Bridge Conduit
block.rotary-pump.name = Bơm điện block.rotary-pump.name = Bơm điện
block.thorium-reactor.name = Lò phản ứng Thorium block.thorium-reactor.name = Lò phản ứng Thorium
block.mass-driver.name = Mass Driver block.mass-driver.name = Máy phóng điện từ
block.blast-drill.name = Máy khoang thủy lực block.blast-drill.name = Máy khoan thủy lực
block.thermal-pump.name = Bơm nhiệt block.thermal-pump.name = Bơm nhiệt
block.thermal-generator.name = Máy phát nhiệt điện block.thermal-generator.name = Máy phát nhiệt điện
block.alloy-smelter.name = Lò luyện hợp kim block.alloy-smelter.name = Lò luyện hợp kim
block.mender.name = Máy sửa chữa block.mender.name = Máy sửa chữa
block.mend-projector.name = Máy sửa lớn block.mend-projector.name = Máy sửa lớn
block.surge-wall.name = Tường Surge block.surge-wall.name = Tường hợp kim
block.surge-wall-large.name = Tường Surge lớn block.surge-wall-large.name = Tường hợp kim lớn
block.cyclone.name = Cyclone block.cyclone.name = Cyclone
block.fuse.name = Fuse block.fuse.name = Fuse
block.shock-mine.name = Mìn gây sốc block.shock-mine.name = Mìn gây sốc
@@ -1220,7 +1220,7 @@ block.multiplicative-reconstructor.name = Máy nâng cấp quân đội cấp 3
block.exponential-reconstructor.name = Máy nâng cấp quân đội cấp 4 block.exponential-reconstructor.name = Máy nâng cấp quân đội cấp 4
block.tetrative-reconstructor.name = Máy nâng cấp quân đội cấp 5 block.tetrative-reconstructor.name = Máy nâng cấp quân đội cấp 5
block.payload-conveyor.name = Băng chuyền khối hàng block.payload-conveyor.name = Băng chuyền khối hàng
block.payload-router.name = Payload Router block.payload-router.name = Bộ định tuyến khối hàng
block.disassembler.name = Máy phân tách lớn block.disassembler.name = Máy phân tách lớn
block.silicon-crucible.name = Máy nấu Silicon lớn block.silicon-crucible.name = Máy nấu Silicon lớn
block.overdrive-dome.name = Máy tăng tốc lớn block.overdrive-dome.name = Máy tăng tốc lớn
@@ -1234,8 +1234,8 @@ block.switch.name = Công tắc
block.micro-processor.name = Bộ xử lí mini block.micro-processor.name = Bộ xử lí mini
block.logic-processor.name = Bộ xử lý block.logic-processor.name = Bộ xử lý
block.hyper-processor.name = Bộ xử lý lớn block.hyper-processor.name = Bộ xử lý lớn
block.logic-display.name = Màng hình block.logic-display.name = Màn hình
block.large-logic-display.name = Màng hình lớn block.large-logic-display.name = Màn hình lớn
block.memory-cell.name = Bộ nhớ block.memory-cell.name = Bộ nhớ
block.memory-bank.name = Bộ nhớ lớn block.memory-bank.name = Bộ nhớ lớn
@@ -1307,41 +1307,41 @@ item.pyratite.description = Dùng trong vũ khí gây cháy và máy phát đi
liquid.water.description = Dùng để làm mát máy móc và xử lý chất thải. liquid.water.description = Dùng để làm mát máy móc và xử lý chất thải.
liquid.slag.description = Dùng để tách các kim loại, hoặc phun vào kẻ thù như một loại vũ khí. liquid.slag.description = Dùng để tách các kim loại, hoặc phun vào kẻ thù như một loại vũ khí.
liquid.oil.description = Dùng trong sản xuất vật liệu tiên tiến và làm đạn gây cháycháy. liquid.oil.description = Dùng trong sản xuất vật liệu tiên tiến và làm đạn gây cháy.
liquid.cryofluid.description = Dùng làm chất làm mát trong lò phản ứng, súng và nhà máy. liquid.cryofluid.description = Dùng làm chất làm mát trong lò phản ứng, súng và nhà máy.
block.resupply-point.description = Cung cấp đạn đồng cho các quân lính ở gần. Không tương thích với quân lính sử dụng điện. block.resupply-point.description = Cung cấp đạn đồng cho các quân lính ở gần. Không tương thích với quân lính sử dụng điện.
block.armored-conveyor.description = Vận chuyển vật phẩm về phía . Không nhận đầu vào từ phía bên. block.armored-conveyor.description = Vận chuyển vật phẩm về phía. Không nhận đầu vào từ phía bên.
block.illuminator.description = Phát sáng. block.illuminator.description = Phát sáng.
block.message.description = Lưu trữ tin nhắn giao tiếp giữa đồng đội. block.message.description = Lưu trữ tin nhắn giao tiếp giữa đồng đội.
block.graphite-press.description = Nén than thành than chì. block.graphite-press.description = Nén than thành than chì.
block.multi-press.description = Nén than thành than chì. Cần nước làm chất làm mát. block.multi-press.description = Nén than thành than chì. Cần nước làm chất làm mát.
block.silicon-smelter.description = Tinh chế silicon từ cát và than. block.silicon-smelter.description = Tinh chế silicon từ cát và than.
block.kiln.description = Nấu chảy cát và chì thành metaglass. block.kiln.description = Nấu chảy cát và chì thành thuỷ tinh.
block.plastanium-compressor.description = Sản xuất plastanium từ dầu và titan. block.plastanium-compressor.description = Sản xuất nhựa từ dầu và titan.
block.phase-weaver.description = Tổng hợp phase fabric từ thorium và cát. block.phase-weaver.description = Tổng hợp phase fabric từ thorium và cát.
block.alloy-smelter.description = Trộn titan, chì, silicon và đồng thành hợp kim surge. block.alloy-smelter.description = Trộn titan, chì, silicon và đồng thành hợp kim.
block.cryofluid-mixer.description = Trộn nước và bột titan để sản xuất cryofluid. block.cryofluid-mixer.description = Trộn nước và bột titan để sản xuất chất làm mát.
block.blast-mixer.description = Tạo ra hợp chất nổ từ pyratite và vỏ bào tử. block.blast-mixer.description = Tạo ra hợp chất nổ từ tiền chất nổ và vỏ bào tử.
block.pyratite-mixer.description = Trộn than, chì và cát thành pyratite. block.pyratite-mixer.description = Trộn than, chì và cát thành tiền chất nổ.
block.melter.description = Nung phế liệu thành xỉ. block.melter.description = Nung phế liệu thành xỉ.
block.separator.description = Tách xỉ thành các thành phần khoáng của nó. block.separator.description = Tách xỉ thành các thành phần khoáng của nó.
block.spore-press.description = Nén vỏ bào tử thành dầu. block.spore-press.description = Nén vỏ bào tử thành dầu.
block.pulverizer.description = Nghiền phế liệu thành cát. block.pulverizer.description = Nghiền phế liệu thành cát.
block.coal-centrifuge.description = Biến dầu thành than. block.coal-centrifuge.description = Biến dầu thành than.
block.incinerator.description = Tiêu hủy bất kỳ vật phẩm hoặc chất lỏng nào mà nó nhận được. block.incinerator.description = Tiêu hủy bất kỳ vật phẩm hoặc chất lỏng nào mà nó nhận được.
block.power-void.description = Hủy tất cả năng lượng nhận được. Chỉ có trong chế độ Sandbox. block.power-void.description = Hủy tất cả năng lượng nhận được. Chỉ có trong chế độ tự do.
block.power-source.description = Tạo ra năng lượng mãi mãi. Chỉ có trong chế độ Sandbox. block.power-source.description = Tạo ra năng lượng mãi mãi. Chỉ có trong chế độ tự do.
block.item-source.description = Tạo ra vật phẩm mãi mãi. Chỉ có trong chế độ Sandbox. block.item-source.description = Tạo ra vật phẩm mãi mãi. Chỉ có trong chế độ tự do.
block.item-void.description = Hủy mọi vật phẩm. Chỉ có trong chế độ Sandbox. block.item-void.description = Hủy mọi vật phẩm. Chỉ có trong chế độ tự do.
block.liquid-source.description = Tạo ra chất lỏng mãi mãi. Chỉ có trong chế độ Sandbox. block.liquid-source.description = Tạo ra chất lỏng mãi mãi. Chỉ có trong chế độ tự do.
block.liquid-void.description = Loại bỏ mọi chất lỏng. Chỉ có trong chế độ Sandbox. block.liquid-void.description = Loại bỏ mọi chất lỏng. Chỉ có trong chế độ tự do.
block.copper-wall.description = Bảo vệ các công trình khỏi đạn của kẻ thù. block.copper-wall.description = Bảo vệ các công trình khỏi đạn của kẻ thù.
block.copper-wall-large.description = Bảo vệ nhiều công trình khỏi đạn của kẻ thù. block.copper-wall-large.description = Bảo vệ nhiều công trình khỏi đạn của kẻ thù.
block.titanium-wall.description = Bảo vệ các công trình khỏi đạn của kẻ thù. block.titanium-wall.description = Bảo vệ các công trình khỏi đạn của kẻ thù.
block.titanium-wall-large.description = Bảo vệ nhiều công trình khỏi đạn của kẻ thù. block.titanium-wall-large.description = Bảo vệ nhiều công trình khỏi đạn của kẻ thù.
block.plastanium-wall.description = Bảo vệ công trình khỏi đạn của kẻ thù. Hấp thụ tia laser và tia điện. Chặn kết nối nguồn tự động. block.plastanium-wall.description = Bảo vệ công trình khỏi đạn của kẻ thù. Hấp thụ tia laser và tia điện. Chặn kết nối điện tự động.
block.plastanium-wall-large.description = Bảo vệ nhiều công trình khỏi đạn của kẻ thù. Hấp thụ tia laser và tia điện. Chặn kết nối nguồn tự động. block.plastanium-wall-large.description = Bảo vệ nhiều công trình khỏi đạn của kẻ thù. Hấp thụ tia laser và tia điện. Chặn kết nối điện tự động.
block.thorium-wall.description = Bảo vệ công trình khỏi đạn của kẻ thù. block.thorium-wall.description = Bảo vệ công trình khỏi đạn của kẻ thù.
block.thorium-wall-large.description = Bảo vệ nhiều công trình khỏi đạn của kẻ thù. block.thorium-wall-large.description = Bảo vệ nhiều công trình khỏi đạn của kẻ thù.
block.phase-wall.description = Bảo vệ công trình khỏi đạn của kẻ thù, phản hầu hết đạn khi va chạm. block.phase-wall.description = Bảo vệ công trình khỏi đạn của kẻ thù, phản hầu hết đạn khi va chạm.
@@ -1405,22 +1405,22 @@ block.cultivator.details = Công nghệ được phục hồi. Được sử d
block.oil-extractor.description = Sử dụng lượng năng lượng năng lớn, sử dụng cát và nước để khoan dầu. block.oil-extractor.description = Sử dụng lượng năng lượng năng lớn, sử dụng cát và nước để khoan dầu.
block.core-shard.description = Trung tâm của căn cứ. Sau khi bị phá hủy, khu vực này sẽ bị mất. block.core-shard.description = Trung tâm của căn cứ. Sau khi bị phá hủy, khu vực này sẽ bị mất.
block.core-shard.details = Lần thử đầu tiên. Gọn nhẹ. Tự thay thế. Được trang bị tên lửa đẩy dùng một lần. Không được thiết kế để di chuyển giữa các hành tinh. block.core-shard.details = Lần thử đầu tiên. Gọn nhẹ. Tự thay thế. Được trang bị tên lửa đẩy dùng một lần. Không được thiết kế để di chuyển giữa các hành tinh.
block.core-foundation.description = Core of the base. Well armored. Stores more resources than a Shard. block.core-foundation.description = Trung tâm của căn cứ. Được bọc giáp. Stores more resources than a Shard.
block.core-foundation.details = The second iteration. block.core-foundation.details = The second iteration.
block.core-nucleus.description = Lõi của căn cứ. Bọc giáp chắc chắn. Lưu trữ lượng lớn tài nguyên. block.core-nucleus.description = Lõi của căn cứ. Bọc giáp chắc chắn. Lưu trữ lượng lớn tài nguyên.
block.core-nucleus.details = Lần thử thứ ba và lần thử cuối. block.core-nucleus.details = Lần thử thứ ba và lần thử cuối.
block.vault.description = Lưu trữ lượng lớn vật phẩm mỗi loại. Nội dung có thể được lấy ra với Unloader. block.vault.description = Lưu trữ lượng lớn vật phẩm mỗi loại. Nội dung có thể được lấy ra với điểm dỡ hàng.
block.container.description = Lưu trữ lượng lớn vật phẩm mỗi loại. Nội dung có thể được lấy ra với Unloader. block.container.description = Lưu trữ lượng lớn vật phẩm mỗi loại. Nội dung có thể được lấy ra với điểm dỡ hàng.
block.unloader.description = Lấy các vật phẩm được chọn từ các ô gần đó. block.unloader.description = Lấy các vật phẩm được chọn từ các ô gần đó.
block.launch-pad.description = Phóng lô vật phẩm vào phân vùng. block.launch-pad.description = Phóng lô vật phẩm vào phân vùng.
block.duo.description = Bắn xen kẽ đạn vào kẻ địch. block.duo.description = Bắn xen kẽ đạn vào kẻ địch.
block.scatter.description = Bắn chì, phế liệu hoặc metaglass vào máy bay địch. block.scatter.description = Bắn chì, phế liệu hoặc thuỷ tinh vào kẻ địch trên không.
block.scorch.description = Đốt mọi kẻ địch trên mặt đất. Hiệu quả cao ở tầm gần. block.scorch.description = Đốt mọi kẻ địch trên mặt đất. Hiệu quả cao ở tầm gần.
block.hail.description = Phóng đạn nhỏ vào kẻ địch trên mặt đất ở tầm xa. block.hail.description = Phóng đạn nhỏ vào kẻ địch trên mặt đất ở tầm xa.
block.wave.description = Phóng một tia chất lỏng vào kẻ địch. Tự chữa cháy nếu được cung cấp nước. block.wave.description = Phóng một tia chất lỏng vào kẻ địch. Tự chữa cháy nếu được cung cấp nước.
block.lancer.description = Tích tụ và phóng tia năng lượng mạnh vào kẻ địch trên mặt đất. block.lancer.description = Tích tụ và phóng tia năng lượng mạnh vào kẻ địch trên mặt đất.
block.arc.description = Phóng tia điện vào kẻ địch trên mặt đất. block.arc.description = Phóng tia điện vào kẻ địch trên mặt đất.
block.swarmer.description = Bắn tên lửa homing vào kẻ địch. block.swarmer.description = Bắn tên lửa truy đuổi vào kẻ địch.
block.salvo.description = Bắn đạn salvo vào kẻ địch. block.salvo.description = Bắn đạn salvo vào kẻ địch.
block.fuse.description = Bắn ba đạn xuyên giáp tầm gần vào kẻ địch. block.fuse.description = Bắn ba đạn xuyên giáp tầm gần vào kẻ địch.
block.ripple.description = Bắn cụm đạn vào kẻ địch trên mặt đất ở tầm xa. block.ripple.description = Bắn cụm đạn vào kẻ địch trên mặt đất ở tầm xa.
@@ -1432,7 +1432,7 @@ block.repair-point.description = Liên tục sửa chữa robot ở gần trong
block.segment.description = Gây hư hại và phá hủy đạn đến. Ngoại trừ tia laser. block.segment.description = Gây hư hại và phá hủy đạn đến. Ngoại trừ tia laser.
block.parallax.description = Bắn một tia kéo máy bay địch và làm hư hỏng nó trong quá trình kéo. block.parallax.description = Bắn một tia kéo máy bay địch và làm hư hỏng nó trong quá trình kéo.
block.tsunami.description = Phóng một tia chất lỏng mạnh vào kẻ địch. Tự chữa cháy nếu được cung cấp nước. block.tsunami.description = Phóng một tia chất lỏng mạnh vào kẻ địch. Tự chữa cháy nếu được cung cấp nước.
block.silicon-crucible.description = Tinh chế silicon từ cát và than, sử dụng pyratite làm nguồn nhiệt phụ. Có hiệu quả cao hơn khi ở nơi nóng. block.silicon-crucible.description = Tinh chế silicon từ cát và than, sử dụng tiền chất nổ làm nguồn nhiệt phụ. Có hiệu quả cao hơn khi ở nơi nóng.
block.disassembler.description = Tách xỉ thành các kim loại khác nhau với hiệu suất thấp. Có thể sản xuất thorium. block.disassembler.description = Tách xỉ thành các kim loại khác nhau với hiệu suất thấp. Có thể sản xuất thorium.
block.overdrive-dome.description = Tăng tốc độ làm việc của các công trình lân cận. Sử dụng phase fabric and silicon để hoạt động. block.overdrive-dome.description = Tăng tốc độ làm việc của các công trình lân cận. Sử dụng phase fabric and silicon để hoạt động.
block.payload-conveyor.description = Di chuyển những khối hàng lớn, chẳng hạn như các quân lính từ nhà máy. block.payload-conveyor.description = Di chuyển những khối hàng lớn, chẳng hạn như các quân lính từ nhà máy.
@@ -1484,7 +1484,7 @@ unit.risso.description = Bắn chùm tên lửa và đạn lên kẻ địch t
unit.minke.description = Bắn đạn và đạn thường lên kẻ địch tầm gần trên mặt đất. unit.minke.description = Bắn đạn và đạn thường lên kẻ địch tầm gần trên mặt đất.
unit.bryde.description = Bắn đạn tầm xa và tên lửa vào kẻ địch. unit.bryde.description = Bắn đạn tầm xa và tên lửa vào kẻ địch.
unit.sei.description = Bắn chùm tên lửa và đạn xuyên giáp vào kẻ địch. unit.sei.description = Bắn chùm tên lửa và đạn xuyên giáp vào kẻ địch.
unit.omura.description = Bắn đạn từ trường xuyên giáp tầm xa vào kẻ địch. Tạo nên robot báo hiệu. unit.omura.description = Bắn đạn từ trường xuyên giáp tầm xa vào kẻ địch. Tạo nên drone báo hiệu.
unit.alpha.description = Bảo vệ căn cứ cơ sở khỏi kẻ thù. Có thể xây dựng. unit.alpha.description = Bảo vệ căn cứ cơ sở khỏi kẻ thù. Có thể xây dựng.
unit.beta.description = Bảo vệ căn cứ trụ sở khỏi kẻ thù. Có thể xây dựng. unit.beta.description = Bảo vệ căn cứ trụ sở khỏi kẻ thù. Có thể xây dựng.
unit.gamma.description = Bảo vệ căn cứ trung tâm khỏi kẻ thù. Có thể xây dựng. unit.gamma.description = Bảo vệ căn cứ trung tâm khỏi kẻ thù. Có thể xây dựng.

View File

@@ -13,6 +13,7 @@ link.google-play.description = Google Play 页面
link.f-droid.description = F-Droid 页面 link.f-droid.description = F-Droid 页面
link.wiki.description = Mindustry 官方 Wiki link.wiki.description = Mindustry 官方 Wiki
link.suggestions.description = 提出新特性的建议 link.suggestions.description = 提出新特性的建议
link.bug.description = 发现了 Bug ?在这里报告
linkfail = 打开链接失败!\n网址已复制到您的剪贴板。 linkfail = 打开链接失败!\n网址已复制到您的剪贴板。
screenshot = 屏幕截图已保存到 {0} screenshot = 屏幕截图已保存到 {0}
screenshot.invalid = 地图太大,可能没有足够的内存用于截图。 screenshot.invalid = 地图太大,可能没有足够的内存用于截图。
@@ -22,7 +23,6 @@ gameover.pvp = [accent] {0}[]队获胜!
gameover.waiting = [accent]正在更换下一张地图... gameover.waiting = [accent]正在更换下一张地图...
highscore = [accent]新纪录! highscore = [accent]新纪录!
copied = 已复制 copied = 已复制
indev.popup = [accent]6.0[]仍在[accent]测试版[].\n[lightgray]这意味着:[]\n[scarlet]- 战役玩法完全没有完成[]\n- 很多内容还没有做完\n- 大多[scarlet]单位AI[]无法正确地运行\n- 单位系统完全没有完成\n- 一切您所看到的内容都可能会移除或调整。\n\n在[accent]Github[]提交错误报告。
indev.notready = 这部分玩法还未开发完成。 indev.notready = 这部分玩法还未开发完成。
indev.campaign = [accent]恭喜!您已经到达战役模式的结尾![]\n\n这是目前内容的全部。 未来的更新中将添加行星际旅行。 indev.campaign = [accent]恭喜!您已经到达战役模式的结尾![]\n\n这是目前内容的全部。 未来的更新中将添加行星际旅行。
@@ -41,6 +41,11 @@ be.ignore = 忽略
be.noupdates = 未发现更新。 be.noupdates = 未发现更新。
be.check = 检测更新 be.check = 检测更新
mod.featured.dialog.title = 模组浏览器 (尚未完成)
mods.browser.selected = 已选模组
mods.browser.add=安装
mods.github.open=查看
schematic = 蓝图 schematic = 蓝图
schematic.add = 保存蓝图… schematic.add = 保存蓝图…
schematics = 蓝图 schematics = 蓝图
@@ -84,6 +89,7 @@ joingame = 加入游戏
customgame = 自定义游戏 customgame = 自定义游戏
newgame = 新游戏 newgame = 新游戏
none = <无> none = <无>
none.found = [lightgray]<未找到>
minimap = 小地图 minimap = 小地图
position = 位置 position = 位置
close = 关闭 close = 关闭
@@ -147,8 +153,12 @@ planetmap = 行星地图
launchcore = 发射核心 launchcore = 发射核心
filename = 文件名: filename = 文件名:
unlocked = 解锁了新内容! unlocked = 解锁了新内容!
available = 可研究新科技!
completed = [accent]己研究 completed = [accent]己研究
techtree = 科技树 techtree = 科技树
research.legacy = 发现了 [accent]5.0[] 的研究数据。\n您想要[accent]加载数据[],还是[accent]丢弃数据[]并在新战役中重新研究(建议)?
research.load = 加载
research.discard = 丢弃
research.list = [lightgray]研究: research.list = [lightgray]研究:
research = 研究 research = 研究
researched = [lightgray]{0}己研究。 researched = [lightgray]{0}己研究。
@@ -193,6 +203,7 @@ servers.local = 本地服务器
servers.remote = 远程服务器 servers.remote = 远程服务器
servers.global = 全球服务器 servers.global = 全球服务器
servers.disclaimer=社区服务器[accent]不是[]由开发者拥有或管理。\n\n服务器中可能有其他玩家制作的不适当的内容。
servers.showhidden = 显示隐藏的服务器 servers.showhidden = 显示隐藏的服务器
server.shown = 显示 server.shown = 显示
server.hidden = 隐藏 server.hidden = 隐藏
@@ -230,6 +241,7 @@ disconnect.timeout = 连接超时。
disconnect.data = 读取服务器数据失败! disconnect.data = 读取服务器数据失败!
cantconnect = 无法加入([accent]{0}[])。 cantconnect = 无法加入([accent]{0}[])。
connecting = [accent]连接中… connecting = [accent]连接中…
reconnecting = [accent]重新连接中…
connecting.data = [accent]加载中… connecting.data = [accent]加载中…
server.port = 端口: server.port = 端口:
server.addressinuse = 地址已在使用! server.addressinuse = 地址已在使用!
@@ -593,6 +605,11 @@ sector.tarFields.description = 产油区边缘,位于山脉和沙漠之间。
sector.desolateRift.description = 非常危险的区域。这儿的资源丰富但空间很小。敌人十分危险。尽快离开,不要被敌人的攻击间隔太长所愚弄。 sector.desolateRift.description = 非常危险的区域。这儿的资源丰富但空间很小。敌人十分危险。尽快离开,不要被敌人的攻击间隔太长所愚弄。
sector.nuclearComplex.description = 以前生产和加工钍的设施已变成废墟。\n[lightgray]研究钍及其多种用途。\n\n敌人在这里大量存在不断消灭入侵者。 sector.nuclearComplex.description = 以前生产和加工钍的设施已变成废墟。\n[lightgray]研究钍及其多种用途。\n\n敌人在这里大量存在不断消灭入侵者。
sector.fungalPass.description = 介于高山和低矮孢子丛生的土地之间的过渡地带。这里有一个小型的敌方侦察基地。\n侦察它。\n使用尖刀和爬行者单位来摧毁两个核心。 sector.fungalPass.description = 介于高山和低矮孢子丛生的土地之间的过渡地带。这里有一个小型的敌方侦察基地。\n侦察它。\n使用尖刀和爬行者单位来摧毁两个核心。
sector.biomassFacility.description = 孢子的发源地。这里有最初研究和生产孢子的设施。\n研究这里的科技培养孢子来制造燃料和聚合物。\n\n[lightgray]设施损毁后,孢子散播了出去,原生生态系统无法抵挡这种外来物种。
sector.windsweptIslands.description = 海岸线之外坐落着这一串群岛。据记载这里曾有生产[accent]塑钢[]的建筑。\n\n抵御敌人的海军在岛上建立基地研究这些工厂。
sector.extractionOutpost.description = 一座遥远的前哨,敌人为了向其他区域发射资源而建立。\n\n跨区域运输技术是征服这个星球不可或缺的技术。摧毁敌人基地研究发射台。
sector.impact0078.description = 这里有最初进入这个星系的星际运输船的遗迹。\n\n回收可以利用的资源研究科技。
sector.planetaryTerminal.description = 最终目标。\n\n这座滨海基地有一个可以将核心发射到其他行星的建筑防卫森严。\n\n制造海军单位尽快消灭敌人研究发射建筑。
settings.language = 语言 settings.language = 语言
settings.data = 游戏数据 settings.data = 游戏数据
@@ -688,6 +705,7 @@ stat.commandlimit = 指挥上限
stat.abilities = 能力 stat.abilities = 能力
stat.canboost = 可助推 stat.canboost = 可助推
stat.flying = 可飞行 stat.flying = 可飞行
stat.ammouse = 弹药消耗
ability.forcefield = 力墙场 ability.forcefield = 力墙场
ability.repairfield = 修复场 ability.repairfield = 修复场
@@ -710,7 +728,6 @@ bar.powerlines = 链接: {0}/{1}
bar.items = 物品:{0} bar.items = 物品:{0}
bar.capacity = 容量:{0} bar.capacity = 容量:{0}
bar.unitcap = {0} {1}/{2} bar.unitcap = {0} {1}/{2}
bar.limitreached = [scarlet] {0} / {1}[white] {2}\n[lightgray][[已达单位上限]
bar.liquid = 液体 bar.liquid = 液体
bar.heat = 热量 bar.heat = 热量
bar.power = 电力 bar.power = 电力
@@ -727,6 +744,7 @@ bullet.sapping = [stat] 削弱
bullet.homing = [stat] 追踪 bullet.homing = [stat] 追踪
bullet.shock = [stat] 电击 bullet.shock = [stat] 电击
bullet.frag = [stat] 分裂 bullet.frag = [stat] 分裂
bullet.buildingdamage = [stat]{0}%[lightgray] 对建筑伤害
bullet.knockback = [stat]{0}[lightgray] 击退 bullet.knockback = [stat]{0}[lightgray] 击退
bullet.pierce = [stat]{0}[lightgray]x 穿透 bullet.pierce = [stat]{0}[lightgray]x 穿透
bullet.infinitepierce = [stat] 穿透 bullet.infinitepierce = [stat] 穿透
@@ -755,6 +773,7 @@ unit.items = 物品
unit.thousands = K unit.thousands = K
unit.millions = M unit.millions = M
unit.billions = B unit.billions = B
unit.pershot = /发
category.purpose = 介绍 category.purpose = 介绍
category.general = 普通 category.general = 普通
category.power = 能量 category.power = 能量
@@ -822,7 +841,9 @@ setting.chatopacity.name = 聊天界面不透明度
setting.lasersopacity.name = 能量激光不透明度 setting.lasersopacity.name = 能量激光不透明度
setting.bridgeopacity.name = 桥梁不透明度 setting.bridgeopacity.name = 桥梁不透明度
setting.playerchat.name = 显示玩家聊天气泡 setting.playerchat.name = 显示玩家聊天气泡
setting.showweather.name = 显示天气效果
public.confirm = 确定使您的游戏公开可见?\n[accent]其他人将可以加入到您的游戏。\n[lightgray]您之后可以在 设置->游戏->游戏公开可见 更改。 public.confirm = 确定使您的游戏公开可见?\n[accent]其他人将可以加入到您的游戏。\n[lightgray]您之后可以在 设置->游戏->游戏公开可见 更改。
public.confirm.really = 如果您想与朋友游玩,可以使用[green]邀请朋友[]而不是[scarlet]公开游戏[]\n您确定要使游戏[scarlet]公开可见[]吗?
public.beta = 请注意,测试版的游戏不能公开可见。 public.beta = 请注意,测试版的游戏不能公开可见。
uiscale.reset = UI 缩放比例已更改。\n按下“确定”来执行缩放比例的更改。\n[accent]{0}[]秒后[scarlet]将自动退出并还原设置。 uiscale.reset = UI 缩放比例已更改。\n按下“确定”来执行缩放比例的更改。\n[accent]{0}[]秒后[scarlet]将自动退出并还原设置。
uiscale.cancel = 取消并退出 uiscale.cancel = 取消并退出
@@ -897,6 +918,7 @@ keybind.toggle_menus.name = 显隐选项
keybind.chat_history_prev.name = 聊天记录向前 keybind.chat_history_prev.name = 聊天记录向前
keybind.chat_history_next.name = 聊天记录向后 keybind.chat_history_next.name = 聊天记录向后
keybind.chat_scroll.name = 聊天记录滚动 keybind.chat_scroll.name = 聊天记录滚动
keybind.chat_mode.name = 切换聊天模式
keybind.drop_unit.name = 松开单位 keybind.drop_unit.name = 松开单位
keybind.zoom_minimap.name = 小地图缩放 keybind.zoom_minimap.name = 小地图缩放
mode.help.title = 模式说明 mode.help.title = 模式说明
@@ -945,6 +967,7 @@ rules.explosions = 建筑/单位爆炸伤害
rules.ambientlight = 环境光 rules.ambientlight = 环境光
rules.weather = 气候 rules.weather = 气候
rules.weather.frequency = 频率: rules.weather.frequency = 频率:
rules.weather.always = 持续
rules.weather.duration = 时长: rules.weather.duration = 时长:
content.item.name = 物品 content.item.name = 物品
@@ -969,7 +992,6 @@ item.blast-compound.name = 爆炸混合物
item.pyratite.name = item.pyratite.name =
item.metaglass.name = 钢化玻璃 item.metaglass.name = 钢化玻璃
item.scrap.name = 废料 item.scrap.name = 废料
liquid.water.name = liquid.water.name =
liquid.slag.name = 矿渣 liquid.slag.name = 矿渣
liquid.oil.name = 石油 liquid.oil.name = 石油
@@ -1271,11 +1293,15 @@ hint.payloadDrop.mobile = [accent]点住[]一个空的位置将有效载荷丢
hint.waveFire = [accent]波浪[]炮塔加水弹药会自动扑灭附近的火. hint.waveFire = [accent]波浪[]炮塔加水弹药会自动扑灭附近的火.
hint.generator = \uf879 [accent]燃烧发电机[]燃烧煤炭并将电力传输到相邻方块.\n\n用\uf87f [accent]能量节点[]可以扩展电力传输范围. hint.generator = \uf879 [accent]燃烧发电机[]燃烧煤炭并将电力传输到相邻方块.\n\n用\uf87f [accent]能量节点[]可以扩展电力传输范围.
hint.guardian = [accent]Boss[]单位装甲厚重.[accent]铜[]和[accent]铅[]这类较弱的子弹对其[scarlet]作用不佳[].\n\n使用高级别炮塔或使用\uf835 [accent]石墨[]作为\uf861 双管炮及\uf859 齐射炮的弹药来消灭Boss. hint.guardian = [accent]Boss[]单位装甲厚重.[accent]铜[]和[accent]铅[]这类较弱的子弹对其[scarlet]作用不佳[].\n\n使用高级别炮塔或使用\uf835 [accent]石墨[]作为\uf861 双管炮及\uf859 齐射炮的弹药来消灭Boss.
hint.coreUpgrade = 核心可以通过[accent]在上面覆盖高等级核心[]进行升级。\n\n在[accent]初代核心[]上放置一个[accent]次代核心[]。确保周围没有障碍物。
hint.presetLaunch = 灰色的[accent]降落地区[],如[accent]冰冻森林[],可以从任何区域发射,不需要占领附近的区块。\n\n[accent]数字编号的区域[],如这个,是[accent]可选的[]。
hint.coreIncinerate = 核心存满一种物品后,再进入的同种物品会被[accent]摧毁[]。
hint.coopCampaign = 游玩[accent]合作战役[]时,当前地图生产的资源也会被送入[accent]你本地的区域[]。\n\n新科技也会同步解锁。
item.copper.description = 用于所有类型的建筑和弹药。 item.copper.description = 用于所有类型的建筑和弹药。
item.copper.details = 铜。在塞普罗上的异常丰富的金属。不经加固,结构会较脆弱。 item.copper.details = 铜。在塞普罗上的异常丰富的金属。不经加固,结构会较脆弱。
item.lead.description = 用于液体输送和电气结构。 item.lead.description = 用于液体输送和电气结构。
item.lead.details = 致密且呈惰性。广泛用于电池中。\n注意可能对生物生命体有毒。虽说这里还有很多 item.lead.details = 致密且呈惰性。广泛用于电池中。\n注意可能对生物生命体有毒。虽说这里已经没有多少生物了
item.metaglass.description = 用于液体传输/储存结构。 item.metaglass.description = 用于液体传输/储存结构。
item.graphite.description = 用于电子元件和炮塔弹药。 item.graphite.description = 用于电子元件和炮塔弹药。
item.sand.description = 用于生产其他精炼材料。 item.sand.description = 用于生产其他精炼材料。
@@ -1342,9 +1368,8 @@ block.door-large.description = 可以开关的墙。
block.mender.description = 定期修复附近的区块。\n可使用硅来提高范围和效率。 block.mender.description = 定期修复附近的区块。\n可使用硅来提高范围和效率。
block.mend-projector.description = 修复其附近的区块。\n可使用相位物来提高射程和效率。 block.mend-projector.description = 修复其附近的区块。\n可使用相位物来提高射程和效率。
block.overdrive-projector.description = 提高附近建筑物的速度。\n可使用相位物来提高射程和效率。 block.overdrive-projector.description = 提高附近建筑物的速度。\n可使用相位物来提高射程和效率。
block.force-projector.description = 在自身周围创建一个六角形力场,使里面的建筑物和单位免受伤害。\n持续承受高伤害会导致过热可以使用冷却液降温。相物可用于增加护盾大小。 block.force-projector.description = 在自身周围创建一个六角形力场,使里面的建筑物和单位免受伤害。\n持续承受高伤害会导致过热可以使用冷却液降温。相物可用于增加护盾大小。
block.shock-mine.description = 对踩到它的敌人释放电弧进行攻击。 block.shock-mine.description = 对踩到它的敌人释放电弧进行攻击。
block.thermal-pump.description = 终级液泵。
block.conveyor.description = 将物品向前输送。 block.conveyor.description = 将物品向前输送。
block.titanium-conveyor.description = 将物品向前输送。快于初级传送带。 block.titanium-conveyor.description = 将物品向前输送。快于初级传送带。
block.plastanium-conveyor.description = 打包物品进行运输。\n在后方输入物品在前方三个方向输出物品。需要多个装载和卸载点才能达到峰值载量。 block.plastanium-conveyor.description = 打包物品进行运输。\n在后方输入物品在前方三个方向输出物品。需要多个装载和卸载点才能达到峰值载量。

View File

@@ -89,6 +89,7 @@ joingame = 多人連線
customgame = 自訂遊戲 customgame = 自訂遊戲
newgame = 新遊戲 newgame = 新遊戲
none = 〈沒有〉 none = 〈沒有〉
none.found = [lightgray]〈查無結果〉
minimap = 小地圖 minimap = 小地圖
position = 位置 position = 位置
close = 關閉 close = 關閉
@@ -286,6 +287,7 @@ cancel = 取消
openlink = 開啟連結 openlink = 開啟連結
copylink = 複製連結 copylink = 複製連結
back = 返回 back = 返回
max = 最大量
crash.export = 匯出當機報告。 crash.export = 匯出當機報告。
crash.none = 無當機報告。 crash.none = 無當機報告。
crash.exported = 已匯出當機報告。 crash.exported = 已匯出當機報告。
@@ -296,7 +298,7 @@ data.exported = 資料已匯出。
data.invalid = 這不是有效的遊戲資料。 data.invalid = 這不是有效的遊戲資料。
data.import.confirm = 導入外部資料將會覆寫您目前[scarlet]所有的[]遊戲資料,\n[accent]此動作無法復原![]\n\n匯入資料後您的遊戲將立刻結束。 data.import.confirm = 導入外部資料將會覆寫您目前[scarlet]所有的[]遊戲資料,\n[accent]此動作無法復原![]\n\n匯入資料後您的遊戲將立刻結束。
quit.confirm = 您確定要結束嗎? quit.confirm = 您確定要結束嗎?
quit.confirm.tutorial = 您確定您知道自己在做什麼嗎?\n可以在[accent] 設定->遊戲[] 選項中重設教學。 quit.confirm.tutorial = 您確定您知道自己在做什麼嗎?\n可以在[accent] 設定-遊戲[] 選項中重設教學。
loading = [accent]載入中…… loading = [accent]載入中……
reloading = [accent]模組重新載入中…… reloading = [accent]模組重新載入中……
saving = [accent]儲存中…… saving = [accent]儲存中……
@@ -360,7 +362,6 @@ editor.center = 中心
workshop = 工作坊 workshop = 工作坊
waves.title = 波次 waves.title = 波次
waves.remove = 移除 waves.remove = 移除
waves.never = 〈永不〉
waves.every = waves.every =
waves.waves = 波次 waves.waves = 波次
waves.perspawn = 每次生成 waves.perspawn = 每次生成
@@ -389,7 +390,7 @@ editor.removeunit = 移除單位
editor.teams = 隊伍 editor.teams = 隊伍
editor.errorload = 載入檔案時發生問題。 editor.errorload = 載入檔案時發生問題。
editor.errorsave = 儲存檔案時發生問題。 editor.errorsave = 儲存檔案時發生問題。
editor.errorimage = 這是圖片檔,而非地圖。不要試圖修改副檔名讓它可以使用。\n\n如果要匯入地形圖片檔請使用編輯器中的「匯入地形圖片檔」按鈕。 editor.errorimage = 這是圖片檔,而非地圖。
editor.errorlegacy = 此地圖太舊,並使用不支援的舊地圖格式。 editor.errorlegacy = 此地圖太舊,並使用不支援的舊地圖格式。
editor.errornot = 這不是地圖檔。 editor.errornot = 這不是地圖檔。
editor.errorheader = 此地圖檔無效或已損毀。 editor.errorheader = 此地圖檔無效或已損毀。
@@ -621,7 +622,7 @@ settings.sound = 音效
settings.graphics = 圖形 settings.graphics = 圖形
settings.cleardata = 清除遊戲資料…… settings.cleardata = 清除遊戲資料……
settings.clear.confirm = 您確定要清除資料嗎?\n此動作無法復原 settings.clear.confirm = 您確定要清除資料嗎?\n此動作無法復原
settings.clearall.confirm = [scarlet]警告![]\n這會清除所有資料包括存檔、地圖、解鎖項目和快捷鍵綁定。\n按「」後,遊戲將刪除所有資料並自動結束。 settings.clearall.confirm = [scarlet]警告![]\n這會清除所有資料包括存檔、地圖、解鎖項目和快捷鍵綁定。\n按「確定」後,遊戲將刪除所有資料並自動結束。
settings.clearsaves.confirm = 您確定您想要清除所有存檔嗎? settings.clearsaves.confirm = 您確定您想要清除所有存檔嗎?
settings.clearsaves = 清除存檔 settings.clearsaves = 清除存檔
settings.clearresearch = 清除研究 settings.clearresearch = 清除研究
@@ -719,6 +720,7 @@ bar.corereq = 需由核心升級
bar.drillspeed = 鑽頭速度:{0}/秒 bar.drillspeed = 鑽頭速度:{0}/秒
bar.pumpspeed = 液體泵送速度:{0}/秒 bar.pumpspeed = 液體泵送速度:{0}/秒
bar.efficiency = 效率:{0}% bar.efficiency = 效率:{0}%
bar.boost = 速度加成:{0}%
bar.powerbalance = 能量變化:{0} bar.powerbalance = 能量變化:{0}
bar.powerstored = 能量存量:{0}/{1} bar.powerstored = 能量存量:{0}/{1}
bar.poweramount = 能量:{0} bar.poweramount = 能量:{0}
@@ -741,7 +743,7 @@ bullet.splashdamage = [stat]{0}[lightgray]範圍傷害 ~[stat] {1}[lightgray]格
bullet.incendiary = [stat]燃燒 bullet.incendiary = [stat]燃燒
bullet.sapping = [stat]吸血 bullet.sapping = [stat]吸血
bullet.homing = [stat]追蹤 bullet.homing = [stat]追蹤
bullet.shock = [stat]震懾 bullet.shock = [stat]電擊
bullet.frag = [stat]破片彈 bullet.frag = [stat]破片彈
bullet.buildingdamage = [stat]{0}%[lightgray] 建築傷害 bullet.buildingdamage = [stat]{0}%[lightgray] 建築傷害
bullet.knockback = [stat]{0}[lightgray]擊退 bullet.knockback = [stat]{0}[lightgray]擊退
@@ -934,6 +936,7 @@ mode.custom = 自訂規則
rules.infiniteresources = 無限資源 rules.infiniteresources = 無限資源
rules.reactorexplosions = 反應爐爆炸 rules.reactorexplosions = 反應爐爆炸
rules.coreincinerates = 核心銷毀物品
rules.schematic = 允許使用藍圖 rules.schematic = 允許使用藍圖
rules.wavetimer = 波次時間 rules.wavetimer = 波次時間
rules.waves = 波次 rules.waves = 波次

View File

@@ -111,4 +111,6 @@ Quick-Korx
Catchears Catchears
younggam younggam
simba-fs simba-fs
RedRadiation RedRadiation
Marko Zajc
CPX MC

View File

@@ -1,9 +1,10 @@
"use strict"; "use strict";
function log(context, obj){ let scriptName = "base.js"
Vars.mods.scripts.log(context, String(obj)) let modName = "none"
}
const log = (context, obj) => Vars.mods.scripts.log(context, String(obj))
const print = text => log(modName + "/" + scriptName, text)
const readString = path => Vars.mods.scripts.readString(path) const readString = path => Vars.mods.scripts.readString(path)
const readBytes = path => Vars.mods.scripts.readBytes(path) const readBytes = path => Vars.mods.scripts.readBytes(path)
const loadMusic = path => Vars.mods.scripts.loadMusic(path) const loadMusic = path => Vars.mods.scripts.loadMusic(path)
@@ -13,11 +14,20 @@ const readFile = (purpose, ext, cons) => Vars.mods.scripts.readFile(purpose, ext
const readBinFile = (purpose, ext, cons) => Vars.mods.scripts.readBinFile(purpose, ext, cons); const readBinFile = (purpose, ext, cons) => Vars.mods.scripts.readBinFile(purpose, ext, cons);
const writeFile = (purpose, ext, str) => Vars.mods.scripts.writeFile(purpose, ext, str); const writeFile = (purpose, ext, str) => Vars.mods.scripts.writeFile(purpose, ext, str);
const writeBinFile = (purpose, ext, bytes) => Vars.mods.scripts.writeBinFile(purpose, ext, bytes); const writeBinFile = (purpose, ext, bytes) => Vars.mods.scripts.writeBinFile(purpose, ext, bytes);
const newFloats = cap => Vars.mods.getScripts().newFloats(cap);
let scriptName = "base.js" //these are not strictly necessary, but are kept for edge cases
let modName = "none" const run = method => new java.lang.Runnable(){run: method}
const boolf = method => new Boolf(){get: method}
const boolp = method => new Boolp(){get: method}
const floatf = method => new Floatf(){get: method}
const floatp = method => new Floatp(){get: method}
const cons = method => new Cons(){get: method}
const prov = method => new Prov(){get: method}
const func = method => new Func(){get: method}
const print = text => log(modName + "/" + scriptName, text); const newEffect = (lifetime, renderer) => new Effect.Effect(lifetime, new Effect.EffectRenderer({render: renderer}))
Call = Packages.mindustry.gen.Call
//js 'extend(Base, ..., {})' = java 'new Base(...) {}' //js 'extend(Base, ..., {})' = java 'new Base(...) {}'
function extend(/*Base, ..., def*/){ function extend(/*Base, ..., def*/){
@@ -39,16 +49,3 @@ function extend(/*Base, ..., def*/){
//For backwards compatibility, use extend instead //For backwards compatibility, use extend instead
const extendContent = extend; const extendContent = extend;
//these are not strictly necessary, but are kept for edge cases
const run = method => new java.lang.Runnable(){run: method}
const boolf = method => new Boolf(){get: method}
const boolp = method => new Boolp(){get: method}
const floatf = method => new Floatf(){get: method}
const floatp = method => new Floatp(){get: method}
const cons = method => new Cons(){get: method}
const prov = method => new Prov(){get: method}
const func = method => new Func(){get: method}
const newEffect = (lifetime, renderer) => new Effect.Effect(lifetime, new Effect.EffectRenderer({render: renderer}))
Call = Packages.mindustry.gen.Call

View File

@@ -2,10 +2,11 @@
"use strict"; "use strict";
function log(context, obj){ let scriptName = "base.js"
Vars.mods.scripts.log(context, String(obj)) let modName = "none"
}
const log = (context, obj) => Vars.mods.scripts.log(context, String(obj))
const print = text => log(modName + "/" + scriptName, text)
const readString = path => Vars.mods.scripts.readString(path) const readString = path => Vars.mods.scripts.readString(path)
const readBytes = path => Vars.mods.scripts.readBytes(path) const readBytes = path => Vars.mods.scripts.readBytes(path)
const loadMusic = path => Vars.mods.scripts.loadMusic(path) const loadMusic = path => Vars.mods.scripts.loadMusic(path)
@@ -15,11 +16,20 @@ const readFile = (purpose, ext, cons) => Vars.mods.scripts.readFile(purpose, ext
const readBinFile = (purpose, ext, cons) => Vars.mods.scripts.readBinFile(purpose, ext, cons); const readBinFile = (purpose, ext, cons) => Vars.mods.scripts.readBinFile(purpose, ext, cons);
const writeFile = (purpose, ext, str) => Vars.mods.scripts.writeFile(purpose, ext, str); const writeFile = (purpose, ext, str) => Vars.mods.scripts.writeFile(purpose, ext, str);
const writeBinFile = (purpose, ext, bytes) => Vars.mods.scripts.writeBinFile(purpose, ext, bytes); const writeBinFile = (purpose, ext, bytes) => Vars.mods.scripts.writeBinFile(purpose, ext, bytes);
const newFloats = cap => Vars.mods.getScripts().newFloats(cap);
let scriptName = "base.js" //these are not strictly necessary, but are kept for edge cases
let modName = "none" const run = method => new java.lang.Runnable(){run: method}
const boolf = method => new Boolf(){get: method}
const boolp = method => new Boolp(){get: method}
const floatf = method => new Floatf(){get: method}
const floatp = method => new Floatp(){get: method}
const cons = method => new Cons(){get: method}
const prov = method => new Prov(){get: method}
const func = method => new Func(){get: method}
const print = text => log(modName + "/" + scriptName, text); const newEffect = (lifetime, renderer) => new Effect.Effect(lifetime, new Effect.EffectRenderer({render: renderer}))
Call = Packages.mindustry.gen.Call
//js 'extend(Base, ..., {})' = java 'new Base(...) {}' //js 'extend(Base, ..., {})' = java 'new Base(...) {}'
function extend(/*Base, ..., def*/){ function extend(/*Base, ..., def*/){
@@ -42,19 +52,6 @@ function extend(/*Base, ..., def*/){
//For backwards compatibility, use extend instead //For backwards compatibility, use extend instead
const extendContent = extend; const extendContent = extend;
//these are not strictly necessary, but are kept for edge cases
const run = method => new java.lang.Runnable(){run: method}
const boolf = method => new Boolf(){get: method}
const boolp = method => new Boolp(){get: method}
const floatf = method => new Floatf(){get: method}
const floatp = method => new Floatp(){get: method}
const cons = method => new Cons(){get: method}
const prov = method => new Prov(){get: method}
const func = method => new Func(){get: method}
const newEffect = (lifetime, renderer) => new Effect.Effect(lifetime, new Effect.EffectRenderer({render: renderer}))
Call = Packages.mindustry.gen.Call
importPackage(Packages.arc) importPackage(Packages.arc)
importPackage(Packages.arc.func) importPackage(Packages.arc.func)
importPackage(Packages.arc.graphics) importPackage(Packages.arc.graphics)

View File

@@ -92,8 +92,8 @@ public class Vars implements Loadable{
public static final float turnDuration = 2 * Time.toMinutes; public static final float turnDuration = 2 * Time.toMinutes;
/** chance of an invasion per turn, 1 = 100% */ /** chance of an invasion per turn, 1 = 100% */
public static final float baseInvasionChance = 1f / 100f; public static final float baseInvasionChance = 1f / 100f;
/** how many turns have to pass before invasions start */ /** how many minutes have to pass before invasions in a *captured* sector start */
public static final int invasionGracePeriod = 20; public static final float invasionGracePeriod = 20;
/** min armor fraction damage; e.g. 0.05 = at least 5% damage */ /** min armor fraction damage; e.g. 0.05 = at least 5% damage */
public static final float minArmorDamage = 0.1f; public static final float minArmorDamage = 0.1f;
/** launch animation duration */ /** launch animation duration */

View File

@@ -32,6 +32,7 @@ public class BaseAI{
private static final Seq<Tile> tmpTiles = new Seq<>(); private static final Seq<Tile> tmpTiles = new Seq<>();
private static int correct = 0, incorrect = 0; private static int correct = 0, incorrect = 0;
private static boolean anyDrills;
private int lastX, lastY, lastW, lastH; private int lastX, lastY, lastW, lastH;
private boolean triedWalls, foundPath; private boolean triedWalls, foundPath;
@@ -200,7 +201,7 @@ public class BaseAI{
int cx = x - (int)rotator.x; int cx = x - (int)rotator.x;
int cy = y - (int)rotator.y; int cy = y - (int)rotator.y;
//chekc valid placeability //check valid placeability
for(Stile tile : result.tiles){ for(Stile tile : result.tiles){
int realX = tile.x + cx, realY = tile.y + cy; int realX = tile.x + cx, realY = tile.y + cy;
if(!Build.validPlace(tile.block, data.team, realX, realY, tile.rotation)){ if(!Build.validPlace(tile.block, data.team, realX, realY, tile.rotation)){
@@ -217,16 +218,18 @@ public class BaseAI{
//make sure at least X% of resource requirements are met //make sure at least X% of resource requirements are met
correct = incorrect = 0; correct = incorrect = 0;
anyDrills = false;
if(part.required instanceof Item){ if(part.required instanceof Item){
for(Stile tile : result.tiles){ for(Stile tile : result.tiles){
if(tile.block instanceof Drill){ if(tile.block instanceof Drill){
anyDrills = true;
tile.block.iterateTaken(tile.x + cx, tile.y + cy, (ex, ey) -> { tile.block.iterateTaken(tile.x + cx, tile.y + cy, (ex, ey) -> {
Tile res = world.rawTile(ex, ey); Tile res = world.rawTile(ex, ey);
if(res.drop() == part.required){ if(res.drop() == part.required){
correct ++; correct ++;
}else{ }else if(res.drop() != null){
incorrect ++; incorrect ++;
} }
}); });
@@ -235,7 +238,7 @@ public class BaseAI{
} }
//fail if not enough fit requirements //fail if not enough fit requirements
if((float)correct / incorrect < correctPercent){ if(anyDrills && (incorrect != 0 || correct == 0)){
return false; return false;
} }
@@ -262,6 +265,7 @@ public class BaseAI{
if(spawn == null) return; if(spawn == null) return;
for(int wx = lastX; wx <= lastX + lastW; wx++){ for(int wx = lastX; wx <= lastX + lastW; wx++){
outer:
for(int wy = lastY; wy <= lastY + lastH; wy++){ for(int wy = lastY; wy <= lastY + lastH; wy++){
Tile tile = world.tile(wx, wy); Tile tile = world.tile(wx, wy);
@@ -276,12 +280,11 @@ public class BaseAI{
Tile o = world.tile(tile.x + p.x, tile.y + p.y); Tile o = world.tile(tile.x + p.x, tile.y + p.y);
if(o != null && (o.block() instanceof PayloadAcceptor || o.block() instanceof PayloadConveyor)){ if(o != null && (o.block() instanceof PayloadAcceptor || o.block() instanceof PayloadConveyor)){
break; continue outer;
} }
if(o != null && o.team() == data.team && !(o.block() instanceof Wall)){ if(o != null && o.team() == data.team && !(o.block() instanceof Wall)){
any = true; any = true;
break;
} }
} }

View File

@@ -19,7 +19,7 @@ import mindustry.world.meta.*;
import static mindustry.Vars.*; import static mindustry.Vars.*;
public class Pathfinder implements Runnable{ public class Pathfinder implements Runnable{
private static final long maxUpdate = Time.millisToNanos(6); private static final long maxUpdate = Time.millisToNanos(7);
private static final int updateFPS = 60; private static final int updateFPS = 60;
private static final int updateInterval = 1000 / updateFPS; private static final int updateInterval = 1000 / updateFPS;
private static final int impassable = -1; private static final int impassable = -1;
@@ -37,7 +37,7 @@ public class Pathfinder implements Runnable{
public static final int public static final int
costGround = 0, costGround = 0,
costLegs = 1, costLegs = 1,
costWater = 2; costNaval = 2;
public static final Seq<PathCost> costTypes = Seq.with( public static final Seq<PathCost> costTypes = Seq.with(
//ground //ground
@@ -90,6 +90,11 @@ public class Pathfinder implements Runnable{
preloadPath(getField(state.rules.waveTeam, costGround, fieldCore)); preloadPath(getField(state.rules.waveTeam, costGround, fieldCore));
//preload water on naval maps
if(spawner.getSpawns().contains(t -> t.floor().isLiquid)){
preloadPath(getField(state.rules.waveTeam, costNaval, fieldCore));
}
start(); start();
}); });
@@ -287,7 +292,7 @@ public class Pathfinder implements Runnable{
} }
} }
if(current == null || tl == impassable) return tile; if(current == null || tl == impassable || (path.cost == costTypes.items[costGround] && current.dangerous() && !tile.dangerous())) return tile;
return current; return current;
} }

View File

@@ -46,10 +46,10 @@ public class FormationAI extends AIController implements FormationMember{
unit.lookAt(unit.vel.angle()); unit.lookAt(unit.vel.angle());
} }
Vec2 realtarget = vec.set(target).add(leader.vel.x, leader.vel.y); Vec2 realtarget = vec.set(target).add(leader.vel);
float speed = unit.realSpeed() * unit.floorSpeedMultiplier(); float speed = unit.realSpeed() * unit.floorSpeedMultiplier() * Time.delta;
unit.approach(Mathf.arrive(unit.x, unit.y, realtarget.x, realtarget.y, unit.vel, 0f, 0.01f, speed, 1f)); unit.approach(Mathf.arrive(unit.x, unit.y, realtarget.x, realtarget.y, unit.vel, speed, 0f, speed, 1f).scl(1f / Time.delta));
if(unit.canMine() && leader.canMine()){ if(unit.canMine() && leader.canMine()){
if(leader.mineTile != null && unit.validMine(leader.mineTile)){ if(leader.mineTile != null && unit.validMine(leader.mineTile)){

View File

@@ -131,6 +131,11 @@ public class LogicAI extends AIController{
unit.approach(vec); unit.approach(vec);
} }
@Override
protected boolean checkTarget(Teamc target, float x, float y, float range){
return false;
}
//always retarget //always retarget
@Override @Override
protected boolean retarget(){ protected boolean retarget(){

View File

@@ -130,7 +130,7 @@ public class SoundControl{
Core.audio.soundBus.play(); Core.audio.soundBus.play();
setupFilters(); setupFilters();
}else{ }else{
Core.audio.soundBus.stop(); Core.audio.soundBus.replay();
} }
} }

View File

@@ -1312,7 +1312,7 @@ public class Blocks implements ContentList{
}}; }};
waterExtractor = new SolidPump("water-extractor"){{ waterExtractor = new SolidPump("water-extractor"){{
requirements(Category.production, with(Items.copper, 25, Items.graphite, 25, Items.lead, 20)); requirements(Category.production, with(Items.copper, 30, Items.graphite, 30, Items.lead, 30));
result = Liquids.water; result = Liquids.water;
pumpAmount = 0.11f; pumpAmount = 0.11f;
size = 2; size = 2;
@@ -1537,7 +1537,7 @@ public class Blocks implements ContentList{
shootSound = Sounds.laser; shootSound = Sounds.laser;
shootType = new LaserBulletType(140){{ shootType = new LaserBulletType(140){{
colors = new Color[]{Pal.lancerLaser.cpy().mul(1f, 1f, 1f, 0.4f), Pal.lancerLaser, Color.white}; colors = new Color[]{Pal.lancerLaser.cpy().a(0.4f), Pal.lancerLaser, Color.white};
hitEffect = Fx.hitLancer; hitEffect = Fx.hitLancer;
despawnEffect = Fx.none; despawnEffect = Fx.none;
hitSize = 4; hitSize = 4;
@@ -1595,7 +1595,7 @@ public class Blocks implements ContentList{
shots = 4; shots = 4;
burstSpacing = 5; burstSpacing = 5;
inaccuracy = 10f; inaccuracy = 10f;
range = 190f; range = 200f;
xRand = 6f; xRand = 6f;
size = 2; size = 2;
health = 300 * size * size; health = 300 * size * size;
@@ -1838,6 +1838,7 @@ public class Blocks implements ContentList{
shootType = new ContinuousLaserBulletType(70){{ shootType = new ContinuousLaserBulletType(70){{
length = 200f; length = 200f;
hitEffect = Fx.hitMeltdown; hitEffect = Fx.hitMeltdown;
hitColor = Pal.meltdownHit;
drawSize = 420f; drawSize = 420f;
incendChance = 0.4f; incendChance = 0.4f;
@@ -1992,7 +1993,7 @@ public class Blocks implements ContentList{
powerSource = new PowerSource("power-source"){{ powerSource = new PowerSource("power-source"){{
requirements(Category.power, BuildVisibility.sandboxOnly, with()); requirements(Category.power, BuildVisibility.sandboxOnly, with());
powerProduction = 100000f / 60f; powerProduction = 1000000f / 60f;
alwaysUnlocked = true; alwaysUnlocked = true;
}}; }};

View File

@@ -155,7 +155,7 @@ public class Bullets implements ContentList{
width = 6f; width = 6f;
height = 8f; height = 8f;
hitEffect = Fx.flakExplosion; hitEffect = Fx.flakExplosion;
splashDamage = 27f; splashDamage = 27f * 1.5f;
splashDamageRadius = 15f; splashDamageRadius = 15f;
}}; }};
@@ -167,7 +167,7 @@ public class Bullets implements ContentList{
width = 6f; width = 6f;
height = 8f; height = 8f;
hitEffect = Fx.flakExplosion; hitEffect = Fx.flakExplosion;
splashDamage = 22f; splashDamage = 22f * 1.5f;
splashDamageRadius = 24f; splashDamageRadius = 24f;
}}; }};
@@ -179,10 +179,10 @@ public class Bullets implements ContentList{
width = 6f; width = 6f;
height = 8f; height = 8f;
hitEffect = Fx.flakExplosion; hitEffect = Fx.flakExplosion;
splashDamage = 22f; splashDamage = 22f * 1.5f;
splashDamageRadius = 20f; splashDamageRadius = 20f;
fragBullet = flakGlassFrag; fragBullet = flakGlassFrag;
fragBullets = 5; fragBullets = 6;
}}; }};
fragGlassFrag = new BasicBulletType(3f, 5, "bullet"){{ fragGlassFrag = new BasicBulletType(3f, 5, "bullet"){{
@@ -212,19 +212,19 @@ public class Bullets implements ContentList{
width = 6f; width = 6f;
height = 8f; height = 8f;
hitEffect = Fx.flakExplosion; hitEffect = Fx.flakExplosion;
splashDamage = 18f; splashDamage = 18f * 1.5f;
splashDamageRadius = 16f; splashDamageRadius = 16f;
fragBullet = fragGlassFrag; fragBullet = fragGlassFrag;
fragBullets = 3; fragBullets = 4;
explodeRange = 20f; explodeRange = 20f;
collidesGround = true; collidesGround = true;
}}; }};
fragPlastic = new FlakBulletType(4f, 6){{ fragPlastic = new FlakBulletType(4f, 6){{
splashDamageRadius = 40f; splashDamageRadius = 40f;
splashDamage = 25f; splashDamage = 25f * 1.5f;
fragBullet = fragPlasticFrag; fragBullet = fragPlasticFrag;
fragBullets = 5; fragBullets = 6;
hitEffect = Fx.plasticExplosion; hitEffect = Fx.plasticExplosion;
frontColor = Pal.plastaniumFront; frontColor = Pal.plastaniumFront;
backColor = Pal.plastaniumBack; backColor = Pal.plastaniumBack;
@@ -235,9 +235,9 @@ public class Bullets implements ContentList{
fragExplosive = new FlakBulletType(4f, 5){{ fragExplosive = new FlakBulletType(4f, 5){{
shootEffect = Fx.shootBig; shootEffect = Fx.shootBig;
ammoMultiplier = 4f; ammoMultiplier = 5f;
splashDamage = 18f; splashDamage = 26f * 1.5f;
splashDamageRadius = 55f; splashDamageRadius = 60f;
collidesGround = true; collidesGround = true;
status = StatusEffects.blasted; status = StatusEffects.blasted;
@@ -245,9 +245,9 @@ public class Bullets implements ContentList{
}}; }};
fragSurge = new FlakBulletType(4.5f, 13){{ fragSurge = new FlakBulletType(4.5f, 13){{
ammoMultiplier = 4f; ammoMultiplier = 5f;
splashDamage = 50f; splashDamage = 50f * 1.5f;
splashDamageRadius = 40f; splashDamageRadius = 38f;
lightning = 2; lightning = 2;
lightningLength = 7; lightningLength = 7;
shootEffect = Fx.shootBig; shootEffect = Fx.shootBig;
@@ -261,7 +261,7 @@ public class Bullets implements ContentList{
shrinkY = 0f; shrinkY = 0f;
drag = -0.01f; drag = -0.01f;
splashDamageRadius = 30f; splashDamageRadius = 30f;
splashDamage = 30f; splashDamage = 30f * 1.5f;
ammoMultiplier = 4f; ammoMultiplier = 4f;
hitEffect = Fx.blastExplosion; hitEffect = Fx.blastExplosion;
despawnEffect = Fx.blastExplosion; despawnEffect = Fx.blastExplosion;
@@ -279,7 +279,7 @@ public class Bullets implements ContentList{
drag = -0.01f; drag = -0.01f;
homingPower = 0.08f; homingPower = 0.08f;
splashDamageRadius = 20f; splashDamageRadius = 20f;
splashDamage = 20f; splashDamage = 20f * 1.5f;
makeFire = true; makeFire = true;
hitEffect = Fx.blastExplosion; hitEffect = Fx.blastExplosion;
status = StatusEffects.burning; status = StatusEffects.burning;
@@ -291,7 +291,7 @@ public class Bullets implements ContentList{
shrinkY = 0f; shrinkY = 0f;
drag = -0.01f; drag = -0.01f;
splashDamageRadius = 25f; splashDamageRadius = 25f;
splashDamage = 25f; splashDamage = 25f * 1.5f;
hitEffect = Fx.blastExplosion; hitEffect = Fx.blastExplosion;
despawnEffect = Fx.blastExplosion; despawnEffect = Fx.blastExplosion;
lightningDamage = 10; lightningDamage = 10;

View File

@@ -418,6 +418,16 @@ public class Fx{
Fill.circle(e.x + x, e.y + y, e.fout() * 2f); Fill.circle(e.x + x, e.y + y, e.fout() * 2f);
}); });
}), }),
hitLaserBlast = new Effect(12, e -> {
color(e.color);
stroke(e.fout() * 1.5f);
randLenVectors(e.id, 8, e.finpow() * 17f, e.rotation, 360f, (x, y) -> {
float ang = Mathf.angle(x, y);
lineAngle(e.x + x, e.y + y, ang, e.fout() * 4 + 1f);
});
}),
hitLancer = new Effect(12, e -> { hitLancer = new Effect(12, e -> {
color(Color.white); color(Color.white);
@@ -429,6 +439,16 @@ public class Fx{
}); });
}), }),
hitBeam = new Effect(12, e -> {
color(e.color);
stroke(e.fout() * 2f);
randLenVectors(e.id, 6, e.finpow() * 18f, e.rotation, 360f, (x, y) -> {
float ang = Mathf.angle(x, y);
lineAngle(e.x + x, e.y + y, ang, e.fout() * 4 + 1f);
});
}),
hitMeltdown = new Effect(12, e -> { hitMeltdown = new Effect(12, e -> {
color(Pal.meltdownHit); color(Pal.meltdownHit);
stroke(e.fout() * 2f); stroke(e.fout() * 2f);
@@ -896,7 +916,7 @@ public class Fx{
}); });
}), }),
dynamicExplosion = new Effect(30, e -> { dynamicExplosion = new Effect(30, 100f, e -> {
float intensity = e.rotation; float intensity = e.rotation;
e.scaled(5 + intensity * 2, i -> { e.scaled(5 + intensity * 2, i -> {
@@ -1564,6 +1584,12 @@ public class Fx{
Fill.square(e.x, e.y, e.rotation * tilesize / 2f); Fill.square(e.x, e.y, e.rotation * tilesize / 2f);
}), }),
rotateBlock = new Effect(30, e -> {
color(Pal.accent);
alpha(e.fout() * 1);
Fill.square(e.x, e.y, e.rotation * tilesize / 2f);
}),
overdriveBlockFull = new Effect(60, e -> { overdriveBlockFull = new Effect(60, e -> {
color(e.color); color(e.color);
alpha(e.fslope() * 0.4f); alpha(e.fslope() * 0.4f);

View File

@@ -74,7 +74,7 @@ public class Control implements ApplicationListener, Loadable{
Events.on(WorldLoadEvent.class, event -> { Events.on(WorldLoadEvent.class, event -> {
if(Mathf.zero(player.x) && Mathf.zero(player.y)){ if(Mathf.zero(player.x) && Mathf.zero(player.y)){
Building core = state.teams.closestCore(0, 0, player.team()); Building core = player.bestCore();
if(core != null){ if(core != null){
player.set(core); player.set(core);
camera.position.set(core); camera.position.set(core);

View File

@@ -57,6 +57,8 @@ public class Logic implements ApplicationListener{
//when loading a 'damaged' sector, propagate the damage //when loading a 'damaged' sector, propagate the damage
Events.on(SaveLoadEvent.class, e -> { Events.on(SaveLoadEvent.class, e -> {
if(state.isCampaign()){ if(state.isCampaign()){
state.rules.coreIncinerates = true;
SectorInfo info = state.rules.sector.info; SectorInfo info = state.rules.sector.info;
info.write(); info.write();
@@ -79,13 +81,6 @@ public class Logic implements ApplicationListener{
state.wavetime = state.rules.waveSpacing; state.wavetime = state.rules.waveSpacing;
SectorDamage.applyCalculatedDamage(); SectorDamage.applyCalculatedDamage();
//make sure damaged buildings are counted
for(Tile tile : world.tiles){
if(tile.build != null && tile.build.damaged()){
indexer.notifyTileDamaged(tile.build);
}
}
} }
//reset values //reset values
@@ -107,6 +102,7 @@ public class Logic implements ApplicationListener{
if(!(state.getSector().preset != null && !state.getSector().preset.useAI)){ if(!(state.getSector().preset != null && !state.getSector().preset.useAI)){
state.rules.waveTeam.rules().ai = true; state.rules.waveTeam.rules().ai = true;
} }
state.rules.coreIncinerates = true;
state.rules.waveTeam.rules().aiTier = state.getSector().threat * 0.8f; state.rules.waveTeam.rules().aiTier = state.getSector().threat * 0.8f;
state.rules.waveTeam.rules().infiniteResources = true; state.rules.waveTeam.rules().infiniteResources = true;

View File

@@ -182,7 +182,7 @@ public class NetServer implements ApplicationListener{
return; return;
} }
if(Groups.player.contains(player -> player.uuid().equals(packet.uuid) || player.usid().equals(packet.usid))){ if(Groups.player.contains(player -> player.uuid().equals(packet.uuid) || player.usid().equals(packet.usid) || player.ip().equals(con.address))){
con.kick(KickReason.idInUse); con.kick(KickReason.idInUse);
return; return;
} }

View File

@@ -15,11 +15,15 @@ import mindustry.gen.*;
import mindustry.graphics.*; import mindustry.graphics.*;
import mindustry.graphics.g3d.*; import mindustry.graphics.g3d.*;
import mindustry.ui.*; import mindustry.ui.*;
import mindustry.world.blocks.storage.CoreBlock.*;
import static arc.Core.*; import static arc.Core.*;
import static mindustry.Vars.*; import static mindustry.Vars.*;
public class Renderer implements ApplicationListener{ public class Renderer implements ApplicationListener{
/** These are global variables, for headless access. Cached. */
public static float laserOpacity = 0.5f, bridgeOpacity = 0.75f;
public final BlockRenderer blocks = new BlockRenderer(); public final BlockRenderer blocks = new BlockRenderer();
public final MinimapRenderer minimap = new MinimapRenderer(); public final MinimapRenderer minimap = new MinimapRenderer();
public final OverlayRenderer overlays = new OverlayRenderer(); public final OverlayRenderer overlays = new OverlayRenderer();
@@ -29,11 +33,11 @@ public class Renderer implements ApplicationListener{
public @Nullable Bloom bloom; public @Nullable Bloom bloom;
public FrameBuffer effectBuffer = new FrameBuffer(); public FrameBuffer effectBuffer = new FrameBuffer();
public float laserOpacity = 1f; public boolean animateShields, drawWeather = true, drawStatus;
public boolean animateShields, drawWeather = true;
/** minZoom = zooming out, maxZoom = zooming in */ /** minZoom = zooming out, maxZoom = zooming in */
public float minZoom = 1.5f, maxZoom = 6f; public float minZoom = 1.5f, maxZoom = 6f;
private @Nullable CoreBuild landCore;
//TODO unused //TODO unused
private FxProcessor fx = new FxProcessor(); private FxProcessor fx = new FxProcessor();
private Color clearColor = new Color(0f, 0f, 0f, 1f); private Color clearColor = new Color(0f, 0f, 0f, 1f);
@@ -60,6 +64,10 @@ public class Renderer implements ApplicationListener{
if(settings.getBool("bloom", !ios)){ if(settings.getBool("bloom", !ios)){
setupBloom(); setupBloom();
} }
Events.on(WorldLoadEvent.class, e -> {
landCore = player.bestCore();
});
} }
@Override @Override
@@ -71,7 +79,9 @@ public class Renderer implements ApplicationListener{
camerascale = Mathf.lerpDelta(camerascale, dest, 0.1f); camerascale = Mathf.lerpDelta(camerascale, dest, 0.1f);
if(Mathf.equal(camerascale, dest, 0.001f)) camerascale = dest; if(Mathf.equal(camerascale, dest, 0.001f)) camerascale = dest;
laserOpacity = settings.getInt("lasersopacity") / 100f; laserOpacity = settings.getInt("lasersopacity") / 100f;
bridgeOpacity = settings.getInt("bridgeopacity") / 100f;
animateShields = settings.getBool("animatedshields"); animateShields = settings.getBool("animatedshields");
drawStatus = Core.settings.getBool("blockstatus");
if(landTime > 0){ if(landTime > 0){
landTime -= Time.delta; landTime -= Time.delta;
@@ -281,25 +291,25 @@ public class Renderer implements ApplicationListener{
} }
private void drawLanding(){ private void drawLanding(){
if(landTime > 0 && player.closestCore() != null){ CoreBuild entity = landCore == null ? player.bestCore() : landCore;
if(landTime > 0 && entity != null){
float fract = landTime / Fx.coreLand.lifetime; float fract = landTime / Fx.coreLand.lifetime;
Building entity = player.closestCore();
TextureRegion reg = entity.block.icon(Cicon.full); TextureRegion reg = entity.block.icon(Cicon.full);
float scl = Scl.scl(4f) / camerascale; float scl = Scl.scl(4f) / camerascale;
float s = reg.width * Draw.scl * scl * 4f * fract; float s = reg.width * Draw.scl * scl * 4f * fract;
Draw.color(Pal.lightTrail); Draw.color(Pal.lightTrail);
Draw.rect("circle-shadow", entity.getX(), entity.getY(), s, s); Draw.rect("circle-shadow", entity.x, entity.y, s, s);
Angles.randLenVectors(1, (1f- fract), 100, 1000f * scl * (1f-fract), (x, y, fin, fout) -> { Angles.randLenVectors(1, (1f- fract), 100, 1000f * scl * (1f-fract), (x, y, fin, fout) -> {
Lines.stroke(scl * fin); Lines.stroke(scl * fin);
Lines.lineAngle(entity.getX() + x, entity.getY() + y, Mathf.angle(x, y), (fin * 20 + 1f) * scl); Lines.lineAngle(entity.x + x, entity.y + y, Mathf.angle(x, y), (fin * 20 + 1f) * scl);
}); });
Draw.color(); Draw.color();
Draw.mixcol(Color.white, fract); Draw.mixcol(Color.white, fract);
Draw.rect(reg, entity.getX(), entity.getY(), reg.width * Draw.scl * scl, reg.height * Draw.scl * scl, fract * 135f); Draw.rect(reg, entity.x, entity.y, reg.width * Draw.scl * scl, reg.height * Draw.scl * scl, fract * 135f);
Draw.reset(); Draw.reset();
} }

View File

@@ -9,6 +9,7 @@ import mindustry.ui.dialogs.*;
public class MapResizeDialog extends BaseDialog{ public class MapResizeDialog extends BaseDialog{
public static int minSize = 50, maxSize = 500, increment = 50; public static int minSize = 50, maxSize = 500, increment = 50;
int width, height; int width, height;
public MapResizeDialog(MapEditor editor, Intc2 cons){ public MapResizeDialog(MapEditor editor, Intc2 cons){

View File

@@ -190,7 +190,7 @@ public class WaveInfoDialog extends BaseDialog{
group.end = never; group.end = never;
updateWaves(); updateWaves();
} }
}).width(100f).get().setMessageText(Core.bundle.get("waves.never")); }).width(100f).get().setMessageText("");
}); });
t.row(); t.row();
t.table(p -> { t.table(p -> {

View File

@@ -1,6 +1,7 @@
package mindustry.entities.abilities; package mindustry.entities.abilities;
import arc.*; import arc.*;
import arc.scene.ui.layout.*;
import mindustry.gen.*; import mindustry.gen.*;
public abstract class Ability implements Cloneable{ public abstract class Ability implements Cloneable{
@@ -16,6 +17,10 @@ public abstract class Ability implements Cloneable{
} }
} }
public void displayBars(Unit unit, Table bars){
}
/** @return localized ability name; mods should override this. */ /** @return localized ability name; mods should override this. */
public String localized(){ public String localized(){
return Core.bundle.get("ability." + getClass().getSimpleName().replace("Ability", "").toLowerCase()); return Core.bundle.get("ability." + getClass().getSimpleName().replace("Ability", "").toLowerCase());

View File

@@ -6,10 +6,12 @@ import arc.graphics.*;
import arc.graphics.g2d.*; import arc.graphics.g2d.*;
import arc.math.*; import arc.math.*;
import arc.math.geom.*; import arc.math.geom.*;
import arc.scene.ui.layout.*;
import arc.util.*; import arc.util.*;
import mindustry.content.*; import mindustry.content.*;
import mindustry.gen.*; import mindustry.gen.*;
import mindustry.graphics.*; import mindustry.graphics.*;
import mindustry.ui.*;
public class ForceFieldAbility extends Ability{ public class ForceFieldAbility extends Ability{
/** Shield radius. */ /** Shield radius. */
@@ -94,6 +96,11 @@ public class ForceFieldAbility extends Ability{
} }
} }
@Override
public void displayBars(Unit unit, Table bars){
bars.add(new Bar("stat.shieldhealth", Pal.accent, () -> unit.shield / max)).row();
}
public void checkRadius(Unit unit){ public void checkRadius(Unit unit){
//timer2 is used to store radius scale as an effect //timer2 is used to store radius scale as an effect
realRad = radiusScale * radius; realRad = radiusScale * radius;

View File

@@ -1,34 +1,57 @@
package mindustry.entities.abilities; package mindustry.entities.abilities;
import arc.*;
import arc.audio.*;
import arc.graphics.*; import arc.graphics.*;
import arc.graphics.g2d.*;
import arc.math.*; import arc.math.*;
import arc.util.*; import arc.util.*;
import arc.audio.*;
import mindustry.content.*; import mindustry.content.*;
import mindustry.entities.*; import mindustry.entities.*;
import mindustry.entities.bullet.*;
import mindustry.gen.*; import mindustry.gen.*;
public class MoveLightningAbility extends Ability{ public class MoveLightningAbility extends Ability{
//Lightning damage /** Lightning damage */
public float damage = 35f; public float damage = 35f;
//Chance of firing every tick. Set >= 1 to always fire lightning every tick at max speed. /** Chance of firing every tick. Set >= 1 to always fire lightning every tick at max speed. */
public float chance = 0.15f; public float chance = 0.15f;
//Length of the lightning /** Length of the lightning. <= 0 to disable */
public int length = 12; public int length = 12;
//Speeds for when to start lightninging and when to stop getting faster /** Speeds for when to start lightninging and when to stop getting faster */
public float minSpeed = 0.8f, maxSpeed = 1.2f; public float minSpeed = 0.8f, maxSpeed = 1.2f;
//Lightning color /** Lightning color */
public Color color = Color.valueOf("a9d8ff"); public Color color = Color.valueOf("a9d8ff");
/** Shifts where the lightning spawns along the Y axis */
public float offset = 0f;
/** Jittering heat sprite like the shield on v5 Javelin */
public String heatRegion = "error";
/** Bullet type that is fired. Can be null */
public @Nullable BulletType bullet;
/** Bullet angle parameters */
public float bulletAngle = 0f, bulletSpread = 0f;
public Effect shootEffect = Fx.sparkShoot; public Effect shootEffect = Fx.sparkShoot;
public Sound shootSound = Sounds.spark; public Sound shootSound = Sounds.spark;
MoveLightningAbility(){} MoveLightningAbility(){}
public MoveLightningAbility(float damage, int length, float chance, float minSpeed, float maxSpeed, Color color){ public MoveLightningAbility(float damage, int length, float chance, float offset, float minSpeed, float maxSpeed, Color color, String heatRegion){
this.damage = damage; this.damage = damage;
this.length = length; this.length = length;
this.chance = chance; this.chance = chance;
this.offset = offset;
this.minSpeed = minSpeed;
this.maxSpeed = maxSpeed;
this.color = color;
this.heatRegion = heatRegion;
}
public MoveLightningAbility(float damage, int length, float chance, float offset, float minSpeed, float maxSpeed, Color color){
this.damage = damage;
this.length = length;
this.chance = chance;
this.offset = offset;
this.minSpeed = minSpeed; this.minSpeed = minSpeed;
this.maxSpeed = maxSpeed; this.maxSpeed = maxSpeed;
this.color = color; this.color = color;
@@ -38,9 +61,31 @@ public class MoveLightningAbility extends Ability{
public void update(Unit unit){ public void update(Unit unit){
float scl = Mathf.clamp((unit.vel().len() - minSpeed) / (maxSpeed - minSpeed)); float scl = Mathf.clamp((unit.vel().len() - minSpeed) / (maxSpeed - minSpeed));
if(Mathf.chance(Time.delta * chance * scl)){ if(Mathf.chance(Time.delta * chance * scl)){
shootEffect.at(unit.x, unit.y, unit.rotation, color); float x = unit.x + Angles.trnsx(unit.rotation, offset, 0), y = unit.y + Angles.trnsy(unit.rotation, offset, 0);
Lightning.create(unit.team, color, damage, unit.x + unit.vel.x, unit.y + unit.vel.y, unit.rotation, length);
shootEffect.at(x, y, unit.rotation, color);
shootSound.at(unit); shootSound.at(unit);
if(length > 0){
Lightning.create(unit.team, color, damage, x + unit.vel.x, y + unit.vel.y, unit.rotation, length);
}
if(bullet != null){
bullet.create(unit, unit.team, x, y, unit.rotation + bulletAngle + Mathf.range(bulletSpread));
}
}
}
@Override
public void draw(Unit unit){
float scl = Mathf.clamp((unit.vel().len() - minSpeed) / (maxSpeed - minSpeed));
TextureRegion region = Core.atlas.find(heatRegion);
if(Core.atlas.isFound(region) && scl > 0.00001f){
Draw.color(color);
Draw.alpha(scl / 2f);
Draw.blend(Blending.additive);
Draw.rect(region, unit.x + Mathf.range(scl / 2f), unit.y + Mathf.range(scl / 2f), unit.rotation - 90);
Draw.blend();
} }
} }
} }

View File

@@ -34,6 +34,10 @@ public abstract class BulletType extends Content{
public Effect smokeEffect = Fx.shootSmallSmoke; public Effect smokeEffect = Fx.shootSmallSmoke;
/** Sound made when hitting something or getting removed.*/ /** Sound made when hitting something or getting removed.*/
public Sound hitSound = Sounds.none; public Sound hitSound = Sounds.none;
/** Pitch of the sound made when hitting something*/
public float hitSoundPitch = 1;
/** Volume of the sound made when hitting something*/
public float hitSoundVolume = 1;
/** Extra inaccuracy when firing. */ /** Extra inaccuracy when firing. */
public float inaccuracy = 0f; public float inaccuracy = 0f;
/** How many bullets get created per ammo item/liquid. */ /** How many bullets get created per ammo item/liquid. */
@@ -185,8 +189,9 @@ public abstract class BulletType extends Content{
} }
public void hit(Bullet b, float x, float y){ public void hit(Bullet b, float x, float y){
b.hit = true;
hitEffect.at(x, y, b.rotation(), hitColor); hitEffect.at(x, y, b.rotation(), hitColor);
hitSound.at(b); hitSound.at(x, y, hitSoundPitch, hitSoundVolume);
Effect.shake(hitShake, hitShake, b); Effect.shake(hitShake, hitShake, b);
@@ -241,7 +246,7 @@ public abstract class BulletType extends Content{
Effect.shake(despawnShake, despawnShake, b); Effect.shake(despawnShake, despawnShake, b);
if(fragBullet != null || splashDamageRadius > 0 || lightning > 0){ if(!b.hit && (fragBullet != null || splashDamageRadius > 0 || lightning > 0)){
hit(b); hit(b);
} }
} }
@@ -273,8 +278,7 @@ public abstract class BulletType extends Content{
} }
if(weaveMag > 0){ if(weaveMag > 0){
float scl = Mathf.randomSeed(id, 0.9f, 1.1f); b.vel.rotate(Mathf.sin(b.time + Mathf.PI * weaveScale/2f, weaveScale, weaveMag * (Mathf.randomSeed(b.id, 0, 1) == 1 ? -1 : 1)) * Time.delta);
b.vel.rotate(Mathf.sin(b.time + Mathf.PI * weaveScale/2f * scl, weaveScale * scl, weaveMag) * Time.delta);
} }
if(trailChance > 0){ if(trailChance > 0){
@@ -334,6 +338,7 @@ public abstract class BulletType extends Content{
bullet.type = this; bullet.type = this;
bullet.owner = owner; bullet.owner = owner;
bullet.team = team; bullet.team = team;
bullet.time = 0f;
bullet.vel.trns(angle, speed * velocityScl); bullet.vel.trns(angle, speed * velocityScl);
if(backMove){ if(backMove){
bullet.set(x - bullet.vel.x * Time.delta, y - bullet.vel.y * Time.delta); bullet.set(x - bullet.vel.x * Time.delta, y - bullet.vel.y * Time.delta);

View File

@@ -25,7 +25,7 @@ public class ContinuousLaserBulletType extends BulletType{
public ContinuousLaserBulletType(float damage){ public ContinuousLaserBulletType(float damage){
super(0.001f, damage); super(0.001f, damage);
hitEffect = Fx.hitMeltdown; hitEffect = Fx.hitBeam;
despawnEffect = Fx.none; despawnEffect = Fx.none;
hitSize = 4; hitSize = 4;
drawSize = 420f; drawSize = 420f;

View File

@@ -23,7 +23,8 @@ public class LaserBulletType extends BulletType{
public LaserBulletType(float damage){ public LaserBulletType(float damage){
super(0.01f, damage); super(0.01f, damage);
hitEffect = Fx.hitLancer; hitEffect = Fx.hitLaserBlast;
hitColor = colors[2];
despawnEffect = Fx.none; despawnEffect = Fx.none;
shootEffect = Fx.hitLancer; shootEffect = Fx.hitLancer;
smokeEffect = Fx.none; smokeEffect = Fx.none;

View File

@@ -15,7 +15,7 @@ public class MissileBulletType extends BasicBulletType{
height = 8f; height = 8f;
hitSound = Sounds.explosion; hitSound = Sounds.explosion;
trailChance = 0.2f; trailChance = 0.2f;
lifetime = 49f; lifetime = 52f;
} }
public MissileBulletType(float speed, float damage){ public MissileBulletType(float speed, float damage){

View File

@@ -19,7 +19,7 @@ public class SapBulletType extends BulletType{
public SapBulletType(){ public SapBulletType(){
speed = 0.0001f; speed = 0.0001f;
despawnEffect = Fx.none; despawnEffect = Fx.none;
pierce = false; pierce = true;
collides = false; collides = false;
hitSize = 0f; hitSize = 0f;
hittable = false; hittable = false;

View File

@@ -33,6 +33,8 @@ public class ShrapnelBulletType extends BulletType{
@Override @Override
public void init(Bullet b){ public void init(Bullet b){
super.init(b);
Damage.collideLaser(b, length, hitLarge); Damage.collideLaser(b, length, hitLarge);
} }

View File

@@ -1,6 +1,7 @@
package mindustry.entities.comp; package mindustry.entities.comp;
import arc.*; import arc.*;
import arc.func.*;
import arc.graphics.*; import arc.graphics.*;
import arc.graphics.g2d.*; import arc.graphics.g2d.*;
import arc.math.*; import arc.math.*;
@@ -108,7 +109,7 @@ abstract class BuilderComp implements Posc, Teamc, Rotc{
plans.removeFirst(); plans.removeFirst();
return; return;
} }
}else if((tile.team() != team && tile.team() != Team.derelict) || (!current.breaking && cb.cblock != current.block)){ }else if((tile.team() != team && tile.team() != Team.derelict) || (!current.breaking && (cb.cblock != current.block || cb.tile != current.tile()))){
plans.removeFirst(); plans.removeFirst();
return; return;
} }
@@ -136,10 +137,17 @@ abstract class BuilderComp implements Posc, Teamc, Rotc{
/** Draw all current build plans. Does not draw the beam effect, only the positions. */ /** Draw all current build plans. Does not draw the beam effect, only the positions. */
void drawBuildPlans(){ void drawBuildPlans(){
Boolf<BuildPlan> skip = plan -> plan.progress > 0.01f || (buildPlan() == plan && plan.initialized && (within(plan.x * tilesize, plan.y * tilesize, buildingRange) || state.isEditor()));
for(BuildPlan plan : plans){ for(int i = 0; i < 2; i++){
if(plan.progress > 0.01f || (buildPlan() == plan && plan.initialized && (within(plan.x * tilesize, plan.y * tilesize, buildingRange) || state.isEditor()))) continue; for(BuildPlan plan : plans){
drawPlan(plan, 1f); if(skip.get(plan)) continue;
if(i == 0){
drawPlan(plan, 1f);
}else{
drawPlanTop(plan, 1f);
}
}
} }
Draw.reset(); Draw.reset();
@@ -153,7 +161,11 @@ abstract class BuilderComp implements Posc, Teamc, Rotc{
request.block.drawPlan(request, control.input.allRequests(), request.block.drawPlan(request, control.input.allRequests(),
Build.validPlace(request.block, team, request.x, request.y, request.rotation) || control.input.requestMatches(request), Build.validPlace(request.block, team, request.x, request.y, request.rotation) || control.input.requestMatches(request),
alpha); alpha);
}
}
void drawPlanTop(BuildPlan request, float alpha){
if(!request.breaking){
Draw.reset(); Draw.reset();
Draw.mixcol(Color.white, 0.24f + Mathf.absin(Time.globalTime, 6f, 0.28f)); Draw.mixcol(Color.white, 0.24f + Mathf.absin(Time.globalTime, 6f, 0.28f));
Draw.alpha(alpha); Draw.alpha(alpha);
@@ -251,6 +263,7 @@ abstract class BuilderComp implements Posc, Teamc, Rotc{
if(core != null && active && !isLocal() && !(tile.block() instanceof ConstructBlock)){ if(core != null && active && !isLocal() && !(tile.block() instanceof ConstructBlock)){
Draw.z(Layer.plans - 1f); Draw.z(Layer.plans - 1f);
drawPlan(plan, 0.5f); drawPlan(plan, 0.5f);
drawPlanTop(plan, 0.5f);
Draw.z(Layer.flyingUnit); Draw.z(Layer.flyingUnit);
} }

View File

@@ -147,7 +147,8 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Buildingc, Timerc,
write.f(health); write.f(health);
write.b(rotation | 0b10000000); write.b(rotation | 0b10000000);
write.b(team.id); write.b(team.id);
write.b(0); //extra padding for later use write.b(1); //version
write.b(enabled ? 1 : 0);
if(items != null) items.write(write); if(items != null) items.write(write);
if(power != null) power.write(write); if(power != null) power.write(write);
if(liquids != null) liquids.write(write); if(liquids != null) liquids.write(write);
@@ -162,7 +163,14 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Buildingc, Timerc,
rotation = rot & 0b01111111; rotation = rot & 0b01111111;
boolean legacy = true; boolean legacy = true;
if((rot & 0b10000000) != 0){ if((rot & 0b10000000) != 0){
read.b(); //padding byte ver = read.b(); //version of entity save
if(ver == 1){
byte on = read.b();
this.enabled = on == 1;
if(!this.enabled){
enabledControlTime = timeToUncontrol;
}
}
legacy = false; legacy = false;
} }
@@ -358,6 +366,10 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Buildingc, Timerc,
return power != null && (block.consumes.has(ConsumeType.power) && !block.consumes.getPower().buffered) ? power.status : 1f; return power != null && (block.consumes.has(ConsumeType.power) && !block.consumes.getPower().buffered) ? power.status : 1f;
} }
public BlockStatus status(){
return cons.status();
}
/** Call when nothing is happening to the entity. This increments the internal sleep timer. */ /** Call when nothing is happening to the entity. This increments the internal sleep timer. */
public void sleep(){ public void sleep(){
sleepTime += Time.delta; sleepTime += Time.delta;
@@ -766,6 +778,10 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Buildingc, Timerc,
} }
power.links.clear(); power.links.clear();
} }
public boolean conductsTo(Building other){
return !block.insulated;
}
public Seq<Building> getPowerConnections(Seq<Building> out){ public Seq<Building> getPowerConnections(Seq<Building> out){
out.clear(); out.clear();
@@ -774,7 +790,7 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Buildingc, Timerc,
for(Building other : proximity){ for(Building other : proximity){
if(other != null && other.power != null if(other != null && other.power != null
&& !(block.consumesPower && other.block.consumesPower && !block.outputsPower && !other.block.outputsPower) && !(block.consumesPower && other.block.consumesPower && !block.outputsPower && !other.block.outputsPower)
&& !power.links.contains(other.pos())){ && conductsTo(other) && other.conductsTo(self()) && !power.links.contains(other.pos())){
out.add(other); out.add(other);
} }
} }
@@ -806,14 +822,15 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Buildingc, Timerc,
public void drawStatus(){ public void drawStatus(){
if(block.enableDrawStatus && block.consumes.any()){ if(block.enableDrawStatus && block.consumes.any()){
float brcx = tile.drawx() + (block.size * tilesize / 2f) - (tilesize / 2f); float multiplier = block.size > 1 ? 1 : 0.64f;
float brcy = tile.drawy() - (block.size * tilesize / 2f) + (tilesize / 2f); float brcx = x + (block.size * tilesize / 2f) - (tilesize * multiplier / 2f);
float brcy = y - (block.size * tilesize / 2f) + (tilesize * multiplier / 2f);
Draw.z(Layer.power + 1); Draw.z(Layer.power + 1);
Draw.color(Pal.gray); Draw.color(Pal.gray);
Fill.square(brcx, brcy, 2.5f, 45); Fill.square(brcx, brcy, 2.5f * multiplier, 45);
Draw.color(cons.status().color); Draw.color(status().color);
Fill.square(brcx, brcy, 1.5f, 45); Fill.square(brcx, brcy, 1.5f * multiplier, 45);
Draw.color(); Draw.color();
} }
} }
@@ -894,7 +911,7 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Buildingc, Timerc,
tempTiles.clear(); tempTiles.clear();
Geometry.circle(tileX(), tileY(), range, (x, y) -> { Geometry.circle(tileX(), tileY(), range, (x, y) -> {
Building other = world.build(x, y); Building other = world.build(x, y);
if(other != null && other.block instanceof PowerNode && ((PowerNode)other.block).linkValid(other, self()) && !PowerNode.insulated(other, self()) if(other != null && other.block instanceof PowerNode node && node.linkValid(other, self()) && !PowerNode.insulated(other, self())
&& !other.proximity().contains(this.<Building>self()) && && !other.proximity().contains(this.<Building>self()) &&
!(block.outputsPower && proximity.contains(p -> p.power != null && p.power.graph == other.power.graph))){ !(block.outputsPower && proximity.contains(p -> p.power != null && p.power.graph == other.power.graph))){
tempTiles.add(other.tile); tempTiles.add(other.tile);
@@ -966,8 +983,8 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Buildingc, Timerc,
} }
if(block.hasLiquids){ if(block.hasLiquids){
flammability += liquids.sum((liquid, amount) -> liquid.explosiveness * amount / 2f); flammability += liquids.sum((liquid, amount) -> liquid.flammability * amount / 2f);
explosiveness += liquids.sum((liquid, amount) -> liquid.flammability * amount / 2f); explosiveness += liquids.sum((liquid, amount) -> liquid.explosiveness * amount / 2f);
} }
if(block.consumes.hasPower() && block.consumes.getPower().buffered){ if(block.consumes.hasPower() && block.consumes.getPower().buffered){
@@ -1372,7 +1389,8 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Buildingc, Timerc,
timeScale = 1f; timeScale = 1f;
} }
if(block.autoResetEnabled){ if(!enabled && block.autoResetEnabled){
noSleep();
enabledControlTime -= Time.delta; enabledControlTime -= Time.delta;
if(enabledControlTime <= 0){ if(enabledControlTime <= 0){

View File

@@ -30,7 +30,7 @@ abstract class BulletComp implements Timedc, Damagec, Hitboxc, Teamc, Posc, Draw
Object data; Object data;
BulletType type; BulletType type;
float fdata; float fdata;
transient boolean absorbed; transient boolean absorbed, hit;
@Override @Override
public void getCollisions(Cons<QuadTree> consumer){ public void getCollisions(Cons<QuadTree> consumer){

View File

@@ -10,6 +10,7 @@ import mindustry.entities.*;
import mindustry.game.*; import mindustry.game.*;
import mindustry.gen.*; import mindustry.gen.*;
import mindustry.world.*; import mindustry.world.*;
import mindustry.world.meta.*;
import static mindustry.Vars.*; import static mindustry.Vars.*;
@@ -38,13 +39,15 @@ abstract class FireComp implements Timedc, Posc, Firec, Syncc{
control.sound.loop(Sounds.fire, this, 0.07f); control.sound.loop(Sounds.fire, this, 0.07f);
} }
time = Mathf.clamp(time + Time.delta, 0, lifetime()); //faster updates -> disappears more quickly
float speedMultiplier = 1f + Math.max(state.envAttrs.get(Attribute.water) * 10f, 0);
time = Mathf.clamp(time + Time.delta * speedMultiplier, 0, lifetime);
if(Vars.net.client()){ if(Vars.net.client()){
return; return;
} }
if(time >= lifetime() || tile == null){ if(time >= lifetime || tile == null){
remove(); remove();
return; return;
} }

View File

@@ -2,6 +2,7 @@ package mindustry.entities.comp;
import arc.*; import arc.*;
import arc.math.*; import arc.math.*;
import arc.scene.ui.layout.*;
import arc.struct.*; import arc.struct.*;
import arc.util.*; import arc.util.*;
import mindustry.*; import mindustry.*;
@@ -12,6 +13,7 @@ import mindustry.entities.*;
import mindustry.game.EventType.*; import mindustry.game.EventType.*;
import mindustry.gen.*; import mindustry.gen.*;
import mindustry.type.*; import mindustry.type.*;
import mindustry.ui.*;
import mindustry.world.*; import mindustry.world.*;
import mindustry.world.blocks.payloads.*; import mindustry.world.blocks.payloads.*;
@@ -134,7 +136,9 @@ abstract class PayloadComp implements Posc, Rotc, Hitboxc, Unitc{
int rot = (int)((rotation + 45f) / 90f) % 4; int rot = (int)((rotation + 45f) / 90f) % 4;
payload.place(on, rot); payload.place(on, rot);
if(isPlayer()) payload.build.lastAccessed = getPlayer().name; if(getControllerName() != null){
payload.build.lastAccessed = getControllerName();
}
Fx.unitDrop.at(tile); Fx.unitDrop.at(tile);
Fx.placeBlock.at(on.drawx(), on.drawy(), on.block().size); Fx.placeBlock.at(on.drawx(), on.drawy(), on.block().size);
@@ -143,4 +147,19 @@ abstract class PayloadComp implements Posc, Rotc, Hitboxc, Unitc{
return false; return false;
} }
void contentInfo(Table table, float itemSize, float width){
table.clear();
table.top().left();
float pad = 0;
float items = payloads.size;
if(itemSize * items + pad * items > width){
pad = (width - (itemSize) * items) / items;
}
for(Payload p : payloads){
table.image(p.icon(Cicon.small)).size(itemSize).padRight(pad);
}
}
} }

View File

@@ -59,6 +59,12 @@ abstract class PlayerComp implements UnitController, Entityc, Syncc, Timerc, Dra
return team.core(); return team.core();
} }
/** @return largest/closest core, with largest cores getting priority */
@Nullable
public CoreBuild bestCore(){
return team.cores().min(Structs.comps(Structs.comparingInt(c -> -c.block.size), Structs.comparingFloat(c -> c.dst(x, y))));
}
public TextureRegion icon(){ public TextureRegion icon(){
//display default icon for dead players //display default icon for dead players
if(dead()) return core() == null ? UnitTypes.alpha.icon(Cicon.full) : ((CoreBlock)core().block).unitType.icon(Cicon.full); if(dead()) return core() == null ? UnitTypes.alpha.icon(Cicon.full) : ((CoreBlock)core().block).unitType.icon(Cicon.full);
@@ -112,7 +118,7 @@ abstract class PlayerComp implements UnitController, Entityc, Syncc, Timerc, Dra
clearUnit(); clearUnit();
} }
CoreBuild core = closestCore(); CoreBuild core;
if(!dead()){ if(!dead()){
set(unit); set(unit);
@@ -124,7 +130,7 @@ abstract class PlayerComp implements UnitController, Entityc, Syncc, Timerc, Dra
Tile tile = unit.tileOn(); Tile tile = unit.tileOn();
unit.elevation = Mathf.approachDelta(unit.elevation, (tile != null && tile.solid()) || boosting ? 1f : 0f, 0.08f); unit.elevation = Mathf.approachDelta(unit.elevation, (tile != null && tile.solid()) || boosting ? 1f : 0f, 0.08f);
} }
}else if(core != null){ }else if((core = bestCore()) != null){
//have a small delay before death to prevent the camera from jumping around too quickly //have a small delay before death to prevent the camera from jumping around too quickly
//(this is not for balance, it just looks better this way) //(this is not for balance, it just looks better this way)
deathTimer += Time.delta; deathTimer += Time.delta;
@@ -191,6 +197,10 @@ abstract class PlayerComp implements UnitController, Entityc, Syncc, Timerc, Dra
return unit.isNull() || !unit.isValid(); return unit.isNull() || !unit.isValid();
} }
String ip(){
return con == null ? "localhost" : con.address;
}
String uuid(){ String uuid(){
return con == null ? "[LOCAL]" : con.uuid; return con == null ? "[LOCAL]" : con.uuid;
} }

View File

@@ -46,6 +46,7 @@ abstract class UnitComp implements Healthc, Physicsc, Hitboxc, Statusc, Teamc, I
transient Seq<Ability> abilities = new Seq<>(0); transient Seq<Ability> abilities = new Seq<>(0);
private transient float resupplyTime = Mathf.random(10f); private transient float resupplyTime = Mathf.random(10f);
private transient boolean wasPlayer;
public void moveAt(Vec2 vector){ public void moveAt(Vec2 vector){
moveAt(vector, type.accel); moveAt(vector, type.accel);
@@ -104,7 +105,7 @@ abstract class UnitComp implements Healthc, Physicsc, Hitboxc, Statusc, Teamc, I
@Override @Override
public float range(){ public float range(){
return type.range; return type.maxRange;
} }
@Replace @Replace
@@ -272,7 +273,7 @@ abstract class UnitComp implements Healthc, Physicsc, Hitboxc, Statusc, Teamc, I
team.data().updateCount(type, 1); team.data().updateCount(type, 1);
//check if over unit cap //check if over unit cap
if(count() > cap() && !spawnedByCore && !dead){ if(count() > cap() && !spawnedByCore && !dead && !state.rules.editor){
Call.unitCapDeath(self()); Call.unitCapDeath(self());
team.data().updateCount(type, -1); team.data().updateCount(type, -1);
} }
@@ -423,7 +424,7 @@ abstract class UnitComp implements Healthc, Physicsc, Hitboxc, Statusc, Teamc, I
Events.fire(new UnitDestroyEvent(self())); Events.fire(new UnitDestroyEvent(self()));
if(explosiveness > 7f && isLocal()){ if(explosiveness > 7f && (isLocal() || wasPlayer)){
Events.fire(Trigger.suicideBomb); Events.fire(Trigger.suicideBomb);
} }
@@ -445,6 +446,15 @@ abstract class UnitComp implements Healthc, Physicsc, Hitboxc, Statusc, Teamc, I
remove(); remove();
} }
/** @return name of direct or indirect player controller. */
@Override
public @Nullable String getControllerName(){
if(isPlayer()) return getPlayer().name;
if(controller instanceof LogicAI ai && ai.controller != null) return ai.controller.lastAccessed;
if(controller instanceof FormationAI ai && ai.leader != null && ai.leader.isPlayer()) return ai.leader.getPlayer().name;
return null;
}
@Override @Override
public void display(Table table){ public void display(Table table){
type.display(self(), table); type.display(self(), table);
@@ -472,6 +482,7 @@ abstract class UnitComp implements Healthc, Physicsc, Hitboxc, Statusc, Teamc, I
@Override @Override
public void killed(){ public void killed(){
wasPlayer = isLocal();
health = 0; health = 0;
dead = true; dead = true;

View File

@@ -39,7 +39,7 @@ abstract class WaterMoveComp implements Posc, Velc, Hitboxc, Flyingc, Unitc{
@Override @Override
@Replace @Replace
public int pathType(){ public int pathType(){
return Pathfinder.costWater; return Pathfinder.costNaval;
} }
@Override @Override

View File

@@ -88,7 +88,7 @@ public class AIController implements UnitController{
if(tile == null) return; if(tile == null) return;
Tile targetTile = pathfinder.getTargetTile(tile, pathfinder.getField(unit.team, costType, pathTarget)); Tile targetTile = pathfinder.getTargetTile(tile, pathfinder.getField(unit.team, costType, pathTarget));
if(tile == targetTile || (costType == Pathfinder.costWater && !targetTile.floor().isLiquid)) return; if(tile == targetTile || (costType == Pathfinder.costNaval && !targetTile.floor().isLiquid)) return;
unit.moveAt(vec.trns(unit.angleTo(targetTile), unit.speed())); unit.moveAt(vec.trns(unit.angleTo(targetTile), unit.speed()));
} }
@@ -123,7 +123,7 @@ public class AIController implements UnitController{
targets[i] = findTarget(mountX, mountY, weapon.bullet.range(), weapon.bullet.collidesAir, weapon.bullet.collidesGround); targets[i] = findTarget(mountX, mountY, weapon.bullet.range(), weapon.bullet.collidesAir, weapon.bullet.collidesGround);
} }
if(Units.invalidateTarget(targets[i], unit.team, mountX, mountY, weapon.bullet.range())){ if(checkTarget(targets[i], mountX, mountY, weapon.bullet.range())){
targets[i] = null; targets[i] = null;
} }
} }
@@ -149,6 +149,10 @@ public class AIController implements UnitController{
} }
} }
protected boolean checkTarget(Teamc target, float x, float y, float range){
return Units.invalidateTarget(target, unit.team, x, y, range);
}
protected boolean shouldShoot(){ protected boolean shouldShoot(){
return true; return true;
} }

View File

@@ -351,10 +351,22 @@ public class EventType{
} }
} }
/** Called when a unit is created in a reconstructor or factory. */
public static class UnitCreateEvent{ public static class UnitCreateEvent{
public final Unit unit; public final Unit unit;
public final Building spawner;
public UnitCreateEvent(Unit unit){ public UnitCreateEvent(Unit unit, Building spawner){
this.unit = unit;
this.spawner = spawner;
}
}
/** Called when a unit is dumped from any payload block. */
public static class UnitUnloadEvent{
public final Unit unit;
public UnitUnloadEvent(Unit unit){
this.unit = unit; this.unit = unit;
} }
} }

View File

@@ -97,6 +97,8 @@ public class Rules{
public Team waveTeam = Team.crux; public Team waveTeam = Team.crux;
/** name of the custom mode that this ruleset describes, or null. */ /** name of the custom mode that this ruleset describes, or null. */
public @Nullable String modeName; public @Nullable String modeName;
/** Whether cores incinerate items when full, just like in the campaign. */
public boolean coreIncinerates = false;
/** special tags for additional info. */ /** special tags for additional info. */
public StringMap tags = new StringMap(); public StringMap tags = new StringMap();

View File

@@ -63,6 +63,8 @@ public class SectorInfo{
public int spawnPosition; public int spawnPosition;
/** How long the player has been playing elsewhere. */ /** How long the player has been playing elsewhere. */
public float secondsPassed; public float secondsPassed;
/** How many minutes this sector has been captured. */
public float minutesCaptured;
/** Display name. */ /** Display name. */
public @Nullable String name; public @Nullable String name;
/** Displayed icon. */ /** Displayed icon. */

View File

@@ -148,6 +148,13 @@ public class Universe{
for(Sector sector : planet.sectors){ for(Sector sector : planet.sectors){
if(sector.hasSave() && sector.hasBase()){ if(sector.hasSave() && sector.hasBase()){
//if it is being attacked, capture time is 0; otherwise, increment the timer
if(sector.isAttacked()){
sector.info.minutesCaptured = 0;
}else{
sector.info.minutesCaptured += turnDuration / 60 / 60;
}
//increment seconds passed for this sector by the time that just passed with this turn //increment seconds passed for this sector by the time that just passed with this turn
if(!sector.isBeingPlayed()){ if(!sector.isBeingPlayed()){
@@ -216,9 +223,11 @@ public class Universe{
} }
//queue random invasions //queue random invasions
if(!sector.isAttacked() && turn > invasionGracePeriod && sector.info.hasSpawns){ if(!sector.isAttacked() && sector.info.minutesCaptured > invasionGracePeriod && sector.info.hasSpawns){
int count = sector.near().count(Sector::hasEnemyBase);
//invasion chance depends on # of nearby bases //invasion chance depends on # of nearby bases
if(Mathf.chance(baseInvasionChance * Math.min(sector.near().count(Sector::hasEnemyBase), 1))){ if(count > 0 && Mathf.chance(baseInvasionChance * (0.8f + (count - 1) * 0.3f))){
int waveMax = Math.max(sector.info.winWave, sector.isBeingPlayed() ? state.wave : sector.info.wave + sector.info.wavesPassed) + Mathf.random(2, 4) * 5; int waveMax = Math.max(sector.info.winWave, sector.isBeingPlayed() ? state.wave : sector.info.wave + sector.info.wavesPassed) + Mathf.random(2, 4) * 5;
//assign invasion-related things //assign invasion-related things

View File

@@ -39,7 +39,6 @@ public class BlockRenderer implements Disposable{
private Seq<Building> outArray2 = new Seq<>(); private Seq<Building> outArray2 = new Seq<>();
private Seq<Tile> shadowEvents = new Seq<>(); private Seq<Tile> shadowEvents = new Seq<>();
private IntSet procEntities = new IntSet(), procLinks = new IntSet(), procLights = new IntSet(); private IntSet procEntities = new IntSet(), procLinks = new IntSet(), procLights = new IntSet();
private boolean displayStatus = false;
public BlockRenderer(){ public BlockRenderer(){
@@ -177,7 +176,6 @@ public class BlockRenderer implements Disposable{
/** Process all blocks to draw. */ /** Process all blocks to draw. */
public void processBlocks(){ public void processBlocks(){
displayStatus = Core.settings.getBool("blockstatus");
int avgx = (int)(camera.position.x / tilesize); int avgx = (int)(camera.position.x / tilesize);
int avgy = (int)(camera.position.y / tilesize); int avgy = (int)(camera.position.y / tilesize);
@@ -275,7 +273,7 @@ public class BlockRenderer implements Disposable{
Draw.z(Layer.block); Draw.z(Layer.block);
} }
if(displayStatus && block.consumes.any()){ if(renderer.drawStatus && block.consumes.any()){
entity.drawStatus(); entity.drawStatus();
} }
} }

View File

@@ -17,6 +17,22 @@ import static mindustry.Vars.*;
public class Drawf{ public class Drawf{
public static void target(float x, float y, float rad, Color color){
target(x, y, rad, 1, color);
}
public static void target(float x, float y, float rad, float alpha, Color color){
Lines.stroke(3f);
Draw.color(Pal.gray, alpha);
Lines.poly(x, y, 4, rad, Time.time * 1.5f);
Lines.spikes(x, y, 3f/7f * rad, 6f/7f * rad, 4, Time.time * 1.5f);
Lines.stroke(1f);
Draw.color(color, alpha);
Lines.poly(x, y, 4, rad, Time.time * 1.5f);
Lines.spikes(x, y, 3f/7f * rad, 6f/7f * rad, 4, Time.time * 1.5f);
Draw.reset();
}
public static float text(){ public static float text(){
float z = Draw.z(); float z = Draw.z();
if(renderer.pixelator.enabled()){ if(renderer.pixelator.enabled()){

View File

@@ -19,6 +19,7 @@ public class OverlayRenderer{
private static final float indicatorLength = 14f; private static final float indicatorLength = 14f;
private static final float spawnerMargin = tilesize*11f; private static final float spawnerMargin = tilesize*11f;
private static final Rect rect = new Rect(); private static final Rect rect = new Rect();
private float buildFade, unitFade; private float buildFade, unitFade;
private Unit lastSelect; private Unit lastSelect;
@@ -88,8 +89,12 @@ public class OverlayRenderer{
Draw.rect(select.type.icon(Cicon.full), select.x(), select.y(), select.rotation() - 90); Draw.rect(select.type.icon(Cicon.full), select.x(), select.y(), select.rotation() - 90);
} }
Lines.stroke(unitFade); for(int i = 0; i < 4; i++){
Lines.square(select.x, select.y, select.hitSize() * 1.5f, Time.time * 2f); float rot = i * 90f + 45f + (-Time.time) % 360f;
float length = select.hitSize() * 1.5f + (unitFade * 2.5f);
Draw.rect("select-arrow", select.x + Angles.trnsx(rot, length), select.y + Angles.trnsy(rot, length), length / 1.9f, length / 1.9f, rot - 135f);
}
Draw.reset(); Draw.reset();
} }

View File

@@ -3,6 +3,7 @@ package mindustry.input;
import arc.*; import arc.*;
import arc.Graphics.*; import arc.Graphics.*;
import arc.Graphics.Cursor.*; import arc.Graphics.Cursor.*;
import arc.graphics.*;
import arc.graphics.g2d.*; import arc.graphics.g2d.*;
import arc.math.*; import arc.math.*;
import arc.math.geom.*; import arc.math.geom.*;
@@ -160,14 +161,17 @@ public class DesktopInput extends InputHandler{
drawArrow(block, cursorX, cursorY, rotation); drawArrow(block, cursorX, cursorY, rotation);
} }
Draw.color(); Draw.color();
boolean valid = validPlace(cursorX, cursorY, block, rotation);
drawRequest(cursorX, cursorY, block, rotation); drawRequest(cursorX, cursorY, block, rotation);
block.drawPlace(cursorX, cursorY, rotation, validPlace(cursorX, cursorY, block, rotation)); block.drawPlace(cursorX, cursorY, rotation, valid);
if(block.saveConfig && block.lastConfig != null){ if(block.saveConfig){
Draw.mixcol(!valid ? Pal.breakInvalid : Color.white, (!valid ? 0.4f : 0.24f) + Mathf.absin(Time.globalTime, 6f, 0.28f));
brequest.set(cursorX, cursorY, rotation, block); brequest.set(cursorX, cursorY, rotation, block);
brequest.config = block.lastConfig; brequest.config = block.lastConfig;
block.drawRequestConfig(brequest, allRequests()); block.drawRequestConfig(brequest, allRequests());
brequest.config = null; brequest.config = null;
Draw.reset();
} }
} }
} }
@@ -247,7 +251,7 @@ public class DesktopInput extends InputHandler{
//zoom camera //zoom camera
if((!Core.scene.hasScroll() || Core.input.keyDown(Binding.diagonal_placement)) && !ui.chatfrag.shown() && Math.abs(Core.input.axisTap(Binding.zoom)) > 0 if((!Core.scene.hasScroll() || Core.input.keyDown(Binding.diagonal_placement)) && !ui.chatfrag.shown() && Math.abs(Core.input.axisTap(Binding.zoom)) > 0
&& !Core.input.keyDown(Binding.rotateplaced) && (Core.input.keyDown(Binding.diagonal_placement) || ((!isPlacing() || !block.rotate) && selectRequests.isEmpty()))){ && !Core.input.keyDown(Binding.rotateplaced) && (Core.input.keyDown(Binding.diagonal_placement) || ((!player.isBuilder() || !isPlacing() || !block.rotate) && selectRequests.isEmpty()))){
renderer.scaleCamera(Core.input.axisTap(Binding.zoom)); renderer.scaleCamera(Core.input.axisTap(Binding.zoom));
} }
@@ -370,7 +374,7 @@ public class DesktopInput extends InputHandler{
int cursorY = tileY(Core.input.mouseY()); int cursorY = tileY(Core.input.mouseY());
int rawCursorX = World.toTile(Core.input.mouseWorld().x), rawCursorY = World.toTile(Core.input.mouseWorld().y); int rawCursorX = World.toTile(Core.input.mouseWorld().x), rawCursorY = World.toTile(Core.input.mouseWorld().y);
// automatically pause building if the current build queue is empty //automatically pause building if the current build queue is empty
if(Core.settings.getBool("buildautopause") && isBuilding && !player.unit().isBuilding()){ if(Core.settings.getBool("buildautopause") && isBuilding && !player.unit().isBuilding()){
isBuilding = false; isBuilding = false;
buildWasAutoPaused = true; buildWasAutoPaused = true;

View File

@@ -100,6 +100,12 @@ public abstract class InputHandler implements InputProcessor, GestureListener{
if(build == null || build.items == null) return; if(build == null || build.items == null) return;
build.items.set(item, amount); build.items.set(item, amount);
} }
@Remote(called = Loc.server, unreliable = true)
public static void clearItems(Building build){
if(build == null || build.items == null) return;
build.items.clear();
}
@Remote(called = Loc.server, unreliable = true) @Remote(called = Loc.server, unreliable = true)
public static void transferItemTo(@Nullable Unit unit, Item item, int amount, float x, float y, Building build){ public static void transferItemTo(@Nullable Unit unit, Item item, int amount, float x, float y, Building build){
@@ -123,11 +129,11 @@ public abstract class InputHandler implements InputProcessor, GestureListener{
} }
@Remote(called = Loc.server, targets = Loc.both, forward = true) @Remote(called = Loc.server, targets = Loc.both, forward = true)
public static void requestItem(Player player, Building tile, Item item, int amount){ public static void requestItem(Player player, Building build, Item item, int amount){
if(player == null || tile == null || !tile.interactable(player.team()) || !player.within(tile, buildingRange) || player.dead()) return; if(player == null || build == null || !build.interactable(player.team()) || !player.within(build, buildingRange) || player.dead()) return;
if(net.server() && (!Units.canInteract(player, tile) || if(net.server() && (!Units.canInteract(player, build) ||
!netServer.admins.allowAction(player, ActionType.withdrawItem, tile.tile(), action -> { !netServer.admins.allowAction(player, ActionType.withdrawItem, build.tile(), action -> {
action.item = item; action.item = item;
action.itemAmount = amount; action.itemAmount = amount;
}))){ }))){
@@ -136,20 +142,20 @@ public abstract class InputHandler implements InputProcessor, GestureListener{
//remove item for every controlling unit //remove item for every controlling unit
player.unit().eachGroup(unit -> { player.unit().eachGroup(unit -> {
Call.takeItems(tile, item, unit.maxAccepted(item), unit); Call.takeItems(build, item, unit.maxAccepted(item), unit);
if(unit == player.unit()){ if(unit == player.unit()){
Events.fire(new WithdrawEvent(tile, player, item, amount)); Events.fire(new WithdrawEvent(build, player, item, amount));
} }
}); });
} }
@Remote(targets = Loc.both, forward = true, called = Loc.server) @Remote(targets = Loc.both, forward = true, called = Loc.server)
public static void transferInventory(Player player, Building tile){ public static void transferInventory(Player player, Building build){
if(player == null || tile == null || !player.within(tile, buildingRange) || tile.items == null || player.dead()) return; if(player == null || build == null || !player.within(build, buildingRange) || build.items == null || player.dead()) return;
if(net.server() && (player.unit().stack.amount <= 0 || !Units.canInteract(player, tile) || if(net.server() && (player.unit().stack.amount <= 0 || !Units.canInteract(player, build) ||
!netServer.admins.allowAction(player, ActionType.depositItem, tile.tile, action -> { !netServer.admins.allowAction(player, ActionType.depositItem, build.tile, action -> {
action.itemAmount = player.unit().stack.amount; action.itemAmount = player.unit().stack.amount;
action.item = player.unit().item(); action.item = player.unit().item();
}))){ }))){
@@ -159,12 +165,12 @@ public abstract class InputHandler implements InputProcessor, GestureListener{
//deposit for every controlling unit //deposit for every controlling unit
player.unit().eachGroup(unit -> { player.unit().eachGroup(unit -> {
Item item = unit.item(); Item item = unit.item();
int accepted = tile.acceptStack(item, unit.stack.amount, unit); int accepted = build.acceptStack(item, unit.stack.amount, unit);
Call.transferItemTo(unit, item, accepted, unit.x, unit.y, tile); Call.transferItemTo(unit, item, accepted, unit.x, unit.y, build);
if(unit == player.unit()){ if(unit == player.unit()){
Events.fire(new DepositEvent(tile, player, item, accepted)); Events.fire(new DepositEvent(build, player, item, accepted));
} }
}); });
} }
@@ -188,22 +194,22 @@ public abstract class InputHandler implements InputProcessor, GestureListener{
} }
@Remote(targets = Loc.both, called = Loc.server) @Remote(targets = Loc.both, called = Loc.server)
public static void requestBuildPayload(Player player, Building tile){ public static void requestBuildPayload(Player player, Building build){
if(player == null) return; if(player == null) return;
Unit unit = player.unit(); Unit unit = player.unit();
Payloadc pay = (Payloadc)unit; Payloadc pay = (Payloadc)unit;
if(tile != null && tile.team == unit.team if(build != null && build.team == unit.team
&& unit.within(tile, tilesize * tile.block.size * 1.2f + tilesize * 5f)){ && unit.within(build, tilesize * build.block.size * 1.2f + tilesize * 5f)){
//pick up block's payload //pick up block's payload
Payload current = tile.getPayload(); Payload current = build.getPayload();
if(current != null && pay.canPickupPayload(current)){ if(current != null && pay.canPickupPayload(current)){
Call.pickedBuildPayload(unit, tile, false); Call.pickedBuildPayload(unit, build, false);
//pick up whole building directly //pick up whole building directly
}else if(tile.block.buildVisibility != BuildVisibility.hidden && tile.canPickup() && pay.canPickup(tile)){ }else if(build.block.buildVisibility != BuildVisibility.hidden && build.canPickup() && pay.canPickup(build)){
Call.pickedBuildPayload(unit, tile, true); Call.pickedBuildPayload(unit, build, true);
} }
} }
} }
@@ -218,29 +224,29 @@ public abstract class InputHandler implements InputProcessor, GestureListener{
} }
@Remote(targets = Loc.server, called = Loc.server) @Remote(targets = Loc.server, called = Loc.server)
public static void pickedBuildPayload(Unit unit, Building tile, boolean onGround){ public static void pickedBuildPayload(Unit unit, Building build, boolean onGround){
if(tile != null && unit instanceof Payloadc pay){ if(build != null && unit instanceof Payloadc pay){
if(onGround){ if(onGround){
if(tile.block.buildVisibility != BuildVisibility.hidden && tile.canPickup() && pay.canPickup(tile)){ if(build.block.buildVisibility != BuildVisibility.hidden && build.canPickup() && pay.canPickup(build)){
pay.pickup(tile); pay.pickup(build);
}else{ }else{
Fx.unitPickup.at(tile); Fx.unitPickup.at(build);
tile.tile.remove(); build.tile.remove();
} }
}else{ }else{
Payload current = tile.getPayload(); Payload current = build.getPayload();
if(current != null && pay.canPickupPayload(current)){ if(current != null && pay.canPickupPayload(current)){
Payload taken = tile.takePayload(); Payload taken = build.takePayload();
if(taken != null){ if(taken != null){
pay.addPayload(taken); pay.addPayload(taken);
Fx.unitPickup.at(tile); Fx.unitPickup.at(build);
} }
} }
} }
}else if(tile != null && onGround){ }else if(build != null && onGround){
Fx.unitPickup.at(tile); Fx.unitPickup.at(build);
tile.tile.remove(); build.tile.remove();
} }
} }
@@ -287,27 +293,28 @@ public abstract class InputHandler implements InputProcessor, GestureListener{
} }
@Remote(targets = Loc.both, called = Loc.server, forward = true, unreliable = true) @Remote(targets = Loc.both, called = Loc.server, forward = true, unreliable = true)
public static void rotateBlock(@Nullable Player player, Building tile, boolean direction){ public static void rotateBlock(@Nullable Player player, Building build, boolean direction){
if(tile == null) return; if(build == null) return;
if(net.server() && (!Units.canInteract(player, tile) || if(net.server() && (!Units.canInteract(player, build) ||
!netServer.admins.allowAction(player, ActionType.rotate, tile.tile(), action -> action.rotation = Mathf.mod(tile.rotation + Mathf.sign(direction), 4)))){ !netServer.admins.allowAction(player, ActionType.rotate, build.tile(), action -> action.rotation = Mathf.mod(build.rotation + Mathf.sign(direction), 4)))){
throw new ValidateException(player, "Player cannot rotate a block."); throw new ValidateException(player, "Player cannot rotate a block.");
} }
if(player != null) tile.lastAccessed = player.name; if(player != null) build.lastAccessed = player.name;
tile.rotation = Mathf.mod(tile.rotation + Mathf.sign(direction), 4); build.rotation = Mathf.mod(build.rotation + Mathf.sign(direction), 4);
tile.updateProximity(); build.updateProximity();
tile.noSleep(); build.noSleep();
Fx.rotateBlock.at(build.x, build.y, build.block.size);
} }
@Remote(targets = Loc.both, called = Loc.both, forward = true) @Remote(targets = Loc.both, called = Loc.both, forward = true)
public static void tileConfig(@Nullable Player player, Building tile, @Nullable Object value){ public static void tileConfig(@Nullable Player player, Building build, @Nullable Object value){
if(tile == null) return; if(build == null) return;
if(net.server() && (!Units.canInteract(player, tile) || if(net.server() && (!Units.canInteract(player, build) ||
!netServer.admins.allowAction(player, ActionType.configure, tile.tile, action -> action.config = value))) throw new ValidateException(player, "Player cannot configure a tile."); !netServer.admins.allowAction(player, ActionType.configure, build.tile, action -> action.config = value))) throw new ValidateException(player, "Player cannot configure a tile.");
tile.configured(player == null || player.dead() ? null : player.unit(), value); build.configured(player == null || player.dead() ? null : player.unit(), value);
Core.app.post(() -> Events.fire(new ConfigEvent(tile, player, value))); Core.app.post(() -> Events.fire(new ConfigEvent(build, player, value)));
} }
//only useful for servers or local mods, and is not replicated across clients //only useful for servers or local mods, and is not replicated across clients
@@ -336,7 +343,7 @@ public abstract class InputHandler implements InputProcessor, GestureListener{
} }
player.clearUnit(); player.clearUnit();
player.deathTimer = 61f; player.deathTimer = Player.deathDelay + 1f;
build.requestSpawn(player); build.requestSpawn(player);
}else if(unit == null){ //just clear the unit (is this used?) }else if(unit == null){ //just clear the unit (is this used?)
player.clearUnit(); player.clearUnit();
@@ -362,7 +369,7 @@ public abstract class InputHandler implements InputProcessor, GestureListener{
Fx.spawn.at(player); Fx.spawn.at(player);
player.clearUnit(); player.clearUnit();
player.deathTimer = 61f; //for instant respawn player.deathTimer = Player.deathDelay + 1f; //for instant respawn
} }
@Remote(targets = Loc.both, called = Loc.server, forward = true) @Remote(targets = Loc.both, called = Loc.server, forward = true)
@@ -455,10 +462,10 @@ public abstract class InputHandler implements InputProcessor, GestureListener{
if(target != null){ if(target != null){
Call.requestUnitPayload(player, target); Call.requestUnitPayload(player, target);
}else{ }else{
Building tile = world.buildWorld(pay.x(), pay.y()); Building build = world.buildWorld(pay.x(), pay.y());
if(tile != null && tile.team == unit.team){ if(build != null && build.team == unit.team){
Call.requestBuildPayload(player, tile); Call.requestBuildPayload(player, build);
} }
} }
} }
@@ -860,8 +867,8 @@ public abstract class InputHandler implements InputProcessor, GestureListener{
} }
/** Handles tile tap events that are not platform specific. */ /** Handles tile tap events that are not platform specific. */
boolean tileTapped(@Nullable Building tile){ boolean tileTapped(@Nullable Building build){
if(tile == null){ if(build == null){
frag.inv.hide(); frag.inv.hide();
frag.config.hideConfig(); frag.config.hideConfig();
return false; return false;
@@ -869,18 +876,18 @@ public abstract class InputHandler implements InputProcessor, GestureListener{
boolean consumed = false, showedInventory = false; boolean consumed = false, showedInventory = false;
//check if tapped block is configurable //check if tapped block is configurable
if(tile.block.configurable && tile.interactable(player.team())){ if(build.block.configurable && build.interactable(player.team())){
consumed = true; consumed = true;
if(((!frag.config.isShown() && tile.shouldShowConfigure(player)) //if the config fragment is hidden, show if(((!frag.config.isShown() && build.shouldShowConfigure(player)) //if the config fragment is hidden, show
//alternatively, the current selected block can 'agree' to switch config tiles //alternatively, the current selected block can 'agree' to switch config tiles
|| (frag.config.isShown() && frag.config.getSelectedTile().onConfigureTileTapped(tile)))){ || (frag.config.isShown() && frag.config.getSelectedTile().onConfigureTileTapped(build)))){
Sounds.click.at(tile); Sounds.click.at(build);
frag.config.showConfig(tile); frag.config.showConfig(build);
} }
//otherwise... //otherwise...
}else if(!frag.config.hasConfigMouse()){ //make sure a configuration fragment isn't on the cursor }else if(!frag.config.hasConfigMouse()){ //make sure a configuration fragment isn't on the cursor
//then, if it's shown and the current block 'agrees' to hide, hide it. //then, if it's shown and the current block 'agrees' to hide, hide it.
if(frag.config.isShown() && frag.config.getSelectedTile().onConfigureTileTapped(tile)){ if(frag.config.isShown() && frag.config.getSelectedTile().onConfigureTileTapped(build)){
consumed = true; consumed = true;
frag.config.hideConfig(); frag.config.hideConfig();
} }
@@ -891,16 +898,16 @@ public abstract class InputHandler implements InputProcessor, GestureListener{
} }
//call tapped event //call tapped event
if(!consumed && tile.interactable(player.team())){ if(!consumed && build.interactable(player.team())){
tile.tapped(); build.tapped();
} }
//consume tap event if necessary //consume tap event if necessary
if(tile.interactable(player.team()) && tile.block.consumesTap){ if(build.interactable(player.team()) && build.block.consumesTap){
consumed = true; consumed = true;
}else if(tile.interactable(player.team()) && tile.block.synthetic() && !consumed){ }else if(build.interactable(player.team()) && build.block.synthetic() && !consumed){
if(tile.block.hasItems && tile.items.total() > 0){ if(build.block.hasItems && build.items.total() > 0){
frag.inv.showFor(tile); frag.inv.showFor(build);
consumed = true; consumed = true;
showedInventory = true; showedInventory = true;
} }
@@ -1000,8 +1007,8 @@ public abstract class InputHandler implements InputProcessor, GestureListener{
} }
} }
Building tile = world.buildWorld(Core.input.mouseWorld().x, Core.input.mouseWorld().y); Building build = world.buildWorld(Core.input.mouseWorld().x, Core.input.mouseWorld().y);
if(tile instanceof ControlBlock cont && cont.canControl() && tile.team == player.team()){ if(build instanceof ControlBlock cont && cont.canControl() && build.team == player.team()){
return cont.unit(); return cont.unit();
} }
@@ -1065,7 +1072,7 @@ public abstract class InputHandler implements InputProcessor, GestureListener{
return droppingItem && !canTapPlayer(Core.input.mouseWorldX(), Core.input.mouseWorldY()); return droppingItem && !canTapPlayer(Core.input.mouseWorldX(), Core.input.mouseWorldY());
} }
public void tryDropItems(@Nullable Building tile, float x, float y){ public void tryDropItems(@Nullable Building build, float x, float y){
if(!droppingItem || player.unit().stack.amount <= 0 || canTapPlayer(x, y) || state.isPaused() ){ if(!droppingItem || player.unit().stack.amount <= 0 || canTapPlayer(x, y) || state.isPaused() ){
droppingItem = false; droppingItem = false;
return; return;
@@ -1075,8 +1082,8 @@ public abstract class InputHandler implements InputProcessor, GestureListener{
ItemStack stack = player.unit().stack; ItemStack stack = player.unit().stack;
if(tile != null && tile.acceptStack(stack.item, stack.amount, player.unit()) > 0 && tile.interactable(player.team()) && tile.block.hasItems && player.unit().stack().amount > 0 && tile.interactable(player.team())){ if(build != null && build.acceptStack(stack.item, stack.amount, player.unit()) > 0 && build.interactable(player.team()) && build.block.hasItems && player.unit().stack().amount > 0 && build.interactable(player.team())){
Call.transferInventory(player, tile); Call.transferInventory(player, build);
}else{ }else{
Call.dropItem(player.angleTo(x, y)); Call.dropItem(player.angleTo(x, y));
} }

View File

@@ -374,13 +374,7 @@ public class MobileInput extends InputHandler implements GestureListener{
crosshairScale = Mathf.lerpDelta(crosshairScale, 1f, 0.2f); crosshairScale = Mathf.lerpDelta(crosshairScale, 1f, 0.2f);
Draw.color(Pal.remove); Drawf.target(target.getX(), target.getY(), 7f * Interp.swingIn.apply(crosshairScale), Pal.remove);
Lines.stroke(1f);
float radius = Interp.swingIn.apply(crosshairScale);
Lines.poly(target.getX(), target.getY(), 4, 7f * radius, Time.time * 1.5f);
Lines.spikes(target.getX(), target.getY(), 3f * radius, 6f * radius, 4, Time.time * 1.5f);
} }
Draw.reset(); Draw.reset();
@@ -652,7 +646,7 @@ public class MobileInput extends InputHandler implements GestureListener{
} }
//zoom camera //zoom camera
if(Math.abs(Core.input.axisTap(Binding.zoom)) > 0 && !Core.input.keyDown(Binding.rotateplaced) && (Core.input.keyDown(Binding.diagonal_placement) || ((!isPlacing() || !block.rotate) && selectRequests.isEmpty()))){ if(Math.abs(Core.input.axisTap(Binding.zoom)) > 0 && !Core.input.keyDown(Binding.rotateplaced) && (Core.input.keyDown(Binding.diagonal_placement) || ((!player.isBuilder() || !isPlacing() || !block.rotate) && selectRequests.isEmpty()))){
renderer.scaleCamera(Core.input.axisTap(Binding.zoom)); renderer.scaleCamera(Core.input.axisTap(Binding.zoom));
} }

View File

@@ -11,6 +11,7 @@ import mindustry.core.*;
import mindustry.game.*; import mindustry.game.*;
import mindustry.maps.*; import mindustry.maps.*;
import mindustry.world.*; import mindustry.world.*;
import mindustry.world.blocks.environment.*;
import mindustry.world.blocks.storage.*; import mindustry.world.blocks.storage.*;
import java.io.*; import java.io.*;
@@ -199,11 +200,16 @@ public class MapIO{
for(Point2 p : Geometry.d4){ for(Point2 p : Geometry.d4){
Tile other = tiles.get(tile.x + p.x, tile.y + p.y); Tile other = tiles.get(tile.x + p.x, tile.y + p.y);
if(other != null && other.floor() != Blocks.air){ if(other != null && other.floor() != Blocks.air){
tile.setFloor(other.floor()); tile.setFloorUnder(other.floor());
break; break;
} }
} }
} }
//default to stone floor
if(tile.floor() == Blocks.air){
tile.setFloorUnder((Floor)Blocks.stone);
}
} }
} }
} }

View File

@@ -62,7 +62,9 @@ public class LAssembler{
int index = 0; int index = 0;
for(String line : lines){ for(String line : lines){
//comments //comments
if(line.startsWith("#") || line.isEmpty()) continue; int commentIdx = line.indexOf('#');
if(commentIdx != -1) line = line.substring(0, commentIdx).trim();
if(line.isEmpty()) continue;
//remove trailing semicolons in case someone adds them in for no reason //remove trailing semicolons in case someone adds them in for no reason
if(line.endsWith(";")) line = line.substring(0, line.length() - 1); if(line.endsWith(";")) line = line.substring(0, line.length() - 1);

View File

@@ -569,7 +569,7 @@ public class LExecutor{
int address = exec.numi(position); int address = exec.numi(position);
Building from = exec.building(target); Building from = exec.building(target);
if(from instanceof MemoryBuild mem){ if(from instanceof MemoryBuild mem && from.team == exec.team){
exec.setnum(output, address < 0 || address >= mem.memory.length ? 0 : mem.memory[address]); exec.setnum(output, address < 0 || address >= mem.memory.length ? 0 : mem.memory[address]);
} }
@@ -593,7 +593,7 @@ public class LExecutor{
int address = exec.numi(position); int address = exec.numi(position);
Building from = exec.building(target); Building from = exec.building(target);
if(from instanceof MemoryBuild mem){ if(from instanceof MemoryBuild mem && from.team == exec.team){
if(address >= 0 && address < mem.memory.length){ if(address >= 0 && address < mem.memory.length){
mem.memory[address] = exec.num(value); mem.memory[address] = exec.num(value);
@@ -620,7 +620,7 @@ public class LExecutor{
Object target = exec.obj(from); Object target = exec.obj(from);
Object sense = exec.obj(type); Object sense = exec.obj(type);
//TODO should remote enemy buildings be senseable? //note that remote units/buildings can be sensed as well
if(target instanceof Senseable se){ if(target instanceof Senseable se){
if(sense instanceof Content){ if(sense instanceof Content){
exec.setnum(to, se.sense(((Content)sense))); exec.setnum(to, se.sense(((Content)sense)));
@@ -857,8 +857,7 @@ public class LExecutor{
//graphics on headless servers are useless. //graphics on headless servers are useless.
if(Vars.headless) return; if(Vars.headless) return;
Building build = exec.building(target); if(exec.building(target) instanceof LogicDisplayBuild d && d.team == exec.team){
if(build instanceof LogicDisplayBuild d){
if(d.commands.size + exec.graphicsBuffer.size < maxDisplayBuffer){ if(d.commands.size + exec.graphicsBuffer.size < maxDisplayBuffer){
for(int i = 0; i < exec.graphicsBuffer.size; i++){ for(int i = 0; i < exec.graphicsBuffer.size; i++){
d.commands.addLast(exec.graphicsBuffer.items[i]); d.commands.addLast(exec.graphicsBuffer.items[i]);
@@ -920,8 +919,7 @@ public class LExecutor{
@Override @Override
public void run(LExecutor exec){ public void run(LExecutor exec){
Building build = exec.building(target); if(exec.building(target) instanceof MessageBuild d && d.team == exec.team){
if(build instanceof MessageBuild d){
d.message.setLength(0); d.message.setLength(0);
d.message.append(exec.textBuffer, 0, Math.min(exec.textBuffer.length(), maxTextBuffer)); d.message.append(exec.textBuffer, 0, Math.min(exec.textBuffer.length(), maxTextBuffer));
@@ -952,7 +950,7 @@ public class LExecutor{
Var vb = exec.var(compare); Var vb = exec.var(compare);
boolean cmp; boolean cmp;
if(op.objFunction != null && (va.isobj || vb.isobj)){ if(op.objFunction != null && va.isobj && vb.isobj){
//use object function if provided, and one of the variables is an object //use object function if provided, and one of the variables is an object
cmp = op.objFunction.get(exec.obj(value), exec.obj(compare)); cmp = op.objFunction.get(exec.obj(value), exec.obj(compare));
}else{ }else{

View File

@@ -819,6 +819,10 @@ public class LStatements{
@RegisterStatement("uradar") @RegisterStatement("uradar")
public static class UnitRadarStatement extends RadarStatement{ public static class UnitRadarStatement extends RadarStatement{
public UnitRadarStatement(){
radar = "0";
}
@Override @Override
public boolean buildFrom(){ public boolean buildFrom(){
//do not build the "from" section //do not build the "from" section

View File

@@ -3,6 +3,7 @@ package mindustry.logic;
import arc.*; import arc.*;
import arc.func.*; import arc.func.*;
import arc.scene.ui.TextButton.*; import arc.scene.ui.TextButton.*;
import arc.util.*;
import mindustry.gen.*; import mindustry.gen.*;
import mindustry.logic.LStatements.*; import mindustry.logic.LStatements.*;
import mindustry.ui.*; import mindustry.ui.*;
@@ -90,16 +91,20 @@ public class LogicDialog extends BaseDialog{
onResize(() -> canvas.rebuild()); onResize(() -> canvas.rebuild());
} }
public void show(String code, Cons<String> consumer){ public void show(String code, Cons<String> modified){
canvas.statements.clearChildren(); canvas.statements.clearChildren();
canvas.rebuild(); canvas.rebuild();
try{ try{
canvas.load(code); canvas.load(code);
}catch(Throwable t){ }catch(Throwable t){
t.printStackTrace(); Log.err(t);
canvas.load(""); canvas.load("");
} }
this.consumer = consumer; this.consumer = result -> {
if(!result.equals(code)){
modified.get(result);
}
};
show(); show();
} }

View File

@@ -62,7 +62,7 @@ public class Map implements Comparable<Map>, Publishable{
} }
public int getHightScore(){ public int getHightScore(){
return Core.settings.getInt("hiscore" + file.nameWithoutExtension(), 0); return Core.settings.getInt("hiscore" + file.nameWithoutExtension() + tags.get("steamid", ""), 0);
} }
public Texture safeTexture(){ public Texture safeTexture(){
@@ -78,7 +78,7 @@ public class Map implements Comparable<Map>, Publishable{
} }
public void setHighScore(int score){ public void setHighScore(int score){
Core.settings.put("hiscore" + file.nameWithoutExtension(), score); Core.settings.put("hiscore" + file.nameWithoutExtension() + tags.get("steamid", ""), score);
} }
/** Returns the result of applying this map's rules to the specified gamemode.*/ /** Returns the result of applying this map's rules to the specified gamemode.*/

View File

@@ -24,7 +24,7 @@ public class SectorDamage{
public static final int maxRetWave = 40, maxWavesSimulated = 50; public static final int maxRetWave = 40, maxWavesSimulated = 50;
//direct damage is for testing only //direct damage is for testing only
private static final boolean direct = false, rubble = true; private static final boolean rubble = true;
/** @return calculated capture progress of the enemy */ /** @return calculated capture progress of the enemy */
public static float getDamage(SectorInfo info){ public static float getDamage(SectorInfo info){
@@ -225,7 +225,6 @@ public class SectorDamage{
//create sparse tile array for fast range query //create sparse tile array for fast range query
int sparseSkip = 5, sparseSkip2 = 3; int sparseSkip = 5, sparseSkip2 = 3;
//TODO if this is slow, use a quadtree
Seq<Tile> sparse = new Seq<>(path.size / sparseSkip + 1); Seq<Tile> sparse = new Seq<>(path.size / sparseSkip + 1);
Seq<Tile> sparse2 = new Seq<>(path.size / sparseSkip2 + 1); Seq<Tile> sparse2 = new Seq<>(path.size / sparseSkip2 + 1);
@@ -363,13 +362,11 @@ public class SectorDamage{
info.waveDpsBase = reg.intercept; info.waveDpsBase = reg.intercept;
info.waveDpsSlope = reg.slope; info.waveDpsSlope = reg.slope;
//enemy units like to aim for a lot of non-essential things, so increase resulting health slightly info.sumHealth = sumHealth * 0.9f;
info.sumHealth = sumHealth * 1.05f; info.sumDps = sumDps;
//players tend to have longer range units/turrets, so assume DPS is higher
info.sumDps = sumDps * 1.05f;
info.sumRps = sumRps; info.sumRps = sumRps;
float cmult = 1.5f; float cmult = 1.6f;
info.curEnemyDps = curEnemyDps*cmult; info.curEnemyDps = curEnemyDps*cmult;
info.curEnemyHealth = curEnemyHealth*cmult; info.curEnemyHealth = curEnemyHealth*cmult;
@@ -487,23 +484,21 @@ public class SectorDamage{
if(other.build != null && other.team() != state.rules.waveTeam){ if(other.build != null && other.team() != state.rules.waveTeam){
resultDamage -= other.build.health(); resultDamage -= other.build.health();
if(direct){ other.build.health -= currDamage;
other.build.damage(currDamage); //don't kill the core!
}else{ //indirect damage happens at game load time if(other.block() instanceof CoreBlock) other.build.health = Math.max(other.build.health, 1f);
other.build.health -= currDamage;
//don't kill the core!
if(other.block() instanceof CoreBlock) other.build.health = Math.max(other.build.health, 1f);
//remove the block when destroyed //remove the block when destroyed
if(other.build.health < 0){ if(other.build.health < 0){
//rubble //rubble
if(rubble && !other.floor().solid && !other.floor().isLiquid && Mathf.chance(0.4)){ if(rubble && !other.floor().solid && !other.floor().isLiquid && Mathf.chance(0.4)){
Effect.rubble(other.build.x, other.build.y, other.block().size); Effect.rubble(other.build.x, other.build.y, other.block().size);
}
other.build.addPlan(false);
other.remove();
} }
other.build.addPlan(false);
other.remove();
}else{
indexer.notifyTileDamaged(other.build);
} }
}else if(other.solid() && !other.synthetic()){ //skip damage propagation through solid blocks }else if(other.solid() && !other.synthetic()){ //skip damage propagation through solid blocks
@@ -524,7 +519,7 @@ public class SectorDamage{
static float cost(Tile tile){ static float cost(Tile tile){
return 1f + return 1f +
(tile.block().isStatic() && tile.solid() ? 200f : 0f) + (tile.block().isStatic() && tile.solid() ? 200f : 0f) +
(tile.build != null ? tile.build.health / 40f : 0f) + (tile.build != null ? tile.build.health / (tile.build.block.size * tile.build.block.size) / 20f : 0f) +
(tile.floor().isLiquid ? 10f : 0f); (tile.floor().isLiquid ? 10f : 0f);
} }
} }

View File

@@ -68,8 +68,8 @@ public class MirrorFilter extends GenerateFilter{
void mirror(Vec2 p, float x0, float y0, float x1, float y1){ void mirror(Vec2 p, float x0, float y0, float x1, float y1){
//special case: uneven map mirrored at 45 degree angle //special case: uneven map mirrored at 45 degree angle
if(in.width != in.height && angle % 90 != 0){ if(in.width != in.height && angle % 90 != 0){
p.x = (p.x - in.width/2f) * -1 + in.width/2f; p.x = in.width - p.x - 1;
p.y = (p.y - in.height/2f) * -1 + in.height/2f; p.y = in.height - p.y - 1;
}else{ }else{
float dx = x1 - x0; float dx = x1 - x0;
float dy = y1 - y0; float dy = y1 - y0;

View File

@@ -853,6 +853,18 @@ public class Mods implements Loadable{
if(author != null) author = Strings.stripColors(author); if(author != null) author = Strings.stripColors(author);
if(description != null) description = Strings.stripColors(description); if(description != null) description = Strings.stripColors(description);
} }
@Override
public String toString() {
return "ModMeta{" +
"name='" + name + '\'' +
", author='" + author + '\'' +
", version='" + version + '\'' +
", main='" + main + '\'' +
", minGameVersion='" + minGameVersion + '\'' +
", hidden=" + hidden +
'}';
}
} }
public enum ModState{ public enum ModState{

View File

@@ -80,6 +80,10 @@ public class Scripts implements Disposable{
//region utility mod functions //region utility mod functions
public float[] newFloats(int capacity){
return new float[capacity];
}
public String readString(String path){ public String readString(String path){
return Vars.tree.get(path, true).readString(); return Vars.tree.get(path, true).readString();
} }

View File

@@ -47,7 +47,12 @@ public class CrashSender{
public static void send(Throwable exception, Cons<File> writeListener){ public static void send(Throwable exception, Cons<File> writeListener){
try{ try{
exception.printStackTrace(); try{
//log to file
Log.err(exception);
}catch(Throwable no){
exception.printStackTrace();
}
//try saving game data //try saving game data
try{ try{

View File

@@ -171,6 +171,23 @@ public class UnitType extends UnlockableContent{
bars.add(new Bar(ammoType.icon + " " + Core.bundle.get("stat.ammo"), ammoType.barColor, () -> unit.ammo / ammoCapacity)); bars.add(new Bar(ammoType.icon + " " + Core.bundle.get("stat.ammo"), ammoType.barColor, () -> unit.ammo / ammoCapacity));
bars.row(); bars.row();
} }
for(Ability ability : unit.abilities){
ability.displayBars(unit, bars);
}
if(unit instanceof Payloadc payload){
bars.add(new Bar("stat.payloadcapacity", Pal.items, () -> payload.payloadUsed() / unit.type().payloadCapacity));
bars.row();
var count = new float[]{-1};
bars.table().update(t -> {
if(count[0] != payload.payloadUsed()){
payload.contentInfo(t, 8 * 2, 270);
count[0] = payload.payloadUsed();
}
}).growX().left().height(0f).pad(0f);
}
}).growX(); }).growX();
if(unit.controller() instanceof LogicAI){ if(unit.controller() instanceof LogicAI){

View File

@@ -9,9 +9,8 @@ import mindustry.entities.*;
import mindustry.entities.bullet.*; import mindustry.entities.bullet.*;
import mindustry.gen.*; import mindustry.gen.*;
import mindustry.graphics.*; import mindustry.graphics.*;
import mindustry.io.*;
public class Weapon{ public class Weapon implements Cloneable{
/** displayed weapon region */ /** displayed weapon region */
public String name = ""; public String name = "";
/** bullet shot */ /** bullet shot */
@@ -98,9 +97,11 @@ public class Weapon{
} }
public Weapon copy(){ public Weapon copy(){
Weapon out = new Weapon(); try{
JsonIO.json().copyFields(this, out); return (Weapon)clone();
return out; }catch(CloneNotSupportedException suck){
throw new RuntimeException("very good language design", suck);
}
} }
public void load(){ public void load(){

View File

@@ -23,10 +23,10 @@ public class LiquidDisplay extends Table{
if(amount != 0){ if(amount != 0){
Table t = new Table().left().bottom(); Table t = new Table().left().bottom();
t.add(Strings.autoFixed(amount, 1)).style(Styles.outlineLabel); t.add(Strings.autoFixed(amount, 2)).style(Styles.outlineLabel);
add(t); add(t);
} }
}}).size(8 * 4).padRight(3 + (amount != 0 && Strings.autoFixed(amount, 1).length() > 2 ? 8 : 0)); }}).size(8 * 4).padRight(3 + (amount != 0 && Strings.autoFixed(amount, 2).length() > 2 ? 8 : 0));
if(perSecond){ if(perSecond){
add(StatUnit.perSecond.localized()).padLeft(2).padRight(5).color(Color.lightGray).style(Styles.outlineLabel); add(StatUnit.perSecond.localized()).padLeft(2).padRight(5).color(Color.lightGray).style(Styles.outlineLabel);

View File

@@ -141,8 +141,9 @@ public class CustomRulesDialog extends BaseDialog{
check("@rules.infiniteresources", b -> rules.infiniteResources = b, () -> rules.infiniteResources); check("@rules.infiniteresources", b -> rules.infiniteResources = b, () -> rules.infiniteResources);
check("@rules.reactorexplosions", b -> rules.reactorExplosions = b, () -> rules.reactorExplosions); check("@rules.reactorexplosions", b -> rules.reactorExplosions = b, () -> rules.reactorExplosions);
check("@rules.schematic", b -> rules.schematicsAllowed = b, () -> rules.schematicsAllowed); check("@rules.schematic", b -> rules.schematicsAllowed = b, () -> rules.schematicsAllowed);
check("@rules.coreincinerates", b -> rules.coreIncinerates = b, () -> rules.coreIncinerates);
number("@rules.buildcostmultiplier", false, f -> rules.buildCostMultiplier = f, () -> rules.buildCostMultiplier, () -> !rules.infiniteResources); number("@rules.buildcostmultiplier", false, f -> rules.buildCostMultiplier = f, () -> rules.buildCostMultiplier, () -> !rules.infiniteResources);
number("@rules.buildspeedmultiplier", f -> rules.buildSpeedMultiplier = f, () -> rules.buildSpeedMultiplier, 0.00001f, 10000f); number("@rules.buildspeedmultiplier", f -> rules.buildSpeedMultiplier = f, () -> rules.buildSpeedMultiplier, 0.001f, 50f);
number("@rules.deconstructrefundmultiplier", false, f -> rules.deconstructRefundMultiplier = f, () -> rules.deconstructRefundMultiplier, () -> !rules.infiniteResources); number("@rules.deconstructrefundmultiplier", false, f -> rules.deconstructRefundMultiplier = f, () -> rules.deconstructRefundMultiplier, () -> !rules.infiniteResources);
number("@rules.blockhealthmultiplier", f -> rules.blockHealthMultiplier = f, () -> rules.blockHealthMultiplier); number("@rules.blockhealthmultiplier", f -> rules.blockHealthMultiplier = f, () -> rules.blockHealthMultiplier);
number("@rules.blockdamagemultiplier", f -> rules.blockDamageMultiplier = f, () -> rules.blockDamageMultiplier); number("@rules.blockdamagemultiplier", f -> rules.blockDamageMultiplier = f, () -> rules.blockDamageMultiplier);
@@ -162,7 +163,7 @@ public class CustomRulesDialog extends BaseDialog{
check("@rules.unitammo", b -> rules.unitAmmo = b, () -> rules.unitAmmo); check("@rules.unitammo", b -> rules.unitAmmo = b, () -> rules.unitAmmo);
number("@rules.unithealthmultiplier", f -> rules.unitHealthMultiplier = f, () -> rules.unitHealthMultiplier); number("@rules.unithealthmultiplier", f -> rules.unitHealthMultiplier = f, () -> rules.unitHealthMultiplier);
number("@rules.unitdamagemultiplier", f -> rules.unitDamageMultiplier = f, () -> rules.unitDamageMultiplier); number("@rules.unitdamagemultiplier", f -> rules.unitDamageMultiplier = f, () -> rules.unitDamageMultiplier);
number("@rules.unitbuildspeedmultiplier", f -> rules.unitBuildSpeedMultiplier = f, () -> rules.unitBuildSpeedMultiplier, 0.00001f, 100f); number("@rules.unitbuildspeedmultiplier", f -> rules.unitBuildSpeedMultiplier = f, () -> rules.unitBuildSpeedMultiplier, 0.001f, 50f);
title("@rules.title.enemy"); title("@rules.title.enemy");
check("@rules.attack", b -> rules.attackMode = b, () -> rules.attackMode); check("@rules.attack", b -> rules.attackMode = b, () -> rules.attackMode);

View File

@@ -563,25 +563,32 @@ public class JoinDialog extends BaseDialog{
transient Host lastHost; transient Host lastHost;
void setIP(String ip){ void setIP(String ip){
try{
//parse ip:port, if unsuccessful, use default values boolean isIpv6 = Strings.count(ip, ':') > 1;
if(ip.lastIndexOf(':') != -1 && ip.lastIndexOf(':') != ip.length() - 1){ if(isIpv6 && ip.lastIndexOf("]:") != -1 && ip.lastIndexOf("]:") != ip.length() - 1){
try{ int idx = ip.indexOf("]:");
this.ip = ip.substring(1, idx);
this.port = Integer.parseInt(ip.substring(idx + 2, ip.length()));
}else if(!isIpv6 && ip.lastIndexOf(':') != -1 && ip.lastIndexOf(':') != ip.length() - 1){
int idx = ip.lastIndexOf(':'); int idx = ip.lastIndexOf(':');
this.ip = ip.substring(0, idx); this.ip = ip.substring(0, idx);
this.port = Integer.parseInt(ip.substring(idx + 1)); this.port = Integer.parseInt(ip.substring(idx + 1));
}catch(Exception e){ }else{
this.ip = ip; this.ip = ip;
this.port = Vars.port; this.port = Vars.port;
} }
}else{ }catch(Exception e){
this.ip = ip; this.ip = ip;
this.port = Vars.port; this.port = Vars.port;
} }
} }
String displayIP(){ String displayIP(){
return ip + (port != Vars.port ? ":" + port : ""); if(Strings.count(ip, ':') > 1){
return port != Vars.port ? "[" + ip + "]:" + port : ip;
}else{
return ip + (port != Vars.port ? ":" + port : "");
}
} }
public Server(){ public Server(){

View File

@@ -86,7 +86,10 @@ public class LaunchLoadoutDialog extends BaseDialog{
ItemSeq stacks = universe.getLaunchResources(); ItemSeq stacks = universe.getLaunchResources();
Seq<ItemStack> out = stacks.toSeq(); Seq<ItemStack> out = stacks.toSeq();
loadout.show(selected.findCore().itemCapacity, out, UnlockableContent::unlocked, out::clear, () -> {}, () -> { ItemSeq realItems = sitems.copy();
selected.requirements().each(realItems::remove);
loadout.show(selected.findCore().itemCapacity, realItems, out, UnlockableContent::unlocked, out::clear, () -> {}, () -> {
universe.updateLaunchResources(new ItemSeq(out)); universe.updateLaunchResources(new ItemSeq(out));
update.run(); update.run();
rebuildItems.run(); rebuildItems.run();

View File

@@ -22,6 +22,7 @@ public class LoadoutDialog extends BaseDialog{
private Boolf<Item> validator = i -> true; private Boolf<Item> validator = i -> true;
private Table items; private Table items;
private int capacity; private int capacity;
private @Nullable ItemSeq total;
public LoadoutDialog(){ public LoadoutDialog(){
super("@configure"); super("@configure");
@@ -46,6 +47,8 @@ public class LoadoutDialog extends BaseDialog{
buttons.button("@back", Icon.left, this::hide).size(210f, 64f); buttons.button("@back", Icon.left, this::hide).size(210f, 64f);
buttons.button("@max", Icon.export, this::maxItems).size(210f, 64f);
buttons.button("@settings.reset", Icon.refresh, () -> { buttons.button("@settings.reset", Icon.refresh, () -> {
resetter.run(); resetter.run();
reseed(); reseed();
@@ -54,12 +57,23 @@ public class LoadoutDialog extends BaseDialog{
}).size(210f, 64f); }).size(210f, 64f);
} }
public void maxItems() {
for(ItemStack stack : stacks){
stack.amount = total == null ? capacity : Math.min(capacity, total.get(stack.item));
}
}
public void show(int capacity, Seq<ItemStack> stacks, Boolf<Item> validator, Runnable reseter, Runnable updater, Runnable hider){ public void show(int capacity, Seq<ItemStack> stacks, Boolf<Item> validator, Runnable reseter, Runnable updater, Runnable hider){
show(capacity, null, stacks, validator, reseter, updater, hider);
}
public void show(int capacity, ItemSeq total, Seq<ItemStack> stacks, Boolf<Item> validator, Runnable reseter, Runnable updater, Runnable hider){
this.originalStacks = stacks; this.originalStacks = stacks;
this.validator = validator; this.validator = validator;
this.resetter = reseter; this.resetter = reseter;
this.updater = updater; this.updater = updater;
this.capacity = capacity; this.capacity = capacity;
this.total = total;
this.hider = hider; this.hider = hider;
reseed(); reseed();
show(); show();

View File

@@ -72,7 +72,6 @@ public class MapsDialog extends BaseDialog{
Map map = MapIO.createMap(file, true); Map map = MapIO.createMap(file, true);
//when you attempt to import a save, it will have no name, so generate one //when you attempt to import a save, it will have no name, so generate one
String name = map.tags.get("name", () -> { String name = map.tags.get("name", () -> {
String result = "unknown"; String result = "unknown";

View File

@@ -23,6 +23,8 @@ import mindustry.mod.Mods.*;
import mindustry.ui.*; import mindustry.ui.*;
import java.io.*; import java.io.*;
import java.text.*;
import java.util.*;
import static mindustry.Vars.*; import static mindustry.Vars.*;
@@ -74,12 +76,25 @@ public class ModsDialog extends BaseDialog{
if(status != HttpStatus.OK){ if(status != HttpStatus.OK){
ui.showErrorMessage(Core.bundle.format("connectfail", status)); ui.showErrorMessage(Core.bundle.format("connectfail", status));
}else{ }else{
modList = new Json().fromJson(Seq.class, ModListing.class, strResult); try{
modList = new Json().fromJson(Seq.class, ModListing.class, strResult);
//potentially sort mods by game version compatibility, or other criteria var d = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
//modList.sort(Structs.comparingBool(m -> !Version.isAtLeast(m.minGameVersion))); Func<String, Date> parser = text -> {
try{
return d.parse(text);
}catch(Exception e){
throw new RuntimeException(e);
}
};
modList.sortComparing(m -> parser.get(m.lastUpdated)).reverse();
listener.get(modList);
}catch(Exception e){
e.printStackTrace();
ui.showException(e);
}
listener.get(modList);
} }
}); });
}, error -> Core.app.post(() -> ui.showException(error))); }, error -> Core.app.post(() -> ui.showException(error)));
@@ -175,7 +190,7 @@ public class ModsDialog extends BaseDialog{
tablebrow.clear(); tablebrow.clear();
for(ModListing mod : listings){ for(ModListing mod : listings){
if(mod.hasJava || !searchtxt.isEmpty() && !mod.repo.contains(searchtxt) || (Vars.ios && mod.hasScripts)) continue; if(mod.hasJava || !searchtxt.isEmpty() && !mod.repo.toLowerCase().contains(searchtxt.toLowerCase()) || (Vars.ios && mod.hasScripts)) continue;
tablebrow.button(btn -> { tablebrow.button(btn -> {
btn.top().left(); btn.top().left();

View File

@@ -44,7 +44,6 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{
public final PlanetRenderer planets = renderer.planets; public final PlanetRenderer planets = renderer.planets;
public final LaunchLoadoutDialog loadouts = new LaunchLoadoutDialog(); public final LaunchLoadoutDialog loadouts = new LaunchLoadoutDialog();
public int launchRange;
public float zoom = 1f, selectAlpha = 1f; public float zoom = 1f, selectAlpha = 1f;
public @Nullable Sector selected, hovered, launchSector; public @Nullable Sector selected, hovered, launchSector;
public Mode mode = look; public Mode mode = look;
@@ -511,7 +510,7 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{
hoverLabel.touchable = Touchable.disabled; hoverLabel.touchable = Touchable.disabled;
Vec3 pos = planets.cam.project(Tmp.v31.set(hovered.tile.v).setLength(PlanetRenderer.outlineRad).rotate(Vec3.Y, -planets.planet.getRotation()).add(planets.planet.position)); Vec3 pos = planets.cam.project(Tmp.v31.set(hovered.tile.v).setLength(PlanetRenderer.outlineRad).rotate(Vec3.Y, -planets.planet.getRotation()).add(planets.planet.position));
hoverLabel.setPosition(pos.x, pos.y - Core.scene.marginBottom, Align.center); hoverLabel.setPosition(pos.x - Core.scene.marginLeft, pos.y - Core.scene.marginBottom, Align.center);
hoverLabel.getText().setLength(0); hoverLabel.getText().setLength(0);
if(hovered != null){ if(hovered != null){

View File

@@ -224,7 +224,7 @@ public class HudFragment extends Fragment{
int i = 0; int i = 0;
for(Team team : Team.baseTeams){ for(Team team : Team.baseTeams){
ImageButton button = teams.button(Tex.whiteui, Styles.clearTogglePartiali, 40f, () -> Call.setPlayerTeamEditor(player, team)) ImageButton button = teams.button(Tex.whiteui, Styles.clearTogglePartiali, 40f, () -> Call.setPlayerTeamEditor(player, team))
.size(50f).margin(6f).get(); .size(50f).margin(6f).get();
button.getImageCell().grow(); button.getImageCell().grow();
button.getStyle().imageUpColor = team.color; button.getStyle().imageUpColor = team.color;
button.update(() -> button.setChecked(player.team() == team)); button.update(() -> button.setChecked(player.team() == team));
@@ -342,39 +342,39 @@ public class HudFragment extends Fragment{
//TODO DEBUG: rate table //TODO DEBUG: rate table
if(false) if(false)
parent.fill(t -> { parent.fill(t -> {
t.name = "rates"; t.name = "rates";
t.bottom().left(); t.bottom().left();
t.table(Styles.black6, c -> { t.table(Styles.black6, c -> {
Bits used = new Bits(content.items().size); Bits used = new Bits(content.items().size);
Runnable rebuild = () -> { Runnable rebuild = () -> {
c.clearChildren(); c.clearChildren();
for(Item item : content.items()){ for(Item item : content.items()){
if(state.rules.sector != null && state.rules.sector.info.getExport(item) >= 1){ if(state.rules.sector != null && state.rules.sector.info.getExport(item) >= 1){
c.image(item.icon(Cicon.small)); c.image(item.icon(Cicon.small));
c.label(() -> (int)state.rules.sector.info.getExport(item) + " /s").color(Color.lightGray); c.label(() -> (int)state.rules.sector.info.getExport(item) + " /s").color(Color.lightGray);
c.row(); c.row();
}
} }
} };
};
c.update(() -> { c.update(() -> {
boolean wrong = false; boolean wrong = false;
for(Item item : content.items()){ for(Item item : content.items()){
boolean has = state.rules.sector != null && state.rules.sector.info.getExport(item) >= 1; boolean has = state.rules.sector != null && state.rules.sector.info.getExport(item) >= 1;
if(used.get(item.id) != has){ if(used.get(item.id) != has){
used.set(item.id, has); used.set(item.id, has);
wrong = true; wrong = true;
}
} }
} if(wrong){
if(wrong){ rebuild.run();
rebuild.run(); }
} });
}); }).visible(() -> state.isCampaign() && content.items().contains(i -> state.rules.sector != null && state.rules.sector.info.getExport(i) > 0));
}).visible(() -> state.isCampaign() && content.items().contains(i -> state.rules.sector != null && state.rules.sector.info.getExport(i) > 0)); });
});
blockfrag.build(parent); blockfrag.build(parent);
} }
@@ -755,6 +755,21 @@ public class HudFragment extends Fragment{
return builder; return builder;
}).growX().pad(8f); }).growX().pad(8f);
table.row();
var count = new float[]{-1};
table.table().update(t -> {
if(player.unit() instanceof Payloadc payload){
if(count[0] != payload.payloadUsed()){
payload.contentInfo(t, 8 * 2, 275f);
count[0] = payload.payloadUsed();
}
}else{
count[0] = -1;
t.clear();
}
}).growX().visible(() -> player.unit() instanceof Payloadc p && p.payloadUsed() > 0).colspan(2);
return table; return table;
} }

View File

@@ -99,7 +99,7 @@ public class PlacementFragment extends Fragment{
if(Core.input.keyTap(Binding.pick) && player.isBuilder()){ //mouse eyedropper select if(Core.input.keyTap(Binding.pick) && player.isBuilder()){ //mouse eyedropper select
Building tile = world.buildWorld(Core.input.mouseWorld().x, Core.input.mouseWorld().y); Building tile = world.buildWorld(Core.input.mouseWorld().x, Core.input.mouseWorld().y);
Block tryRecipe = tile == null ? null : tile.block instanceof ConstructBlock ? ((ConstructBuild)tile).cblock : tile.block; Block tryRecipe = tile == null ? null : tile instanceof ConstructBuild c ? c.cblock : tile.block;
Object tryConfig = tile == null ? null : tile.config(); Object tryConfig = tile == null ? null : tile.config();
for(BuildPlan req : player.unit().plans()){ for(BuildPlan req : player.unit().plans()){

View File

@@ -80,9 +80,9 @@ public class Block extends UnlockableContent{
public boolean breakable; public boolean breakable;
/** whether to add this block to brokenblocks */ /** whether to add this block to brokenblocks */
public boolean rebuildable = true; public boolean rebuildable = true;
/** whether this water can only be placed on water */ /** whether this block can only be placed on water */
public boolean requiresWater = false; public boolean requiresWater = false;
/** whether this water can be placed on any liquids, anywhere */ /** whether this block can be placed on any liquids, anywhere */
public boolean placeableLiquid = false; public boolean placeableLiquid = false;
/** whether this floor can be placed on. */ /** whether this floor can be placed on. */
public boolean placeableOn = true; public boolean placeableOn = true;
@@ -375,6 +375,8 @@ public class Block extends UnlockableContent{
if(hasItems && configurable){ if(hasItems && configurable){
bars.add("items", entity -> new Bar(() -> Core.bundle.format("bar.items", entity.items.total()), () -> Pal.items, () -> (float)entity.items.total() / itemCapacity)); bars.add("items", entity -> new Bar(() -> Core.bundle.format("bar.items", entity.items.total()), () -> Pal.items, () -> (float)entity.items.total() / itemCapacity));
} }
if(flags.contains(BlockFlag.unitModifier)) stats.add(Stat.maxUnits, (unitCapModifier < 0 ? "-" : "+") + Math.abs(unitCapModifier));
} }
public boolean canReplace(Block other){ public boolean canReplace(Block other){
@@ -424,9 +426,7 @@ public class Block extends UnlockableContent{
TextureRegion reg = getRequestRegion(req, list); TextureRegion reg = getRequestRegion(req, list);
Draw.rect(reg, req.drawx(), req.drawy(), !rotate ? 0 : req.rotation * 90); Draw.rect(reg, req.drawx(), req.drawy(), !rotate ? 0 : req.rotation * 90);
if(req.config != null){ drawRequestConfig(req, list);
drawRequestConfig(req, list);
}
} }
public TextureRegion getRequestRegion(BuildPlan req, Eachable<BuildPlan> list){ public TextureRegion getRequestRegion(BuildPlan req, Eachable<BuildPlan> list){
@@ -437,8 +437,14 @@ public class Block extends UnlockableContent{
} }
public void drawRequestConfigCenter(BuildPlan req, Object content, String region){ public void drawRequestConfigCenter(BuildPlan req, Object content, String region, boolean cross){
Color color = content instanceof Item ? ((Item)content).color : content instanceof Liquid ? ((Liquid)content).color : null; if(content == null){
if(cross){
Draw.rect("cross", req.drawx(), req.drawy());
}
return;
}
Color color = content instanceof Item i ? i.color : content instanceof Liquid l ? l.color : null;
if(color == null) return; if(color == null) return;
Draw.color(color); Draw.color(color);
@@ -446,6 +452,10 @@ public class Block extends UnlockableContent{
Draw.color(); Draw.color();
} }
public void drawRequestConfigCenter(BuildPlan req, Object content, String region){
drawRequestConfigCenter(req, content, region, false);
}
public void drawRequestConfigTop(BuildPlan req, Eachable<BuildPlan> list){ public void drawRequestConfigTop(BuildPlan req, Eachable<BuildPlan> list){
} }

View File

@@ -45,7 +45,10 @@ public class Build{
build.setDeconstruct(previous); build.setDeconstruct(previous);
build.prevBuild = prevBuild; build.prevBuild = prevBuild;
tile.build.health = tile.build.maxHealth * prevPercent; tile.build.health = tile.build.maxHealth * prevPercent;
if(unit != null && unit.isPlayer()) tile.build.lastAccessed = unit.getPlayer().name;
if(unit != null && unit.getControllerName() != null){
tile.build.lastAccessed = unit.getControllerName();
}
Core.app.post(() -> Events.fire(new BlockBuildBeginEvent(tile, team, unit, true))); Core.app.post(() -> Events.fire(new BlockBuildBeginEvent(tile, team, unit, true)));
} }
@@ -64,10 +67,11 @@ public class Build{
//auto-rotate the block to the correct orientation and bail out //auto-rotate the block to the correct orientation and bail out
if(tile.team() == team && tile.block == result && tile.build != null && tile.block.quickRotate){ if(tile.team() == team && tile.block == result && tile.build != null && tile.block.quickRotate){
if(unit != null && unit.isPlayer()) tile.build.lastAccessed = unit.getPlayer().name; if(unit != null && unit.getControllerName() != null) tile.build.lastAccessed = unit.getControllerName();
tile.build.rotation = Mathf.mod(rotation, 4); tile.build.rotation = Mathf.mod(rotation, 4);
tile.build.updateProximity(); tile.build.updateProximity();
tile.build.noSleep(); tile.build.noSleep();
Fx.rotateBlock.at(tile.build.x, tile.build.y, tile.build.block.size);
return; return;
} }
@@ -90,7 +94,7 @@ public class Build{
build.setConstruct(previous.size == sub.size ? previous : Blocks.air, result); build.setConstruct(previous.size == sub.size ? previous : Blocks.air, result);
build.prevBuild = prevBuild; build.prevBuild = prevBuild;
if(unit != null && unit.isPlayer()) build.lastAccessed = unit.getPlayer().name; if(unit != null && unit.getControllerName() != null) build.lastAccessed = unit.getControllerName();
result.placeBegan(tile, previous); result.placeBegan(tile, previous);

View File

@@ -378,6 +378,11 @@ public class Tile implements Position, QuadTreeObject, Displayable{
return block.destructible || block.breakable || block.update; return block.destructible || block.breakable || block.update;
} }
/** @return whether the floor on this tile deals damage or can be drowned on. */
public boolean dangerous(){
return !block.solid && (floor.isDeep() || floor.damageTaken > 0);
}
/** /**
* Iterates through the list of all tiles linked to this multiblock, or just itself if it's not a multiblock. * Iterates through the list of all tiles linked to this multiblock, or just itself if it's not a multiblock.
* The result contains all linked tiles, including this tile itself. * The result contains all linked tiles, including this tile itself.

View File

@@ -63,7 +63,7 @@ public class ConstructBlock extends Block{
if(tile == null) return; if(tile == null) return;
float healthf = tile.build == null ? 1f : tile.build.healthf(); float healthf = tile.build == null ? 1f : tile.build.healthf();
Seq<Building> prev = tile.build instanceof ConstructBuild ? ((ConstructBuild)tile.build).prevBuild : null; Seq<Building> prev = tile.build instanceof ConstructBuild co ? co.prevBuild : null;
tile.setBlock(block, team, rotation); tile.setBlock(block, team, rotation);
@@ -78,8 +78,8 @@ public class ConstructBlock extends Block{
tile.build.overwrote(prev); tile.build.overwrote(prev);
} }
if(builder != null && builder.isPlayer()){ if(builder != null && builder.getControllerName() != null){
tile.build.lastAccessed = builder.getPlayer().name; tile.build.lastAccessed = builder.getControllerName();
} }
} }

View File

@@ -1,6 +1,7 @@
package mindustry.world.blocks.campaign; package mindustry.world.blocks.campaign;
import arc.*; import arc.*;
import arc.audio.*;
import arc.Graphics.*; import arc.Graphics.*;
import arc.Graphics.Cursor.*; import arc.Graphics.Cursor.*;
import arc.graphics.*; import arc.graphics.*;
@@ -28,9 +29,10 @@ public class LaunchPad extends Block{
public final int timerLaunch = timers++; public final int timerLaunch = timers++;
/** Time inbetween launches. */ /** Time inbetween launches. */
public float launchTime; public float launchTime;
public Sound launchSound = Sounds.none;
public @Load("@-light") TextureRegion lightRegion; public @Load("@-light") TextureRegion lightRegion;
public @Load("launchpod") TextureRegion podRegion; public @Load(value = "@-pod", fallback = "launchpod") TextureRegion podRegion;
public Color lightColor = Color.valueOf("eab678"); public Color lightColor = Color.valueOf("eab678");
public LaunchPad(String name){ public LaunchPad(String name){
@@ -74,6 +76,11 @@ public class LaunchPad extends Block{
return power != null && (block.consumes.has(ConsumeType.power) && !block.consumes.getPower().buffered) ? power.status : 1f; return power != null && (block.consumes.has(ConsumeType.power) && !block.consumes.getPower().buffered) ? power.status : 1f;
} }
@Override
public boolean shouldConsume(){
return true;
}
@Override @Override
public void draw(){ public void draw(){
super.draw(); super.draw();
@@ -119,6 +126,7 @@ public class LaunchPad extends Block{
//launch when full and base conditions are met //launch when full and base conditions are met
if(items.total() >= itemCapacity && efficiency() >= 1f && timer(timerLaunch, launchTime / timeScale)){ if(items.total() >= itemCapacity && efficiency() >= 1f && timer(timerLaunch, launchTime / timeScale)){
launchSound.at(x, y);
LaunchPayload entity = LaunchPayload.create(); LaunchPayload entity = LaunchPayload.create();
items.each((item, amount) -> entity.stacks.add(new ItemStack(item, amount))); items.each((item, amount) -> entity.stacks.add(new ItemStack(item, amount)));
entity.set(this); entity.set(this);
@@ -197,7 +205,7 @@ public class LaunchPad extends Block{
Draw.z(Layer.weather - 1); Draw.z(Layer.weather - 1);
TextureRegion region = Core.atlas.find("launchpod"); TextureRegion region = blockOn() instanceof mindustry.world.blocks.campaign.LaunchPad p ? p.podRegion : Core.atlas.find("launchpod");
float rw = region.width * Draw.scl * scale, rh = region.height * Draw.scl * scale; float rw = region.width * Draw.scl * scale, rh = region.height * Draw.scl * scale;
Draw.alpha(alpha); Draw.alpha(alpha);

View File

@@ -69,8 +69,8 @@ public class Door extends Wall{
super.onProximityRemoved(); super.onProximityRemoved();
for(Building b : proximity){ for(Building b : proximity){
if(b instanceof DoorBuild){ if(b instanceof DoorBuild d){
((DoorBuild)b).updateChained(); d.updateChained();
} }
} }
} }
@@ -113,8 +113,8 @@ public class Door extends Wall{
this.chained = set; this.chained = set;
for(Building b : proximity){ for(Building b : proximity){
if(b instanceof DoorBuild){ if(b instanceof DoorBuild d){
((DoorBuild)b).flow(set); d.flow(set);
} }
} }
} }

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