Compare commits
214 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
edbe795aa5 | ||
|
|
087cd2c55a | ||
|
|
ca62deaaa9 | ||
|
|
d33a4f9f87 | ||
|
|
f64d078f29 | ||
|
|
da465c7786 | ||
|
|
9c12125e89 | ||
|
|
2a6d7c5a13 | ||
|
|
71e38862b9 | ||
|
|
b58a63b200 | ||
|
|
ee8b4f478d | ||
|
|
1941f22676 | ||
|
|
35ffbef557 | ||
|
|
24db94a55b | ||
|
|
46bda97362 | ||
|
|
a1b9f7d1b3 | ||
|
|
32db058dbe | ||
|
|
2f7c5994a7 | ||
|
|
2664bb84be | ||
|
|
bdcfb7ab45 | ||
|
|
5cf47f4198 | ||
|
|
515ee060d2 | ||
|
|
90c2473448 | ||
|
|
c5a90759e5 | ||
|
|
cccce6badd | ||
|
|
decc570867 | ||
|
|
caa34c959e | ||
|
|
b8fa15e546 | ||
|
|
47d5be679d | ||
|
|
fc7f689ea4 | ||
|
|
7c028ffcb8 | ||
|
|
10c3f9e44a | ||
|
|
b2a634e5e7 | ||
|
|
ae0a70703b | ||
|
|
9076325fa1 | ||
|
|
08d7390775 | ||
|
|
cbe188abab | ||
|
|
abbc25798d | ||
|
|
a3ede6cf0b | ||
|
|
e997768a0a | ||
|
|
671098cc28 | ||
|
|
1a686c44a1 | ||
|
|
9e737cd3fe | ||
|
|
deed84f9a3 | ||
|
|
868cd4fb0b | ||
|
|
a5697a7d4b | ||
|
|
2222330b43 | ||
|
|
cde192b59a | ||
|
|
c98eb2edd7 | ||
|
|
dd7062f0f7 | ||
|
|
8adefb7b72 | ||
|
|
5e13f71fde | ||
|
|
d257adf0c1 | ||
|
|
34d2a0d3a0 | ||
|
|
efae0d3b6a | ||
|
|
a393e21326 | ||
|
|
5641b4901c | ||
|
|
4da21ba363 | ||
|
|
508abba2ec | ||
|
|
87ff876db3 | ||
|
|
4720f1b876 | ||
|
|
e35d09fe62 | ||
|
|
fb74dfa02f | ||
|
|
461d87dbef | ||
|
|
cf5d172922 | ||
|
|
227fb388b8 | ||
|
|
89d495fdb1 | ||
|
|
82e659dd80 | ||
|
|
f20b9c828c | ||
|
|
efe5668c5a | ||
|
|
0331d8c6c4 | ||
|
|
15882016ca | ||
|
|
b4b9a44126 | ||
|
|
063d2ce6c0 | ||
|
|
3985620289 | ||
|
|
23d0dfe6bf | ||
|
|
0a5b1d1380 | ||
|
|
24b0f445b8 | ||
|
|
57cd20e2a1 | ||
|
|
3f49807348 | ||
|
|
13ddca750a | ||
|
|
c209b0bdaf | ||
|
|
264052a95f | ||
|
|
b004146015 | ||
|
|
3901ae1720 | ||
|
|
bcf798c247 | ||
|
|
2dffd525a3 | ||
|
|
d31389efca | ||
|
|
ee8683c734 | ||
|
|
8224cc3fce | ||
|
|
94a340d3ee | ||
|
|
f8048be429 | ||
|
|
3714077fbe | ||
|
|
6984be2172 | ||
|
|
48f359ca9b | ||
|
|
9b28eaa3b3 | ||
|
|
2f47f13ef7 | ||
|
|
80acea4708 | ||
|
|
cc689fd114 | ||
|
|
be5d9154a7 | ||
|
|
bb9d7fedf7 | ||
|
|
71f064bda1 | ||
|
|
e30d7e998d | ||
|
|
a3270dd908 | ||
|
|
48d568978b | ||
|
|
9a7324ce54 | ||
|
|
d254d971a9 | ||
|
|
800f0f4511 | ||
|
|
60b2842d82 | ||
|
|
f8c7ff0159 | ||
|
|
4d62b0321f | ||
|
|
6ca2855365 | ||
|
|
ced97888e4 | ||
|
|
9f68fe520b | ||
|
|
8c32acbc30 | ||
|
|
bfc9b07651 | ||
|
|
e53b578043 | ||
|
|
b2ed066faa | ||
|
|
5cc461edb0 | ||
|
|
9b22777dfb | ||
|
|
3bd08bb047 | ||
|
|
139d6cd5cc | ||
|
|
309b0adb9e | ||
|
|
c25e6b586b | ||
|
|
f46b22e4a7 | ||
|
|
2b6856634c | ||
|
|
20305b5d36 | ||
|
|
9e16d7385a | ||
|
|
c573fd34a1 | ||
|
|
da7873cbd8 | ||
|
|
a15f8131fa | ||
|
|
0d27e3afdc | ||
|
|
bdcae408e6 | ||
|
|
bc4783e9cd | ||
|
|
8143cb7be0 | ||
|
|
8e90527609 | ||
|
|
8949fd279e | ||
|
|
901d594768 | ||
|
|
3964c8e826 | ||
|
|
044a124bc7 | ||
|
|
4f22db8db5 | ||
|
|
80ef3cee34 | ||
|
|
254284760f | ||
|
|
71ee7558ab | ||
|
|
5f4a3e341f | ||
|
|
81f25b76fd | ||
|
|
649c6ddfb3 | ||
|
|
3bd3d3aa37 | ||
|
|
fa9573e6dc | ||
|
|
b4d19bf71b | ||
|
|
0f019f58bd | ||
|
|
572166b157 | ||
|
|
e16dba3336 | ||
|
|
b52d645459 | ||
|
|
73b24d2966 | ||
|
|
006c796da7 | ||
|
|
160fdee596 | ||
|
|
5cc50b0ff3 | ||
|
|
3ba2498815 | ||
|
|
0a0ec12e6c | ||
|
|
9c826a5fdd | ||
|
|
50d01ef6f8 | ||
|
|
b860b2bbfb | ||
|
|
7773a3b17b | ||
|
|
c605418e33 | ||
|
|
55270996ff | ||
|
|
789fcac439 | ||
|
|
466118319f | ||
|
|
8117aa8046 | ||
|
|
6847d2f373 | ||
|
|
f85c078de8 | ||
|
|
9cc08ada22 | ||
|
|
ec1afdfdc4 | ||
|
|
92d3d3cd9c | ||
|
|
8d23e335ae | ||
|
|
ec61598a52 | ||
|
|
c0c0ebb71f | ||
|
|
c22f6a844e | ||
|
|
8b4112f705 | ||
|
|
465afc3128 | ||
|
|
6730954a2e | ||
|
|
d03049799e | ||
|
|
3a3622bb58 | ||
|
|
38ec05807a | ||
|
|
5d4ab9ecd7 | ||
|
|
0ab5f5bb14 | ||
|
|
4b14008080 | ||
|
|
e23054d606 | ||
|
|
dc5ca76df0 | ||
|
|
a8b423836e | ||
|
|
a4bd160995 | ||
|
|
558ee579e1 | ||
|
|
41829b8660 | ||
|
|
b8eaabe0de | ||
|
|
a94735c5a5 | ||
|
|
ba48373bbc | ||
|
|
512b65a592 | ||
|
|
103ee371bd | ||
|
|
179f44cd37 | ||
|
|
1bf173b1ee | ||
|
|
356c2cfa80 | ||
|
|
5b61a183cd | ||
|
|
d5e1b47b52 | ||
|
|
63795d9df8 | ||
|
|
8e179552ec | ||
|
|
d1271f3e4b | ||
|
|
24e6f5b841 | ||
|
|
7118c972a8 | ||
|
|
e4742133ca | ||
|
|
ada6ef229c | ||
|
|
f0c0900770 | ||
|
|
a4a6eb6cee | ||
|
|
362c7d38a6 | ||
|
|
7b4d488b11 |
@@ -38,7 +38,7 @@ Server builds are bundled with each released build (in Releases). If you'd rathe
|
|||||||
|
|
||||||
### Android
|
### Android
|
||||||
|
|
||||||
1. Install the Android SDK [here.](https://developer.android.com/studio#downloads) Make sure you're downloading the "Command line tools only", as Android Studio is not required.
|
1. Install the Android SDK [here.](https://developer.android.com/studio#command-tools) Make sure you're downloading the "Command line tools only", as Android Studio is not required.
|
||||||
2. Set the `ANDROID_HOME` environment variable to point to your unzipped Android SDK directory.
|
2. Set the `ANDROID_HOME` environment variable to point to your unzipped Android SDK directory.
|
||||||
3. Run `gradlew android:assembleDebug` (or `./gradlew` if on linux/mac). This will create an unsigned APK in `android/build/outputs/apk`.
|
3. Run `gradlew android:assembleDebug` (or `./gradlew` if on linux/mac). This will create an unsigned APK in `android/build/outputs/apk`.
|
||||||
|
|
||||||
|
|||||||
@@ -7,8 +7,7 @@ buildscript{
|
|||||||
}
|
}
|
||||||
|
|
||||||
dependencies{
|
dependencies{
|
||||||
//note that later versions, like alpha05, fail to work correctly
|
classpath 'com.android.tools.build:gradle:7.0.1'
|
||||||
classpath 'com.android.tools.build:gradle:7.1.0-alpha02'
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -91,7 +91,7 @@ public abstract class BaseProcessor extends AbstractProcessor{
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static TypeName tname(String pack, String simple){
|
public static TypeName tname(String pack, String simple){
|
||||||
return ClassName.get(pack, simple );
|
return ClassName.get(pack, simple);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static TypeName tname(String name){
|
public static TypeName tname(String name){
|
||||||
|
|||||||
@@ -101,6 +101,8 @@ public class EntityProcess extends BaseProcessor{
|
|||||||
|
|
||||||
inter.addJavadoc("Interface for {@link $L}", component.fullName());
|
inter.addJavadoc("Interface for {@link $L}", component.fullName());
|
||||||
|
|
||||||
|
skipDeprecated(inter);
|
||||||
|
|
||||||
//implement extra interfaces these components may have, e.g. position
|
//implement extra interfaces these components may have, e.g. position
|
||||||
for(Stype extraInterface : component.interfaces().select(i -> !isCompInterface(i))){
|
for(Stype extraInterface : component.interfaces().select(i -> !isCompInterface(i))){
|
||||||
//javapoet completely chokes on this if I add `addSuperInterface` or create the type name with TypeName.get
|
//javapoet completely chokes on this if I add `addSuperInterface` or create the type name with TypeName.get
|
||||||
@@ -570,6 +572,8 @@ public class EntityProcess extends BaseProcessor{
|
|||||||
.returns(tname(packageName + "." + name))
|
.returns(tname(packageName + "." + name))
|
||||||
.addStatement(ann.pooled() ? "return Pools.obtain($L.class, " +name +"::new)" : "return new $L()", name).build());
|
.addStatement(ann.pooled() ? "return Pools.obtain($L.class, " +name +"::new)" : "return new $L()", name).build());
|
||||||
|
|
||||||
|
skipDeprecated(builder);
|
||||||
|
|
||||||
definitions.add(new EntityDefinition(packageName + "." + name, builder, type, typeIsBase ? null : baseClass, components, groups, allFieldSpecs, legacy));
|
definitions.add(new EntityDefinition(packageName + "." + name, builder, type, typeIsBase ? null : baseClass, components, groups, allFieldSpecs, legacy));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -837,6 +841,8 @@ public class EntityProcess extends BaseProcessor{
|
|||||||
TypeSpec.Builder nullBuilder = TypeSpec.classBuilder(className)
|
TypeSpec.Builder nullBuilder = TypeSpec.classBuilder(className)
|
||||||
.addModifiers(Modifier.FINAL);
|
.addModifiers(Modifier.FINAL);
|
||||||
|
|
||||||
|
skipDeprecated(nullBuilder);
|
||||||
|
|
||||||
nullBuilder.addSuperinterface(interf.tname());
|
nullBuilder.addSuperinterface(interf.tname());
|
||||||
if(superclass != null) nullBuilder.superclass(tname(baseName(superclass)));
|
if(superclass != null) nullBuilder.superclass(tname(baseName(superclass)));
|
||||||
|
|
||||||
@@ -980,6 +986,11 @@ public class EntityProcess extends BaseProcessor{
|
|||||||
throw new IllegalArgumentException("Missing types.");
|
throw new IllegalArgumentException("Missing types.");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void skipDeprecated(TypeSpec.Builder builder){
|
||||||
|
//deprecations are irrelevant in generated code
|
||||||
|
builder.addAnnotation(AnnotationSpec.builder(SuppressWarnings.class).addMember("value", "\"deprecation\"").build());
|
||||||
|
}
|
||||||
|
|
||||||
class GroupDefinition{
|
class GroupDefinition{
|
||||||
final String name;
|
final String name;
|
||||||
final ClassName baseType;
|
final ClassName baseType;
|
||||||
|
|||||||
16
build.gradle
@@ -41,8 +41,8 @@ buildscript{
|
|||||||
}
|
}
|
||||||
|
|
||||||
plugins{
|
plugins{
|
||||||
id 'org.jetbrains.kotlin.jvm' version '1.4.32'
|
id 'org.jetbrains.kotlin.jvm' version '1.5.21'
|
||||||
id "org.jetbrains.kotlin.kapt" version "1.4.32"
|
id "org.jetbrains.kotlin.kapt" version "1.5.21"
|
||||||
}
|
}
|
||||||
|
|
||||||
allprojects{
|
allprojects{
|
||||||
@@ -219,10 +219,16 @@ allprojects{
|
|||||||
options.compilerArgs += ["-Xlint:deprecation"]
|
options.compilerArgs += ["-Xlint:deprecation"]
|
||||||
dependsOn clearCache
|
dependsOn clearCache
|
||||||
|
|
||||||
options.forkOptions.jvmArgs.addAll([
|
options.forkOptions.jvmArgs += [
|
||||||
|
'--add-opens=jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED',
|
||||||
'--add-opens=jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED',
|
'--add-opens=jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED',
|
||||||
'--add-opens=jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED'
|
'--add-opens=jdk.compiler/com.sun.tools.javac.model=ALL-UNNAMED',
|
||||||
])
|
'--add-opens=jdk.compiler/com.sun.tools.javac.processing=ALL-UNNAMED',
|
||||||
|
'--add-opens=jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED',
|
||||||
|
'--add-opens=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED',
|
||||||
|
'--add-opens=jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED',
|
||||||
|
'--add-opens=java.base/sun.reflect.annotation=ALL-UNNAMED'
|
||||||
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
|
After Width: | Height: | Size: 291 B |
|
Before Width: | Height: | Size: 290 B After Width: | Height: | Size: 290 B |
|
Before Width: | Height: | Size: 136 B After Width: | Height: | Size: 158 B |
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.2 KiB |
|
Before Width: | Height: | Size: 8.5 KiB After Width: | Height: | Size: 4.6 KiB |
BIN
core/assets-raw/sprites/statuses/status-boss.png
Normal file
|
After Width: | Height: | Size: 418 B |
BIN
core/assets-raw/sprites/statuses/status-shielded.png
Normal file
|
After Width: | Height: | Size: 260 B |
|
Before Width: | Height: | Size: 462 B |
|
Before Width: | Height: | Size: 524 B |
|
After Width: | Height: | Size: 525 B |
@@ -78,13 +78,12 @@ schematic.tagexists = That tag already exists.
|
|||||||
|
|
||||||
stats = Stats
|
stats = Stats
|
||||||
stat.wave = Waves Defeated:[accent] {0}
|
stat.wave = Waves Defeated:[accent] {0}
|
||||||
|
stat.unitsCreated = Units Created:[accent] {0}
|
||||||
stat.enemiesDestroyed = Enemies Destroyed:[accent] {0}
|
stat.enemiesDestroyed = Enemies Destroyed:[accent] {0}
|
||||||
stat.built = Buildings Built:[accent] {0}
|
stat.built = Buildings Built:[accent] {0}
|
||||||
stat.destroyed = Buildings Destroyed:[accent] {0}
|
stat.destroyed = Buildings Destroyed:[accent] {0}
|
||||||
stat.deconstructed = Buildings Deconstructed:[accent] {0}
|
stat.deconstructed = Buildings Deconstructed:[accent] {0}
|
||||||
stat.delivered = Resources Launched:
|
|
||||||
stat.playtime = Time Played:[accent] {0}
|
stat.playtime = Time Played:[accent] {0}
|
||||||
stat.rank = Final Rank: [accent]{0}
|
|
||||||
|
|
||||||
globalitems = [accent]Total Items
|
globalitems = [accent]Total Items
|
||||||
map.delete = Are you sure you want to delete the map "[accent]{0}[]"?
|
map.delete = Are you sure you want to delete the map "[accent]{0}[]"?
|
||||||
@@ -94,6 +93,7 @@ level.mode = Gamemode:
|
|||||||
coreattack = < Core is under attack! >
|
coreattack = < Core is under attack! >
|
||||||
nearpoint = [[ [scarlet]LEAVE DROP POINT IMMEDIATELY[] ]\nannihilation imminent
|
nearpoint = [[ [scarlet]LEAVE DROP POINT IMMEDIATELY[] ]\nannihilation imminent
|
||||||
database = Core Database
|
database = Core Database
|
||||||
|
database.button = Database
|
||||||
savegame = Save Game
|
savegame = Save Game
|
||||||
loadgame = Load Game
|
loadgame = Load Game
|
||||||
joingame = Join Game
|
joingame = Join Game
|
||||||
@@ -169,6 +169,7 @@ launchcore = Launch Core
|
|||||||
filename = File Name:
|
filename = File Name:
|
||||||
unlocked = New content unlocked!
|
unlocked = New content unlocked!
|
||||||
available = New research available!
|
available = New research available!
|
||||||
|
unlock.incampaign = < Unlock in campaign for details >
|
||||||
completed = [accent]Completed
|
completed = [accent]Completed
|
||||||
techtree = Tech Tree
|
techtree = Tech Tree
|
||||||
research.legacy = [accent]5.0[] research data found.\nDo you want to [accent]load this data[], or [accent]discard it[] and restart research in the new campaign (recommended)?
|
research.legacy = [accent]5.0[] research data found.\nDo you want to [accent]load this data[], or [accent]discard it[] and restart research in the new campaign (recommended)?
|
||||||
@@ -362,6 +363,7 @@ publish.confirm = Are you sure you want to publish this?\n\n[lightgray]Make sure
|
|||||||
publish.error = Error publishing item: {0}
|
publish.error = Error publishing item: {0}
|
||||||
steam.error = Failed to initialize Steam services.\nError: {0}
|
steam.error = Failed to initialize Steam services.\nError: {0}
|
||||||
|
|
||||||
|
editor.cliffs = Walls To Cliffs
|
||||||
editor.brush = Brush
|
editor.brush = Brush
|
||||||
editor.openin = Open In Editor
|
editor.openin = Open In Editor
|
||||||
editor.oregen = Ore Generation
|
editor.oregen = Ore Generation
|
||||||
@@ -385,6 +387,7 @@ waves.waves = wave(s)
|
|||||||
waves.perspawn = per spawn
|
waves.perspawn = per spawn
|
||||||
waves.shields = shields/wave
|
waves.shields = shields/wave
|
||||||
waves.to = to
|
waves.to = to
|
||||||
|
waves.max = max units
|
||||||
waves.guardian = Guardian
|
waves.guardian = Guardian
|
||||||
waves.preview = Preview
|
waves.preview = Preview
|
||||||
waves.edit = Edit...
|
waves.edit = Edit...
|
||||||
@@ -393,6 +396,13 @@ waves.load = Load from Clipboard
|
|||||||
waves.invalid = Invalid waves in clipboard.
|
waves.invalid = Invalid waves in clipboard.
|
||||||
waves.copied = Waves copied.
|
waves.copied = Waves copied.
|
||||||
waves.none = No enemies defined.\nNote that empty wave layouts will automatically be replaced with the default layout.
|
waves.none = No enemies defined.\nNote that empty wave layouts will automatically be replaced with the default layout.
|
||||||
|
waves.sort = Sort By
|
||||||
|
waves.sort.reverse = Reverse Sort
|
||||||
|
waves.sort.begin = Begin
|
||||||
|
waves.sort.health = Health
|
||||||
|
waves.sort.type = Type
|
||||||
|
waves.units.hide = Hide All
|
||||||
|
waves.units.show = Show All
|
||||||
|
|
||||||
#these are intentionally in lower case
|
#these are intentionally in lower case
|
||||||
wavemode.counts = counts
|
wavemode.counts = counts
|
||||||
@@ -621,6 +631,8 @@ sector.biomassFacility.name = Biomass Synthesis Facility
|
|||||||
sector.windsweptIslands.name = Windswept Islands
|
sector.windsweptIslands.name = Windswept Islands
|
||||||
sector.extractionOutpost.name = Extraction Outpost
|
sector.extractionOutpost.name = Extraction Outpost
|
||||||
sector.planetaryTerminal.name = Planetary Launch Terminal
|
sector.planetaryTerminal.name = Planetary Launch Terminal
|
||||||
|
sector.coastline.name = Coastline
|
||||||
|
sector.navalFortress.name = Naval Fortress
|
||||||
|
|
||||||
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.
|
||||||
@@ -648,10 +660,12 @@ status.sapped.name = Sapped
|
|||||||
status.electrified.name = Electrified
|
status.electrified.name = Electrified
|
||||||
status.spore-slowed.name = Spore Slowed
|
status.spore-slowed.name = Spore Slowed
|
||||||
status.tarred.name = Tarred
|
status.tarred.name = Tarred
|
||||||
|
status.overdrive.name = Overdrive
|
||||||
status.overclock.name = Overclock
|
status.overclock.name = Overclock
|
||||||
status.shocked.name = Shocked
|
status.shocked.name = Shocked
|
||||||
status.blasted.name = Blasted
|
status.blasted.name = Blasted
|
||||||
status.unmoving.name = Unmoving
|
status.unmoving.name = Unmoving
|
||||||
|
status.boss.name = Guardian
|
||||||
|
|
||||||
settings.language = Language
|
settings.language = Language
|
||||||
settings.data = Game Data
|
settings.data = Game Data
|
||||||
@@ -776,7 +790,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.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}
|
||||||
@@ -1149,6 +1163,7 @@ block.core-nucleus.name = Core: Nucleus
|
|||||||
block.deep-water.name = Deep Water
|
block.deep-water.name = Deep Water
|
||||||
block.shallow-water.name = Water
|
block.shallow-water.name = Water
|
||||||
block.tainted-water.name = Tainted Water
|
block.tainted-water.name = Tainted Water
|
||||||
|
block.deep-tainted-water.name = Deep Tainted Water
|
||||||
block.darksand-tainted-water.name = Dark Sand Tainted Water
|
block.darksand-tainted-water.name = Dark Sand Tainted Water
|
||||||
block.tar.name = Tar
|
block.tar.name = Tar
|
||||||
block.stone.name = Stone
|
block.stone.name = Stone
|
||||||
@@ -1382,6 +1397,7 @@ hint.generator = \uf879 [accent]Combustion Generators[] burn coal and transmit p
|
|||||||
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.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.presetLaunch = Gray [accent]landing zone sectors[], such as [accent]Frozen Forest[], can be launched to from anywhere. They do not require capture of nearby territory.\n\n[accent]Numbered sectors[], such as this one, are [accent]optional[].
|
||||||
|
hint.presetDifficulty = This sector has a [scarlet]high enemy threat level[].\nLaunching to such sectors is [accent]not recommended[] without proper technology and preparation.
|
||||||
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.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.
|
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.
|
||||||
|
|
||||||
|
|||||||
@@ -751,7 +751,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.boost = Усилване: +{0}%
|
||||||
bar.powerbalance = Електроенергия: {0}/сек
|
bar.powerbalance = Електроенергия: {0}/сек
|
||||||
bar.powerstored = Съхранена енергия: {0}/{1}
|
bar.powerstored = Съхранена енергия: {0}/{1}
|
||||||
bar.poweramount = Електроенергия: {0}
|
bar.poweramount = Електроенергия: {0}
|
||||||
|
|||||||
@@ -772,7 +772,7 @@ bar.corereq = Kern-Basis erforderlich
|
|||||||
bar.drillspeed = Bohrgeschwindigkeit: {0}/s
|
bar.drillspeed = Bohrgeschwindigkeit: {0}/s
|
||||||
bar.pumpspeed = Pumpengeschwindigkeit: {0}/s
|
bar.pumpspeed = Pumpengeschwindigkeit: {0}/s
|
||||||
bar.efficiency = Effizienz: {0}%
|
bar.efficiency = Effizienz: {0}%
|
||||||
bar.boost = Beschleunigung: {0}%
|
bar.boost = Beschleunigung: +{0}%
|
||||||
bar.powerbalance = Strom: {0}/s
|
bar.powerbalance = Strom: {0}/s
|
||||||
bar.powerstored = Gespeichert: {0}/{1}
|
bar.powerstored = Gespeichert: {0}/{1}
|
||||||
bar.poweramount = Strom: {0}
|
bar.poweramount = Strom: {0}
|
||||||
|
|||||||
@@ -78,13 +78,12 @@ schematic.tagexists = Ce mot-clé existe déjà.
|
|||||||
|
|
||||||
stats = Statistiques
|
stats = Statistiques
|
||||||
stat.wave = Vagues vaincues : [accent] {0}
|
stat.wave = Vagues vaincues : [accent] {0}
|
||||||
|
stat.unitsCreated = Unités créées :[accent] {0}
|
||||||
stat.enemiesDestroyed = Ennemis détruits : [accent] {0}
|
stat.enemiesDestroyed = Ennemis détruits : [accent] {0}
|
||||||
stat.built = Bâtiments construits : [accent] {0}
|
stat.built = Bâtiments construits : [accent] {0}
|
||||||
stat.destroyed = Bâtiments détruits : [accent] {0}
|
stat.destroyed = Bâtiments détruits : [accent] {0}
|
||||||
stat.deconstructed = Bâtiments déconstruits : [accent] {0}
|
stat.deconstructed = Bâtiments déconstruits : [accent] {0}
|
||||||
stat.delivered = Ressources transférées :
|
|
||||||
stat.playtime = Temps de jeu : [accent] {0}
|
stat.playtime = Temps de jeu : [accent] {0}
|
||||||
stat.rank = Rang Final : [accent]{0}
|
|
||||||
|
|
||||||
globalitems = [accent]Ressources globales
|
globalitems = [accent]Ressources globales
|
||||||
map.delete = Êtes-vous sûr de vouloir supprimer cette carte ?"[accent]{0}[]" ?
|
map.delete = Êtes-vous sûr de vouloir supprimer cette carte ?"[accent]{0}[]" ?
|
||||||
@@ -94,6 +93,7 @@ level.mode = Mode de jeu :
|
|||||||
coreattack = [scarlet]< Le Noyau est attaqué ! >
|
coreattack = [scarlet]< Le Noyau est attaqué ! >
|
||||||
nearpoint = [[ [scarlet]QUITTEZ LE POINT D'APPARITION ENNEMI IMMÉDIATEMENT[] ]\nannihilation imminente
|
nearpoint = [[ [scarlet]QUITTEZ LE POINT D'APPARITION ENNEMI IMMÉDIATEMENT[] ]\nannihilation imminente
|
||||||
database = Base de données
|
database = Base de données
|
||||||
|
database.button = Base de données
|
||||||
savegame = Sauvegarder la partie
|
savegame = Sauvegarder la partie
|
||||||
loadgame = Charger une partie
|
loadgame = Charger une partie
|
||||||
joingame = Rejoindre une partie
|
joingame = Rejoindre une partie
|
||||||
@@ -169,6 +169,7 @@ launchcore = Lancer le Noyau
|
|||||||
filename = Nom du fichier :
|
filename = Nom du fichier :
|
||||||
unlocked = Nouveau contenu débloqué !
|
unlocked = Nouveau contenu débloqué !
|
||||||
available = Nouvelle recherche disponible !
|
available = Nouvelle recherche disponible !
|
||||||
|
unlock.incampaign = < Débloquer dans la campagne pour plus de détails >
|
||||||
completed = [accent]Complété
|
completed = [accent]Complété
|
||||||
techtree = Arbre technologique
|
techtree = Arbre technologique
|
||||||
research.legacy = Des données de recherche de la [accent]5.0[] ont été trouvées.\nVoulez-vous [accent]charger ces données[] ou [accent]les ignorer[] et recommencer la recherche dans la nouvelle campagne ? (recommandé)
|
research.legacy = Des données de recherche de la [accent]5.0[] ont été trouvées.\nVoulez-vous [accent]charger ces données[] ou [accent]les ignorer[] et recommencer la recherche dans la nouvelle campagne ? (recommandé)
|
||||||
@@ -215,7 +216,7 @@ hosts.none = [lightgray]Aucune partie en LAN trouvée !
|
|||||||
host.invalid = [scarlet]Impossible de se connecter à l'hôte.
|
host.invalid = [scarlet]Impossible de se connecter à l'hôte.
|
||||||
|
|
||||||
servers.local = Serveurs locaux
|
servers.local = Serveurs locaux
|
||||||
servers.local.steam = Open Games & Serveurs Locaux
|
servers.local.steam = Jeux Libres & Serveurs Locaux
|
||||||
servers.remote = Serveurs distants
|
servers.remote = Serveurs distants
|
||||||
servers.global = Serveurs communautaires
|
servers.global = Serveurs communautaires
|
||||||
|
|
||||||
@@ -317,7 +318,7 @@ data.invalid = Ce ne sont pas des données de jeu valides.
|
|||||||
data.import.confirm = L'importation des données externes va effacer[scarlet] toutes[] vos données de jeu actuelles.\n[accent]Ceci ne pourra pas être annulé ![]\n\nUne fois les données importées, le jeu se fermera immédiatement.
|
data.import.confirm = L'importation des données externes va effacer[scarlet] toutes[] vos données de jeu actuelles.\n[accent]Ceci ne pourra pas être annulé ![]\n\nUne fois les données importées, le jeu se fermera immédiatement.
|
||||||
quit.confirm = Êtes-vous sûr de vouloir quitter ?
|
quit.confirm = Êtes-vous sûr de vouloir quitter ?
|
||||||
loading = [accent]Chargement...
|
loading = [accent]Chargement...
|
||||||
reloading = [accent]Rechargement des Mods...
|
downloading = [accent]Téléchargement...
|
||||||
saving = [accent]Sauvegarde...
|
saving = [accent]Sauvegarde...
|
||||||
respawn = [accent][[{0}][] pour réapparaître dans le Noyau
|
respawn = [accent][[{0}][] pour réapparaître dans le Noyau
|
||||||
cancelbuilding = [accent][[{0}][] pour effacer le plan
|
cancelbuilding = [accent][[{0}][] pour effacer le plan
|
||||||
@@ -385,6 +386,7 @@ waves.waves = vague(s)
|
|||||||
waves.perspawn = par apparition
|
waves.perspawn = par apparition
|
||||||
waves.shields = boucliers/vague
|
waves.shields = boucliers/vague
|
||||||
waves.to = à
|
waves.to = à
|
||||||
|
waves.max = Unités maximum
|
||||||
waves.guardian = Gardien
|
waves.guardian = Gardien
|
||||||
waves.preview = Prévisualiser
|
waves.preview = Prévisualiser
|
||||||
waves.edit = Modifier...
|
waves.edit = Modifier...
|
||||||
@@ -393,6 +395,13 @@ waves.load = Coller depuis le presse-papiers
|
|||||||
waves.invalid = Vagues invalides dans le presse-papiers.
|
waves.invalid = Vagues invalides dans le presse-papiers.
|
||||||
waves.copied = Vagues copiées
|
waves.copied = Vagues copiées
|
||||||
waves.none = Aucun ennemi défini.\nNotez que les vagues vides seront automatiquement remplacées par une vague générée par défaut.
|
waves.none = Aucun ennemi défini.\nNotez que les vagues vides seront automatiquement remplacées par une vague générée par défaut.
|
||||||
|
waves.sort = Trier Par
|
||||||
|
waves.sort.reverse = Tri inversé
|
||||||
|
waves.sort.begin = Commence par
|
||||||
|
waves.sort.health = Santé
|
||||||
|
waves.sort.type = Type
|
||||||
|
waves.units.hide = Tout masquer
|
||||||
|
waves.units.show = Tout afficher
|
||||||
|
|
||||||
#these are intentionally in lower case
|
#these are intentionally in lower case
|
||||||
wavemode.counts = compte
|
wavemode.counts = compte
|
||||||
@@ -539,6 +548,7 @@ configure = Modifier le chargement
|
|||||||
loadout = Chargement
|
loadout = Chargement
|
||||||
resources = Ressources
|
resources = Ressources
|
||||||
bannedblocks = Blocs bannis
|
bannedblocks = Blocs bannis
|
||||||
|
bannedunits = Unités bannies
|
||||||
addall = Ajouter TOUT
|
addall = Ajouter TOUT
|
||||||
launch.from = Décollage depuis : [accent]{0}
|
launch.from = Décollage depuis : [accent]{0}
|
||||||
launch.destination = Destination: {0}
|
launch.destination = Destination: {0}
|
||||||
@@ -617,6 +627,8 @@ sector.biomassFacility.name = Biomass Synthesis Facility
|
|||||||
sector.windsweptIslands.name = Windswept Islands
|
sector.windsweptIslands.name = Windswept Islands
|
||||||
sector.extractionOutpost.name = Extraction Outpost
|
sector.extractionOutpost.name = Extraction Outpost
|
||||||
sector.planetaryTerminal.name = Planetary Launch Terminal
|
sector.planetaryTerminal.name = Planetary Launch Terminal
|
||||||
|
sector.coastline.name = Coastline
|
||||||
|
sector.navalFortress.name = Naval Fortress
|
||||||
|
|
||||||
sector.groundZero.description = Un endroit optimal pour commencer. Avec une menace ennemie faible et le peu de ressources disponibles, rassemblez autant de cuivre et de plomb que possible pour continuer votre exploration.
|
sector.groundZero.description = Un endroit optimal pour commencer. Avec une menace ennemie faible et le peu de ressources disponibles, rassemblez autant de cuivre et de plomb que possible pour continuer votre exploration.
|
||||||
sector.frozenForest.description = Même ici, près des montagnes, les spores se sont propagées. Les températures glaciales ne pourront pas les contenir indéfiniment.\n\nCommencez votre production d'énergie en construisant des générateurs à combustion et apprenez à utiliser les bâtiments de soin.
|
sector.frozenForest.description = Même ici, près des montagnes, les spores se sont propagées. Les températures glaciales ne pourront pas les contenir indéfiniment.\n\nCommencez votre production d'énergie en construisant des générateurs à combustion et apprenez à utiliser les bâtiments de soin.
|
||||||
@@ -645,10 +657,12 @@ status.sapped.name = Sapé
|
|||||||
status.electrified.name = Electrifié
|
status.electrified.name = Electrifié
|
||||||
status.spore-slowed.name = Spore ralentie
|
status.spore-slowed.name = Spore ralentie
|
||||||
status.tarred.name = Goudronné
|
status.tarred.name = Goudronné
|
||||||
|
status.overdrive.name = Surmultiplié
|
||||||
status.overclock.name = Surcadençage
|
status.overclock.name = Surcadençage
|
||||||
status.shocked.name = Étourdie
|
status.shocked.name = Étourdie
|
||||||
status.blasted.name = Foudroyé
|
status.blasted.name = Foudroyé
|
||||||
status.unmoving.name = Immobilisé
|
status.unmoving.name = Immobilisé
|
||||||
|
status.boss.name = Gardien
|
||||||
|
|
||||||
settings.language = Langage
|
settings.language = Langage
|
||||||
settings.data = Données du Jeu
|
settings.data = Données du Jeu
|
||||||
@@ -773,7 +787,7 @@ bar.corereq = Noyau de base requis
|
|||||||
bar.drillspeed = Vitesse de Forage: {0}/s
|
bar.drillspeed = Vitesse de Forage: {0}/s
|
||||||
bar.pumpspeed = Vitesse de Pompage: {0}/s
|
bar.pumpspeed = Vitesse de Pompage: {0}/s
|
||||||
bar.efficiency = Efficacité: {0}%
|
bar.efficiency = Efficacité: {0}%
|
||||||
bar.boost = Boost: {0}%
|
bar.boost = Boost: +{0}%
|
||||||
bar.powerbalance = Énergie: {0}/s
|
bar.powerbalance = Énergie: {0}/s
|
||||||
bar.powerstored = Réserves d'Énergie: {0}/{1}
|
bar.powerstored = Réserves d'Énergie: {0}/{1}
|
||||||
bar.poweramount = Énergie: {0}
|
bar.poweramount = Énergie: {0}
|
||||||
@@ -838,6 +852,7 @@ category.crafting = Fabrication
|
|||||||
category.function = Fonction
|
category.function = Fonction
|
||||||
category.optional = Améliorations facultatives
|
category.optional = Améliorations facultatives
|
||||||
|
|
||||||
|
setting.skipcoreanimation.name = Ignorer l'animation du lancement du noyau et de l'atterrissage
|
||||||
setting.landscape.name = Verrouiller la rotation en mode paysage
|
setting.landscape.name = Verrouiller la rotation en mode paysage
|
||||||
setting.shadows.name = Ombres
|
setting.shadows.name = Ombres
|
||||||
setting.blockreplace.name = Suggestion automatique des Blocs
|
setting.blockreplace.name = Suggestion automatique des Blocs
|
||||||
@@ -878,6 +893,7 @@ setting.seconds = {0} secondes
|
|||||||
setting.milliseconds = {0} millisecondes
|
setting.milliseconds = {0} millisecondes
|
||||||
setting.fullscreen.name = Plein Écran
|
setting.fullscreen.name = Plein Écran
|
||||||
setting.borderlesswindow.name = Fenêtré sans bordures
|
setting.borderlesswindow.name = Fenêtré sans bordures
|
||||||
|
setting.borderlesswindow.name.windows = Plein écran sans bordure
|
||||||
setting.borderlesswindow.description = Un redémarrage peut être nécessaire pour appliquer les changements.
|
setting.borderlesswindow.description = Un redémarrage peut être nécessaire pour appliquer les changements.
|
||||||
setting.fps.name = Afficher FPS et Ping
|
setting.fps.name = Afficher FPS et Ping
|
||||||
setting.smoothcamera.name = Lissage de la Caméra
|
setting.smoothcamera.name = Lissage de la Caméra
|
||||||
@@ -1111,7 +1127,6 @@ unit.reign.name = Éradicateur
|
|||||||
unit.vela.name = Vela
|
unit.vela.name = Vela
|
||||||
unit.corvus.name = Corvus
|
unit.corvus.name = Corvus
|
||||||
|
|
||||||
block.resupply-point.name = Point de Rechargement
|
|
||||||
block.parallax.name = Parallax
|
block.parallax.name = Parallax
|
||||||
block.cliff.name = Falaise
|
block.cliff.name = Falaise
|
||||||
block.sand-boulder.name = Bloc de Sable
|
block.sand-boulder.name = Bloc de Sable
|
||||||
@@ -1148,9 +1163,10 @@ block.spawn.name = Point d'Apparition Ennemi
|
|||||||
block.core-shard.name = Noyau: Fragment
|
block.core-shard.name = Noyau: Fragment
|
||||||
block.core-foundation.name = Noyau: Fondation
|
block.core-foundation.name = Noyau: Fondation
|
||||||
block.core-nucleus.name = Noyau: Épicentre
|
block.core-nucleus.name = Noyau: Épicentre
|
||||||
block.deep-water.name = Eau profonde
|
block.deep-water.name = Eau Profonde
|
||||||
block.shallow-water.name = Eau
|
block.shallow-water.name = Eau
|
||||||
block.tainted-water.name = Eau Contaminée
|
block.tainted-water.name = Eau Contaminée
|
||||||
|
block.deep-tainted-water.name = Eau Profonde Contaminée
|
||||||
block.darksand-tainted-water.name = Eau Contaminée avec fond de Sable sombre
|
block.darksand-tainted-water.name = Eau Contaminée avec fond de Sable sombre
|
||||||
block.tar.name = Goudron
|
block.tar.name = Goudron
|
||||||
block.stone.name = Roche
|
block.stone.name = Roche
|
||||||
@@ -1384,6 +1400,7 @@ hint.generator = \uf879 Les [accent]Générateurs à combustion[] brûlent du Ch
|
|||||||
hint.guardian = Les [accent]Gardiens[] sont protégés par un bouclier. Les munitions faibles telles que le [accent]Cuivre[] et le [accent]Plomb[] ne seront [scarlet]pas efficaces[].\n\nUtilisez des tourelles de plus haut niveau, ou de meilleures munitions comme le \uf835 [accent]Graphite[] avec un \uf861Duo/\uf859Salve pour pouvoir tuer le gardien.
|
hint.guardian = Les [accent]Gardiens[] sont protégés par un bouclier. Les munitions faibles telles que le [accent]Cuivre[] et le [accent]Plomb[] ne seront [scarlet]pas efficaces[].\n\nUtilisez des tourelles de plus haut niveau, ou de meilleures munitions comme le \uf835 [accent]Graphite[] avec un \uf861Duo/\uf859Salve pour pouvoir tuer le gardien.
|
||||||
hint.coreUpgrade = Les Noyaux peuvent être améliorés [accent]en plaçant un Noyau de plus haut niveau sur eux[].\n\nPlacez un Noyau [accent]Fondation[] sur le Noyau [accent]Fragment[]. Soyez sûrs que rien n'obstrue la construction.
|
hint.coreUpgrade = Les Noyaux peuvent être améliorés [accent]en plaçant un Noyau de plus haut niveau sur eux[].\n\nPlacez un Noyau [accent]Fondation[] sur le Noyau [accent]Fragment[]. Soyez sûrs que rien n'obstrue la construction.
|
||||||
hint.presetLaunch = Les [accent]secteurs[] gris, tels que [accent]Frozen Forest[], peuvent être lançés de n'importe où. Ils ne requièrent pas la capture d'un secteur adjacent.\n\n[accent]Il y a beaucoup de secteurs[] comme celui-ci, qui sont [accent]optionels[].
|
hint.presetLaunch = Les [accent]secteurs[] gris, tels que [accent]Frozen Forest[], peuvent être lançés de n'importe où. Ils ne requièrent pas la capture d'un secteur adjacent.\n\n[accent]Il y a beaucoup de secteurs[] comme celui-ci, qui sont [accent]optionels[].
|
||||||
|
hint.presetDifficulty = Ce secteur a un niveau de menace ennemi [scarlet]élevé[].\nIl n'est [accent]pas recommandé[] de se lancer dans de tels secteurs sans la technologie et la préparation appropriées.
|
||||||
hint.coreIncinerate = Lorsqu'un Noyau est rempli d'une ressource en particulier, le surplus qui rentrera dans celui-ci sera [accent]incinéré[].
|
hint.coreIncinerate = Lorsqu'un Noyau est rempli d'une ressource en particulier, le surplus qui rentrera dans celui-ci sera [accent]incinéré[].
|
||||||
hint.coopCampaign = Quand vous jouez en [accent]campagne multijoueur[], les ressources produites dans le secteur dans lequel vous jouez sera aussi envoyé [accent]dans vos secteurs[].\n\nLes recherches faites par l'hôte sont aussi partagées.
|
hint.coopCampaign = Quand vous jouez en [accent]campagne multijoueur[], les ressources produites dans le secteur dans lequel vous jouez sera aussi envoyé [accent]dans vos secteurs[].\n\nLes recherches faites par l'hôte sont aussi partagées.
|
||||||
|
|
||||||
@@ -1414,8 +1431,7 @@ liquid.slag.description = Différents types de métaux en fusion mélangés. Peu
|
|||||||
liquid.oil.description = Un liquide utilisé dans la production de matériaux avancés. Peut être transformé en charbon ou pulvérisé sur les ennemis, puis enflammé.
|
liquid.oil.description = Un liquide utilisé dans la production de matériaux avancés. Peut être transformé en charbon ou pulvérisé sur les ennemis, puis enflammé.
|
||||||
liquid.cryofluid.description = Un liquide inerte, non corrosif, créé à partir d’eau et de titane. Possède une capacité d'absorption de chaleur extrêmement élevée. Largement utilisé comme liquide de refroidissement.
|
liquid.cryofluid.description = Un liquide inerte, non corrosif, créé à partir d’eau et de titane. Possède une capacité d'absorption de chaleur extrêmement élevée. Largement utilisé comme liquide de refroidissement.
|
||||||
|
|
||||||
block.derelict = [lightgray] Vestiges
|
block.derelict = [lightgray]Vestiges
|
||||||
block.resupply-point.description = Approvisionne les unités proches en munitions. Pas compatible avec celles qui ont besoin d'énergie pour tirer.
|
|
||||||
block.illuminator.description = Une petite source lumineuse compacte et configurable. Nécessite de l'énergie pour fonctionner.
|
block.illuminator.description = Une petite source lumineuse compacte et configurable. Nécessite de l'énergie pour fonctionner.
|
||||||
block.armored-conveyor.description = Déplace les objets à la même vitesse que les convoyeurs en titane, mais est plus résistant. Seulement d'autres convoyeurs peuvent faire entrer des ressources par ses côtés.
|
block.armored-conveyor.description = Déplace les objets à la même vitesse que les convoyeurs en titane, mais est plus résistant. Seulement d'autres convoyeurs peuvent faire entrer des ressources par ses côtés.
|
||||||
block.message.description = Enregistre un message. Utilisé pour la communication entre alliés. Le message contenu peut être modifié par un processeur logique.
|
block.message.description = Enregistre un message. Utilisé pour la communication entre alliés. Le message contenu peut être modifié par un processeur logique.
|
||||||
@@ -1441,6 +1457,8 @@ block.item-source.description = Produit des objets à l'infini. Bac à sable uni
|
|||||||
block.item-void.description = Désintègre n'importe quel objet qui va à l'intérieur. Bac à sable uniquement.
|
block.item-void.description = Désintègre n'importe quel objet qui va à l'intérieur. Bac à sable uniquement.
|
||||||
block.liquid-source.description = Source de liquide infinie. Bac à sable uniquement.
|
block.liquid-source.description = Source de liquide infinie. Bac à sable uniquement.
|
||||||
block.liquid-void.description = Détruit n'importe quel liquide. Bac à sable uniquement.
|
block.liquid-void.description = Détruit n'importe quel liquide. Bac à sable uniquement.
|
||||||
|
block.payload-source.description = Produit des charges utiles à l'infini. Bac à sable uniquement.
|
||||||
|
block.payload-void.description = Détruit toutes les charges utiles. Bac à sable uniquement.
|
||||||
block.copper-wall.description = Un bloc défensif à faible coût.\nUtile pour protéger la base et les tourelles lors des premières vagues.
|
block.copper-wall.description = Un bloc défensif à faible coût.\nUtile pour protéger la base et les tourelles lors des premières vagues.
|
||||||
block.copper-wall-large.description = Un bloc défensif à faible coût.\nUtile pour protéger la base et les tourelles lors des premières vagues.
|
block.copper-wall-large.description = Un bloc défensif à faible coût.\nUtile pour protéger la base et les tourelles lors des premières vagues.
|
||||||
block.titanium-wall.description = Un bloc défensif standard.\nProcure une protection modérée contre les attaques ennemies.
|
block.titanium-wall.description = Un bloc défensif standard.\nProcure une protection modérée contre les attaques ennemies.
|
||||||
|
|||||||
@@ -725,7 +725,7 @@ bar.corereq = Core Base Required
|
|||||||
bar.drillspeed = Kitermelés: {0}/s
|
bar.drillspeed = Kitermelés: {0}/s
|
||||||
bar.pumpspeed = Kitermelés: {0}/s
|
bar.pumpspeed = Kitermelés: {0}/s
|
||||||
bar.efficiency = Hatékonyság: {0}%
|
bar.efficiency = Hatékonyság: {0}%
|
||||||
bar.boost = Boost: {0}%
|
bar.boost = Boost: +{0}%
|
||||||
bar.powerbalance = Áram: {0}/s
|
bar.powerbalance = Áram: {0}/s
|
||||||
bar.powerstored = Tárolt: {0}/{1}
|
bar.powerstored = Tárolt: {0}/{1}
|
||||||
bar.poweramount = Áram: {0}
|
bar.poweramount = Áram: {0}
|
||||||
|
|||||||
@@ -773,7 +773,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.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}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
credits.text = 制作者 [royal]Anuken[] - [sky]anukendev@gmail.com[]
|
credits.text = 制作者 [royal]Anuken[] - [sky]anukendev@gmail.com[]
|
||||||
credits = クレジット
|
credits = クレジット
|
||||||
contributors = 翻訳や開発に協力してくださった方々
|
contributors = 翻訳や開発に協力してくださった皆様
|
||||||
discord = MindustryのDiscordに参加!
|
discord = MindustryのDiscordに参加!
|
||||||
link.discord.description = Mindustryの公式Discordグループ
|
link.discord.description = Mindustryの公式Discordグループ
|
||||||
link.reddit.description = Mindustryのsubreddit
|
link.reddit.description = Mindustryのsubreddit
|
||||||
@@ -41,10 +41,13 @@ be.ignore = 無視する
|
|||||||
be.noupdates = 更新が見つかりません。
|
be.noupdates = 更新が見つかりません。
|
||||||
be.check = 更新を確認します。
|
be.check = 更新を確認します。
|
||||||
|
|
||||||
mod.featured.dialog.title = Mod ブラウザー (作業中)
|
mods.browser = Modブラウザ
|
||||||
mods.browser.selected = 選択されたmod
|
mods.browser.selected = 選択されたMod
|
||||||
mods.browser.add = インストール
|
mods.browser.add = インストール
|
||||||
|
mods.browser.reinstall = 再インストール
|
||||||
mods.github.open = 見る
|
mods.github.open = 見る
|
||||||
|
mods.browser.sortdate = 新しいものから並べる
|
||||||
|
mods.browser.sortstars = お気に入り数で並べる
|
||||||
|
|
||||||
schematic = 設計図
|
schematic = 設計図
|
||||||
schematic.add = 設計図を保存
|
schematic.add = 設計図を保存
|
||||||
@@ -64,16 +67,23 @@ schematic.delete.confirm = この設計図は完全に削除されます。よ
|
|||||||
schematic.rename = 設計図の名前を変更する。
|
schematic.rename = 設計図の名前を変更する。
|
||||||
schematic.info = {1}x{0}, {2} ブロック
|
schematic.info = {1}x{0}, {2} ブロック
|
||||||
schematic.disabled = [scarlet]設計図使用不可[]\nこの[accent]マップ[]、[accent]サーバー[]では設計図の使用は許可されていません。
|
schematic.disabled = [scarlet]設計図使用不可[]\nこの[accent]マップ[]、[accent]サーバー[]では設計図の使用は許可されていません。
|
||||||
|
schematic.tags = タグ:
|
||||||
|
schematic.edittags = タグ編集
|
||||||
|
schematic.addtag = タグを追加
|
||||||
|
schematic.texttag = テキストタグ
|
||||||
|
schematic.icontag = アイコンタグ
|
||||||
|
schematic.renametag = タグの名前変更
|
||||||
|
schematic.tagdelconfirm = このタグをすべて削除しますか?
|
||||||
|
schematic.tagexists = このタグはすでに存在します。
|
||||||
|
|
||||||
stats = Stats
|
stats = Stats
|
||||||
stat.wave = 防衛したウェーブ:[accent] {0}
|
stat.wave = 防衛したウェーブ:[accent] {0}
|
||||||
|
stat.unitsCreated = 生産ユニット数:[accent] {0}
|
||||||
stat.enemiesDestroyed = 敵に破壊された数:[accent] {0}
|
stat.enemiesDestroyed = 敵に破壊された数:[accent] {0}
|
||||||
stat.built = 建設した建造物数:[accent] {0}
|
stat.built = 建設した建造物数:[accent] {0}
|
||||||
stat.destroyed = 破壊した建造物数:[accent] {0}
|
stat.destroyed = 破壊した建造物数:[accent] {0}
|
||||||
stat.deconstructed = 解体した建造物数:[accent] {0}
|
stat.deconstructed = 解体した建造物数:[accent] {0}
|
||||||
stat.delivered = 獲得した資源:
|
|
||||||
stat.playtime = プレイ時間:[accent] {0}
|
stat.playtime = プレイ時間:[accent] {0}
|
||||||
stat.rank = 最終ランク: [accent]{0}
|
|
||||||
|
|
||||||
globalitems = [accent]グローバルアイテム
|
globalitems = [accent]グローバルアイテム
|
||||||
map.delete = マップ "[accent]{0}[]" を削除してもよろしいですか?
|
map.delete = マップ "[accent]{0}[]" を削除してもよろしいですか?
|
||||||
@@ -82,7 +92,7 @@ level.select = レベル選択
|
|||||||
level.mode = ゲームモード:
|
level.mode = ゲームモード:
|
||||||
coreattack = < コアが攻撃を受けています! >
|
coreattack = < コアが攻撃を受けています! >
|
||||||
nearpoint = [[ [scarlet]直ちに出現ポイントより離脱せよ[] ]\n殲滅されます
|
nearpoint = [[ [scarlet]直ちに出現ポイントより離脱せよ[] ]\n殲滅されます
|
||||||
database = コアデーターベース
|
database = コアデータベース
|
||||||
savegame = 保存
|
savegame = 保存
|
||||||
loadgame = 読み込む
|
loadgame = 読み込む
|
||||||
joingame = マルチプレイ
|
joingame = マルチプレイ
|
||||||
@@ -90,6 +100,7 @@ customgame = カスタムプレイ
|
|||||||
newgame = 新しく始める
|
newgame = 新しく始める
|
||||||
none = <なし>
|
none = <なし>
|
||||||
none.found = [lightgray]<見つかりません>
|
none.found = [lightgray]<見つかりません>
|
||||||
|
none.inmap = [lightgray]<マップ内にありません>
|
||||||
minimap = ミニマップ
|
minimap = ミニマップ
|
||||||
position = 位置
|
position = 位置
|
||||||
close = 閉じる
|
close = 閉じる
|
||||||
@@ -110,20 +121,23 @@ committingchanges = 変更を適応中
|
|||||||
done = 完了
|
done = 完了
|
||||||
feature.unsupported = あなたのデバイスはこの機能をサポートしていません。
|
feature.unsupported = あなたのデバイスはこの機能をサポートしていません。
|
||||||
|
|
||||||
mods.alphainfo = Mod機能は実験的なものです。[scarlet] エラーが含まれている可能性があります[]。\n 問題を発見した場合は Mindustry GitHubに報告してください。
|
mods.initfailed = [red]⚠[] 以前のMindustryの初期化に失敗しました。おそらくModの誤作動が原因です。\n\nクラッシュループを防ぐために、[red]全てのModが無効になっています。[]\n\nこの機能を無効にするのは、[accent]設定->ゲーム->起動時にクラッシュした場合にModを無効にする[]をオフにします。
|
||||||
mods = Mods
|
mods = Mods
|
||||||
mods.none = [lightgray]Modが見つかりませんでした!
|
mods.none = [lightgray]Modが見つかりませんでした!
|
||||||
mods.guide = Mod作成ガイド
|
mods.guide = Mod作成ガイド
|
||||||
mods.report = バグを報告する
|
mods.report = バグを報告する
|
||||||
mods.openfolder = MODのフォルダを開く
|
mods.openfolder = Modのフォルダを開く
|
||||||
|
mods.viewcontent = コンテンツを見る
|
||||||
mods.reload = 再読み込み
|
mods.reload = 再読み込み
|
||||||
mods.reloadexit = Modを読み込む為にゲームを再起動します。
|
mods.reloadexit = Modを読み込む為にゲームを再起動します。
|
||||||
|
mod.installed = [[インストール済み]
|
||||||
mod.display = [gray]Mod:[orange] {0}
|
mod.display = [gray]Mod:[orange] {0}
|
||||||
mod.enabled = [lightgray]有効
|
mod.enabled = [lightgray]有効
|
||||||
mod.disabled = [scarlet]無効
|
mod.disabled = [scarlet]無効
|
||||||
|
mod.multiplayer.compatible = [gray]マルチプレイに対応
|
||||||
mod.disable = 無効化
|
mod.disable = 無効化
|
||||||
mod.content = コンテンツ:
|
mod.content = コンテンツ:
|
||||||
mod.delete.error = MODを削除することができませんでした。
|
mod.delete.error = Modを削除することができませんでした。
|
||||||
mod.requiresversion = [scarlet]Modが要求する最低バージョン: [accent]{0}
|
mod.requiresversion = [scarlet]Modが要求する最低バージョン: [accent]{0}
|
||||||
mod.outdated = [scarlet]V6 との互換性がありません (minGameVersion が 105 未満)
|
mod.outdated = [scarlet]V6 との互換性がありません (minGameVersion が 105 未満)
|
||||||
mod.missingdependencies = [scarlet]依存関係がありません。: {0}
|
mod.missingdependencies = [scarlet]依存関係がありません。: {0}
|
||||||
@@ -168,7 +182,7 @@ players.single = {0} 人がオンライン
|
|||||||
players.search = 検索
|
players.search = 検索
|
||||||
players.notfound = [gray]プレイヤーが存在しません
|
players.notfound = [gray]プレイヤーが存在しません
|
||||||
server.closing = [accent]サーバーを閉じています...
|
server.closing = [accent]サーバーを閉じています...
|
||||||
server.kicked.kick = あなたはサーバからキックされました!
|
server.kicked.kick = あなたはサーバーからキックされました!
|
||||||
server.kicked.whitelist = あなたはホワイトリストに追加されていません。
|
server.kicked.whitelist = あなたはホワイトリストに追加されていません。
|
||||||
server.kicked.serverClose = サーバーが閉じられました。
|
server.kicked.serverClose = サーバーが閉じられました。
|
||||||
server.kicked.vote = あなたはプレイヤーの投票によりサーバーからキックされました。
|
server.kicked.vote = あなたはプレイヤーの投票によりサーバーからキックされました。
|
||||||
@@ -200,6 +214,7 @@ hosts.none = [lightgray]ローカル上のサーバーが見つかりません
|
|||||||
host.invalid = [scarlet]ホストに接続できません。
|
host.invalid = [scarlet]ホストに接続できません。
|
||||||
|
|
||||||
servers.local = ローカルサーバー
|
servers.local = ローカルサーバー
|
||||||
|
servers.local.steam = オープンゲーム & ローカルサーバー
|
||||||
servers.remote = リモートサーバー
|
servers.remote = リモートサーバー
|
||||||
servers.global = コミュニティサーバー
|
servers.global = コミュニティサーバー
|
||||||
|
|
||||||
@@ -211,9 +226,11 @@ server.hidden = 非表示
|
|||||||
trace = プレイヤーの記録
|
trace = プレイヤーの記録
|
||||||
trace.playername = プレイヤー名: [accent]{0}
|
trace.playername = プレイヤー名: [accent]{0}
|
||||||
trace.ip = IP: [accent]{0}
|
trace.ip = IP: [accent]{0}
|
||||||
trace.id = ユニークID: [accent]{0}
|
trace.id = ID: [accent]{0}
|
||||||
trace.mobile = モバイルクライアント: [accent]{0}
|
trace.mobile = モバイルクライアント: [accent]{0}
|
||||||
trace.modclient = カスタムクライアント: [accent]{0}
|
trace.modclient = カスタムクライアント: [accent]{0}
|
||||||
|
trace.times.joined = 参加回数: [accent]{0}
|
||||||
|
trace.times.kicked = キックされた回数: [accent]{0}
|
||||||
invalidid = 無効なクライアントIDです! バグ報告してください。
|
invalidid = 無効なクライアントIDです! バグ報告してください。
|
||||||
server.bans = Ban
|
server.bans = Ban
|
||||||
server.bans.none = Banされたプレイヤーは見つかりませんでした!
|
server.bans.none = Banされたプレイヤーは見つかりませんでした!
|
||||||
@@ -287,6 +304,7 @@ cancel = キャンセル
|
|||||||
openlink = リンクを開く
|
openlink = リンクを開く
|
||||||
copylink = リンクをコピー
|
copylink = リンクをコピー
|
||||||
back = 戻る
|
back = 戻る
|
||||||
|
max = Max
|
||||||
crash.export = クラッシュログを出力
|
crash.export = クラッシュログを出力
|
||||||
crash.none = クラッシュログが見つかりません。
|
crash.none = クラッシュログが見つかりません。
|
||||||
crash.exported = クラッシュログを出力しました。
|
crash.exported = クラッシュログを出力しました。
|
||||||
@@ -299,9 +317,9 @@ data.import.confirm = ゲームデータをインポートすると、現在の
|
|||||||
quit.confirm = 終了してもよろしいですか?
|
quit.confirm = 終了してもよろしいですか?
|
||||||
quit.confirm.tutorial = チュートリアルを終了しますか?\nチュートリアルは [accent]設定->ゲーム->チュートリアル[] から再度受けることができます。
|
quit.confirm.tutorial = チュートリアルを終了しますか?\nチュートリアルは [accent]設定->ゲーム->チュートリアル[] から再度受けることができます。
|
||||||
loading = [accent]読み込み中...
|
loading = [accent]読み込み中...
|
||||||
reloading = [accent]再読み込み中...
|
downloading = [accent]ダウンロード中...
|
||||||
saving = [accent]保存中...
|
saving = [accent]保存中...
|
||||||
respawn = [accent][[{0}][] to respawn in core
|
respawn = [accent][[{0}][] コアからリスポーンする
|
||||||
cancelbuilding = [accent][[{0}][] 選択を解除する
|
cancelbuilding = [accent][[{0}][] 選択を解除する
|
||||||
selectschematic = [accent][[{0}][] 選択し、コピーする
|
selectschematic = [accent][[{0}][] 選択し、コピーする
|
||||||
pausebuilding = [accent][[{0}][] 建築を一時的に中断する
|
pausebuilding = [accent][[{0}][] 建築を一時的に中断する
|
||||||
@@ -326,9 +344,9 @@ custom = カスタム
|
|||||||
builtin = 組み込み
|
builtin = 組み込み
|
||||||
map.delete.confirm = マップを削除してもよろしいですか? これは元に戻すことができません!
|
map.delete.confirm = マップを削除してもよろしいですか? これは元に戻すことができません!
|
||||||
map.random = [accent]ランダムマップ
|
map.random = [accent]ランダムマップ
|
||||||
map.nospawn = このマップにはプレイヤーが出現するためのコアがありません! エディターで[accent]オレンジ色[]のコアをマップに追加してください。
|
map.nospawn = このマップにはプレイヤーが出現するためのコアがありません! エディターで[#{0}]{1}[]のコアをマップに追加してください。
|
||||||
map.nospawn.pvp = このマップには敵のプレイヤーが出現するためのコアがありません! エディターで[scarlet]オレンジ色ではない[]コアをマップに追加してください。
|
map.nospawn.pvp = このマップには敵のプレイヤーが出現するためのコアがありません! エディターで[scarlet]オレンジ色ではない[]コアをマップに追加してください。
|
||||||
map.nospawn.attack = このマップには攻撃するための敵のコアがありません! エディターで[scarlet]赤色[]のコアをマップに追加してください。
|
map.nospawn.attack = このマップには攻撃するための敵のコアがありません! エディターで[#{0}]{1}[]のコアをマップに追加してください。
|
||||||
map.invalid = マップの読み込みエラー: ファイルが無効、または破損しています。
|
map.invalid = マップの読み込みエラー: ファイルが無効、または破損しています。
|
||||||
workshop.update = 更新
|
workshop.update = 更新
|
||||||
workshop.error = ワークショップの詳細を取得中にエラーが発生しました: {0}
|
workshop.error = ワークショップの詳細を取得中にエラーが発生しました: {0}
|
||||||
@@ -357,16 +375,16 @@ editor.generation = 生成:
|
|||||||
editor.ingame = ゲーム内で編集する
|
editor.ingame = ゲーム内で編集する
|
||||||
editor.publish.workshop = ワークショップで公開
|
editor.publish.workshop = ワークショップで公開
|
||||||
editor.newmap = 新しいマップ
|
editor.newmap = 新しいマップ
|
||||||
editor.center = Center
|
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.max = 最大ユニット数
|
||||||
waves.guardian = ガーディアン
|
waves.guardian = ガーディアン
|
||||||
waves.preview = プレビュー
|
waves.preview = プレビュー
|
||||||
waves.edit = 編集...
|
waves.edit = 編集...
|
||||||
@@ -444,39 +462,43 @@ toolmode.drawteams = チームを描く
|
|||||||
toolmode.drawteams.description = ブロックの代わりにチームを描きます。
|
toolmode.drawteams.description = ブロックの代わりにチームを描きます。
|
||||||
|
|
||||||
filters.empty = [lightgray]フィルターが設定されていません! 下のボタンからフィルターを追加してください。
|
filters.empty = [lightgray]フィルターが設定されていません! 下のボタンからフィルターを追加してください。
|
||||||
|
|
||||||
filter.distort = ゆがみ
|
filter.distort = ゆがみ
|
||||||
filter.noise = ノイズ
|
filter.noise = ノイズ
|
||||||
filter.enemyspawn = 敵スポーンセレクト
|
filter.enemyspawn = 敵スポーンセレクト
|
||||||
filter.spawnpath = Path To Spawn
|
filter.spawnpath = Path To Spawn
|
||||||
filter.corespawn = コアセレクト
|
filter.corespawn = コアセレクト
|
||||||
filter.median = メディアン
|
filter.median = 中央値
|
||||||
filter.oremedian = メディアン (鉱石)
|
filter.oremedian = 中央値 (鉱石)
|
||||||
filter.blend = ブレンド
|
filter.blend = ブレンド
|
||||||
filter.defaultores = デフォルトの鉱石
|
filter.defaultores = デフォルトの鉱石
|
||||||
filter.ore = 鉱石
|
filter.ore = 鉱石
|
||||||
filter.rivernoise = リバーノイズ
|
filter.rivernoise = 川の生成
|
||||||
filter.mirror = 反転
|
filter.mirror = 反転
|
||||||
filter.clear = クリアー
|
filter.clear = クリアー
|
||||||
filter.option.ignore = 無視
|
filter.option.ignore = 無視
|
||||||
filter.scatter = 分散
|
filter.scatter = 分散
|
||||||
filter.terrain = 地形
|
filter.terrain = 地形
|
||||||
|
|
||||||
filter.option.scale = スケール
|
filter.option.scale = スケール
|
||||||
filter.option.chance = 確率
|
filter.option.chance = 確率
|
||||||
filter.option.mag = マグニチュード
|
filter.option.mag = マグニチュード
|
||||||
filter.option.threshold = スレッシュホールド
|
filter.option.threshold = 閾値
|
||||||
filter.option.circle-scale = サークルスケール
|
filter.option.circle-scale = サークルスケール
|
||||||
filter.option.octaves = オクターブ
|
filter.option.octaves = オクターブ
|
||||||
filter.option.falloff = フォールオフ
|
filter.option.falloff = 減衰
|
||||||
filter.option.angle = 角度
|
filter.option.angle = 角度
|
||||||
filter.option.amount = 量
|
filter.option.amount = 量
|
||||||
|
filter.option.rotate = 回転
|
||||||
filter.option.block = ブロック
|
filter.option.block = ブロック
|
||||||
filter.option.floor = 地面
|
filter.option.floor = 地面
|
||||||
filter.option.flooronto = 対象の地面
|
filter.option.flooronto = 対象の地面
|
||||||
filter.option.target = ターゲット
|
filter.option.target = ターゲット
|
||||||
|
filter.option.replacement = 置換
|
||||||
filter.option.wall = 壁
|
filter.option.wall = 壁
|
||||||
filter.option.ore = 鉱石
|
filter.option.ore = 鉱石
|
||||||
filter.option.floor2 = 2番目の地面
|
filter.option.floor2 = 2番目の地面
|
||||||
filter.option.threshold2 = 2番目のスレッシュホールド
|
filter.option.threshold2 = 2番目の閾値
|
||||||
filter.option.radius = 半径
|
filter.option.radius = 半径
|
||||||
filter.option.percentile = パーセンタイル
|
filter.option.percentile = パーセンタイル
|
||||||
|
|
||||||
@@ -489,6 +511,7 @@ load = 読み込む
|
|||||||
save = 保存
|
save = 保存
|
||||||
fps = FPS: {0}
|
fps = FPS: {0}
|
||||||
ping = Ping: {0}ms
|
ping = Ping: {0}ms
|
||||||
|
tps = TPS: {0}
|
||||||
memory = Mem: {0}mb
|
memory = Mem: {0}mb
|
||||||
memory2 = Mem:\n {0}mb +\n {1}mb
|
memory2 = Mem:\n {0}mb +\n {1}mb
|
||||||
language.restart = ゲームを再起動後、言語設定が有効になります。
|
language.restart = ゲームを再起動後、言語設定が有効になります。
|
||||||
@@ -516,12 +539,14 @@ configure = 積み荷の設定
|
|||||||
loadout = ロードアウト
|
loadout = ロードアウト
|
||||||
resources = 資源
|
resources = 資源
|
||||||
bannedblocks = 禁止ブロック
|
bannedblocks = 禁止ブロック
|
||||||
|
bannedunits = 禁止ユニット
|
||||||
addall = すべて追加
|
addall = すべて追加
|
||||||
launch.from = [accent]{0}[] からの発射
|
launch.from = [accent]{0}[] からの発射
|
||||||
launch.destination = Destination: {0}
|
launch.destination = 目的地: {0}
|
||||||
configure.invalid = 値は 0 から {0} の間でなければなりません。
|
configure.invalid = 値は 0 から {0} の間でなければなりません。
|
||||||
add = 追加...
|
add = 追加...
|
||||||
boss.health = ボスのHP
|
boss.health = ボスのHP
|
||||||
|
guardian = ガーディアン
|
||||||
|
|
||||||
connectfail = [crimson]サーバーへ接続できませんでした:\n\n[accent]{0}
|
connectfail = [crimson]サーバーへ接続できませんでした:\n\n[accent]{0}
|
||||||
error.unreachable = サーバーに到達できません。\nアドレスは正しいですか?
|
error.unreachable = サーバーに到達できません。\nアドレスは正しいですか?
|
||||||
@@ -540,6 +565,8 @@ weather.sandstorm.name = 砂嵐
|
|||||||
weather.sporestorm.name = 胞子嵐
|
weather.sporestorm.name = 胞子嵐
|
||||||
weather.fog.name = 霧
|
weather.fog.name = 霧
|
||||||
|
|
||||||
|
sectorlist = セクター
|
||||||
|
sectorlist.attacked = {0}が攻撃を受けています
|
||||||
sectors.unexplored = [lightgray]未踏査
|
sectors.unexplored = [lightgray]未踏査
|
||||||
sectors.resources = 資源:
|
sectors.resources = 資源:
|
||||||
sectors.production = 生産:
|
sectors.production = 生産:
|
||||||
@@ -565,6 +592,7 @@ sector.attacked = セクター [accent]{0}[white] が攻撃を受けています
|
|||||||
sector.lost = セクター [accent]{0}[white] 喪失!
|
sector.lost = セクター [accent]{0}[white] 喪失!
|
||||||
#note: the missing space in the line below is intentional
|
#note: the missing space in the line below is intentional
|
||||||
sector.captured = セクター [accent]{0}[white]制圧!
|
sector.captured = セクター [accent]{0}[white]制圧!
|
||||||
|
sector.changeicon = アイコンを変更
|
||||||
|
|
||||||
threat.low = 低
|
threat.low = 低
|
||||||
threat.medium = 中
|
threat.medium = 中
|
||||||
@@ -589,27 +617,42 @@ sector.overgrowth.name = オーバーグロウス
|
|||||||
sector.tarFields.name = ター · フィールズ
|
sector.tarFields.name = ター · フィールズ
|
||||||
sector.saltFlats.name = ソルト · フラッツ
|
sector.saltFlats.name = ソルト · フラッツ
|
||||||
sector.fungalPass.name = ファングル · パス
|
sector.fungalPass.name = ファングル · パス
|
||||||
sector.biomassFacility.name = バイオマス シンテシス ファシリティ
|
sector.biomassFacility.name = バイオマス · シンテシス · ファシリティ
|
||||||
sector.windsweptIslands.name = ウインドスイープト アイランズ
|
sector.windsweptIslands.name = ウインドスイープト · アイランズ
|
||||||
sector.extractionOutpost.name = エクストラクション アウトポスト
|
sector.extractionOutpost.name = エクストラクション · アウトポスト
|
||||||
sector.planetaryTerminal.name = プラネタリー ローンチ ターミナル
|
sector.planetaryTerminal.name = プラネタリー · ローンチ · ターミナル
|
||||||
|
|
||||||
sector.groundZero.description = 奪回を始めるには最適な場所です。敵脅威が低いが、資源が少ない。\nできるだけ多くの動と鉛を集めます。\n始めましょう。
|
sector.groundZero.description = 奪回を始めるには最適な場所です。敵脅威は低いですが、資源が乏しいです。\nできるだけ多くの銅と鉛を集めます。\n始めましょう。
|
||||||
sector.frozenForest.description = ここでさえ、山に近づくほど胞子が広がっています。極寒の気温もそれらを永遠に封じ込めることはできません。\n\n電気に挑みましょう。火力発電機を建設し、修復機の使い方を学びましょう。
|
sector.frozenForest.description = ここでさえ、山に近づくほど胞子が広がっています。\n極寒の気温もそれらを永遠に封じ込めることはできませんでした。\n\n電気に挑みましょう。\n火力発電機を建設し、修復機の使い方を学びましょう。
|
||||||
sector.saltFlats.description = 砂漠のはずれにあるソルト · フラッツです。ここには資源がほとんどありません。\n\n敵はここに資源貯蔵施設を建設しました。彼らのコアを絶ち、掃滅してください。
|
sector.saltFlats.description = 砂漠のはずれにあるソルト · フラッツです。\nここには資源がほとんどありません。\n\n敵はここに資源貯蔵施設を建設しました。\n彼らのコアを絶ち、掃滅してください。
|
||||||
sector.craters.description = 過去の戦争の名残であるクレーターに水が溜まっています。エリアを取り戻し、砂を集め、メタガラスを精錬します。タレットとドリルを冷却するために水をポンプで送ります。
|
sector.craters.description = 過去の戦争の名残であるクレーターに水が溜まっています。\nエリアを取り戻し、砂を集め、メタガラスを精錬しましょう。\nタレットとドリルを冷却するためには水をポンプで送る必要があります。
|
||||||
sector.ruinousShores.description = 荒れ地を過ぎると海岸線です。ここにはかつて沿岸防衛隊が配備されていましたが、ほぼ残存していません。最も基本的な防衛施設のみが無傷のまま残っており、それ以外は全て破壊されています。\n外部拡張を続け、テクノロジーを再取得しましょう。
|
sector.ruinousShores.description = 荒れ地を過ぎると海岸線です。\nここにはかつて沿岸防衛隊が配備されていましたが、ほぼ残存していません。\n最も基本的な防衛施設のみが無傷のまま残っており、それ以外は全て破壊されています。\n外部拡張を続け、テクノロジーを再取得してください。
|
||||||
sector.stainedMountains.description = 更に内陸には、胞子に汚染されていない山があります。\nこの地域にはチタンが豊富にあります。抽出して使い方を学びましょう。\n\nより多くの敵が襲来します。最強のユニットを送る時間を与えないでください。
|
sector.stainedMountains.description = 更に内陸には、胞子に汚染されていない山があります。\nこの地域にはチタンが豊富にあります。抽出して使い方を学びましょう。\n\nここにはより多くの敵が襲来します。強力なユニットを送る時間を与えないでください。
|
||||||
sector.overgrowth.description = このエリアは、胞子の発生源に近く生い茂っています。\n敵はここに前哨基地を配備しました。タイタンユニットを生産し、破壊しましょう。失ったものを取り戻すのです。
|
sector.overgrowth.description = このエリアは、胞子の発生源に近く生い茂っています。\n敵はここに前哨基地を配備しました。タイタンユニットを生産し、破壊してください。\n失ったものを取り戻すのです。
|
||||||
sector.tarFields.description = 山と砂漠に挟まれた、石油産出地帯のはずれです。使用可能なタール埋蔵量がある数少ないエリアの1つです。\n放棄されたエリアですが、近くに脅威となる敵がいます。\n\n[lightgray]可能であれば石油抽出機を研究しましょう。
|
sector.tarFields.description = 山と砂漠に挟まれた、石油産出地帯のはずれです。\n使用可能なタール埋蔵量がある数少ないエリアの1つです。\n放棄されたエリアですが、近くに脅威となる敵がいます。\n\n[lightgray]可能であれば石油抽出機を研究しましょう。
|
||||||
sector.desolateRift.description = 非常に危険な地帯です。資源は豊富ですが、空間が狭いです。破壊されるリスクが高いため、一刻も早く立ち去りましょう。敵の攻撃間隔が長いですが、気を抜かないでください。
|
sector.desolateRift.description = 非常に危険な地帯です。資源は豊富ですが、領域が十分にありません。破壊されるリスクが高いため、一刻も早く立ち去りましょう。\n敵の攻撃間隔が長いですが、気を抜かないでください。
|
||||||
sector.nuclearComplex.description = 崩壊したトリウム製造・加工施設です。\n[lightgray]トリウムとその多くの用途を研究してください。\n\n多くの敵がここに存在し、常に攻撃を偵察しています。
|
sector.nuclearComplex.description = 崩壊したトリウム製造・加工施設です。\n[lightgray]トリウムとその多くの用途を研究してください。\n\n多くの敵がここに存在し、常に攻撃を偵察しています。
|
||||||
sector.fungalPass.description = 高山と、胞子の多い低地との間の遷移地域です。ここには敵の小さな偵察基地があります。\n破壊しましょう。\nダガーとクローラーユニットを使い、2つの敵コアの排除しましょう、
|
sector.fungalPass.description = 高山と、胞子の多い低地との間の遷移地域です。\nここには敵の小さな偵察基地があります。\n破壊してください。\nダガーとクローラーユニットを使い、2つの敵コアの排除しましょう、
|
||||||
sector.biomassFacility.description = 胞子の発生源です。これらは、胞子の研究により、最初に建設された施設です。\n内部に残された技術を研究しましょう。燃料とプラスタニウムの生産のために胞子を培養します。\n\n[lightgray]この施設が活動停止したために、胞子が放出されました。地域の生態系には、そのような侵略的生物と競合するものはありません。
|
sector.biomassFacility.description = 胞子の発生源です。\nこれらは胞子の研究のために、最初に建設された施設です。\n内部に残された技術を研究しましょう。燃料とプラスタニウムの生産のために胞子を培養します。\n\n[lightgray]この施設が活動停止したために、胞子が放出されました。地域の生態系には、そのような侵略的生物と競合するものはありません。
|
||||||
sector.windsweptIslands.description = 海岸をさらに進むと、辺鄙な列島があります。記録によると、ここにはかつて[accent]プラスタニウム[]-を生産するシステムがありました。\n\n敵の海軍ユニットを撃沈しましょう。島々に基地を建造し、これらの工場を調査しましょう。
|
sector.windsweptIslands.description = 海岸をさらに進むと、辺鄙な列島があります。記録によると、ここにはかつて[accent]プラスタニウム[]を生産するシステムがありました。\n\n敵の海軍ユニットを撃沈してください。島々に基地を建造し、これらの工場を調査しましょう。
|
||||||
sector.extractionOutpost.description = 他のセクターへ資源を輸送するために建設された敵の遠隔地の前哨基地です。\n\nさらなる征伐のためには、セクター感を通ずる輸送技術が不可欠です。基地を破壊しましょう。彼らの発射台を研究してください。
|
sector.extractionOutpost.description = 他のセクターへ資源を輸送するために建設された敵の遠隔地の前哨基地です。\n\nさらなる征伐のためには、セクター間を通ずる輸送技術が不可欠です。基地を破壊してください。彼らの発射台を研究しましょう。
|
||||||
sector.impact0078.description = ここには、最初にこの星系に入った星間輸送船の残骸があります。\n\n残骸を可能な限り回収し、完全な技術を研究しましょう。
|
sector.impact0078.description = ここには、最初にこの星系に入った星間輸送船の残骸があります。\n\n残骸を可能な限り回収し、解析可能な技術を研究しましょう。
|
||||||
sector.planetaryTerminal.description = 最終目標です。\n\nこの沿岸基地には、コアを他の惑星に打ち上げることが出来る建造物があります。極めて堅固に守られています。\n\n海軍ユニットを生産し、できるだけ速やかに敵を排除しましょう。発射建造物を研究しましょう。
|
sector.planetaryTerminal.description = 最終目標です。\n\nこの沿岸基地には、コアを他の惑星に打ち上げることが出来る建造物があります。しかし、極めて堅固に守られています。\n\n海軍ユニットを生産し、可及的速やかに敵を排除してください。\nそして、発射建造物を研究しましょう。
|
||||||
|
|
||||||
|
status.burning.name = 燃焼
|
||||||
|
status.freezing.name = 凍結
|
||||||
|
status.wet.name = 湿潤
|
||||||
|
status.muddy.name = Muddy
|
||||||
|
status.melting.name = 溶解
|
||||||
|
status.sapped.name = 吸収
|
||||||
|
status.electrified.name = 帯電
|
||||||
|
status.spore-slowed.name = 鈍化胞子
|
||||||
|
status.tarred.name = 石油塗れ
|
||||||
|
status.overclock.name = オーバークロック
|
||||||
|
status.shocked.name = 電撃
|
||||||
|
status.blasted.name = 爆破
|
||||||
|
status.unmoving.name = 移動阻止
|
||||||
|
status.boss.name = ガーディアン
|
||||||
|
|
||||||
settings.language = 言語
|
settings.language = 言語
|
||||||
settings.data = ゲームデータ
|
settings.data = ゲームデータ
|
||||||
@@ -632,6 +675,7 @@ settings.clearcampaignsaves.confirm = キャンペーンのセーブデータを
|
|||||||
paused = [accent]< ポーズ >
|
paused = [accent]< ポーズ >
|
||||||
clear = 消去
|
clear = 消去
|
||||||
banned = [scarlet]使用禁止
|
banned = [scarlet]使用禁止
|
||||||
|
unsupported.environment = [scarlet]サポートされていない環境
|
||||||
yes = はい
|
yes = はい
|
||||||
no = いいえ
|
no = いいえ
|
||||||
info.title = 情報
|
info.title = 情報
|
||||||
@@ -641,12 +685,14 @@ unit.nobuild = [scarlet]構築不可
|
|||||||
lastaccessed = [lightgray]最終アクセス {0}
|
lastaccessed = [lightgray]最終アクセス {0}
|
||||||
block.unknown = [lightgray]???
|
block.unknown = [lightgray]???
|
||||||
|
|
||||||
|
stat.showinmap = <表示のマップを読み込む>
|
||||||
stat.description = 説明
|
stat.description = 説明
|
||||||
stat.input = 搬入
|
stat.input = 搬入
|
||||||
stat.output = 搬出
|
stat.output = 搬出
|
||||||
stat.booster = ブースト
|
stat.booster = ブースト
|
||||||
stat.tiles = 必要なタイル
|
stat.tiles = 必要なタイル
|
||||||
stat.affinities = 親和性
|
stat.affinities = 親和性
|
||||||
|
stat.opposites = 排他性
|
||||||
stat.powercapacity = 電力容量
|
stat.powercapacity = 電力容量
|
||||||
stat.powershot = 電力/ショット
|
stat.powershot = 電力/ショット
|
||||||
stat.damage = ダメージ
|
stat.damage = ダメージ
|
||||||
@@ -669,6 +715,7 @@ stat.memorycapacity = メモリー容量
|
|||||||
stat.basepowergeneration = 基本発電量
|
stat.basepowergeneration = 基本発電量
|
||||||
stat.productiontime = 製造速度
|
stat.productiontime = 製造速度
|
||||||
stat.repairtime = ブロックの完全修復速度
|
stat.repairtime = ブロックの完全修復速度
|
||||||
|
stat.repairspeed = 修復速度
|
||||||
stat.weapons = 武器
|
stat.weapons = 武器
|
||||||
stat.bullet = 弾丸
|
stat.bullet = 弾丸
|
||||||
stat.speedincrease = 速度向上
|
stat.speedincrease = 速度向上
|
||||||
@@ -678,6 +725,7 @@ stat.drillspeed = 基本採掘速度
|
|||||||
stat.boosteffect = ブースト効果
|
stat.boosteffect = ブースト効果
|
||||||
stat.maxunits = 最大ユニット数
|
stat.maxunits = 最大ユニット数
|
||||||
stat.health = 耐久値
|
stat.health = 耐久値
|
||||||
|
stat.armor = アーマー
|
||||||
stat.buildtime = 建設時間
|
stat.buildtime = 建設時間
|
||||||
stat.maxconsecutive = 最大連鎖
|
stat.maxconsecutive = 最大連鎖
|
||||||
stat.buildcost = 建設費用
|
stat.buildcost = 建設費用
|
||||||
@@ -693,6 +741,7 @@ stat.lightningchance = 電撃確率
|
|||||||
stat.lightningdamage = 電撃ダメージ
|
stat.lightningdamage = 電撃ダメージ
|
||||||
stat.flammability = 可燃性
|
stat.flammability = 可燃性
|
||||||
stat.radioactivity = 放射能
|
stat.radioactivity = 放射能
|
||||||
|
stat.charge = 帯電性
|
||||||
stat.heatcapacity = 熱容量
|
stat.heatcapacity = 熱容量
|
||||||
stat.viscosity = 粘度
|
stat.viscosity = 粘度
|
||||||
stat.temperature = 温度
|
stat.temperature = 温度
|
||||||
@@ -706,13 +755,21 @@ stat.abilities = 能力
|
|||||||
stat.canboost = ブースト可能
|
stat.canboost = ブースト可能
|
||||||
stat.flying = 飛行
|
stat.flying = 飛行
|
||||||
stat.ammouse = 使用弾薬
|
stat.ammouse = 使用弾薬
|
||||||
|
stat.damagemultiplier = ダメージ倍率
|
||||||
|
stat.healthmultiplier = 体力倍率
|
||||||
|
stat.speedmultiplier = スピード倍率
|
||||||
|
stat.reloadmultiplier = リロード倍率
|
||||||
|
stat.buildspeedmultiplier = 建築速度倍率
|
||||||
|
stat.reactive = 反応
|
||||||
|
stat.healing = 治癒
|
||||||
|
|
||||||
ability.forcefield = フォースフィールド
|
ability.forcefield = フォースフィールド
|
||||||
ability.repairfield = リペアフィールド
|
ability.repairfield = リペアフィールド
|
||||||
ability.statusfield = ステータスフィールド
|
ability.statusfield = {0} ステータスフィールド
|
||||||
ability.unitspawn = {0} 生産
|
ability.unitspawn = {0} 生産
|
||||||
ability.shieldregenfield = シールドリペアフィールド
|
ability.shieldregenfield = シールドリペアフィールド
|
||||||
ability.movelightning = ムーブメントライトニング
|
ability.movelightning = ムーブメントライトニング
|
||||||
|
ability.energyfield = エネルギー範囲: [accent]{0}[] ダメージ ~ [accent]{1}[] ブロック / [accent]{2}[] ターゲット
|
||||||
|
|
||||||
bar.drilltierreq = より高性能なドリルを使用してください
|
bar.drilltierreq = より高性能なドリルを使用してください
|
||||||
bar.noresources = 不足している資源
|
bar.noresources = 不足している資源
|
||||||
@@ -720,6 +777,7 @@ bar.corereq = コアベースが必要
|
|||||||
bar.drillspeed = 採掘速度: {0}/秒
|
bar.drillspeed = 採掘速度: {0}/秒
|
||||||
bar.pumpspeed = ポンプの速度: {0}/s
|
bar.pumpspeed = ポンプの速度: {0}/s
|
||||||
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}
|
||||||
@@ -734,6 +792,7 @@ bar.power = 電力
|
|||||||
bar.progress = 建設状況
|
bar.progress = 建設状況
|
||||||
bar.input = 入力
|
bar.input = 入力
|
||||||
bar.output = 出力
|
bar.output = 出力
|
||||||
|
bar.strength = [stat]{0}[lightgray]x 強化
|
||||||
|
|
||||||
units.processorcontrol = [lightgray]プロセッサーの制御下
|
units.processorcontrol = [lightgray]プロセッサーの制御下
|
||||||
|
|
||||||
@@ -744,6 +803,7 @@ bullet.sapping = [stat]吸収弾
|
|||||||
bullet.homing = [stat]追尾弾
|
bullet.homing = [stat]追尾弾
|
||||||
bullet.shock = [stat]電撃
|
bullet.shock = [stat]電撃
|
||||||
bullet.frag = [stat]爆発弾
|
bullet.frag = [stat]爆発弾
|
||||||
|
bullet.lightning = [stat]{0}[lightgray]x ライトニング ~ [stat]{1}[lightgray] ダメージ
|
||||||
bullet.buildingdamage = [stat]{0}%[lightgray] 対物ダメージ
|
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 レーザー弾
|
||||||
@@ -757,6 +817,7 @@ bullet.reload = [stat]リロード速度 {0}[lightgray]倍
|
|||||||
unit.blocks = ブロック
|
unit.blocks = ブロック
|
||||||
unit.blockssquared = ブロック²
|
unit.blockssquared = ブロック²
|
||||||
unit.powersecond = 電力/秒
|
unit.powersecond = 電力/秒
|
||||||
|
unit.tilessecond = タイル/秒
|
||||||
unit.liquidsecond = 液体/秒
|
unit.liquidsecond = 液体/秒
|
||||||
unit.itemssecond = アイテム/秒
|
unit.itemssecond = アイテム/秒
|
||||||
unit.liquidunits = 液体
|
unit.liquidunits = 液体
|
||||||
@@ -782,17 +843,19 @@ category.items = アイテム
|
|||||||
category.crafting = 搬入/搬出
|
category.crafting = 搬入/搬出
|
||||||
category.function = 役割
|
category.function = 役割
|
||||||
category.optional = 強化オプション
|
category.optional = 強化オプション
|
||||||
|
setting.skipcoreanimation.name = コアの打ち上げ/着陸アニメーションをスキップ
|
||||||
setting.landscape.name = 横画面で固定
|
setting.landscape.name = 横画面で固定
|
||||||
setting.shadows.name = 影
|
setting.shadows.name = 影
|
||||||
setting.blockreplace.name = 自動ブロック提案
|
setting.blockreplace.name = 自動ブロック提案
|
||||||
setting.linear.name = リニアフィルター
|
setting.linear.name = リニアフィルター
|
||||||
setting.hints.name = ヒント
|
setting.hints.name = ヒント
|
||||||
setting.flow.name = 資源流通量の表示
|
setting.logichints.name = ロジックのヒント
|
||||||
setting.backgroundpause.name = バックグラウンドで一時停止中
|
setting.backgroundpause.name = バックグラウンド中は一時停止する
|
||||||
setting.buildautopause.name = オートポーズビルディング
|
setting.buildautopause.name = 常に建築一時中断状態にする
|
||||||
|
setting.doubletapmine.name = ダブルタップで採掘する
|
||||||
|
setting.modcrashdisable.name = 起動時にクラッシュした場合にModを無効にする
|
||||||
setting.animatedwater.name = 流体のアニメーション
|
setting.animatedwater.name = 流体のアニメーション
|
||||||
setting.animatedshields.name = シールドのアニメーション
|
setting.animatedshields.name = シールドのアニメーション
|
||||||
setting.antialias.name = アンチエイリアス[lightgray] (再起動が必要)[]
|
|
||||||
setting.playerindicators.name = プレイヤーの方角表示
|
setting.playerindicators.name = プレイヤーの方角表示
|
||||||
setting.indicators.name = 敵の方角表示
|
setting.indicators.name = 敵の方角表示
|
||||||
setting.autotarget.name = オートターゲット
|
setting.autotarget.name = オートターゲット
|
||||||
@@ -801,7 +864,8 @@ 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サイズ
|
||||||
|
setting.uiscale.description = 再起動が必要です。
|
||||||
setting.swapdiagonal.name = 常に斜め設置
|
setting.swapdiagonal.name = 常に斜め設置
|
||||||
setting.difficulty.training = トレーニング
|
setting.difficulty.training = トレーニング
|
||||||
setting.difficulty.easy = イージー
|
setting.difficulty.easy = イージー
|
||||||
@@ -819,7 +883,9 @@ setting.saveinterval.name = 自動保存間隔
|
|||||||
setting.seconds = {0} 秒
|
setting.seconds = {0} 秒
|
||||||
setting.milliseconds = {0} ミリ秒
|
setting.milliseconds = {0} ミリ秒
|
||||||
setting.fullscreen.name = フルスクリーン
|
setting.fullscreen.name = フルスクリーン
|
||||||
setting.borderlesswindow.name = 境界の無いウィンドウ[lightgray] (再起動が必要になる場合があります)
|
setting.borderlesswindow.name = ボーダーレスウィンドウ
|
||||||
|
setting.borderlesswindow.name.windows = ボーダーレスフルスクリーン
|
||||||
|
setting.borderlesswindow.description = 再起動が必要になる場合があります。
|
||||||
setting.fps.name = FPSを表示
|
setting.fps.name = FPSを表示
|
||||||
setting.smoothcamera.name = スムーズなカメラ
|
setting.smoothcamera.name = スムーズなカメラ
|
||||||
setting.vsync.name = 垂直同期
|
setting.vsync.name = 垂直同期
|
||||||
@@ -865,14 +931,14 @@ keybind.clear_building.name = 建築の取り消し
|
|||||||
keybind.press = キーを押してください...
|
keybind.press = キーを押してください...
|
||||||
keybind.press.axis = 軸またはキーを押してください...
|
keybind.press.axis = 軸またはキーを押してください...
|
||||||
keybind.screenshot.name = スクリーンショット
|
keybind.screenshot.name = スクリーンショット
|
||||||
keybind.toggle_power_lines.name = パワーレーザーの切り替え
|
keybind.toggle_power_lines.name = 電線の表示の切り替え
|
||||||
keybind.toggle_block_status.name = ブロックの状態表示の切り替え
|
keybind.toggle_block_status.name = ブロックの状態表示の切り替え
|
||||||
keybind.move_x.name = 左右移動
|
keybind.move_x.name = 左右移動
|
||||||
keybind.move_y.name = 上下移動
|
keybind.move_y.name = 上下移動
|
||||||
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座標で反転
|
||||||
keybind.schematic_flip_y.name = 設計図をY座標で反転
|
keybind.schematic_flip_y.name = 設計図をY座標で反転
|
||||||
@@ -905,10 +971,11 @@ keybind.shoot.name = ショット
|
|||||||
keybind.zoom.name = ズーム
|
keybind.zoom.name = ズーム
|
||||||
keybind.menu.name = メニュー
|
keybind.menu.name = メニュー
|
||||||
keybind.pause.name = ポーズ
|
keybind.pause.name = ポーズ
|
||||||
keybind.pause_building.name = 建築のポーズ/レジューム
|
keybind.pause_building.name = 建築の一時中断/再開
|
||||||
keybind.minimap.name = ミニマップ
|
keybind.minimap.name = ミニマップ
|
||||||
keybind.planet_map.name = 惑星地図
|
keybind.planet_map.name = 惑星地図
|
||||||
keybind.research.name = 研究
|
keybind.research.name = 研究
|
||||||
|
keybind.block_info.name = ブロック情報
|
||||||
keybind.chat.name = チャット
|
keybind.chat.name = チャット
|
||||||
keybind.player_list.name = プレイヤーリスト
|
keybind.player_list.name = プレイヤーリスト
|
||||||
keybind.console.name = コンソール
|
keybind.console.name = コンソール
|
||||||
@@ -935,17 +1002,24 @@ mode.custom = カスタムルール
|
|||||||
|
|
||||||
rules.infiniteresources = 資源の無限化
|
rules.infiniteresources = 資源の無限化
|
||||||
rules.reactorexplosions = リアクターの爆発
|
rules.reactorexplosions = リアクターの爆発
|
||||||
|
rules.coreincinerates = 余剰アイテムの焼却
|
||||||
rules.schematic = 設計図を許可
|
rules.schematic = 設計図を許可
|
||||||
rules.wavetimer = ウェーブの自動進行
|
rules.wavetimer = ウェーブの自動進行
|
||||||
rules.waves = ウェーブ
|
rules.waves = ウェーブ
|
||||||
rules.attack = アタックモード
|
rules.attack = アタックモード
|
||||||
rules.buildai = AI 建築
|
rules.buildai = AI 建築
|
||||||
|
rules.aitier = AI 階級
|
||||||
|
rules.cleanupdeadteams = 敗北したチームの建設物を片付ける (PvP)
|
||||||
|
rules.corecapture = 破壊時にコアを奪取
|
||||||
|
rules.polygoncoreprotection = 多角形の建設禁止区域の設定
|
||||||
rules.enemyCheat = 敵(赤チーム)の資源の無限化
|
rules.enemyCheat = 敵(赤チーム)の資源の無限化
|
||||||
rules.blockhealthmultiplier = ブロックの体力倍率
|
rules.blockhealthmultiplier = ブロックの体力倍率
|
||||||
rules.blockdamagemultiplier = ブロックのダメージ倍率
|
rules.blockdamagemultiplier = ブロックのダメージ倍率
|
||||||
rules.unitbuildspeedmultiplier = ユニットの製造速度倍率
|
rules.unitbuildspeedmultiplier = ユニットの製造速度倍率
|
||||||
rules.unithealthmultiplier = ユニットの体力倍率
|
rules.unithealthmultiplier = ユニットの体力倍率
|
||||||
rules.unitdamagemultiplier = ユニットのダメージ倍率
|
rules.unitdamagemultiplier = ユニットのダメージ倍率
|
||||||
|
rules.unitcapvariable = コア数によってユニット上限を変動
|
||||||
|
rules.unitcap = ベースのユニット上限数
|
||||||
rules.enemycorebuildradius = 敵コア周辺の建設禁止区域の半径:[lightgray] (タイル)
|
rules.enemycorebuildradius = 敵コア周辺の建設禁止区域の半径:[lightgray] (タイル)
|
||||||
rules.wavespacing = ウェーブ間の待機時間:[lightgray] (秒)
|
rules.wavespacing = ウェーブ間の待機時間:[lightgray] (秒)
|
||||||
rules.buildcostmultiplier = 建設コストの倍率
|
rules.buildcostmultiplier = 建設コストの倍率
|
||||||
@@ -954,26 +1028,30 @@ rules.deconstructrefundmultiplier = ブロック破壊時の還元倍率
|
|||||||
rules.waitForWaveToEnd = 敵が倒されるまでウェーブの進行を中断
|
rules.waitForWaveToEnd = 敵が倒されるまでウェーブの進行を中断
|
||||||
rules.dropzoneradius = 出現範囲の半径:[lightgray] (タイル)
|
rules.dropzoneradius = 出現範囲の半径:[lightgray] (タイル)
|
||||||
rules.unitammo = ユニットは弾丸が必要
|
rules.unitammo = ユニットは弾丸が必要
|
||||||
|
rules.enemyteam = 敵チーム
|
||||||
|
rules.playerteam = プレイヤーチーム
|
||||||
rules.title.waves = ウェーブ
|
rules.title.waves = ウェーブ
|
||||||
rules.title.resourcesbuilding = 資源 & 建設
|
rules.title.resourcesbuilding = 資源 & 建設
|
||||||
rules.title.enemy = 敵
|
rules.title.enemy = 敵
|
||||||
rules.title.unit = ユニット
|
rules.title.unit = ユニット
|
||||||
rules.title.experimental = 実験的なゲームプレイ
|
rules.title.experimental = 実験的なゲームプレイ
|
||||||
rules.title.environment = 環境
|
rules.title.environment = 環境
|
||||||
|
rules.title.teams = チーム
|
||||||
rules.lighting = 霧
|
rules.lighting = 霧
|
||||||
rules.enemyLights = Enemy Lights
|
rules.enemyLights = 敵を発光させる
|
||||||
rules.fire = Fire
|
rules.fire = 火災
|
||||||
rules.explosions = 爆発ダメージ
|
rules.explosions = 爆発ダメージ
|
||||||
rules.ambientlight = 霧の色
|
rules.ambientlight = 霧の色
|
||||||
rules.weather = 気象
|
rules.weather = 気象
|
||||||
rules.weather.frequency = 頻度:
|
rules.weather.frequency = 頻度:
|
||||||
rules.weather.always = Always
|
rules.weather.always = 常時
|
||||||
rules.weather.duration = 継続時間:
|
rules.weather.duration = 継続時間:
|
||||||
|
|
||||||
content.item.name = アイテム
|
content.item.name = アイテム
|
||||||
content.liquid.name = 液体
|
content.liquid.name = 液体
|
||||||
content.unit.name = ユニット
|
content.unit.name = ユニット
|
||||||
content.block.name = ブロック
|
content.block.name = ブロック
|
||||||
|
content.status.name = ステータス効果
|
||||||
content.sector.name = セクター
|
content.sector.name = セクター
|
||||||
|
|
||||||
item.copper.name = 銅
|
item.copper.name = 銅
|
||||||
@@ -992,6 +1070,7 @@ 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 = 石油
|
||||||
@@ -1023,6 +1102,11 @@ unit.minke.name = ミンク
|
|||||||
unit.bryde.name = ブライド
|
unit.bryde.name = ブライド
|
||||||
unit.sei.name = セイ
|
unit.sei.name = セイ
|
||||||
unit.omura.name = オムラ
|
unit.omura.name = オムラ
|
||||||
|
unit.retusa.name = レトゥーザ
|
||||||
|
unit.oxynoe.name = オキシノ
|
||||||
|
unit.cyerce.name = サイラス
|
||||||
|
unit.aegires.name = エイガース
|
||||||
|
unit.navanax.name = ナバナックス
|
||||||
unit.alpha.name = アルファ
|
unit.alpha.name = アルファ
|
||||||
unit.beta.name = ベータ
|
unit.beta.name = ベータ
|
||||||
unit.gamma.name = ガンマ
|
unit.gamma.name = ガンマ
|
||||||
@@ -1031,7 +1115,6 @@ unit.reign.name = レイン
|
|||||||
unit.vela.name = ヴェラ
|
unit.vela.name = ヴェラ
|
||||||
unit.corvus.name = コーバス
|
unit.corvus.name = コーバス
|
||||||
|
|
||||||
block.resupply-point.name = 補給ポイント
|
|
||||||
block.parallax.name = パララックス
|
block.parallax.name = パララックス
|
||||||
block.cliff.name = 崖
|
block.cliff.name = 崖
|
||||||
block.sand-boulder.name = 巨大な礫
|
block.sand-boulder.name = 巨大な礫
|
||||||
@@ -1083,6 +1166,7 @@ block.sand-water.name = 濁った水
|
|||||||
block.darksand-water.name = 黒い砂で濁った水
|
block.darksand-water.name = 黒い砂で濁った水
|
||||||
block.char.name = 焦げ跡
|
block.char.name = 焦げ跡
|
||||||
block.dacite.name = デイサイト
|
block.dacite.name = デイサイト
|
||||||
|
block.rhyolite.name = 流紋岩
|
||||||
block.dacite-wall.name = デイサイトの壁
|
block.dacite-wall.name = デイサイトの壁
|
||||||
block.dacite-boulder.name = デイサイトの礫
|
block.dacite-boulder.name = デイサイトの礫
|
||||||
block.ice-snow.name = 雪氷
|
block.ice-snow.name = 雪氷
|
||||||
@@ -1094,12 +1178,13 @@ block.pine.name = 松の木
|
|||||||
block.dirt.name = 泥
|
block.dirt.name = 泥
|
||||||
block.dirt-wall.name = 泥の壁
|
block.dirt-wall.name = 泥の壁
|
||||||
block.mud.name = 汚泥
|
block.mud.name = 汚泥
|
||||||
block.white-tree-dead.name = 白い枯れた樹木
|
block.white-tree-dead.name = 枯れた白い樹木
|
||||||
block.white-tree.name = 白い樹木
|
block.white-tree.name = 白い樹木
|
||||||
block.spore-cluster.name = 胞子の房
|
block.spore-cluster.name = 胞子の房
|
||||||
block.metal-floor.name = 金属製の地面 1
|
block.metal-floor.name = 金属製の地面 1
|
||||||
block.metal-floor-2.name = 金属製の地面 2
|
block.metal-floor-2.name = 金属製の地面 2
|
||||||
block.metal-floor-3.name = 金属製の地面 3
|
block.metal-floor-3.name = 金属製の地面 3
|
||||||
|
block.metal-floor-4.name = 金属製の地面 4
|
||||||
block.metal-floor-5.name = 金属製の地面 5
|
block.metal-floor-5.name = 金属製の地面 5
|
||||||
block.metal-floor-damaged.name = 破壊された金属製の地面
|
block.metal-floor-damaged.name = 破壊された金属製の地面
|
||||||
block.dark-panel-1.name = ダークパネル 1
|
block.dark-panel-1.name = ダークパネル 1
|
||||||
@@ -1190,6 +1275,7 @@ block.solar-panel.name = ソーラーパネル
|
|||||||
block.solar-panel-large.name = 大型ソーラーパネル
|
block.solar-panel-large.name = 大型ソーラーパネル
|
||||||
block.oil-extractor.name = 石油抽出機
|
block.oil-extractor.name = 石油抽出機
|
||||||
block.repair-point.name = 修復ポイント
|
block.repair-point.name = 修復ポイント
|
||||||
|
block.repair-turret.name = 修復ターレット
|
||||||
block.pulse-conduit.name = パルスパイプ
|
block.pulse-conduit.name = パルスパイプ
|
||||||
block.plated-conduit.name = メッキパイプ
|
block.plated-conduit.name = メッキパイプ
|
||||||
block.phase-conduit.name = フェーズパイプ
|
block.phase-conduit.name = フェーズパイプ
|
||||||
@@ -1220,7 +1306,6 @@ block.meltdown.name = メルトダウン
|
|||||||
block.foreshadow.name = フォーシャドウ
|
block.foreshadow.name = フォーシャドウ
|
||||||
block.container.name = コンテナー
|
block.container.name = コンテナー
|
||||||
block.launch-pad.name = 発射台
|
block.launch-pad.name = 発射台
|
||||||
block.launch-pad-large.name = 大型発射台
|
|
||||||
block.segment.name = セグメント
|
block.segment.name = セグメント
|
||||||
block.command-center.name = 司令塔
|
block.command-center.name = 司令塔
|
||||||
block.ground-factory.name = 陸軍工場
|
block.ground-factory.name = 陸軍工場
|
||||||
@@ -1232,14 +1317,20 @@ block.exponential-reconstructor.name = 指数式再構成工場
|
|||||||
block.tetrative-reconstructor.name = 超冪式再構成工場
|
block.tetrative-reconstructor.name = 超冪式再構成工場
|
||||||
block.payload-conveyor.name = マスコンベアー
|
block.payload-conveyor.name = マスコンベアー
|
||||||
block.payload-router.name = ペイロードルーター
|
block.payload-router.name = ペイロードルーター
|
||||||
|
block.duct.name = ダクト
|
||||||
|
block.duct-router.name = ダクトルーター
|
||||||
|
block.duct-bridge.name = ダクトブリッジ
|
||||||
|
block.payload-propulsion-tower.name = ペイロード推進タワー
|
||||||
|
block.payload-void.name = ペイロードボイド
|
||||||
|
block.payload-source.name = ペイロードソース
|
||||||
block.disassembler.name = ディスアセンブラー
|
block.disassembler.name = ディスアセンブラー
|
||||||
block.silicon-crucible.name = シリコンクルーシブル
|
block.silicon-crucible.name = シリコンクルーシブル
|
||||||
block.overdrive-dome.name = 加速ドーム
|
block.overdrive-dome.name = 加速ドーム
|
||||||
|
block.interplanetary-accelerator.name = 惑星間加速器
|
||||||
#experimental, may be removed
|
#experimental, may be removed
|
||||||
block.block-forge.name = ブロックフォージ
|
block.block-forge.name = ブロックフォージ
|
||||||
block.block-loader.name = ブロック積載機
|
block.block-loader.name = ブロック積載機
|
||||||
block.block-unloader.name = ブロック搬出機
|
block.block-unloader.name = ブロック搬出機
|
||||||
block.interplanetary-accelerator.name = 惑星間加速器
|
|
||||||
|
|
||||||
block.switch.name = スイッチ
|
block.switch.name = スイッチ
|
||||||
block.micro-processor.name = マイクロプロセッサー
|
block.micro-processor.name = マイクロプロセッサー
|
||||||
@@ -1259,73 +1350,75 @@ team.green.name = グリーン
|
|||||||
team.purple.name = パープル
|
team.purple.name = パープル
|
||||||
|
|
||||||
hint.skip = スキップ
|
hint.skip = スキップ
|
||||||
hint.desktopMove = [accent][[WASD][] を使い移動します。
|
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][[スペース][] を押して、ゲームを一時停止と一時停止の解除ができます。
|
hint.desktopPause = [accent][[スペース][]を押して、ゲームを一時停止と一時停止の解除ができます。
|
||||||
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指を1秒間押したままドラッグすると、複数のコンベアーを配置します。
|
hint.placeConveyor.mobile = コンベアーを使い、アイテムをドリルから他のブロックへ移動します。\ue814 [accent]運搬[]タブから、\uf896 [accent]コンベアー[]を選択します。\n\n指を1秒間押したままドラッグすると、複数のコンベアーを配置します。
|
||||||
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指を1秒間押したままドラッグすると、範囲選択が出来ます。
|
hint.breaking.mobile = 右下にある\ue817 [accent]ハンマー[]をアクティブにして、タップしてブロックを壊します。\n\n指を1秒間押したままドラッグすると、範囲選択が出来ます。
|
||||||
hint.research = \ue875 [accent]研究[] ボタンを押して、新しいテクノロジーを研究します。
|
hint.blockInfo = [accent]建築メニュー[]でブロックを選択し、右側の[accent][[?][]ボタンを押すと、ブロックの情報が表示されます。
|
||||||
hint.research.mobile = \ue88c [accent]メニュー[] の \ue875 [accent]研究[] ボタンを押して、新しいテクノロジーを研究します。
|
hint.derelict = [accent]放棄[]され、すでに機能を失った古い基地建造物の残骸です。\n\nこれらは[accent]解体[]することにより、資源になります。
|
||||||
hint.unitControl = [accent][[左ctrl][] を押しながら [accent]クリック[] するとターレットや味方ユニットを操作できます。
|
hint.research = \ue875 [accent]研究[]ボタンを押して、新しいテクノロジーを研究します。
|
||||||
hint.unitControl.mobile = [accent][ダブルタップ[] すると味方ユニットやターレットを操作できます。
|
hint.research.mobile = \ue88c [accent]メニュー[]の\ue875 [accent]研究[]ボタンを押して、新しいテクノロジーを研究します。
|
||||||
hint.launch = 十分な資源を確保できたら、右下の \ue827 [accent]マップ[] から、近くのセクターを選択して [accent]発射[] できます。
|
hint.unitControl = [accent][[左ctrl][]を押しながら[accent]クリック[]するとターレットや味方ユニットを操作できます。
|
||||||
hint.launch.mobile = 十分な資源を確保できたら、 \ue88c [accent]メニュー[] の \ue827 [accent]マップ[] から、近くのセクターを選択して [accent]発射[] できます。
|
hint.unitControl.mobile = [accent][ダブルタップ[]すると味方ユニットやターレットを操作できます。
|
||||||
hint.schematicSelect = [accent][[F][] を押しながらドラッグして、コピー&ペーストするブロックを選択します。\n\n[accent][[ミドルクリック][] により、1つのブロックタイプをコピーします。
|
hint.launch = 十分な資源を確保できたら、右下の\ue827 [accent]マップ[]から、近くのセクターを選択して[accent]発射[]できます。
|
||||||
hint.conveyorPathfind = [accent][[左-Ctrl][] を押しながらコンベアーをドラッグすると、経路が自動生成されます。
|
hint.launch.mobile = 十分な資源を確保できたら、\ue88c [accent]メニュー[]の\ue827 [accent]マップ[]から、近くのセクターを選択して[accent]発射[]できます。
|
||||||
hint.conveyorPathfind.mobile = \ue844 [accent]対角線モード[] を有効にし、コンベアーをドラッグすると経路が自動生成します。
|
hint.schematicSelect = [accent][[F][]を押しながらドラッグして、コピー&ペーストするブロックを選択します。\n\n[accent][[ミドルクリック][]により、1つのブロックタイプをコピーします。
|
||||||
hint.boost = [accent][[左シフト][] を押したままにすると、操作中のユニットは障害物を飛び越えます。\n\n少数の地上ユニットのみがこのブースターを搭載しています。
|
hint.conveyorPathfind = [accent][[左-Ctrl][]を押しながらコンベアーをドラッグすると、経路が自動生成されます。
|
||||||
hint.command = [accent][[G][] を押して、近くの [accent]同様のタイプ[] のユニットと編隊を組みます。\n\n地上ユニットを指揮するには、まず別個の地上ユニットをコントロールする必要があります。
|
hint.conveyorPathfind.mobile = \ue844 [accent]対角線モード[]を有効にし、コンベアーをドラッグすると経路が自動生成します。
|
||||||
hint.command.mobile = [accent][[ダブルタップ][] すると、操作中のユニットは近くのユニットと編隊を組みます。
|
hint.boost = [accent][[左シフト][]を押したままにすると、操作中のユニットは障害物を飛び越えます。\n\n少数の地上ユニットのみがこのブースターを搭載しています。
|
||||||
hint.payloadPickup = [accent][[[] を押して、小さなブロックまたはユニットを格納します。
|
hint.command = [accent][[G][]を押して、近くの [accent]同様のタイプ[]のユニットと編隊を組みます。\n\n地上ユニットを指揮するには、まず別個の地上ユニットをコントロールする必要があります。
|
||||||
hint.payloadPickup.mobile = [accent]タップ&ホールド[] により、小さなブロックまたはユニットを格納します。
|
hint.command.mobile = [accent][[ダブルタップ][]すると、操作中のユニットは近くのユニットと編隊を組みます。
|
||||||
hint.payloadDrop = [accent]][] を押すと、積載物を降ろします。
|
hint.payloadPickup = [accent][[[]を押して、小さなブロックまたはユニットを格納します。
|
||||||
hint.payloadDrop.mobile = 空いている場所を [accent]タップ&ホールド[] して、積載物を降ろします。
|
hint.payloadPickup.mobile = [accent]タップ&ホールド[]により、小さなブロックまたはユニットを格納します。
|
||||||
hint.waveFire = [accent]ウェーブ[] ターレットは水を搬入すると、近くの火を自動的に消火します。
|
hint.payloadDrop = [accent]][]を押すと、積載物を降ろします。
|
||||||
hint.generator = \uf879 [accent]火力発電機[] 石炭を燃やし、隣接するブロックに電力を供給します。\n\n電力供給範囲は \uf87f [accent]電源ノード[]で拡張できます。
|
hint.payloadDrop.mobile = 空いている場所を[accent]タップ&ホールド[]して、積載物を降ろします。
|
||||||
hint.guardian = [accent]ガーディアン[] ユニットは装甲を搭載しています。[accent]銅[] や [accent]鉛[] などの弱い弾薬は [scarlet]効果がありません[]。\n\n強力なターレット、または \uf861デュオ/\uf859サルボー の弾薬に \uf835 [accent]黒鉛[]を使用してガーディアンを撃破してください。
|
hint.waveFire = [accent]ウェーブ[]ターレットは水を搬入すると、近くの火を自動的に消火します。
|
||||||
hint.coreUpgrade = コアは [accent]上位のコアを配置することでアップグレードできます[]。\n\n [accent]シャード[] コアの上に、 [accent]ファンデーション[] コアを置きます。近くに障害物がないことを確認してください。
|
hint.generator = \uf879 [accent]火力発電機[]石炭を燃やし、隣接するブロックに電力を供給します。\n\n電力供給範囲は\uf87f [accent]電源ノード[]で拡張できます。
|
||||||
hint.presetLaunch = [accent]フローズン · フォレスト[] などの灰色の [accent]着陸ゾーンセクター[] には、どこからでも発射できます。近くの領土を確保する必要はありません。\n\nこのような [accent]数字のセクター[] は、 [accent]違います[]。
|
hint.guardian = [accent]ガーディアン[]ユニットは装甲を搭載しています。[accent]銅[]や[accent]鉛[]などの弱い弾薬は[scarlet]効果がありません[]。\n\n強力なターレット、または\uf861デュオ/\uf859サルボーの弾薬に\uf835 [accent]黒鉛[]を使用してガーディアンを撃破してください。
|
||||||
hint.coreIncinerate = コアのアイテム収納数の上限に達したアイテムは搬入されず [accent]破棄[]されます。
|
hint.coreUpgrade = コアは [accent]上位のコアを配置することでアップグレードできます[]。\n\n [accent]シャード[]コアの上に、 [accent]ファンデーション[]コアを置きます。近くに障害物がないことを確認してください。
|
||||||
hint.coopCampaign = [accent]co-op キャンペーン[]をプレイすると、現在のマップで生産されたアイテムは [accent]あなたのセクター[] に移送されます。\n\nホストが行った新しい研究も引き継がれます。
|
hint.presetLaunch = [accent]フローズン · フォレスト[]などの灰色の[accent]着陸ゾーンセクター[]には、どこからでも発射できるため近くの領土を確保する必要はありません。\n\nしかし、このような[accent]数字のセクター[]では[accent]この限りではありません[]。
|
||||||
|
hint.coreIncinerate = コアのアイテム収納数の上限に達したアイテムは搬入されず[accent]破棄[]されます。
|
||||||
|
hint.coopCampaign = [accent]co-op キャンペーン[]をプレイすると、現在のマップで生産されたアイテムは[accent]あなたのセクター[]に移送されます。\n\nホストが行った新しい研究も引き継がれます。
|
||||||
|
|
||||||
item.copper.description = 便利な鉱石です。様々なブロックの材料として幅広く使われています。
|
item.copper.description = 便利な鉱石です。\n多様なブロックの材料として幅広く使われています。
|
||||||
item.copper.details = セルプロに豊富な金属。補強しない限り構造的に弱い。
|
item.copper.details = セルプロに豊富な金属です。\n補強しない限り構造的に弱いです。
|
||||||
item.lead.description = 一般的で手軽な鉱石です。機械や液体輸送ブロックなどに使われます。
|
item.lead.description = 一般的で手軽な鉱石です。\n機械や液体輸送ブロックなどに使われます。
|
||||||
item.lead.details = 高密度。不活性。バッテリーによく利用される。\nノート: 生物学的に生命に有毒である可能性があります。このあたりには生命が多く残っていません。
|
item.lead.details = 高密度で不活性です。バッテリーによく利用されます。\nノート: 生物学的に有毒である可能性があります。このあたりには生命があまり見られません。
|
||||||
item.metaglass.description = とても頑丈な強化ガラスです。液体の輸送やタンクとして幅広く使われています。
|
item.metaglass.description = とても頑丈な強化ガラスです。\n液体の輸送やタンク、工場などに幅広く使われています。
|
||||||
item.graphite.description = 弾薬や絶縁体として利用されています。
|
item.graphite.description = 弾薬や絶縁体として利用されています。
|
||||||
item.sand.description = 合金や融剤など広く使用されている一般的な材料です。
|
item.sand.description = 合金や融剤など広く使用されている一般的な材料です。
|
||||||
item.coal.description = 一般的で有用な燃料です。
|
item.coal.description = 一般的で有用な燃料です。
|
||||||
item.coal.details = 化石化して植物のようで、利用方法が確立されるはるか前に形成されました。
|
item.coal.details = 化石化した植物のようで\n利用方法が確立されるはるか前に形成されました。
|
||||||
item.titanium.description = 希少で非常に軽量な金属です。液体輸送やドリル、航空機などで使われます。
|
item.titanium.description = 希少で非常に軽量な金属です。\n液体輸送やドリル、航空機などで使われます。
|
||||||
item.thorium.description = 放射性を持つ高密度な金属です。建造物の支えや核燃料として使われます。
|
item.thorium.description = 放射性を持つ高密度な金属です。\n建造物の支えや核燃料として使われます。
|
||||||
item.scrap.description = 昔の建造物やユニットの残骸です。様々な種類の金属が微量に含まれています。
|
item.scrap.description = 昔の建造物やユニットの残骸です。\n多種多様の金属が微量に含まれています。
|
||||||
item.scrap.details = 古い建造物やユニットの残骸です。
|
item.scrap.details = 古い建造物やユニットの残骸です。
|
||||||
item.silicon.description = 非常に有用な半導体でソーラーパネルや多くの複雑な機械に応用できます。
|
item.silicon.description = 非常に有用な半導体でソーラーパネルや多くの複雑な機械に応用できます。
|
||||||
item.plastanium.description = 軽量で伸縮性のある材料です。高度な航空機や分散型の弾薬として使用されます。
|
item.plastanium.description = 軽量で伸縮性のある材料です。\n高度な航空機や分散型の弾薬として使用されます。
|
||||||
item.phase-fabric.description = 極めて軽量な素材です。高度な機械や自己修復技術に使用されます。
|
item.phase-fabric.description = 極めて軽量な素材です。\n高度な機械や自己修復技術に使用されます。
|
||||||
item.surge-alloy.description = 電気的特性を持った高度な合金です。
|
item.surge-alloy.description = 電気的特性を持った高度な合金です。
|
||||||
item.spore-pod.description = 石油や爆薬、燃料への転換として使用されます。
|
item.spore-pod.description = 石油や爆薬、燃料への転換として使用されます。
|
||||||
item.spore-pod.details = 合成生命体と思われる胞子です。他の生物に有毒なガスを放出し、非常に侵略的です。特定の条件下で非常に高い可燃性を持ちます。
|
item.spore-pod.details = 人工生命体と思われる胞子です。\n他の生物に有毒なガスを放出し、非常に侵略的です。特定の条件下で非常に高い可燃性を持ちます。
|
||||||
item.blast-compound.description = 爆弾や爆発物に使われる不安定な化合物です。胞子と揮発性物質から合成されます。燃料として燃やすこともできますが、お勧めしません。
|
item.blast-compound.description = 爆弾や爆発物に使われる不安定な化合物です。\n胞子と揮発性物質から合成されます。燃料として燃やすこともできますが、お勧めしません。
|
||||||
item.pyratite.description = 焼夷兵器などに使われる非常に燃えやすい物質です。
|
item.pyratite.description = 焼夷兵器などに使われる非常に燃えやすい物質です。
|
||||||
|
|
||||||
liquid.water.description = 機械の冷却や廃棄物の処理など幅広く使われている液体です。
|
liquid.water.description = 機械の冷却や廃棄物の処理など幅広く使われている液体です。
|
||||||
liquid.slag.description = 様々な種類の鉱石が混ざり合っています。それぞれの鉱石に分類するか、噴射する武器として使用されます。
|
liquid.slag.description = 多種多様の鉱石が混ざり合っています。それぞれの鉱石に分類するか、噴射する武器として使用されます。
|
||||||
liquid.oil.description = 高度な材料生産で使用される液体です。 燃料として石炭に変換したり、武器として噴霧して発火させることができます。
|
liquid.oil.description = 高度な材料生産で使用される液体です。 燃料として石炭に変換したり、武器として噴霧して発火させることができます。
|
||||||
liquid.cryofluid.description = 水とチタニウムから作られる不活性で非腐食性の液体です。 非常に高い熱容量を持っているため、冷却に使用されます。
|
liquid.cryofluid.description = 水とチタニウムから作られる不活性で非腐食性の液体です。 非常に高い熱容量を持っているため、冷却に使用されます。
|
||||||
|
|
||||||
block.resupply-point.description = 近くのユニットに銅の弾薬を補給します。エネルギーを必要とするユニットとは互換性がありません。
|
block.derelict = [lightgray]放棄
|
||||||
block.armored-conveyor.description = チタンコンベアーと同じ速度でアイテムを輸送することができ、耐久性に優れています。\nまた、コンベアー以外による側面への入力を受け入れません。
|
block.armored-conveyor.description = チタンコンベアーと同じ速度でアイテムを輸送することができ、耐久性に優れています。\nまた、コンベアー以外による側面への入力を受け入れません。
|
||||||
block.illuminator.description = 電力が必要な光源です。
|
block.illuminator.description = 電力が必要な光源です。
|
||||||
block.message.description = メッセージを保存し、仲間間の通信に使用します。
|
block.message.description = メッセージを保存し、仲間間の通信に使用します。
|
||||||
@@ -1339,8 +1432,8 @@ block.alloy-smelter.description = チタンや鉛、シリコン、銅からサ
|
|||||||
block.cryofluid-mixer.description = 水とチタンから冷却に効率的な冷却水を製造します。
|
block.cryofluid-mixer.description = 水とチタンから冷却に効率的な冷却水を製造します。
|
||||||
block.blast-mixer.description = 可燃性のピラタイトを石油を使用してさらに爆発性化合物にします。
|
block.blast-mixer.description = 可燃性のピラタイトを石油を使用してさらに爆発性化合物にします。
|
||||||
block.pyratite-mixer.description = 石炭、鉛、砂から燃えやすいピラタイトを製造します。
|
block.pyratite-mixer.description = 石炭、鉛、砂から燃えやすいピラタイトを製造します。
|
||||||
block.melter.description = 石を熱で溶かして溶岩を生成します。
|
block.melter.description = 石を熱で溶かしてスラグを生成します。
|
||||||
block.separator.description = 石を水圧で砕き、石に含まれる様々な鉱石を回収します。
|
block.separator.description = スラグを分離して、多様な鉱石を回収します。
|
||||||
block.spore-press.description = 胞子ポッドを石油に圧縮します。
|
block.spore-press.description = 胞子ポッドを石油に圧縮します。
|
||||||
block.pulverizer.description = 石を砕いて砂にします。自然の砂がない場合に有用です。
|
block.pulverizer.description = 石を砕いて砂にします。自然の砂がない場合に有用です。
|
||||||
block.coal-centrifuge.description = 石油を石炭へ加工します。
|
block.coal-centrifuge.description = 石油を石炭へ加工します。
|
||||||
@@ -1351,14 +1444,16 @@ block.item-source.description = アイテムを無限に搬出します。サン
|
|||||||
block.item-void.description = 電力を必要とせずにアイテムを廃棄します。サンドボックスモードのみ使用できます。
|
block.item-void.description = 電力を必要とせずにアイテムを廃棄します。サンドボックスモードのみ使用できます。
|
||||||
block.liquid-source.description = 液体を無限に搬出します。サンドボックスモードのみ使用できます。
|
block.liquid-source.description = 液体を無限に搬出します。サンドボックスモードのみ使用できます。
|
||||||
block.liquid-void.description = 液体を破棄できます。サンドボックスモードのみ使用できます。
|
block.liquid-void.description = 液体を破棄できます。サンドボックスモードのみ使用できます。
|
||||||
|
block.payload-source.description = ペイロードを無限に搬出します。サンドボックスモードのみ使用できます。
|
||||||
|
block.payload-void.description = ペイロードを破棄できます。サンドボックスモードのみ使用できます。
|
||||||
block.copper-wall.description = 安価な防壁ブロックです。\n最初のウェーブでコアやターレットを保護するのに有用です。
|
block.copper-wall.description = 安価な防壁ブロックです。\n最初のウェーブでコアやターレットを保護するのに有用です。
|
||||||
block.copper-wall-large.description = 安価な大型防壁ブロックです。\n最初のウェーブでコアやターレットを保護するのに有用です。
|
block.copper-wall-large.description = 安価な大型防壁ブロックです。\n最初のウェーブでコアやターレットを保護するのに有用です。
|
||||||
block.titanium-wall.description = 適度に強力な防壁ブロックです。\n中程度の攻撃から保護します。
|
block.titanium-wall.description = 適度に強力な防壁ブロックです。\n中程度の攻撃から保護します。
|
||||||
block.titanium-wall-large.description = 適度に強力な大型防壁ブロックです。\n中程度の攻撃から保護します。
|
block.titanium-wall-large.description = 適度に強力な大型防壁ブロックです。\n中程度の攻撃から保護します。
|
||||||
block.plastanium-wall.description = 電気アークを吸収し、電源ノードの自動接続をブロックする特別な壁です。
|
block.plastanium-wall.description = 電気アークを吸収し、電源ノードの自動接続をブロックする特別な壁です。
|
||||||
block.plastanium-wall-large.description = 電気アークを吸収し、電源ノードの自動接続をブロックする特別で大型な壁です。
|
block.plastanium-wall-large.description = 電気アークを吸収し、電源ノードの自動接続をブロックする特別で大型な壁です。
|
||||||
block.thorium-wall.description = 強化された防壁ブロックです。\n敵からの保護により強固です。
|
block.thorium-wall.description = より強固に強化された防壁ブロックです。
|
||||||
block.thorium-wall-large.description = 強化された大型防壁ブロックです。\n敵からの保護により強固です。
|
block.thorium-wall-large.description = より強固に強化された大型防壁ブロックです。
|
||||||
block.phase-wall.description = トリウムの壁ほど強固ではないが、強力な弾でなければ弾き返すことができます。
|
block.phase-wall.description = トリウムの壁ほど強固ではないが、強力な弾でなければ弾き返すことができます。
|
||||||
block.phase-wall-large.description = トリウムの壁ほど強固ではないが、強力な弾でなければ弾き返すことができます。
|
block.phase-wall-large.description = トリウムの壁ほど強固ではないが、強力な弾でなければ弾き返すことができます。
|
||||||
block.surge-wall.description = 最も硬い防壁ブロックです。\nたまに攻撃されると敵に電撃を与えます。
|
block.surge-wall.description = 最も硬い防壁ブロックです。\nたまに攻撃されると敵に電撃を与えます。
|
||||||
@@ -1376,21 +1471,21 @@ block.plastanium-conveyor.description = アイテムをまとめて輸送する
|
|||||||
block.junction.description = 十字に交差したコンベアーをそれぞれ前方に搬出します。コンベアーで複雑な構造を組み立てるときに便利です。
|
block.junction.description = 十字に交差したコンベアーをそれぞれ前方に搬出します。コンベアーで複雑な構造を組み立てるときに便利です。
|
||||||
block.bridge-conveyor.description = 高度な輸送ブロックです。地形や建物を超えて、3ブロック離れた場所にアイテムを輸送することができます。
|
block.bridge-conveyor.description = 高度な輸送ブロックです。地形や建物を超えて、3ブロック離れた場所にアイテムを輸送することができます。
|
||||||
block.phase-conveyor.description = 改良されたアイテム転送ブロックです。電力を使用して、離れた場所にあるフェーズコンベアーにアイテムを転送することができます。
|
block.phase-conveyor.description = 改良されたアイテム転送ブロックです。電力を使用して、離れた場所にあるフェーズコンベアーにアイテムを転送することができます。
|
||||||
block.sorter.description = アイテムを分別して搬出します。設定したアイテムは通過させます。他のアイテムが搬入されると側面にアイテムを搬出します。
|
block.sorter.description = アイテムを分別して搬出します。設定したアイテムは前面へ搬出します。他のアイテムが搬入されると側面に搬出します。
|
||||||
block.inverted-sorter.description = アイテムを分別して搬出します。設定したアイテムは側面に搬出されます。他のアイテムが搬入されるとアイテムを通過させます。通常のルーターと反対の動作をします。
|
block.inverted-sorter.description = アイテムを分別して搬出します。設定したアイテムは側面に搬出します。他のアイテムが搬入されると前面へ搬出します。
|
||||||
block.router.description = 搬入したアイテムをほかの3方向に均等に搬出します。一つの資源から複数に分ける際などに使われます。
|
block.router.description = 搬入したアイテムをほかの3方向へ均等に搬出します。一つの資源から複数に分ける際などに使われます。
|
||||||
block.router.details = 最悪の設置は、搬入のために生産施設に隣接させることです。搬出によって詰まる可能性があるためおすすめできません。
|
block.router.details = 最悪の設置は、搬入のために生産施設に隣接させることです。搬出アイテムにより詰まる可能性があるためおすすめできません。
|
||||||
block.distributor.description = 高度なルーターです。搬入したアイテムをほかの7方向に均等に分けて搬出します。
|
block.distributor.description = 高度なルーターです。搬入したアイテムをほかの7方向へ均等に分けて搬出します。
|
||||||
block.overflow-gate.description = 搬出先にアイテムを搬入する空きがない場合に左右にアイテムを搬出します。
|
block.overflow-gate.description = 搬出先にアイテムを搬入する空きがない場合は左右にアイテムを搬出します。
|
||||||
block.underflow-gate.description = オーバーフローゲートの反対の機能を持ちます。 左右に出力できない場合、前面に出力します。
|
block.underflow-gate.description = オーバーフローゲートの反対の機能を持ちます。 左右に出力できない場合、前面に出力します。
|
||||||
block.mass-driver.description = 長距離の輸送が可能な上位アイテム輸送ブロックです。離れた別のマスドライバーにアイテムを発射します。
|
block.mass-driver.description = 長距離の輸送が可能な上位アイテム輸送ブロックです。離れた別のマスドライバーにアイテムを発射します。
|
||||||
block.mechanical-pump.description = 安価なポンプです。搬出速度は遅いですが、電力を使わず使用できます。
|
block.mechanical-pump.description = 安価なポンプです。搬出速度は遅いですが、電力を使わず使用できます。
|
||||||
block.rotary-pump.description = 高度なポンプです。電力を使用して2倍速く搬出することができます。
|
block.rotary-pump.description = 高度なポンプです。電力が必要ですが、より多く搬出することができます。
|
||||||
block.thermal-pump.description = 最高性能のポンプです。
|
block.thermal-pump.description = 最高性能のポンプです。
|
||||||
block.conduit.description = 一般的な液体輸送ブロックです。液体版のコンベアーです。ポンプや他のパイプに使うことができます。
|
block.conduit.description = 一般的な液体輸送ブロックです。液体版のコンベアーです。ポンプや他のパイプに使うことができます。
|
||||||
block.pulse-conduit.description = 高度な液体輸送ブロックです。通常のパイプより速くたくさんの液体を輸送することができます。
|
block.pulse-conduit.description = 高度な液体輸送ブロックです。通常のパイプより速くたくさんの液体を輸送することができます。
|
||||||
block.plated-conduit.description = パルスパイプと同じ速度で液体を輸送することができ、耐久性に優れています。\nまた、パイプ以外による側面への入力を受け入れません。
|
block.plated-conduit.description = パルスパイプと同じ速度で液体を輸送することができ、耐久性に優れています。\nまた、パイプ以外による側面への入力を受け入れません。
|
||||||
block.liquid-router.description = 搬入したアイテムをほかの3方向に均等に搬出します。液体の漏れを防ぐことができます。一つの資源から複数に分ける際などに使われます。
|
block.liquid-router.description = 搬入したアイテムをほかの3方向へ均等に搬出します。液体の漏れを防ぐことができます。一つの資源から複数に分ける際などに使われます。
|
||||||
block.liquid-tank.description = 大量の液体を保管しておくことができます。需要が不安定な製造設備や重要な施設の冷却水の予備などとして使用されます。
|
block.liquid-tank.description = 大量の液体を保管しておくことができます。需要が不安定な製造設備や重要な施設の冷却水の予備などとして使用されます。
|
||||||
block.liquid-junction.description = パイプを他のパイプと交差できるようにします。それぞれ搬入した液体を前方に搬出します。パイプで複雑な構造を組み立てるときなどに使われます。
|
block.liquid-junction.description = パイプを他のパイプと交差できるようにします。それぞれ搬入した液体を前方に搬出します。パイプで複雑な構造を組み立てるときなどに使われます。
|
||||||
block.bridge-conduit.description = 高度な液体輸送ブロックです。地形や建物を超えて、3ブロック離れた場所に液体を輸送することができます。
|
block.bridge-conduit.description = 高度な液体輸送ブロックです。地形や建物を超えて、3ブロック離れた場所に液体を輸送することができます。
|
||||||
@@ -1429,7 +1524,7 @@ block.container.description = 各種類のアイテムを少量ずつ保管し
|
|||||||
block.unloader.description = コンテナやボールト、コアからアイテムをコンベアーか隣接するブロックに搬出します。搬出機をタップして搬出するアイテムを変更することができます。
|
block.unloader.description = コンテナやボールト、コアからアイテムをコンベアーか隣接するブロックに搬出します。搬出機をタップして搬出するアイテムを変更することができます。
|
||||||
block.launch-pad.description = 離脱することなく、アイテムを回収することができます。
|
block.launch-pad.description = 離脱することなく、アイテムを回収することができます。
|
||||||
block.duo.description = 小さく安価なターレットです。
|
block.duo.description = 小さく安価なターレットです。
|
||||||
block.scatter.description = 中規模の対空型ターレットです。敵に鉛やスクラップの塊、メタガラスを分散するように発射します。。
|
block.scatter.description = 中規模の対空型ターレットです。敵に鉛やスクラップの塊、メタガラスを分散するように発射します。
|
||||||
block.scorch.description = 近くの地上の敵を燃やします。近距離だと非常に効果的です。
|
block.scorch.description = 近くの地上の敵を燃やします。近距離だと非常に効果的です。
|
||||||
block.hail.description = 小型の砲撃型ターレットです。
|
block.hail.description = 小型の砲撃型ターレットです。
|
||||||
block.wave.description = バブルの連射攻撃をする中型のターレットです。
|
block.wave.description = バブルの連射攻撃をする中型のターレットです。
|
||||||
@@ -1442,7 +1537,7 @@ block.ripple.description = 同時に複数ショットを発射する大型タ
|
|||||||
block.cyclone.description = 大型の連射型ターレットです。
|
block.cyclone.description = 大型の連射型ターレットです。
|
||||||
block.spectre.description = 一度に2発の強力な弾を放つ大型のターレットです。
|
block.spectre.description = 一度に2発の強力な弾を放つ大型のターレットです。
|
||||||
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 = 航空ユニットを引き込むビームを発射し、その過程でターゲットにダメージを与えます。
|
||||||
@@ -1469,22 +1564,24 @@ block.memory-bank.description = より多くの情報を格納します。
|
|||||||
block.logic-display.description = プロセッサからの任意のグラフィックを表示します。
|
block.logic-display.description = プロセッサからの任意のグラフィックを表示します。
|
||||||
block.large-logic-display.description = プロセッサからの任意のグラフィックを表示します。
|
block.large-logic-display.description = プロセッサからの任意のグラフィックを表示します。
|
||||||
block.interplanetary-accelerator.description = 巨大な電磁レールガンタワーです。別惑星への展開のためにコアを重力圏脱出可能速度まで加速します。
|
block.interplanetary-accelerator.description = 巨大な電磁レールガンタワーです。別惑星への展開のためにコアを重力圏脱出可能速度まで加速します。
|
||||||
|
block.repair-turret.description = 範囲内の損傷したブロックを近い順に継続的に修復します。オプションで冷却液を活用できます。
|
||||||
|
block.payload-propulsion-tower.description = 長距離ペイロード輸送構造です。他の接続されたペイロード推進タワーにペイロードを発射します。
|
||||||
|
|
||||||
unit.dagger.description = 近くの敵に標準的な弾丸を発射します。
|
unit.dagger.description = 近くの敵に標準的な弾丸を発射します。
|
||||||
unit.mace.description = 近くの敵に火炎放射を発射します。
|
unit.mace.description = 近くの敵に火炎放射を発射します。
|
||||||
unit.fortress.description = 地上目標に長距離砲を発射します。
|
unit.fortress.description = 地上目標に長距離砲を発射します。
|
||||||
unit.scepter.description = 近くの敵に電撃弾を発射します。
|
unit.scepter.description = 近くの敵に電撃弾を発射します。
|
||||||
unit.reign.description = 近くの敵に大口径の貫通弾を発射します。
|
unit.reign.description = 近くの敵に大口径の貫通弾を発射します。
|
||||||
unit.nova.description = 敵にダメージを与え、味方の建造物を修復する光線を発射します。飛行可能。
|
unit.nova.description = 敵にダメージを与え、味方の建造物を修復する光線を発射します。\n飛行可能。
|
||||||
unit.pulsar.description = 敵にダメージを与え、味方の建造物を修復する電撃攻撃を行います。飛行可能。
|
unit.pulsar.description = 敵にダメージを与え、味方の建造物を修復する電撃攻撃を行います。\n飛行可能。
|
||||||
unit.quasar.description = 敵にダメージを与え、味方の建造物を修復するレーザー弾を発射します。飛行可能。シールド形成。
|
unit.quasar.description = 敵にダメージを与え、味方の建造物を修復するレーザー弾を発射します。\n飛行可能。シールド形成。
|
||||||
unit.vela.description = 敵にダメージを与え、火災を引き起こし、味方の建造物を修復するレーザー焼夷弾を発射します。飛行可能。
|
unit.vela.description = 敵にダメージを与え、火災を引き起こし、味方の建造物を修復するレーザー焼夷弾を発射します。\n飛行可能。
|
||||||
unit.corvus.description = 敵にダメージを与え、味方の建造物を修復する大火力のレーザー弾を発射します。ほとんどの地形を無視できます。
|
unit.corvus.description = 敵にダメージを与え、味方の建造物を修復する大火力のレーザー弾を発射します。\nほとんどの地形を無視できます。
|
||||||
unit.crawler.description = 敵に向かって走り自爆し、大爆発を起こす。
|
unit.crawler.description = 敵に向かって走り自爆し、大爆発を起こす。
|
||||||
unit.atrax.description = 地上目標を消耗させるスラグ弾を発射します。ほとんどの地形を無視できます。
|
unit.atrax.description = 地上目標を消耗させるスラグ弾を発射します。\nほとんどの地形を無視できます。
|
||||||
unit.spiroct.description = 敵に吸収レーザービームを発射し、与えたダメージを自らの体力として吸収します。ほとんどの地形を無視できます。
|
unit.spiroct.description = 敵に吸収レーザービームを発射し、与えたダメージを自らの体力として吸収します。\nほとんどの地形を無視できます。
|
||||||
unit.arkyid.description = 敵に大口径の吸収レーザービームを発射し、与えたダメージを自らの体力として吸収します。ほとんどの地形を無視できます。
|
unit.arkyid.description = 敵に大口径の吸収レーザービームを発射し、与えたダメージを自らの体力として吸収します。\nほとんどの地形を無視できます。
|
||||||
unit.toxopid.description = 敵に大口径の電撃クラスターシェルと貫通レーザーを発射します。ほとんどの地形を無視できます。
|
unit.toxopid.description = 敵に大口径の電撃クラスターシェルと貫通レーザーを発射します。\nほとんどの地形を無視できます。
|
||||||
unit.flare.description = 近くの地上目標に標準的な弾丸を発射します。
|
unit.flare.description = 近くの地上目標に標準的な弾丸を発射します。
|
||||||
unit.horizon.description = 地上目標にクラスター爆弾を投下します。
|
unit.horizon.description = 地上目標にクラスター爆弾を投下します。
|
||||||
unit.zenith.description = 近くの敵にミサイルを一斉発射します。
|
unit.zenith.description = 近くの敵にミサイルを一斉発射します。
|
||||||
@@ -1492,14 +1589,19 @@ unit.antumbra.description = 近くの敵に弾幕のように弾丸を連射し
|
|||||||
unit.eclipse.description = 近くの敵に2門の貫通レーザーと高射砲の弾幕を発射します。
|
unit.eclipse.description = 近くの敵に2門の貫通レーザーと高射砲の弾幕を発射します。
|
||||||
unit.mono.description = 銅と鉛を自動的に採掘し、コアに移送します。
|
unit.mono.description = 銅と鉛を自動的に採掘し、コアに移送します。
|
||||||
unit.poly.description = 破壊された建造物を自動的に再構築し、さらに建設の支援を行います。
|
unit.poly.description = 破壊された建造物を自動的に再構築し、さらに建設の支援を行います。
|
||||||
unit.mega.description = 損傷した建造物を自動的に修復します。小型のブロックと地上ユニットを運搬できます。
|
unit.mega.description = 損傷した建造物を自動的に修復します。\n小型のブロックと地上ユニットを運搬できます。
|
||||||
unit.quad.description = 地上目標に大型爆弾を投下し、味方の建造物は修復し、敵にはダメージを与えます。中型の地上ユニットを運搬できます。
|
unit.quad.description = 地上目標に大型爆弾を投下し、味方の建造物は修復し、敵にはダメージを与えます。\n中型の地上ユニットを運搬できます。
|
||||||
unit.oct.description = シールド形成と修復を行い、付近の味方を守ります。ほとんどの地上ユニットを運搬できます。
|
unit.oct.description = シールド形成と修復を行い、付近の味方を守ります。\nほとんどの地上ユニットを運搬できます。
|
||||||
unit.risso.description = 近くの敵にミサイルと弾丸の弾幕を発射します。
|
unit.risso.description = 近くの敵にミサイルと弾丸の弾幕を発射します。
|
||||||
unit.minke.description = 近くの地上目標に砲弾と標準的な弾丸を発射します。
|
unit.minke.description = 近くの地上目標に砲弾と標準的な弾丸を発射します。
|
||||||
unit.bryde.description = 敵に長距離砲弾とミサイルを発射します。
|
unit.bryde.description = 敵に長距離砲弾とミサイルを発射します。
|
||||||
unit.sei.description = 敵にミサイルと徹甲弾の弾幕を発射します。
|
unit.sei.description = 敵にミサイルと徹甲弾の弾幕を発射します。
|
||||||
unit.omura.description = 敵に長距離かつ貫通性能を持つレールガンボルトを発射します。フレアユニットを生産します。
|
unit.omura.description = 敵に長距離かつ貫通性能を持つレールガンボルトを発射します。\nフレアユニットを生産します。
|
||||||
unit.alpha.description = シャードコアを敵から守ります。建造物を建築します。
|
unit.alpha.description = シャードコアを敵から守ります。\n建造物を建築します。
|
||||||
unit.beta.description = ファンデーションコアを敵から守ります。建造物を建築します。
|
unit.beta.description = ファンデーションコアを敵から守ります。\n建造物を建築します。
|
||||||
unit.gamma.description = ニュークリアスコアを敵から守ります。建造物を建築します。
|
unit.gamma.description = ニュークリアスコアを敵から守ります。\n建造物を建築します。
|
||||||
|
unit.retusa.description = 近接地雷を配置します。\n味方ユニットを修復します。
|
||||||
|
unit.oxynoe.description = 建造物修復火炎放射を発射します。敵にはダメージを与えます。\n地点防空タレットによって敵の弾丸を撃ち落とします。
|
||||||
|
unit.cyerce.description = 敵に追尾クラスターミサイルを発射します。\n味方ユニットを修復します。
|
||||||
|
unit.aegires.description = エネルギーフィールド内の全ての敵ユニットと建造物には電撃を放ち、全ての味方ユニットには修復効果を与えます。
|
||||||
|
unit.navanax.description = 爆発性のEMP弾を発射し、敵の電力系統には重大な損傷を与え、味方の建造物は修復します。\n4門の自律型レーザータレットで近くの敵を溶かします。
|
||||||
|
|||||||
@@ -78,13 +78,12 @@ schematic.tagexists = 이 태그는 이미 존재합니다.
|
|||||||
|
|
||||||
stats = 전투 결과
|
stats = 전투 결과
|
||||||
stat.wave = 패배한 단계:[accent] {0}
|
stat.wave = 패배한 단계:[accent] {0}
|
||||||
|
stat.unitsCreated = 생성한 유닛:[accent] {0}
|
||||||
stat.enemiesDestroyed = 파괴된 적:[accent] {0}
|
stat.enemiesDestroyed = 파괴된 적:[accent] {0}
|
||||||
stat.built = 지어진 건물: [accent]{0}
|
stat.built = 지어진 건물: [accent]{0}
|
||||||
stat.destroyed = 파괴된 건물: [accent]{0}
|
stat.destroyed = 파괴된 건물: [accent]{0}
|
||||||
stat.deconstructed = 해체된 건물: [accent]{0}
|
stat.deconstructed = 해체된 건물: [accent]{0}
|
||||||
stat.delivered = 얻은 자원:
|
|
||||||
stat.playtime = 플레이 시간: [accent] {0}
|
stat.playtime = 플레이 시간: [accent] {0}
|
||||||
stat.rank = 최종 순위: [accent]{0}
|
|
||||||
|
|
||||||
globalitems = [accent]전체 자원
|
globalitems = [accent]전체 자원
|
||||||
map.delete = 정말로 "[accent]{0}[]" 맵을 삭제하시겠습니까?
|
map.delete = 정말로 "[accent]{0}[]" 맵을 삭제하시겠습니까?
|
||||||
@@ -94,6 +93,7 @@ level.mode = 게임 모드:
|
|||||||
coreattack = < 코어가 공격을 받고 있습니다! >
|
coreattack = < 코어가 공격을 받고 있습니다! >
|
||||||
nearpoint = [[ [scarlet]즉시 적 소환구역에서 떠나십시오[] ]\n단계가 시작하는 순간 인근 건물들과 유닛들이 파괴됩니다!
|
nearpoint = [[ [scarlet]즉시 적 소환구역에서 떠나십시오[] ]\n단계가 시작하는 순간 인근 건물들과 유닛들이 파괴됩니다!
|
||||||
database = 코어 데이터베이스
|
database = 코어 데이터베이스
|
||||||
|
database.button = 데이터베이스
|
||||||
savegame = 게임 저장
|
savegame = 게임 저장
|
||||||
loadgame = 게임 불러오기
|
loadgame = 게임 불러오기
|
||||||
joingame = 게임 참여
|
joingame = 게임 참여
|
||||||
@@ -169,6 +169,7 @@ launchcore = 코어 출격
|
|||||||
filename = 파일 이름:
|
filename = 파일 이름:
|
||||||
unlocked = 새로운 콘텐츠가 해금되었습니다!
|
unlocked = 새로운 콘텐츠가 해금되었습니다!
|
||||||
available = 새로운 콘텐츠 해금이 가능합니다!
|
available = 새로운 콘텐츠 해금이 가능합니다!
|
||||||
|
unlock.incampaign = < 해금 후 상세정보 열람이 가능합니다 >
|
||||||
completed = [accent]완료됨
|
completed = [accent]완료됨
|
||||||
techtree = 연구 기록
|
techtree = 연구 기록
|
||||||
research.legacy = [accent]5.0[] 연구 데이터를 찾았습니다.\n[accent]이 데이터를 불러오시겠습니까?[], 아니면 이 데이터를 무시하고 캠페인을 새로 시작하시겠습니까? [accent]무시한 데이터는 삭제됩니다.[] (권장됨)
|
research.legacy = [accent]5.0[] 연구 데이터를 찾았습니다.\n[accent]이 데이터를 불러오시겠습니까?[], 아니면 이 데이터를 무시하고 캠페인을 새로 시작하시겠습니까? [accent]무시한 데이터는 삭제됩니다.[] (권장됨)
|
||||||
@@ -362,6 +363,7 @@ publish.confirm = 이것을 게시하시겠습니까?[lightgray]창작마당 EUL
|
|||||||
publish.error = 아이템 게시 오류: {0}
|
publish.error = 아이템 게시 오류: {0}
|
||||||
steam.error = 스팀 서비스를 초기화하지 못했습니다.\n오류: {0}
|
steam.error = 스팀 서비스를 초기화하지 못했습니다.\n오류: {0}
|
||||||
|
|
||||||
|
editor.cliffs = 언덕 전환
|
||||||
editor.brush = 브러쉬
|
editor.brush = 브러쉬
|
||||||
editor.openin = 편집기 열기
|
editor.openin = 편집기 열기
|
||||||
editor.oregen = 광물 무작위 생성
|
editor.oregen = 광물 무작위 생성
|
||||||
@@ -382,9 +384,10 @@ waves.title = 단계
|
|||||||
waves.remove = 삭제
|
waves.remove = 삭제
|
||||||
waves.every = 매
|
waves.every = 매
|
||||||
waves.waves = 단계마다
|
waves.waves = 단계마다
|
||||||
waves.perspawn = 마리씩 생성됨
|
waves.perspawn = 마리씩
|
||||||
waves.shields = 방어막 hp/단계
|
waves.shields = 방어막만큼 소환
|
||||||
waves.to = 부터
|
waves.to = 부터
|
||||||
|
waves.max = 마리 까지
|
||||||
waves.guardian = 수호자
|
waves.guardian = 수호자
|
||||||
waves.preview = 미리보기
|
waves.preview = 미리보기
|
||||||
waves.edit = 편집
|
waves.edit = 편집
|
||||||
@@ -393,6 +396,13 @@ waves.load = 클립보드에서 불러오기
|
|||||||
waves.invalid = 클립보드에 잘못된 단계 데이터가 있습니다.
|
waves.invalid = 클립보드에 잘못된 단계 데이터가 있습니다.
|
||||||
waves.copied = 단계 복사됨.
|
waves.copied = 단계 복사됨.
|
||||||
waves.none = 적 단계가 설정되지 않았습니다.\n비어있을 시 자동으로 기본 적 단계 데이터로 설정됩니다.
|
waves.none = 적 단계가 설정되지 않았습니다.\n비어있을 시 자동으로 기본 적 단계 데이터로 설정됩니다.
|
||||||
|
waves.sort = 보기 정렬
|
||||||
|
waves.sort.reverse = 정렬 뒤집기
|
||||||
|
waves.sort.begin = 시작 단계순
|
||||||
|
waves.sort.health = 체력순
|
||||||
|
waves.sort.type = 유닛순
|
||||||
|
waves.units.hide = 모두 숨기기
|
||||||
|
waves.units.show = 모두 보이기
|
||||||
|
|
||||||
#these are intentionally in lower case
|
#these are intentionally in lower case
|
||||||
wavemode.counts = 마리
|
wavemode.counts = 마리
|
||||||
@@ -409,7 +419,7 @@ editor.teams = 팀
|
|||||||
editor.errorload = 파일을 불러오지 못했습니다.
|
editor.errorload = 파일을 불러오지 못했습니다.
|
||||||
editor.errorsave = 파일을 저장하지 못했습니다.
|
editor.errorsave = 파일을 저장하지 못했습니다.
|
||||||
editor.errorimage = 이것은 맵이 아니라 사진입니다.
|
editor.errorimage = 이것은 맵이 아니라 사진입니다.
|
||||||
editor.errorlegacy = 이 맵은 너무 오래되어 더 이상 지원되지 않는 구형 맵 형식을 사용합니다.
|
editor.errorlegacy = 이 맵은 너무 오래되어 더 이상 지원하지 않는 구형 맵 형식을 사용합니다.
|
||||||
editor.errornot = 맵 파일이 아닙니다.
|
editor.errornot = 맵 파일이 아닙니다.
|
||||||
editor.errorheader = 이 맵 파일은 유효하지 않거나 손상되었습니다.
|
editor.errorheader = 이 맵 파일은 유효하지 않거나 손상되었습니다.
|
||||||
editor.errorname = 맵에 이름이 지정되어 있지 않습니다. 저장 파일을 불러오려고 시도하는 건가요?
|
editor.errorname = 맵에 이름이 지정되어 있지 않습니다. 저장 파일을 불러오려고 시도하는 건가요?
|
||||||
@@ -447,7 +457,7 @@ editor.exists = 이 이름의 맵이 이미 존재합니다.
|
|||||||
editor.selectmap = 불러올 맵을 선택하세요:
|
editor.selectmap = 불러올 맵을 선택하세요:
|
||||||
|
|
||||||
toolmode.replace = 재배치
|
toolmode.replace = 재배치
|
||||||
toolmode.replace.description = 단단한 블록에만 그립니다.
|
toolmode.replace.description = 지형 블록에만 그립니다.
|
||||||
toolmode.replaceall = 모두 재배치
|
toolmode.replaceall = 모두 재배치
|
||||||
toolmode.replaceall.description = 맵에 있는 모든 블록을 재배치합니다.
|
toolmode.replaceall.description = 맵에 있는 모든 블록을 재배치합니다.
|
||||||
toolmode.orthogonal = 직각
|
toolmode.orthogonal = 직각
|
||||||
@@ -639,7 +649,7 @@ sector.extractionOutpost.description = 적이 다른 지역에 자원을 보내
|
|||||||
sector.impact0078.description = 이곳에는 시스템에 처음 진입한 우주 수송선의 잔해가 있습니다.\n\n우주선이 파괴된 잔해에서 최대한 많은 자원을 회수하고, 손상되지 않은 그들의 기술을 획득하세요.
|
sector.impact0078.description = 이곳에는 시스템에 처음 진입한 우주 수송선의 잔해가 있습니다.\n\n우주선이 파괴된 잔해에서 최대한 많은 자원을 회수하고, 손상되지 않은 그들의 기술을 획득하세요.
|
||||||
sector.planetaryTerminal.description = 이 행성에서의 마지막 전투를 준비하세요.\n\n적이 필사의 각오로 지키고 있는 이 해안 기지엔 우주에 코어를 발사할 수 있는 시설이 있습니다.\n\n해군을 생산하여 적을 신속하게 제거하고, 그들의 코어 발사 기술을 약탈하십시오.\n\n[royal] 건투를 빕니다.[]
|
sector.planetaryTerminal.description = 이 행성에서의 마지막 전투를 준비하세요.\n\n적이 필사의 각오로 지키고 있는 이 해안 기지엔 우주에 코어를 발사할 수 있는 시설이 있습니다.\n\n해군을 생산하여 적을 신속하게 제거하고, 그들의 코어 발사 기술을 약탈하십시오.\n\n[royal] 건투를 빕니다.[]
|
||||||
|
|
||||||
status.burning.name = 불탐
|
status.burning.name = 발화
|
||||||
status.freezing.name = 빙결
|
status.freezing.name = 빙결
|
||||||
status.wet.name = 젖음
|
status.wet.name = 젖음
|
||||||
status.muddy.name = 질척해짐
|
status.muddy.name = 질척해짐
|
||||||
@@ -648,10 +658,12 @@ status.sapped.name = 피로
|
|||||||
status.electrified.name = 과전류
|
status.electrified.name = 과전류
|
||||||
status.spore-slowed.name = 포자감속
|
status.spore-slowed.name = 포자감속
|
||||||
status.tarred.name = 침유됨
|
status.tarred.name = 침유됨
|
||||||
|
status.overdrive.name = 과부하
|
||||||
status.overclock.name = 가속화
|
status.overclock.name = 가속화
|
||||||
status.shocked.name = 감전
|
status.shocked.name = 감전
|
||||||
status.blasted.name = 파열
|
status.blasted.name = 파손
|
||||||
status.unmoving.name = 멈춤
|
status.unmoving.name = 멈춤
|
||||||
|
status.boss.name = 수호자
|
||||||
|
|
||||||
settings.language = 언어
|
settings.language = 언어
|
||||||
settings.data = 게임 데이터
|
settings.data = 게임 데이터
|
||||||
@@ -776,7 +788,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.boost = 가속: +{0}%
|
||||||
bar.powerbalance = 전력: {0}/s
|
bar.powerbalance = 전력: {0}/s
|
||||||
bar.powerstored = 저장량: {0}/{1}
|
bar.powerstored = 저장량: {0}/{1}
|
||||||
bar.poweramount = 전력: {0}
|
bar.poweramount = 전력: {0}
|
||||||
@@ -1149,6 +1161,7 @@ block.core-nucleus.name = 코어: 핵심
|
|||||||
block.deep-water.name = 깊은 물
|
block.deep-water.name = 깊은 물
|
||||||
block.shallow-water.name = 물
|
block.shallow-water.name = 물
|
||||||
block.tainted-water.name = 오염된 물
|
block.tainted-water.name = 오염된 물
|
||||||
|
block.deep-tainted-water.name = 오염된 깊은 물
|
||||||
block.darksand-tainted-water.name = 오염된 젖은 검은 모래
|
block.darksand-tainted-water.name = 오염된 젖은 검은 모래
|
||||||
block.tar.name = 타르
|
block.tar.name = 타르
|
||||||
block.stone.name = 바위
|
block.stone.name = 바위
|
||||||
@@ -1315,7 +1328,7 @@ block.payload-router.name = 화물 분배기
|
|||||||
block.duct.name = 도관
|
block.duct.name = 도관
|
||||||
block.duct-router.name = 도관 분배기
|
block.duct-router.name = 도관 분배기
|
||||||
block.duct-bridge.name = 도관 다리
|
block.duct-bridge.name = 도관 다리
|
||||||
block.payload-propulsion-tower.name = 화물 추진탑
|
block.payload-propulsion-tower.name = 화물 드라이버
|
||||||
block.payload-void.name = 화물 소멸기
|
block.payload-void.name = 화물 소멸기
|
||||||
block.payload-source.name = 화물 공급기
|
block.payload-source.name = 화물 공급기
|
||||||
block.disassembler.name = 광재 분해기
|
block.disassembler.name = 광재 분해기
|
||||||
@@ -1382,8 +1395,9 @@ 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.presetDifficulty = 이 지역은 [scarlet]고위험 레벨[] 지역입니다.\n적절한 기술과 준비 없이 이런 지역들로 출격하는건 [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 = 평범한 구리. 세르플로에 비정상적으로 많이 분포합니다. 별다른 보강재 없이는 구조적 문제 때문에 내구성이 비교적 약합니다.
|
||||||
@@ -1431,13 +1445,15 @@ block.separator.description = 광재를 광물들로 분리합니다.
|
|||||||
block.spore-press.description = 포자를 석유로 압축합니다.
|
block.spore-press.description = 포자를 석유로 압축합니다.
|
||||||
block.pulverizer.description = 고철을 갈아 모래로 만듭니다.
|
block.pulverizer.description = 고철을 갈아 모래로 만듭니다.
|
||||||
block.coal-centrifuge.description = 석유에서 석탄을 추출합니다.
|
block.coal-centrifuge.description = 석유에서 석탄을 추출합니다.
|
||||||
block.incinerator.description = 넘치는 자원이나 액체를 증발시킵니다.
|
block.incinerator.description = 들어오는 모든 자원과 액체를 소각시킵니다.
|
||||||
block.power-void.description = 입력된 모든 전력을 무효로 합니다. 샌드박스 전용.
|
block.power-void.description = 전력을 제거합니다. 샌드박스 전용.
|
||||||
block.power-source.description = 무한한 전력을 공급해주는 블록입니다. 샌드박스 전용.
|
block.power-source.description = 전력을 무한히 출력합니다. 샌드박스 전용.
|
||||||
block.item-source.description = 자원을 무한대로 출력합니다. 샌드박스 전용.
|
block.item-source.description = 자원을 무한히 출력합니다. 샌드박스 전용.
|
||||||
block.item-void.description = 모든 자원을 파괴합니다. 샌드박스 전용.
|
block.item-void.description = 자원을 제거합니다. 샌드박스 전용.
|
||||||
block.liquid-source.description = 액체를 무한히 출력합니다. 샌드박스 전용.
|
block.liquid-source.description = 액체를 무한히 출력합니다. 샌드박스 전용.
|
||||||
block.liquid-void.description = 액체를 제거합니다. 샌드박스 전용.
|
block.liquid-void.description = 액체를 제거합니다. 샌드박스 전용.
|
||||||
|
block.payload-source.description = 화물을 무한히 출력합니다. 샌드박스 전용.
|
||||||
|
block.payload-void.description = 화물을 제거합니다. 샌드박스 전용.
|
||||||
block.copper-wall.description = 저렴한 수비 블록.\n초반 단계에서 코어와 포탑을 보호하는 데 유용합니다.
|
block.copper-wall.description = 저렴한 수비 블록.\n초반 단계에서 코어와 포탑을 보호하는 데 유용합니다.
|
||||||
block.copper-wall-large.description = 저렴한 수비 블록.\n초반 단계에서 코어와 포탑을 보호하는 데 유용합니다.\n여러 타일을 차지합니다.
|
block.copper-wall-large.description = 저렴한 수비 블록.\n초반 단계에서 코어와 포탑을 보호하는 데 유용합니다.\n여러 타일을 차지합니다.
|
||||||
block.titanium-wall.description = 적당히 강한 방어 블록.\n적에게서 적절한 보호를 제공합니다.
|
block.titanium-wall.description = 적당히 강한 방어 블록.\n적에게서 적절한 보호를 제공합니다.
|
||||||
@@ -1557,7 +1573,7 @@ block.logic-display.description = 프로세서를 이용해 그래픽을 출력
|
|||||||
block.large-logic-display.description = 프로세서를 이용해 그래픽을 출력할 수 있습니다.
|
block.large-logic-display.description = 프로세서를 이용해 그래픽을 출력할 수 있습니다.
|
||||||
block.interplanetary-accelerator.description = 거대한 전자기 레일건 타워. 코어를 행성 간 이동을 위한 탈출 속도까지 가속합니다.
|
block.interplanetary-accelerator.description = 거대한 전자기 레일건 타워. 코어를 행성 간 이동을 위한 탈출 속도까지 가속합니다.
|
||||||
block.repair-turret.description = 가장 가까운 유닛을 지속적으로 수리합니다. 냉각수를 넣을 수 있습니다.
|
block.repair-turret.description = 가장 가까운 유닛을 지속적으로 수리합니다. 냉각수를 넣을 수 있습니다.
|
||||||
block.payload-propulsion-tower.description = 장거리 화물 운반 구조물. 화물을 연결된 다른 화물 추진탑으로 발사합니다.
|
block.payload-propulsion-tower.description = 장거리 화물 운반 구조물. 화물을 연결된 다른 화물 드라이버로 발사합니다.
|
||||||
|
|
||||||
unit.dagger.description = 주변 모든 적에게 일반적인 탄환을 발사합니다.
|
unit.dagger.description = 주변 모든 적에게 일반적인 탄환을 발사합니다.
|
||||||
unit.mace.description = 주변 모든 적에게 화염 줄기를 발사합니다.
|
unit.mace.description = 주변 모든 적에게 화염 줄기를 발사합니다.
|
||||||
@@ -1953,10 +1969,10 @@ unit.minke.details =
|
|||||||
unit.bryde.details =
|
unit.bryde.details =
|
||||||
unit.sei.details = [lightgray][비공식][]세이 sei!
|
unit.sei.details = [lightgray][비공식][]세이 sei!
|
||||||
unit.omura.details = [lightgray][비공식][]오무라이스?
|
unit.omura.details = [lightgray][비공식][]오무라이스?
|
||||||
unit.retusa.details = [lightgray][비공식][]바다를 지뢰로 뒤덮어보죠.
|
unit.retusa.details = [lightgray][비공식][]바다를 지뢰로 뒤덮여보죠.
|
||||||
unit.oxynoe.details =
|
unit.oxynoe.details =
|
||||||
unit.cyerce.details = [lightgray][비공식][]폭죽놀이다!
|
unit.cyerce.details = [lightgray][비공식][]폭죽놀이다!
|
||||||
unit.aegires.details = [lightgray][비공식][]플레이어가 할 수 있는건 운전과 공사뿐...
|
unit.aegires.details = [lightgray][비공식][]공격 컨트롤을 할 수 없습니다.
|
||||||
unit.navanax.details = [lightgray][비공식][]플레이어에게 잠깐의 섬광뽕을 입힙니다.
|
unit.navanax.details = [lightgray][비공식][]플레이어에게 잠깐의 섬광뽕을 입힙니다.
|
||||||
unit.alpha.details =
|
unit.alpha.details =
|
||||||
unit.beta.details =
|
unit.beta.details =
|
||||||
|
|||||||
@@ -762,7 +762,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.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}
|
||||||
|
|||||||
@@ -78,13 +78,12 @@ schematic.tagexists = Acea etichetă există deja.
|
|||||||
|
|
||||||
stats = Informații
|
stats = Informații
|
||||||
stat.wave = Valuri Învinse:[accent] {0}
|
stat.wave = Valuri Învinse:[accent] {0}
|
||||||
|
stat.unitsCreated = Unități Create:[accent] {0}
|
||||||
stat.enemiesDestroyed = Inamici Distruși:[accent] {0}
|
stat.enemiesDestroyed = Inamici Distruși:[accent] {0}
|
||||||
stat.built = Structuri Construite:[accent] {0}
|
stat.built = Structuri Construite:[accent] {0}
|
||||||
stat.destroyed = Structuri Distruse:[accent] {0}
|
stat.destroyed = Structuri Distruse:[accent] {0}
|
||||||
stat.deconstructed = Structuri Deconstruite:[accent] {0}
|
stat.deconstructed = Structuri Deconstruite:[accent] {0}
|
||||||
stat.delivered = Resurse Lansate:
|
|
||||||
stat.playtime = Timp Joc:[accent] {0}
|
stat.playtime = Timp Joc:[accent] {0}
|
||||||
stat.rank = Rang Final: [accent]{0}
|
|
||||||
|
|
||||||
globalitems = [accent]Materiale Totale
|
globalitems = [accent]Materiale Totale
|
||||||
map.delete = Sigur vrei să ștergi harta "[accent]{0}[]"?
|
map.delete = Sigur vrei să ștergi harta "[accent]{0}[]"?
|
||||||
@@ -94,6 +93,7 @@ level.mode = Mod de Joc:
|
|||||||
coreattack = < Nucleul este atacat! >
|
coreattack = < Nucleul este atacat! >
|
||||||
nearpoint = [[ [scarlet]PLEACĂ DE LA PUNCTUL DE LANSARE IMEDIAT[] ]\nanihilare imminentă
|
nearpoint = [[ [scarlet]PLEACĂ DE LA PUNCTUL DE LANSARE IMEDIAT[] ]\nanihilare imminentă
|
||||||
database = Datele Nucleului
|
database = Datele Nucleului
|
||||||
|
database.button = Bază de date
|
||||||
savegame = Salvează Jocul
|
savegame = Salvează Jocul
|
||||||
loadgame = Încarcă Jocul
|
loadgame = Încarcă Jocul
|
||||||
joingame = Intră în Joc
|
joingame = Intră în Joc
|
||||||
@@ -169,6 +169,7 @@ launchcore = Lansează Nucleu
|
|||||||
filename = Nume Fișier:
|
filename = Nume Fișier:
|
||||||
unlocked = Nou conținut deblocat!
|
unlocked = Nou conținut deblocat!
|
||||||
available = Poți cerceta noi tehnologii!
|
available = Poți cerceta noi tehnologii!
|
||||||
|
unlock.incampaign = < Deblochează în campanie pt detalii >
|
||||||
completed = [accent]Finalizat
|
completed = [accent]Finalizat
|
||||||
techtree = Cercetează
|
techtree = Cercetează
|
||||||
research.legacy = Au fost găsite date de cercetare din versiunea [accent]5.0[].\n Dorești să [accent]păstrezi aceste date[], sau [accent]să renunți la ele[] și să reîncepi cercetarea în noua campanie (recomandat)?
|
research.legacy = Au fost găsite date de cercetare din versiunea [accent]5.0[].\n Dorești să [accent]păstrezi aceste date[], sau [accent]să renunți la ele[] și să reîncepi cercetarea în noua campanie (recomandat)?
|
||||||
@@ -362,6 +363,7 @@ publish.confirm = Sigur vrei să publici asta?\n\n[lightgray]Asigură-te că ai
|
|||||||
publish.error = Eroare la publicarea itemului: {0}
|
publish.error = Eroare la publicarea itemului: {0}
|
||||||
steam.error = Inițializarea serviciilor Steam a eșuat.\nEroare: {0}
|
steam.error = Inițializarea serviciilor Steam a eșuat.\nEroare: {0}
|
||||||
|
|
||||||
|
editor.cliffs = Pereți >> Dealuri
|
||||||
editor.brush = Pensulă
|
editor.brush = Pensulă
|
||||||
editor.openin = Deschide în Editor
|
editor.openin = Deschide în Editor
|
||||||
editor.oregen = Generarea Minereurilor
|
editor.oregen = Generarea Minereurilor
|
||||||
@@ -385,6 +387,7 @@ waves.waves = val(uri)
|
|||||||
waves.perspawn = per apariție
|
waves.perspawn = per apariție
|
||||||
waves.shields = scuturi/val
|
waves.shields = scuturi/val
|
||||||
waves.to = până la
|
waves.to = până la
|
||||||
|
waves.max = unități maxime
|
||||||
waves.guardian = Gardian
|
waves.guardian = Gardian
|
||||||
waves.preview = Previzualizare
|
waves.preview = Previzualizare
|
||||||
waves.edit = Editează...
|
waves.edit = Editează...
|
||||||
@@ -393,6 +396,13 @@ waves.load = Încarcă din Clipboard
|
|||||||
waves.invalid = Valuri invalide în clipboard.
|
waves.invalid = Valuri invalide în clipboard.
|
||||||
waves.copied = Valuri copiate.
|
waves.copied = Valuri copiate.
|
||||||
waves.none = Niciun inamic definit.\nDe reținut că o listă de valuri goală va fi înlocuită automat cu lista de valuri prestabilită.
|
waves.none = Niciun inamic definit.\nDe reținut că o listă de valuri goală va fi înlocuită automat cu lista de valuri prestabilită.
|
||||||
|
waves.sort = Sortează După
|
||||||
|
waves.sort.reverse = Inversează Sortarea
|
||||||
|
waves.sort.begin = Început
|
||||||
|
waves.sort.health = Viață
|
||||||
|
waves.sort.type = Tip
|
||||||
|
waves.units.hide = Ascunde
|
||||||
|
waves.units.show = Vezi Tot
|
||||||
|
|
||||||
#intenționat cu literă mică
|
#intenționat cu literă mică
|
||||||
wavemode.counts = numere
|
wavemode.counts = numere
|
||||||
@@ -621,6 +631,8 @@ sector.biomassFacility.name = Facilitatea de Sinteză a Biomasei
|
|||||||
sector.windsweptIslands.name = Insulele Măturate de Vânt
|
sector.windsweptIslands.name = Insulele Măturate de Vânt
|
||||||
sector.extractionOutpost.name = Avanpostul de Extracție
|
sector.extractionOutpost.name = Avanpostul de Extracție
|
||||||
sector.planetaryTerminal.name = Terminalul de Lansare Planetară
|
sector.planetaryTerminal.name = Terminalul de Lansare Planetară
|
||||||
|
sector.coastline.name = Zona de Coastă
|
||||||
|
sector.navalFortress.name = Fortăreața Navală
|
||||||
|
|
||||||
sector.groundZero.description = Locația optimă pt a începe încă odată. Risc de inamici scăzut. Puține resurse.\nAdună cât de mult plumb și cupru se poate.\nMergi mai departe.
|
sector.groundZero.description = Locația optimă pt a începe încă odată. Risc de inamici scăzut. Puține resurse.\nAdună cât de mult plumb și cupru se poate.\nMergi mai departe.
|
||||||
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.
|
||||||
@@ -648,10 +660,12 @@ status.sapped.name = Slăbește
|
|||||||
status.electrified.name = Electrificat
|
status.electrified.name = Electrificat
|
||||||
status.spore-slowed.name = Încetinit de Spori
|
status.spore-slowed.name = Încetinit de Spori
|
||||||
status.tarred.name = Păcurit
|
status.tarred.name = Păcurit
|
||||||
status.overclock.name = Suprasolicitat
|
status.overdrive.name = Suprasolicitat
|
||||||
|
status.overclock.name = Overclock
|
||||||
status.shocked.name = Electrocutat
|
status.shocked.name = Electrocutat
|
||||||
status.blasted.name = Explozie
|
status.blasted.name = Explozie
|
||||||
status.unmoving.name = Nemișcat
|
status.unmoving.name = Nemișcat
|
||||||
|
status.boss.name = Gardian
|
||||||
|
|
||||||
settings.language = Limbă
|
settings.language = Limbă
|
||||||
settings.data = Datele Jocului
|
settings.data = Datele Jocului
|
||||||
@@ -764,9 +778,9 @@ stat.healing = Reparare
|
|||||||
|
|
||||||
ability.forcefield = Câmp de Forță
|
ability.forcefield = Câmp de Forță
|
||||||
ability.repairfield = Câmp de Reparare
|
ability.repairfield = Câmp de Reparare
|
||||||
ability.statusfield = {0} Câmp Suprasolicitare Unități
|
ability.statusfield = {0} Câmp de Stare
|
||||||
ability.unitspawn = Fabrică de {0}
|
ability.unitspawn = Fabrică de {0}
|
||||||
ability.shieldregenfield = Scut Regenerabil
|
ability.shieldregenfield = Câmp Regenerare Scut
|
||||||
ability.movelightning = Mișcare Fulger
|
ability.movelightning = Mișcare Fulger
|
||||||
ability.energyfield = Câmp de Energie: [accent]{0}[] forță pe ~ [accent]{1}[] blocuri / [accent]{2}[] ținte
|
ability.energyfield = Câmp de Energie: [accent]{0}[] forță pe ~ [accent]{1}[] blocuri / [accent]{2}[] ținte
|
||||||
|
|
||||||
@@ -776,7 +790,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.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}
|
||||||
@@ -871,7 +885,7 @@ setting.difficulty.name = Dificultate:
|
|||||||
setting.screenshake.name = Agitare Ecran
|
setting.screenshake.name = Agitare Ecran
|
||||||
setting.effects.name = Vezi Efectele
|
setting.effects.name = Vezi Efectele
|
||||||
setting.destroyedblocks.name = Vezi Blocurile Distruse
|
setting.destroyedblocks.name = Vezi Blocurile Distruse
|
||||||
setting.blockstatus.name = Vezi Statusul Blocului
|
setting.blockstatus.name = Vezi Starea Blocului
|
||||||
setting.conveyorpathfinding.name = Găsirea Drumului la Plasarea Benzii
|
setting.conveyorpathfinding.name = Găsirea Drumului la Plasarea Benzii
|
||||||
setting.sensitivity.name = Sensibilitatea Controlului
|
setting.sensitivity.name = Sensibilitatea Controlului
|
||||||
setting.saveinterval.name = Interval de Salvare
|
setting.saveinterval.name = Interval de Salvare
|
||||||
@@ -926,8 +940,8 @@ keybind.clear_building.name = Șterge Clădirea
|
|||||||
keybind.press = Apasă o tastă...
|
keybind.press = Apasă o tastă...
|
||||||
keybind.press.axis = Apasă o axă sau o tastă...
|
keybind.press.axis = Apasă o axă sau o tastă...
|
||||||
keybind.screenshot.name = Captură Hartă
|
keybind.screenshot.name = Captură Hartă
|
||||||
keybind.toggle_power_lines.name = Oprește/Pornește Statusul Electricelor
|
keybind.toggle_power_lines.name = Oprește/Pornește Starea Electricelor
|
||||||
keybind.toggle_block_status.name = Oprește/Pornește Statusul Blocurilor
|
keybind.toggle_block_status.name = Oprește/Pornește Starea Blocurilor
|
||||||
keybind.move_x.name = Mergi pe X
|
keybind.move_x.name = Mergi pe X
|
||||||
keybind.move_y.name = Mergi pe Y
|
keybind.move_y.name = Mergi pe Y
|
||||||
keybind.mouse_move.name = Urmărește Mouseul
|
keybind.mouse_move.name = Urmărește Mouseul
|
||||||
@@ -1046,7 +1060,7 @@ content.item.name = Materiale
|
|||||||
content.liquid.name = Lichide
|
content.liquid.name = Lichide
|
||||||
content.unit.name = Unități
|
content.unit.name = Unități
|
||||||
content.block.name = Blocuri
|
content.block.name = Blocuri
|
||||||
content.status.name = Efecte de Status
|
content.status.name = Efecte de Stare
|
||||||
content.sector.name = Sectoare
|
content.sector.name = Sectoare
|
||||||
|
|
||||||
item.copper.name = Cupru
|
item.copper.name = Cupru
|
||||||
@@ -1149,6 +1163,7 @@ block.core-nucleus.name = Nucleu: Core
|
|||||||
block.deep-water.name = Apă Adâncă
|
block.deep-water.name = Apă Adâncă
|
||||||
block.shallow-water.name = Apă
|
block.shallow-water.name = Apă
|
||||||
block.tainted-water.name = Apă Tulbure
|
block.tainted-water.name = Apă Tulbure
|
||||||
|
block.deep-tainted-water.name = Apă Adâncă și Tulbure
|
||||||
block.darksand-tainted-water.name = Apă Tulbure cu Nisip Negru
|
block.darksand-tainted-water.name = Apă Tulbure cu Nisip Negru
|
||||||
block.tar.name = Păcură
|
block.tar.name = Păcură
|
||||||
block.stone.name = Piatră
|
block.stone.name = Piatră
|
||||||
@@ -1339,7 +1354,7 @@ block.memory-bank.name = Bancă de Memorie
|
|||||||
team.blue.name = Albastru
|
team.blue.name = Albastru
|
||||||
team.crux.name = Agresor
|
team.crux.name = Agresor
|
||||||
team.sharded.name = Portocaliu
|
team.sharded.name = Portocaliu
|
||||||
team.derelict.name = Abandonat
|
team.derelict.name = Ruină
|
||||||
team.green.name = Verde
|
team.green.name = Verde
|
||||||
team.purple.name = Mov
|
team.purple.name = Mov
|
||||||
|
|
||||||
@@ -1360,7 +1375,7 @@ hint.placeTurret = Construiește \uf861 [accent]Arme[] pt a-ți apăra baza de i
|
|||||||
hint.breaking = Ține apăsat [accent]click-dreapta[] și trage pe ecran pt a distruge blocuri.
|
hint.breaking = Ține apăsat [accent]click-dreapta[] și trage pe ecran pt a distruge blocuri.
|
||||||
hint.breaking.mobile = Activează \ue817 [accent]ciocanul[] din dreapta-jos și dă click pt a distruge blocuri.\n\nȚine apăsat cu degetul pt o secundă și trage pt a distruge mai multe blocuri deodată.
|
hint.breaking.mobile = Activează \ue817 [accent]ciocanul[] din dreapta-jos și dă click pt a distruge blocuri.\n\nȚine apăsat cu degetul pt o secundă și trage pt a distruge mai multe blocuri deodată.
|
||||||
hint.blockInfo = Poți vedea informații despre un bloc selectându-l în [accent]meniul de construcție[] și dând click pe butonul [accent][[?][] din dreapta.
|
hint.blockInfo = Poți vedea informații despre un bloc selectându-l în [accent]meniul de construcție[] și dând click pe butonul [accent][[?][] din dreapta.
|
||||||
hint.derelict = [accent]Structurile abandonate[] sunt rămășițe stricate ale bazelor vechi care nu mai funcționează.\n\nAceste structuri pot fi [accent]deconstruite[] pt resurse.
|
hint.derelict = [accent]Ruinele[] sunt rămășițe deteriorate ale bazelor vechi care nu mai funcționează.\n\nAceste structuri pot fi [accent]deconstruite[] pt resurse.
|
||||||
hint.research = Folosește butonul \ue875 [accent]Cercetează[] pt a cerceta noi tehnologii.
|
hint.research = Folosește butonul \ue875 [accent]Cercetează[] pt a cerceta noi tehnologii.
|
||||||
hint.research.mobile = Folosește butonul \ue875 [accent]Cercetează[] din \ue88c [accent]Meniu[] pt a cerceta noi tehnologii.
|
hint.research.mobile = Folosește butonul \ue875 [accent]Cercetează[] din \ue88c [accent]Meniu[] pt a cerceta noi tehnologii.
|
||||||
hint.unitControl = Ține apăsat [accent][[Ctrl][] și [accent]dă click[] pt a controla unități aliate sau arme.
|
hint.unitControl = Ține apăsat [accent][[Ctrl][] și [accent]dă click[] pt a controla unități aliate sau arme.
|
||||||
@@ -1382,6 +1397,7 @@ hint.generator = \uf879 [accent]Generatoarele pe Combustie[] ard cărbunele și
|
|||||||
hint.guardian = Unitățile [accent]Gardian[] au armuri puternice. Munițiile slabe precum [accent]Cuprul[] și [accent]Plumbul[] [scarlet]nu sunt eficiente[].\n\nFolosește arme mai bune sau muniție de \uf835 [accent]Grafit[] pt \uf861Duo/\uf859Salvo pt a nimici Gardianul.
|
hint.guardian = Unitățile [accent]Gardian[] au armuri puternice. Munițiile slabe precum [accent]Cuprul[] și [accent]Plumbul[] [scarlet]nu sunt eficiente[].\n\nFolosește arme mai bune sau muniție de \uf835 [accent]Grafit[] pt \uf861Duo/\uf859Salvo pt a nimici Gardianul.
|
||||||
hint.coreUpgrade = Un nucleu poate pot fi îmbunătățit [accent]plasând o alt nucleu mai bun peste el[].\n\nPlasează un nucleu [accent]Foundation[] peste nucleul [accent]Shard[]. Nucleul nu poate fi plasat decât pe alte nuclee. Asigură-te că nu sunt alte benzi sau obstacole care să împiedice plasarea.
|
hint.coreUpgrade = Un nucleu poate pot fi îmbunătățit [accent]plasând o alt nucleu mai bun peste el[].\n\nPlasează un nucleu [accent]Foundation[] peste nucleul [accent]Shard[]. Nucleul nu poate fi plasat decât pe alte nuclee. Asigură-te că nu sunt alte benzi sau obstacole care să împiedice plasarea.
|
||||||
hint.presetLaunch = Poți lansa de oriunde în sectoarele gri, precum [accent]Pădurea Glacială[]. Ele sunt [accent]zone[] speciale [accent]de aterizare[]. Nu ai nevoie să capturezi sectoarele învecinate pt a lansa.\n\n[accent]Sectoarele numerotate[], ca acesta, sunt [accent]opționale[].
|
hint.presetLaunch = Poți lansa de oriunde în sectoarele gri, precum [accent]Pădurea Glacială[]. Ele sunt [accent]zone[] speciale [accent]de aterizare[]. Nu ai nevoie să capturezi sectoarele învecinate pt a lansa.\n\n[accent]Sectoarele numerotate[], ca acesta, sunt [accent]opționale[].
|
||||||
|
hint.presetDifficulty = Acest sector are un [scarlet]nivel ridicat de amenințare inamică[].\n[accent]Nu e recomandat[] să lansezi în asemenea sectoare fără pregătiri sau tehnologie adecvată.
|
||||||
hint.coreIncinerate = După ce nucleul se umple până la refuz cu un tip de material, toate materialele în plus de acel tip care încearcă să între în nucleu sunt [accent]incinerate[].
|
hint.coreIncinerate = După ce nucleul se umple până la refuz cu un tip de material, toate materialele în plus de acel tip care încearcă să între în nucleu sunt [accent]incinerate[].
|
||||||
hint.coopCampaign = Când joci [accent]campania cooperând cu alți jucători[], materialele produse în sectorul curent vor fi transferate și către [accent]sectoarele tale locale[].\n\nDe asemenea, vei debloca tot ceea ce cercetează gazda.
|
hint.coopCampaign = Când joci [accent]campania cooperând cu alți jucători[], materialele produse în sectorul curent vor fi transferate și către [accent]sectoarele tale locale[].\n\nDe asemenea, vei debloca tot ceea ce cercetează gazda.
|
||||||
|
|
||||||
@@ -1412,7 +1428,7 @@ liquid.slag.description = Rafinată înapoi în materialele constituente cu ajut
|
|||||||
liquid.oil.description = Folosit în producerea avansată de materiale și ca muniție incendiară.
|
liquid.oil.description = Folosit în producerea avansată de materiale și ca muniție incendiară.
|
||||||
liquid.cryofluid.description = Folosit ca răcitor în reactoare, arme și fabrici.
|
liquid.cryofluid.description = Folosit ca răcitor în reactoare, arme și fabrici.
|
||||||
|
|
||||||
block.derelict = [lightgray]Structură Abandonată
|
block.derelict = [lightgray]Ruină
|
||||||
block.armored-conveyor.description = Transportă materialele înainte. Nu acceptă materiale de pe lateral decât de la alte benzi.
|
block.armored-conveyor.description = Transportă materialele înainte. Nu acceptă materiale de pe lateral decât de la alte benzi.
|
||||||
block.illuminator.description = Emite lumină.
|
block.illuminator.description = Emite lumină.
|
||||||
block.message.description = Păstrează un mesaj. Folosit pt comunicarea dintre aliați.
|
block.message.description = Păstrează un mesaj. Folosit pt comunicarea dintre aliați.
|
||||||
@@ -1438,6 +1454,8 @@ block.item-source.description = Generează materiale la infinit. Doar în modul
|
|||||||
block.item-void.description = Distruge orice material. Doar în modul sandbox.
|
block.item-void.description = Distruge orice material. Doar în modul sandbox.
|
||||||
block.liquid-source.description = Generează lichide la infinit. Doar în modul sandbox.
|
block.liquid-source.description = Generează lichide la infinit. Doar în modul sandbox.
|
||||||
block.liquid-void.description = Distruge orice lichid. Doar în modul sandbox.
|
block.liquid-void.description = Distruge orice lichid. Doar în modul sandbox.
|
||||||
|
block.payload-source.description = Generează încărcături la infinit. Doar în modul sandbox.
|
||||||
|
block.payload-void.description = Distruge orice încărcătură. Doar în modul sandbox.
|
||||||
block.copper-wall.description = Protejează clădirile de proiectilele inamice.
|
block.copper-wall.description = Protejează clădirile de proiectilele inamice.
|
||||||
block.copper-wall-large.description = Protejează clădirile de proiectilele inamice.
|
block.copper-wall-large.description = Protejează clădirile de proiectilele inamice.
|
||||||
block.titanium-wall.description = Protejează clădirile de proiectilele inamice.
|
block.titanium-wall.description = Protejează clădirile de proiectilele inamice.
|
||||||
@@ -1547,7 +1565,7 @@ block.additive-reconstructor.description = Îmbunătățește unitățile primit
|
|||||||
block.multiplicative-reconstructor.description = Îmbunătățește unitățile primite, transformâ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, transformâ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, transformâ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. Starea sa 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.
|
||||||
block.hyper-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 procesorul logic.
|
block.hyper-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 procesorul logic.
|
||||||
|
|||||||
@@ -94,6 +94,7 @@ level.mode = Режим игры:
|
|||||||
coreattack = < Ядро находится под атакой! >
|
coreattack = < Ядро находится под атакой! >
|
||||||
nearpoint = [[ [scarlet]ПОКИНЬТЕ ТОЧКУ ВЫСАДКИ НЕМЕДЛЕННО[] ]\nаннигиляция неизбежна
|
nearpoint = [[ [scarlet]ПОКИНЬТЕ ТОЧКУ ВЫСАДКИ НЕМЕДЛЕННО[] ]\nаннигиляция неизбежна
|
||||||
database = База данных ядра
|
database = База данных ядра
|
||||||
|
database.button = База данных
|
||||||
savegame = Сохранить игру
|
savegame = Сохранить игру
|
||||||
loadgame = Загрузить игру
|
loadgame = Загрузить игру
|
||||||
joingame = Сетевая игра
|
joingame = Сетевая игра
|
||||||
@@ -615,6 +616,8 @@ sector.biomassFacility.name = Центр исследования биомасс
|
|||||||
sector.windsweptIslands.name = Штормовой архипелаг
|
sector.windsweptIslands.name = Штормовой архипелаг
|
||||||
sector.extractionOutpost.name = Добывающая база
|
sector.extractionOutpost.name = Добывающая база
|
||||||
sector.planetaryTerminal.name = Планетарный пусковой терминал
|
sector.planetaryTerminal.name = Планетарный пусковой терминал
|
||||||
|
sector.coastline.name = Береговая линия
|
||||||
|
sector.navalFortress.name = Прибрежная крепость
|
||||||
|
|
||||||
sector.groundZero.description = Оптимальная локация для повторных игр. Низкая вражеская угроза. Немного ресурсов.\nСоберите как можно больше свинца и меди.\nДвигайтесь дальше.
|
sector.groundZero.description = Оптимальная локация для повторных игр. Низкая вражеская угроза. Немного ресурсов.\nСоберите как можно больше свинца и меди.\nДвигайтесь дальше.
|
||||||
sector.frozenForest.description = Даже здесь, ближе к горам, споры распространились. Холодные температуры не могут сдерживать их вечно.\n\nНачните вкладываться в энергию. Постройте генераторы внутреннего сгорания. Научитесь пользоваться регенератором.
|
sector.frozenForest.description = Даже здесь, ближе к горам, споры распространились. Холодные температуры не могут сдерживать их вечно.\n\nНачните вкладываться в энергию. Постройте генераторы внутреннего сгорания. Научитесь пользоваться регенератором.
|
||||||
@@ -770,7 +773,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.boost = Ускорение: +{0}%
|
||||||
bar.powerbalance = Энергия: {0}/с
|
bar.powerbalance = Энергия: {0}/с
|
||||||
bar.powerstored = Накоплено: {0}/{1}
|
bar.powerstored = Накоплено: {0}/{1}
|
||||||
bar.poweramount = Энергия: {0}
|
bar.poweramount = Энергия: {0}
|
||||||
@@ -793,7 +796,7 @@ bullet.damage = [stat]{0}[lightgray] урона
|
|||||||
bullet.splashdamage = [stat]{0}[lightgray] урона в радиусе ~[stat] {1}[lightgray] блоков
|
bullet.splashdamage = [stat]{0}[lightgray] урона в радиусе ~[stat] {1}[lightgray] блоков
|
||||||
bullet.incendiary = [stat]зажигательный
|
bullet.incendiary = [stat]зажигательный
|
||||||
bullet.homing = [stat]самонаводящийся
|
bullet.homing = [stat]самонаводящийся
|
||||||
bullet.frag = [stat]осколочный
|
bullet.frags = [stat]{0}[lightgray]x осколочный(ых) снаряд(ов):
|
||||||
bullet.lightning = [stat]{0}[lightgray]x молнии ~ [stat]{1}[lightgray] урона
|
bullet.lightning = [stat]{0}[lightgray]x молнии ~ [stat]{1}[lightgray] урона
|
||||||
bullet.buildingdamage = [stat]{0}%[lightgray] урона по постройкам
|
bullet.buildingdamage = [stat]{0}%[lightgray] урона по постройкам
|
||||||
bullet.knockback = [stat]{0}[lightgray] отбрасывания
|
bullet.knockback = [stat]{0}[lightgray] отбрасывания
|
||||||
@@ -1543,6 +1546,8 @@ block.memory-bank.description = Хранит информацию для лог
|
|||||||
block.logic-display.description = Отображает произвольную графику из логического процессора.
|
block.logic-display.description = Отображает произвольную графику из логического процессора.
|
||||||
block.large-logic-display.description = Отображает произвольную графику из логического процессора.
|
block.large-logic-display.description = Отображает произвольную графику из логического процессора.
|
||||||
block.interplanetary-accelerator.description = Массивная электромагнитная башня-рельсотрон. Ускоряет ядро, позволяя преодолеть гравитацию для межпланетного развёртывания.
|
block.interplanetary-accelerator.description = Массивная электромагнитная башня-рельсотрон. Ускоряет ядро, позволяя преодолеть гравитацию для межпланетного развёртывания.
|
||||||
|
block.repair-turret.description = Непрерывно ремонтирует ближайшую поврежденную еденицу в своем радиусе. Опционально использует охлаждающую жидкость.
|
||||||
|
block.payload-propulsion-tower.description = Конструкция для транспортировки больших грузов на большое растояние. Стреляет грузом в другие грузовые катапульты.
|
||||||
|
|
||||||
unit.dagger.description = Стреляет стандартными пулями по всем врагам поблизости.
|
unit.dagger.description = Стреляет стандартными пулями по всем врагам поблизости.
|
||||||
unit.mace.description = Стреляет потоками огня по всем врагам поблизости.
|
unit.mace.description = Стреляет потоками огня по всем врагам поблизости.
|
||||||
|
|||||||
@@ -78,13 +78,12 @@ schematic.tagexists = แท็กนี้มีอยู่แล้ว
|
|||||||
|
|
||||||
stats = สถิติ
|
stats = สถิติ
|
||||||
stat.wave = จำนวนคลื่นที่อยู่รอด:[accent] {0}
|
stat.wave = จำนวนคลื่นที่อยู่รอด:[accent] {0}
|
||||||
|
stat.unitsCreated = จำนวนยูนิตที่สร้าง:[accent] {0}
|
||||||
stat.enemiesDestroyed = จำนวนศัตรูที่ทำลาย:[accent] {0}
|
stat.enemiesDestroyed = จำนวนศัตรูที่ทำลาย:[accent] {0}
|
||||||
stat.built = จำนวนสิ่งก่อสร้างที่สร้าง:[accent] {0}
|
stat.built = จำนวนสิ่งก่อสร้างที่สร้าง:[accent] {0}
|
||||||
stat.destroyed = จำนวนสิ่งก่อสร้างที่ถูกทำลาย:[accent] {0}
|
stat.destroyed = จำนวนสิ่งก่อสร้างที่ถูกทำลาย:[accent] {0}
|
||||||
stat.deconstructed = จำนวนสิ่งก่อสร้างที่ลบไป:[accent] {0}
|
stat.deconstructed = จำนวนสิ่งก่อสร้างที่ลบไป:[accent] {0}
|
||||||
stat.delivered = ทรัพยากรที่ส่งไป:
|
|
||||||
stat.playtime = ระยะเวลาที่เล่นไป:[accent] {0}
|
stat.playtime = ระยะเวลาที่เล่นไป:[accent] {0}
|
||||||
stat.rank = ระดับ: [accent]{0}
|
|
||||||
|
|
||||||
globalitems = [accent]ไอเท็มทั้งหมด
|
globalitems = [accent]ไอเท็มทั้งหมด
|
||||||
map.delete = คุณแน่ใจหรือว่าจะลบแมพ "[accent]{0}[]"?
|
map.delete = คุณแน่ใจหรือว่าจะลบแมพ "[accent]{0}[]"?
|
||||||
@@ -94,6 +93,7 @@ level.mode = เกมโหมด:
|
|||||||
coreattack = < แกนกลางถูกโจมตี! >
|
coreattack = < แกนกลางถูกโจมตี! >
|
||||||
nearpoint = [[ [scarlet]ออกจากจุดเกิดด่วน![] ]\nการทำลายล้างกำลังใกล้เข้ามา
|
nearpoint = [[ [scarlet]ออกจากจุดเกิดด่วน![] ]\nการทำลายล้างกำลังใกล้เข้ามา
|
||||||
database = ฐานข้อมูลแกนกลาง
|
database = ฐานข้อมูลแกนกลาง
|
||||||
|
database.button = ฐานข้อมูล
|
||||||
savegame = เซฟเกม
|
savegame = เซฟเกม
|
||||||
loadgame = โหลดเกม
|
loadgame = โหลดเกม
|
||||||
joingame = เข้าร่วมเกม
|
joingame = เข้าร่วมเกม
|
||||||
@@ -169,6 +169,7 @@ launchcore = ส่งแกนกลาง
|
|||||||
filename = ชื่อไฟล์:
|
filename = ชื่อไฟล์:
|
||||||
unlocked = เนื้อหาใหม่ปลดล็อก!
|
unlocked = เนื้อหาใหม่ปลดล็อก!
|
||||||
available = มีการวิจัยใหม่พร้อมปลดล็อก!
|
available = มีการวิจัยใหม่พร้อมปลดล็อก!
|
||||||
|
unlock.incampaign = < ปลดล็อกในแคมเปญเพื่อดูรายละเอียด >
|
||||||
completed = [accent]วิจัยแล้ว
|
completed = [accent]วิจัยแล้ว
|
||||||
techtree = ต้นไม้แห่งเทคโนโลยี
|
techtree = ต้นไม้แห่งเทคโนโลยี
|
||||||
research.legacy = พบข้อมูลการวิจัยของเวอร์ชั่น [accent]5.0[]\nคุณต้องการ[accent]โหลดข้อมูล[]หรือ[accent]ทิ้งข้อมูลไป[]และเริ่มต้นวิจัยในแคมเปญใหม่ (แนะนำ)
|
research.legacy = พบข้อมูลการวิจัยของเวอร์ชั่น [accent]5.0[]\nคุณต้องการ[accent]โหลดข้อมูล[]หรือ[accent]ทิ้งข้อมูลไป[]และเริ่มต้นวิจัยในแคมเปญใหม่ (แนะนำ)
|
||||||
@@ -248,7 +249,7 @@ confirmban = คุณแน่ใจหรือว่าจะแบนผู
|
|||||||
confirmkick = คุณแน่ใจหรือว่าจะเตะผู้เล่นนี้ออก?
|
confirmkick = คุณแน่ใจหรือว่าจะเตะผู้เล่นนี้ออก?
|
||||||
confirmvotekick = คุณแน่ใจหรือว่าจะโหวตเตะผู้เล่นนี้ออก?
|
confirmvotekick = คุณแน่ใจหรือว่าจะโหวตเตะผู้เล่นนี้ออก?
|
||||||
confirmunban = คุณแน่ใจหรือว่าจะเลิกแบนผู้เล่นนี้?
|
confirmunban = คุณแน่ใจหรือว่าจะเลิกแบนผู้เล่นนี้?
|
||||||
confirmadmin = คุณแน่ใจหรือว่าจะเปลี่ยนผู้เล่นคนนี้เป็นแอดมิน?
|
confirmadmin = คุณแน่ใจหรือว่าจะแต่งตั้งผู้เล่นคนนี้เป็นแอดมิน?
|
||||||
confirmunadmin = คุณแน่ใจหรือว่าจะลบสถานะการเป็นแอดมินของผู้เล่นนี้?
|
confirmunadmin = คุณแน่ใจหรือว่าจะลบสถานะการเป็นแอดมินของผู้เล่นนี้?
|
||||||
joingame.title = เข้าร่วมเกม
|
joingame.title = เข้าร่วมเกม
|
||||||
joingame.ip = ที่อยู่:
|
joingame.ip = ที่อยู่:
|
||||||
@@ -296,8 +297,8 @@ save.playtime = เวลาที่เล่นไป: {0}
|
|||||||
warning = คำเตือน
|
warning = คำเตือน
|
||||||
confirm = ตกลง
|
confirm = ตกลง
|
||||||
delete = ลบ
|
delete = ลบ
|
||||||
view.workshop = เปิดในเวิร์คช็อป
|
view.workshop = เปิดในเวิร์กช็อป
|
||||||
workshop.listing = แก้ไขหน้ารายการเวิร์คช็อป
|
workshop.listing = แก้ไขหน้ารายการเวิร์กช็อป
|
||||||
ok = โอเค
|
ok = โอเค
|
||||||
open = เปิด
|
open = เปิด
|
||||||
customize = ตั้งค่ากฎ
|
customize = ตั้งค่ากฎ
|
||||||
@@ -336,8 +337,8 @@ wave.enemies = ศัตรูคงเหลือ [lightgray]{0} [accent]ต
|
|||||||
wave.enemycores = แกนกลางศัตรูเหลือ [accent]{0}[lightgray] แกน
|
wave.enemycores = แกนกลางศัตรูเหลือ [accent]{0}[lightgray] แกน
|
||||||
wave.enemycore = [accent]{0}[lightgray] แกนกลางศัตรู
|
wave.enemycore = [accent]{0}[lightgray] แกนกลางศัตรู
|
||||||
wave.enemy = ศัตรูคงเหลือ [lightgray]{0} [accent]ตัว
|
wave.enemy = ศัตรูคงเหลือ [lightgray]{0} [accent]ตัว
|
||||||
wave.guardianwarn = การ์เดียนจะปรากฏตัวในอีก [accent]{0}[] คลื่น!
|
wave.guardianwarn = ผู้พิทักษ์จะปรากฏตัวในอีก [accent]{0}[] คลื่น!
|
||||||
wave.guardianwarn.one = การ์เดียนจะปรากฏตัวในอีก [accent]{0}[] คลื่น! เตรียมตัวให้พร้อม!
|
wave.guardianwarn.one = ผู้พิทักษ์จะปรากฏตัวในอีก [accent]{0}[] คลื่น! เตรียมตัวให้พร้อม!
|
||||||
loadimage = โหลดรูป
|
loadimage = โหลดรูป
|
||||||
saveimage = เซฟรูป
|
saveimage = เซฟรูป
|
||||||
unknown = ไม่ทราบ
|
unknown = ไม่ทราบ
|
||||||
@@ -362,6 +363,7 @@ publish.confirm = คุณแน่ใจหรือว่าจะเผย
|
|||||||
publish.error = เกิดข้อผิดพลาดการเผยแพร่ไอเท็มดังต่อไปนี้: {0}
|
publish.error = เกิดข้อผิดพลาดการเผยแพร่ไอเท็มดังต่อไปนี้: {0}
|
||||||
steam.error = ไม่สามารถเริ่ม Steam service ได้\nError: {0}
|
steam.error = ไม่สามารถเริ่ม Steam service ได้\nError: {0}
|
||||||
|
|
||||||
|
editor.cliffs = เปลี่ยนกำแพงเป็นหน้าผา
|
||||||
editor.brush = แปรง
|
editor.brush = แปรง
|
||||||
editor.openin = เปิดในตัวแก้ไข
|
editor.openin = เปิดในตัวแก้ไข
|
||||||
editor.oregen = การเกิดของแร่
|
editor.oregen = การเกิดของแร่
|
||||||
@@ -374,10 +376,10 @@ editor.waves = คลื่น:
|
|||||||
editor.rules = กฎ:
|
editor.rules = กฎ:
|
||||||
editor.generation = เจนเนอเรชั่น:
|
editor.generation = เจนเนอเรชั่น:
|
||||||
editor.ingame = แก้ไขในเกม
|
editor.ingame = แก้ไขในเกม
|
||||||
editor.publish.workshop = เผยแพร่บนเวิร์คช็อป
|
editor.publish.workshop = เผยแพร่บนเวิร์กช็อป
|
||||||
editor.newmap = แมพใหม่
|
editor.newmap = แมพใหม่
|
||||||
editor.center = ศูนย์กลางแมพ
|
editor.center = ศูนย์กลางแมพ
|
||||||
workshop = เวิร์คช็อป
|
workshop = เวิร์กช็อป
|
||||||
waves.title = คลื่น
|
waves.title = คลื่น
|
||||||
waves.remove = ลบ
|
waves.remove = ลบ
|
||||||
waves.every = ทุกๆ
|
waves.every = ทุกๆ
|
||||||
@@ -385,7 +387,8 @@ waves.waves = คลื่น
|
|||||||
waves.perspawn = ต่อการเกิด
|
waves.perspawn = ต่อการเกิด
|
||||||
waves.shields = เกราะ/คลื่น
|
waves.shields = เกราะ/คลื่น
|
||||||
waves.to = ถึง
|
waves.to = ถึง
|
||||||
waves.guardian = การ์เดียน
|
waves.max = ยูนิตสูงสุด
|
||||||
|
waves.guardian = ผู้พิทักษ์
|
||||||
waves.preview = พรีวิว
|
waves.preview = พรีวิว
|
||||||
waves.edit = แก้ไข...
|
waves.edit = แก้ไข...
|
||||||
waves.copy = คัดลอกไปยังคลิปบอร์ด
|
waves.copy = คัดลอกไปยังคลิปบอร์ด
|
||||||
@@ -393,6 +396,13 @@ waves.load = โหลดจากคลิปบอร์ด
|
|||||||
waves.invalid = แบบคลื่นในคลิปบอร์ดไม่ถูกต้อง
|
waves.invalid = แบบคลื่นในคลิปบอร์ดไม่ถูกต้อง
|
||||||
waves.copied = คัดลอกแบบคลื่นแล้ว
|
waves.copied = คัดลอกแบบคลื่นแล้ว
|
||||||
waves.none = ไม่ได้กำหนดศัตรู\nแบบคลื่นเปล่าจะถูกแทนที่โดยแบบคลื่นค่าเริ่มต้นของเกม
|
waves.none = ไม่ได้กำหนดศัตรู\nแบบคลื่นเปล่าจะถูกแทนที่โดยแบบคลื่นค่าเริ่มต้นของเกม
|
||||||
|
waves.sort = จัดเรียงตาม
|
||||||
|
waves.sort.reverse = เรียงย้อนกลับ
|
||||||
|
waves.sort.begin = เริ่มต้น
|
||||||
|
waves.sort.health = พลังชีวิต
|
||||||
|
waves.sort.type = ชนิด
|
||||||
|
waves.units.hide = ซ่อนทั้งหมด
|
||||||
|
waves.units.show = แสดงทั้งหมด
|
||||||
|
|
||||||
#these are intentionally in lower case
|
#these are intentionally in lower case
|
||||||
wavemode.counts = จำนวน
|
wavemode.counts = จำนวน
|
||||||
@@ -438,7 +448,7 @@ editor.exportimage = ส่งออกไฟล์รูปพื้นที
|
|||||||
editor.exportimage.description = ส่งออกไฟล์รูปแมพ
|
editor.exportimage.description = ส่งออกไฟล์รูปแมพ
|
||||||
editor.loadimage = นำเข้าแบบพื้นที่
|
editor.loadimage = นำเข้าแบบพื้นที่
|
||||||
editor.saveimage = ส่งออกแบบพื้นที่
|
editor.saveimage = ส่งออกแบบพื้นที่
|
||||||
editor.unsaved = [scarlet]คุณมีการเปลี่ยนแปลงที่ยังไม่ได้เซฟ![]\nคุณแน่ใจหรือว่าจะออก?
|
editor.unsaved = คุณแน่ใจหรือว่าจะออก?\n[scarlet]การเปลี่ยนแปลงที่ยังไม่ได้เซฟจะถูกทิ้ง
|
||||||
editor.resizemap = เปลี่ยนขนาดของแมพ
|
editor.resizemap = เปลี่ยนขนาดของแมพ
|
||||||
editor.mapname = ชื่อแมพ:
|
editor.mapname = ชื่อแมพ:
|
||||||
editor.overwrite = [accent]ตำเตือน!\nแมพนี้จะเขียนทับกับแมพที่มีอยู่แล้ว
|
editor.overwrite = [accent]ตำเตือน!\nแมพนี้จะเขียนทับกับแมพที่มีอยู่แล้ว
|
||||||
@@ -545,7 +555,7 @@ launch.from = ลงจอดจากเซ็กเตอร์: [accent]{0}
|
|||||||
launch.destination = จุดหมายปลายทาง: {0}
|
launch.destination = จุดหมายปลายทาง: {0}
|
||||||
configure.invalid = จำนวนต้องอยู่ระหว่าง 0 ถึง {0}
|
configure.invalid = จำนวนต้องอยู่ระหว่าง 0 ถึง {0}
|
||||||
add = เพิ่ม...
|
add = เพิ่ม...
|
||||||
guardian = การ์เดียน
|
guardian = ผู้พิทักษ์
|
||||||
|
|
||||||
connectfail = [crimson]การเชื่อมต่อผิดพลาด:\n\n[accent]{0}
|
connectfail = [crimson]การเชื่อมต่อผิดพลาด:\n\n[accent]{0}
|
||||||
error.unreachable = เซิร์ฟเวอร์ไม่สามารถเข้าถึงได้\nแน่ใจหรือว่าที่อยู่เขียนถูกต้อง?
|
error.unreachable = เซิร์ฟเวอร์ไม่สามารถเข้าถึงได้\nแน่ใจหรือว่าที่อยู่เขียนถูกต้อง?
|
||||||
@@ -614,29 +624,31 @@ sector.stainedMountains.name = ภูเขาหลากสี
|
|||||||
sector.desolateRift.name = เดโซเลต ริฟต์
|
sector.desolateRift.name = เดโซเลต ริฟต์
|
||||||
sector.nuclearComplex.name = ฐานผลิตนิวเคลียร์
|
sector.nuclearComplex.name = ฐานผลิตนิวเคลียร์
|
||||||
sector.overgrowth.name = โอเวอร์โกรว์ด
|
sector.overgrowth.name = โอเวอร์โกรว์ด
|
||||||
sector.tarFields.name = ทาร์ ฟิลด์
|
sector.tarFields.name = ผืนแผ่นแห่งน้ำมัน
|
||||||
sector.saltFlats.name = ที่ราบเกลือ
|
sector.saltFlats.name = ที่ราบเกลือ
|
||||||
sector.fungalPass.name = ทางผ่านฟังกัล
|
sector.fungalPass.name = ทางผ่านฟังกัล
|
||||||
sector.biomassFacility.name = แหล่งสังเคราะห์ชีวมวล
|
sector.biomassFacility.name = แหล่งสังเคราะห์ชีวมวล
|
||||||
sector.windsweptIslands.name = หมู่เกาะวินด์สเวปท์
|
sector.windsweptIslands.name = หมู่เกาะวินด์สเวปท์
|
||||||
sector.extractionOutpost.name = ด่านส่งทรัพยากร
|
sector.extractionOutpost.name = ด่านส่งทรัพยากร
|
||||||
sector.planetaryTerminal.name = ท่าปล่อยจรวดอวกาศยาน
|
sector.planetaryTerminal.name = ท่าปล่อยจรวดอวกาศยาน
|
||||||
|
sector.coastline.name = แนวชายฝั่ง
|
||||||
|
sector.navalFortress.name = ปราการแห่งวารี
|
||||||
|
|
||||||
sector.groundZero.description = ที่ที่ดีที่สุดในการเริ่มต้นอีกครั้ง ศัตรูน้อย ทรัพยากรน้อย\nเก็บ[accent]ตะกั่ว[]และ[accent]ทองแดง[]ให้ได้มากที่สุด\nแล้วลุยต่อ
|
sector.groundZero.description = ที่ที่ดีที่สุดในการเริ่มต้นอีกครั้ง ศัตรูน้อย ทรัพยากรน้อย\nเก็บ[accent]ตะกั่ว[]และ[accent]ทองแดง[]ให้ได้มากที่สุด\nแล้วลุยต่อ
|
||||||
sector.frozenForest.description = แม้แต่ที่นี่ ที่ที่อยู่ใกล้ภูเขา [accent]สปอร์[]ก็ยังแพร่มาถึงที่นี่\nอากาศอันเย็นเยือกไม่สามารถหยุดยั้งพวกมันได้ตลอดไป\n\nเริ่มต้นการใช้ไฟฟ้า สร้างเครื่องกำเนิดไฟฟ้าเผาไหม้\nเรียนรู้ที่จะใช้เครื่องซ่อมแซม
|
sector.frozenForest.description = แม้แต่ที่นี่ ณ ที่ที่อยู่ใกล้ภูเขา [accent]สปอร์[]ก็ยังแพร่มาถึงที่นี่\nอากาศอันแสนเย็นเยือกไม่สามารถหยุดยั้งพวกมันได้ตลอดไป\n\nเริ่มต้นการใช้ไฟฟ้า สร้างเครื่องกำเนิดไฟฟ้าเผาไหม้\nเรียนรู้ที่จะใช้เครื่องซ่อมแซม
|
||||||
sector.saltFlats.description = ณ ขอบของทะเลทราย เป็นที่ตั้งของที่ราบเกลือ สามารถพบทรัพยากรบางอย่างได้ที่นี่\n\nศัตรูได้ตั้งฐานเก็บทรัพยากรไว้ที่นี่ ทำลายแกนกลางของพวกมัน อย่าให้มีอะไรเหลือ
|
sector.saltFlats.description = ณ ขอบของทะเลทราย เป็นที่ตั้งของที่ราบเกลือ สามารถพบทรัพยากรบางอย่างได้ที่นี่\n\nศัตรูได้ตั้งฐานเก็บทรัพยากรไว้ที่นี่ ทำลายแกนกลางของพวกมัน อย่าให้มีอะไรเหลือ
|
||||||
sector.craters.description = น้ำขังอยู่ในหลุมอุกกาบาศแห่งนี้ อนุสรณ์สถานของสงครามเก่าแก่\nยึดพื้นที่นี่มา เก็บทราย เผา[accent]กระจกเมต้า[]\nปั๊มน้ำเพื่อมาหล่อเย็นป้อมปืนและเครื่องขุดเจาะ
|
sector.craters.description = มีน้ำขังอยู่ในหลุมอุกกาบาศแห่งนี้ เป็นอนุสรณ์สถานของสงครามเก่าแก่\nยึดพื้นที่นี่มา เก็บทราย เผา[accent]กระจกเมต้า[]\nปั๊มน้ำเพื่อมาหล่อเย็นป้อมปืนและเครื่องขุดเจาะ
|
||||||
sector.ruinousShores.description = ถัดมาจากทะเลทราย เป็นที่ตั้งของชายฝั่ง ที่ครั้งก่อน เคยเป็นที่ตั้งของฐานป้องกันชายฝั่ง\nซึ่งทุกทำลายไปซะส่วนใหญ่แล้ว มีเหลือแค่ระบบการป้องกันพื้นฐาน\nทุกอย่างที่เหลือถูกทำลายเหลือเพียงแค่เศษเหล็ก\n\nทำการขยายการสำรวจต่อไป ค้นพบกับเทคโนโลยีอีกครั้ง
|
sector.ruinousShores.description = ถัดมาจากทะเลทราย เป็นที่ตั้งของชายฝั่ง ที่ครั้งก่อน เคยเป็นที่ตั้งของฐานป้องกันชายฝั่ง\nซึ่งทุกทำลายไปซะส่วนใหญ่แล้ว มีเหลือแค่ระบบการป้องกันพื้นฐาน\nทุกอย่างที่เหลือถูกทำลายเหลือเพียงแค่เศษเหล็ก\n\nทำการขยายการสำรวจต่อไป ค้นพบกับเทคโนโลยีอีกครั้ง
|
||||||
sector.stainedMountains.description = เข้าลึกไปในพื้นที่ จะพบกับภูเขา ซึ่งยังไม่ถูกสปอร์แตะต้อง\nขุด[accent]ไทเทเนี่ยม[]ที่อุดมสมบูรณ์ในพื้นที่นี้ เรียนรู้ที่จะใช้มัน\n\nมีศัตรูปรากฏตัวมากขึ้นในบริเวณนี้ อย่าปล่อยให้พวกมันส่งยูนิตที่แข็งแกร่งที่สุดออกมา
|
sector.stainedMountains.description = เข้าลึกไปในพื้นที่ จะพบกับภูเขา ซึ่งยังไม่ถูกสปอร์แตะต้อง\nขุด[accent]ไทเทเนี่ยม[]ที่อุดมสมบูรณ์ในพื้นที่นี้ เรียนรู้ที่จะใช้มัน\n\nมีศัตรูปรากฏตัวมากขึ้นในบริเวณนี้ อย่าปล่อยให้พวกมันส่งยูนิตที่แข็งแกร่งที่สุดออกมา
|
||||||
sector.overgrowth.description = พื้นที่นี้ถูกปกคลุมไปด้วยพืช เข้าใกล้กับแหล่งกำเนิดของสปอร์\nศัตรูได้ตั้งฐานเฝ้าระวังไว้ที่นี่ สร้างยูนิตเมส ทำลายฐานทิ้งซะ\nวิจัย[accent]เครื่องพัฒนารุ่นยกกำลัง[]เพื่อผลิตยูนิตขนาดที่ใหญ่ขึ้น
|
sector.overgrowth.description = พื้นที่นี้ถูกปกคลุมไปด้วยพืช เข้าใกล้กับแหล่งกำเนิดของสปอร์\nศัตรูได้ตั้งฐานเฝ้าระวังไว้ที่นี่ สร้างยูนิตเมส ทำลายฐานทิ้งซะ\nวิจัย[accent]เครื่องพัฒนารุ่นยกกำลัง[]เพื่อผลิตยูนิตขนาดที่ใหญ่ขึ้น
|
||||||
sector.tarFields.description = ขอบของพื้นที่ผลิตน้ำมัน อยู่ระหว่างภูเขาและทะเลทราย หนึ่งในพื้นที่ที่มีแหล่งน้ำมันดินที่ใช้งานได้\nแม้ว่าจะถูกทิ้งร้าง พื้นที่นี้ยังคงมีฐานทัพของศัตรูอยู่ใกล้ๆ อย่าประมาทกับพวกมัน\n\n[lightgray]วิจัยเทคโนโลยีการแปรรูปน้ำมันหากเป็นไปได้
|
sector.tarFields.description = แนวชานขอบของแหล่งผลิตน้ำมัน อยู่ระหว่างภูเขาและทะเลทราย เป็นหนึ่งในพื้นที่ที่มีแหล่งน้ำมันดินที่ใช้งานได้\nแม้ว่าจะถูกทิ้งร้าง พื้นที่นี้ยังคงมีฐานทัพของศัตรูอยู่ใกล้ๆ อย่าประมาทกับพวกมัน\n\n[lightgray]วิจัยเทคโนโลยีการแปรรูปน้ำมันหากเป็นไปได้
|
||||||
sector.desolateRift.description = เป็นพื้นที่ที่อันตรายมาก ทรัพยากรมากมาย แต่พื้นที่คับแคบ\nความเสี่ยงการโดนทำลายล้างสูง ออกไปจากที่นี่ให้เร็วที่สุด\nอย่าถูกหลอกโดยระยะเวลาระหว่างการโจมตีของศัตรูที่เว้นไว้นานกว่าปกติ
|
sector.desolateRift.description = เป็นพื้นที่ที่อันตรายมาก ทรัพยากรมากมาย แต่พื้นที่คับแคบ\nความเสี่ยงการโดนทำลายล้างสูง ออกไปจากที่นี่ให้เร็วที่สุด\nอย่าถูกหลอกโดยระยะเวลาระหว่างการโจมตีของศัตรูที่เว้นไว้นานกว่าปกติ
|
||||||
sector.nuclearComplex.description = สถานที่ผลิตและแปรรูปทอเรี่ยมเก่า ถูกทำลายไม่เหลือสิ้น\nวิจัยทอเรี่ยมและวิธีการใช้มัน\n\nศัตรูในบริเวณนี้มีจำนวนมาก คอยตรวจตราหาผู้บุกรุกอยู่ตลอดเวลา
|
sector.nuclearComplex.description = สถานที่ผลิตและแปรรูปทอเรี่ยมเก่า ถูกทำลายไม่เหลือสิ้น\nวิจัยทอเรี่ยมและวิธีการใช้มัน\n\nศัตรูในบริเวณนี้มีจำนวนมาก คอยตรวจตราหาผู้บุกรุกอยู่ตลอดเวลา
|
||||||
sector.fungalPass.description = ทางผ่านระหว่างพื้นที่สูงและต่ำของภูเขา พื้นที่นี้เต็มไปด้วยสปอร์ ฐานลาดตระเวนขนาดเล็กของศัตรูตั้งอยู่ที่นี่\nทำลายมันซะ\nผลิตยูนิตแด็กเกอร์และครอว์เลอร์ ทำลายแกนกลางทั้งสองไม่ให้เหลือซาก
|
sector.fungalPass.description = ทางผ่านระหว่างพื้นที่สูงและต่ำของภูเขา พื้นที่นี้เต็มไปด้วยสปอร์ ฐานลาดตระเวนขนาดเล็กของศัตรูตั้งอยู่ที่นี่\nทำลายมันซะ\nผลิตยูนิตแด็กเกอร์และครอว์เลอร์ ทำลายแกนกลางทั้งสองไม่ให้เหลือซาก
|
||||||
sector.biomassFacility.description = แหล่งต้นกำเนิดของสปอร์ ที่นี่คือฐานวิจัยและผลิตสปอร์เริ่มแรก\nวิจัยเทคโนโลยีที่อยู่ภายในนั้น เพาะชำ[accent]สปอร์[]เพื่อเป็นเชื้อเพลิงและใช้ในการผลิตพลาสติก\n\n[gray]เมื่อสถานที่นี้ถูกทิ้งร้าง สปอร์ก็ถูกปล่อยออกมา ไม่มีสิ่งใดในระบบนิเวศท้องถิ่นที่สามารถแข่งขันกับสิ่งมีชีวิตที่\nแพร่กระจายเช่นนี้ได้
|
sector.biomassFacility.description = แหล่งต้นกำเนิดของสปอร์ ที่นี่คือฐานวิจัยและผลิตสปอร์เริ่มแรก\nวิจัยเทคโนโลยีที่อยู่ภายในนั้น เพาะชำ[accent]สปอร์[]เพื่อเป็นเชื้อเพลิงและใช้ในการผลิตพลาสติก\n\n[gray]เมื่อสถานที่นี้ถูกทิ้งร้าง สปอร์ก็ถูกปล่อยออกมา ไม่มีสิ่งใดในระบบนิเวศท้องถิ่นที่สามารถแข่งขันกับสิ่งมีชีวิตที่\nแพร่กระจายเช่นนี้ได้
|
||||||
sector.windsweptIslands.description = เลยแนวชายฝั่งไปเป็นหมู่เกาะที่ตั้งอยู่ห่างไกล เคยมีบันทึกว่าที่นี่มีโรงงานผลิต[accent]พลาสตาเนี่ยม[]อยู่\n\nทำลายเรือศัตรู สร้างฐานทัพบนเกาะ วิจัยโรงงานพวกนี้
|
sector.windsweptIslands.description = เลยแนวชายฝั่งไปจะพบกับหมู่เกาะที่ตั้งอยู่ห่างไกลแห่งนี้ เคยมีบันทึกว่าที่นี่มีโรงงานผลิต[accent]พลาสตาเนี่ยม[]อยู่\n\nทำลายเรือศัตรู สร้างฐานทัพบนเกาะ วิจัยโรงงานพวกนี้
|
||||||
sector.extractionOutpost.description = ด่านที่อยู่ห่างไกล สร้างโดยศัตรูเพื่อใช้ในการส่งทรัพยากรไปยังฐานทัพอื่น\n\nเทคโนโลยีการส่งไอเท็มข้ามเซ็กเตอร์เป็นสิ่งจำเป็นสำหรับการพิชิตถัดๆ ไป ทำลายด่าน วิจัยฐานส่งของ
|
sector.extractionOutpost.description = ด่านที่อยู่ห่างไกล สร้างโดยศัตรูเพื่อใช้ในการส่งทรัพยากรไปยังฐานทัพอื่น\n\nเทคโนโลยีการส่งไอเท็มข้ามเซ็กเตอร์เป็นสิ่งจำเป็นสำหรับการพิชิตถัดๆ ไป ทำลายด่าน วิจัยฐานส่งของ
|
||||||
sector.impact0078.description = นี่คือเศษซากของเรือขนส่งระหว่างดวงดาวที่เคยเข้ามายังระบบนี้\nเศษเหล็กและหิมะปกคลุมทั่วทั้งพื้นที่\n\nกอบกู้ซากยานให้ได้มากที่สุด วิจัยเทคโนโลยีทั้งหมดที่ยังเหลือรอด\n\n\n[gray]อย่าประมาทกับฐานทัพศัตรูที่อยู่ใกล้ๆ โดยอันขาด\nศัตรูจะส่งกองกำลังมาโจมตีเรื่อยๆ จนกว่าคุณจะพ่ายแพ้
|
sector.impact0078.description = ณ ที่แห่งนี้คือเศษซากของเรือขนส่งระหว่างดวงดาวที่เคยเข้ามายังระบบนี้\nเศษเหล็กและหิมะปกคลุมทั่วทั้งพื้นที่\n\nกอบกู้ซากยานให้ได้มากที่สุด วิจัยเทคโนโลยีทั้งหมดที่ยังเหลือรอด\n\n\n[gray]อย่าประมาทกับฐานทัพศัตรูที่อยู่ใกล้ๆ โดยอันขาด\nศัตรูจะส่งกองกำลังมาโจมตีเรื่อยๆ จนกว่าคุณจะพ่ายแพ้
|
||||||
sector.planetaryTerminal.description = เป้าหมายสุดท้าย\n\nฐานทัพติดชายหาดนี้มีสิ่งประดิษฐ์ที่สามารถส่งแกนกลางไปยังดาวที่อยู่ใกล้ๆ ได้ ฐานทัพมีการป้องกันที่แน่นหนามาก\n\nผลิตยูนิตเรือ กวาดล้างศัตรูให้เร็วที่สุด วิจัยสิ่งประดิษฐ์นั่น
|
sector.planetaryTerminal.description = เป้าหมายสุดท้าย\n\nฐานทัพติดชายหาดนี้มีสิ่งประดิษฐ์ที่สามารถส่งแกนกลางไปยังดาวที่อยู่ใกล้ๆ ได้ ฐานทัพมีการป้องกันที่แน่นหนามาก\n\nผลิตยูนิตเรือ กวาดล้างศัตรูให้เร็วที่สุด วิจัยสิ่งประดิษฐ์นั่น
|
||||||
|
|
||||||
status.burning.name = เผาไหม้
|
status.burning.name = เผาไหม้
|
||||||
@@ -648,10 +660,12 @@ status.sapped.name = อ่อนกำลัง
|
|||||||
status.electrified.name = ช็อตไฟฟ้า
|
status.electrified.name = ช็อตไฟฟ้า
|
||||||
status.spore-slowed.name = สปอร์สโลว์
|
status.spore-slowed.name = สปอร์สโลว์
|
||||||
status.tarred.name = เปื้อนน้ำมัน
|
status.tarred.name = เปื้อนน้ำมัน
|
||||||
|
status.overdrive.name = โอเวอร์ไดรฟ์
|
||||||
status.overclock.name = โอเวอร์คล็อก
|
status.overclock.name = โอเวอร์คล็อก
|
||||||
status.shocked.name = ช็อก
|
status.shocked.name = ช็อก
|
||||||
status.blasted.name = ระเบิด
|
status.blasted.name = ระเบิด
|
||||||
status.unmoving.name = หยุดนิ่ง
|
status.unmoving.name = หยุดนิ่ง
|
||||||
|
status.boss.name = ผู้พิทักษ์
|
||||||
|
|
||||||
settings.language = ภาษา
|
settings.language = ภาษา
|
||||||
settings.data = ข้อมูลเกม
|
settings.data = ข้อมูลเกม
|
||||||
@@ -663,7 +677,7 @@ settings.game = เกม
|
|||||||
settings.sound = เสียง
|
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 = เคลียร์เซฟ
|
||||||
@@ -681,7 +695,7 @@ info.title = ข้อมูล
|
|||||||
error.title = [crimson]มีบางอย่างผิดพลาดเกิดขึ้น
|
error.title = [crimson]มีบางอย่างผิดพลาดเกิดขึ้น
|
||||||
error.crashtitle = มีบางอย่างผิดพลาดเกิดขึ้น
|
error.crashtitle = มีบางอย่างผิดพลาดเกิดขึ้น
|
||||||
unit.nobuild = [scarlet]ยูนิตนี้ไม่สามารถสร้างได้
|
unit.nobuild = [scarlet]ยูนิตนี้ไม่สามารถสร้างได้
|
||||||
lastaccessed = [lightgray]:คนที่แตะเป็นคนสุดท้าย {0}
|
lastaccessed = [lightgray]คนสุดท้ายที่แตะ: {0}
|
||||||
block.unknown = [lightgray]???
|
block.unknown = [lightgray]???
|
||||||
|
|
||||||
stat.showinmap = <โหลดแมพเพื่อแสดง>
|
stat.showinmap = <โหลดแมพเพื่อแสดง>
|
||||||
@@ -776,7 +790,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.boost = เปอร์เซ็นการเร่ง: +{0}%
|
||||||
bar.powerbalance = พลังงาน: {0}/วิ
|
bar.powerbalance = พลังงาน: {0}/วิ
|
||||||
bar.powerstored = เก็บแล้ว: {0}/{1}
|
bar.powerstored = เก็บแล้ว: {0}/{1}
|
||||||
bar.poweramount = พลังงาน: {0}
|
bar.poweramount = พลังงาน: {0}
|
||||||
@@ -1149,6 +1163,7 @@ block.core-nucleus.name = แกนกลาง: นิวเคลียส
|
|||||||
block.deep-water.name = น้ำลึก
|
block.deep-water.name = น้ำลึก
|
||||||
block.shallow-water.name = น้ำตื้น
|
block.shallow-water.name = น้ำตื้น
|
||||||
block.tainted-water.name = น้ำเสีย
|
block.tainted-water.name = น้ำเสีย
|
||||||
|
block.deep-tainted-water.name = น้ำเสียลึก
|
||||||
block.darksand-tainted-water.name = น้ำเสียบนทรายดำ
|
block.darksand-tainted-water.name = น้ำเสียบนทรายดำ
|
||||||
block.tar.name = น้ำมันดิน
|
block.tar.name = น้ำมันดิน
|
||||||
block.stone.name = หิน
|
block.stone.name = หิน
|
||||||
@@ -1379,9 +1394,10 @@ hint.payloadDrop = กด [accent]][] เพื่อปล่อยสิ่ง
|
|||||||
hint.payloadDrop.mobile = [accent]กดค้างไว้[]ที่พื้นที่โล่งๆ เพื่อปล่อยสิ่งที่บรรทุกอยู่
|
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]การ์เดียน[]มีเกราะป้องกันหนาแน่น กระสุนเปราะบางอย่าง[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.presetDifficulty = เซ็กเตอร์นี้มี[scarlet]ระดับภัยคุกคามศัตรูสูง[]\n[accent]ไม่แนะนำ[]ให้ลงจอดไปยังเซ็กเซอร์พวกนั้นหากไม่มีการเตรียมพร้อมและเทคโนโลยี
|
||||||
hint.coreIncinerate = เมื่อแกนกลางมีจำนวนไอเท็มชนิดหนึ่งที่เต็ม ไอเท็มชนิดนั้นที่เข้ามาเพิ่มจะ[accent]ถูกเผา[]
|
hint.coreIncinerate = เมื่อแกนกลางมีจำนวนไอเท็มชนิดหนึ่งที่เต็ม ไอเท็มชนิดนั้นที่เข้ามาเพิ่มจะ[accent]ถูกเผา[]
|
||||||
hint.coopCampaign = ตอนที่เล่น[accent]แคมเปญร่วมกัน[]กับเพื่อน ไอเท็มที่ผลิตในแมพนี้จะถูกส่ง[accent]ไปยังเซ็กเตอร์ของคุณด้วย[]\n\nการวิจัยใหม่ที่โฮสต์ได้วิจัยก็เก็บเป็นของคุณด้วย
|
hint.coopCampaign = ตอนที่เล่น[accent]แคมเปญร่วมกัน[]กับเพื่อน ไอเท็มที่ผลิตในแมพนี้จะถูกส่ง[accent]ไปยังเซ็กเตอร์ของคุณด้วย[]\n\nการวิจัยใหม่ที่โฮสต์ได้วิจัยก็เก็บเป็นของคุณด้วย
|
||||||
|
|
||||||
@@ -1603,7 +1619,7 @@ unit.mega.description = ซ่อมแซมสิ่งก่อสร้า
|
|||||||
unit.quad.description = ทิ้งระเบิดขนาดใหญ่ลงบนเป้าหมายพื้นดิน ซ่อมแซมสิ่งก่อสร้างของพวกพ้องและสร้างความเสียหายแก่ศัตรู สามารถบรรทุกยูนิตพื้นดินขนาดกลางได้
|
unit.quad.description = ทิ้งระเบิดขนาดใหญ่ลงบนเป้าหมายพื้นดิน ซ่อมแซมสิ่งก่อสร้างของพวกพ้องและสร้างความเสียหายแก่ศัตรู สามารถบรรทุกยูนิตพื้นดินขนาดกลางได้
|
||||||
unit.oct.description = ปกป้องพวกพ้องที่อยู่ใกล้เคียงด้วยโล่พลังงาน สามารถบรรทุกยูนิตภาคพื้นดินได้แทบทุกตัว
|
unit.oct.description = ปกป้องพวกพ้องที่อยู่ใกล้เคียงด้วยโล่พลังงาน สามารถบรรทุกยูนิตภาคพื้นดินได้แทบทุกตัว
|
||||||
unit.risso.description = ยิงขีปนาวุธและสาดกระสุนจำนวนมากใส่ศัตรูใกล้เคียง
|
unit.risso.description = ยิงขีปนาวุธและสาดกระสุนจำนวนมากใส่ศัตรูใกล้เคียง
|
||||||
unit.minke.description = ยิงกระสุนหนักและกระสุนธรรมดาไปยังเป้าหมายพื้นดินที่อยู่ใกล้เคียง\nให้สถานะ[accent]โอเวอร์คล็อก[]แก่พวกพ้องรอบข้าง ทำให้ยิงเร็วและแรงขึ้น
|
unit.minke.description = ยิงทั้งกระสุนหนักและกระสุนธรรมดาไปยังเป้าหมายพื้นดินที่อยู่ใกล้เคียง
|
||||||
unit.bryde.description = ยิงกระสุนปืนใหญ่พิสัยไกลและขีปนาวุธติดตามตัวใส่ศัตรู
|
unit.bryde.description = ยิงกระสุนปืนใหญ่พิสัยไกลและขีปนาวุธติดตามตัวใส่ศัตรู
|
||||||
unit.sei.description = ยิงขีปนาวุธติดตามตัวและกระสุนเจาะเกราะใส่ศัตรู
|
unit.sei.description = ยิงขีปนาวุธติดตามตัวและกระสุนเจาะเกราะใส่ศัตรู
|
||||||
unit.omura.description = ยิงลำแสงปืนเรลกันเจาะทะลุระยะไกลใส่ศัตรู สร้างยูนิตแฟลร์
|
unit.omura.description = ยิงลำแสงปืนเรลกันเจาะทะลุระยะไกลใส่ศัตรู สร้างยูนิตแฟลร์
|
||||||
@@ -1611,7 +1627,7 @@ unit.alpha.description = ปกป้องแกนกลางชาร์ด
|
|||||||
unit.beta.description = ปกป้องแกนกลางฟาวน์เดชั่นจากศัตรู สร้างสิ่งต่างๆ
|
unit.beta.description = ปกป้องแกนกลางฟาวน์เดชั่นจากศัตรู สร้างสิ่งต่างๆ
|
||||||
unit.gamma.description = ปกป้องแกนกลางนิวเคลียสจากศัตรู สร้างสิ่งต่างๆ
|
unit.gamma.description = ปกป้องแกนกลางนิวเคลียสจากศัตรู สร้างสิ่งต่างๆ
|
||||||
unit.retusa.description = วางทุ่นระเบิดระยะใกล้ และซ่อมแซมยูนิตพวกพ้องที่อยู่ใกล้เคียง
|
unit.retusa.description = วางทุ่นระเบิดระยะใกล้ และซ่อมแซมยูนิตพวกพ้องที่อยู่ใกล้เคียง
|
||||||
unit.oxynoe.description = ยิงเปลวไฟเผาไหม้ใส่ศัตรูที่อยู่ใกล้เคียงและซ่อมแซมสิ่งก่อสร้างของพวกพ้อง\nทำลายกระสุนที่กำลังเข้ามาด้วยปืนป้องกันจุด
|
unit.oxynoe.description = ยิงเปลวไฟเผาไหม้ใส่ศัตรูที่อยู่ใกล้เคียงและซ่อมแซมสิ่งก่อสร้างของพวกพ้อง\nทำลายกระสุนที่กำลังเข้ามาด้วยปืนป้องกันจุด\nให้สถานะ[accent]โอเวอร์คล็อก[]แก่พวกพ้องรอบข้าง ทำให้ยิงเร็วและแรงขึ้น
|
||||||
unit.cyerce.description = ยิงขีปนาวุธพลาสม่าติดตามตัวเป็นกระจุกระเบิดใส่ศัตรู\nซ่อมแซมยูนิตพวกพ้องที่อยู่ใกล้เคียงด้วยปืนซ่อมแซม
|
unit.cyerce.description = ยิงขีปนาวุธพลาสม่าติดตามตัวเป็นกระจุกระเบิดใส่ศัตรู\nซ่อมแซมยูนิตพวกพ้องที่อยู่ใกล้เคียงด้วยปืนซ่อมแซม
|
||||||
unit.aegires.description = ช็อตทุกสิ่งก่อสร้างและยูนิตศัตรูที่เข้ามาในสนามพลังงานของมัน\nซ่อมแซมสิ่งก่อสร้างและยูนิตพวกพ้อง
|
unit.aegires.description = ช็อตทุกสิ่งก่อสร้างและยูนิตศัตรูที่เข้ามาในสนามพลังงานของมัน\nซ่อมแซมสิ่งก่อสร้างและยูนิตพวกพ้อง
|
||||||
unit.navanax.description = ยิงลูกระเบิดคลื่นชีพจรแม่เหล็กขนาดใหญ่ สร้างความเสียหายอย่างหนักให้กับเครือข่ายพลังงานศัตรู\nและซ่อมแซมสิ่งก่อสร้างของพวกพ้อง\nหลอมละลายศัตรูที่อยู่ใกล้เคียงด้วยป้อมปืนเลเซอร์อัตโนมัติสี่ป้อม
|
unit.navanax.description = ยิงลูกระเบิดคลื่นชีพจรแม่เหล็กขนาดใหญ่ สร้างความเสียหายอย่างหนักให้กับเครือข่ายพลังงานศัตรู\nและซ่อมแซมสิ่งก่อสร้างของพวกพ้อง\nหลอมละลายศัตรูที่อยู่ใกล้เคียงด้วยป้อมปืนเลเซอร์อัตโนมัติสี่ป้อม
|
||||||
@@ -1703,7 +1719,7 @@ lenum.any = ยูนิตอะไรก็ได้
|
|||||||
lenum.ally = ยูนิตพวกพ้อง
|
lenum.ally = ยูนิตพวกพ้อง
|
||||||
lenum.attacker = ยูนิตติดอาวุธ
|
lenum.attacker = ยูนิตติดอาวุธ
|
||||||
lenum.enemy = ยูนิตศัตรู
|
lenum.enemy = ยูนิตศัตรู
|
||||||
lenum.boss = ยูนิตการ์เดียน
|
lenum.boss = ยูนิตผู้พิทักษ์
|
||||||
lenum.flying = ยูนิตอากาศ
|
lenum.flying = ยูนิตอากาศ
|
||||||
lenum.ground = ยูนิตพื้นดิน
|
lenum.ground = ยูนิตพื้นดิน
|
||||||
lenum.player = ยูนิตที่ถูกควบคุมโดยผู้เล่น
|
lenum.player = ยูนิตที่ถูกควบคุมโดยผู้เล่น
|
||||||
@@ -1759,12 +1775,12 @@ lenum.target = ยิงไปที่ตำแหน่งเป้าหม
|
|||||||
lenum.targetp = ยิงเป้าหมายโดยมีการคำนวณความเร็ว
|
lenum.targetp = ยิงเป้าหมายโดยมีการคำนวณความเร็ว
|
||||||
lenum.itemdrop = ปล่อยไอเท็ม
|
lenum.itemdrop = ปล่อยไอเท็ม
|
||||||
lenum.itemtake = หยิบไอเท็มจากสิ่งก่อสร้าง
|
lenum.itemtake = หยิบไอเท็มจากสิ่งก่อสร้าง
|
||||||
lenum.paydrop = ปล่อยของที่บรรทุกอยู่
|
lenum.paydrop = ปล่อยสิ่งที่บรรทุกอยู่
|
||||||
lenum.paytake = หยิบของบรรทุกที่จุดที่อยู่
|
lenum.paytake = หยิบสิ่งบรรทุก ณ จุดที่อยู่
|
||||||
lenum.flag = ปักธงยูนิตเป็นหมายเลข
|
lenum.flag = ปักธงยูนิตเป็นหมายเลข
|
||||||
lenum.mine = ขุดที่ตำแหน่งเป้าหมาย
|
lenum.mine = ขุดที่ตำแหน่งเป้าหมาย
|
||||||
lenum.build = สร้างสิ่งก่อสร้าง
|
lenum.build = สร้างสิ่งก่อสร้าง
|
||||||
lenum.getblock = ดึงข้อมูลสิ่งก่อสร้างและประเภทสิ่งก่อสร้างที่ตำแหน่งเป้าหมาย\nหน่วยต้องอยู่ในช่วงของตำแหน่ง\nของแข็งที่ไม่ใช่สิ่งก่อสร้างจะส่งกลับเป็น [accent]@solid[]
|
lenum.getblock = ดึงข้อมูลสิ่งก่อสร้างและประเภทสิ่งก่อสร้างที่ตำแหน่งเป้าหมาย\nหน่วยต้องอยู่ในช่วงของตำแหน่ง\nของแข็งที่ไม่ใช่สิ่งก่อสร้างจะส่งกลับเป็น [accent]@solid[]
|
||||||
lenum.within = ตรวจสอบว่ายูนิตอยู่ในระยะหรือไม่
|
lenum.within = ตรวจสอบว่ายูนิตอยู่ในระยะหรือไม่
|
||||||
lenum.boost = เริ่ม/หยุดการบูสต์
|
lenum.boost = เริ่ม/หยุดการบูสต์
|
||||||
#extra line: 18 => extra descriptions: 4+2 => extra details: (7+4)+1
|
#extra line: 16 => extra descriptions: 4 => extra details: (7+4)+1
|
||||||
|
|||||||
@@ -393,6 +393,13 @@ waves.load = Panodan yükle
|
|||||||
waves.invalid = Panoda geçersiz dalga sayısı var.
|
waves.invalid = Panoda geçersiz dalga sayısı var.
|
||||||
waves.copied = Dalgalar kopyalandı.
|
waves.copied = Dalgalar kopyalandı.
|
||||||
waves.none = Düşman bulunamadı.\nBoş dalga düzenlerin otomatik olarak varsayılan düzenle değiştirileceğini unutmayın
|
waves.none = Düşman bulunamadı.\nBoş dalga düzenlerin otomatik olarak varsayılan düzenle değiştirileceğini unutmayın
|
||||||
|
waves.sort = Sıralama Ölçeği:
|
||||||
|
waves.sort.reverse = Ters Sırala
|
||||||
|
waves.sort.begin = Başla
|
||||||
|
waves.sort.health = Can
|
||||||
|
waves.sort.type = Tür
|
||||||
|
waves.units.hide = Hepsini Gizle
|
||||||
|
waves.units.show = Hepsini Göster
|
||||||
|
|
||||||
#bunlar özellikle küçük başlıyor.
|
#bunlar özellikle küçük başlıyor.
|
||||||
wavemode.counts = miktarlar
|
wavemode.counts = miktarlar
|
||||||
@@ -621,6 +628,8 @@ sector.biomassFacility.name = Sentetik BioMadde Santrali
|
|||||||
sector.windsweptIslands.name = Rüzgarlı Adalar
|
sector.windsweptIslands.name = Rüzgarlı Adalar
|
||||||
sector.extractionOutpost.name = Kazı Üssü
|
sector.extractionOutpost.name = Kazı Üssü
|
||||||
sector.planetaryTerminal.name = Gezegenler Arası Terminal
|
sector.planetaryTerminal.name = Gezegenler Arası Terminal
|
||||||
|
sector.coastline.name = Kıyı Şeridi
|
||||||
|
sector.navalFortress.name = Deniz Kalesi
|
||||||
|
|
||||||
sector.groundZero.description = Yeniden başlamak için ideal bölge. Düşük düşman tehlikesi ve az miktarda kaynak mevcut. Mümkün olduğunca çok bakır ve kurşun topla.\nİlerle.
|
sector.groundZero.description = Yeniden başlamak için ideal bölge. Düşük düşman tehlikesi ve az miktarda kaynak mevcut. Mümkün olduğunca çok bakır ve kurşun topla.\nİlerle.
|
||||||
sector.frozenForest.description = Burada, dağlara yakın bölgelerde bile sporlar etrafa yayıldı. Dondurucu soğuk onları sonsuza dek durduramaz.\n\nEnerji kullanmaya başla. Termik jeneratörler inşa et. Tamircileri kullanmayı öğren.
|
sector.frozenForest.description = Burada, dağlara yakın bölgelerde bile sporlar etrafa yayıldı. Dondurucu soğuk onları sonsuza dek durduramaz.\n\nEnerji kullanmaya başla. Termik jeneratörler inşa et. Tamircileri kullanmayı öğren.
|
||||||
@@ -1272,7 +1281,7 @@ block.oil-extractor.name = Petrol Çıkarıcı
|
|||||||
block.repair-point.name = Tamir Noktası
|
block.repair-point.name = Tamir Noktası
|
||||||
block.repair-turret.name = Tamir Turreti
|
block.repair-turret.name = Tamir Turreti
|
||||||
block.pulse-conduit.name = Dalga Borusu
|
block.pulse-conduit.name = Dalga Borusu
|
||||||
block.plated-conduit.name = Kaplı Boru
|
block.plated-conduit.name = Yalıtımlı Boru
|
||||||
block.phase-conduit.name = Faz Borusu
|
block.phase-conduit.name = Faz Borusu
|
||||||
block.liquid-router.name = Sıvı Yönlendiricisi
|
block.liquid-router.name = Sıvı Yönlendiricisi
|
||||||
block.liquid-tank.name = Sıvı Tankı
|
block.liquid-tank.name = Sıvı Tankı
|
||||||
@@ -1382,6 +1391,7 @@ hint.generator = \uf879 [accent]Termik Jeneratör[] kömür yakarak enerji üret
|
|||||||
hint.guardian = [accent]Gardiyan[] birimleri güçlü bir zırha sahiptir. [accent]bakır[] ve [accent]kurşun[] gibi mermilere karşı [scarlet]Dayanıklıdır[].\n\nGardiyanları öldürmek için [accent]salvo[] gibi daha güçlü taretleri ve \uf835 [accent]grafit[] gibi daha çok hasar veren mermileri kullanın.
|
hint.guardian = [accent]Gardiyan[] birimleri güçlü bir zırha sahiptir. [accent]bakır[] ve [accent]kurşun[] gibi mermilere karşı [scarlet]Dayanıklıdır[].\n\nGardiyanları öldürmek için [accent]salvo[] gibi daha güçlü taretleri ve \uf835 [accent]grafit[] gibi daha çok hasar veren mermileri kullanın.
|
||||||
hint.coreUpgrade = Merkezinizi, [accent]merkezinizin üstüne daha gelişmiş bir merkez[] koyarak geliştirebilirsiniz. \n\n[accent]Parçacık[] olarak adlandırılan fakirhanenizin üstüne [accent]Temel[] olarak adlandırılan merkezinizi koyun. Merkezinizin etrafında hiçbir yapı olmamalıdır.
|
hint.coreUpgrade = Merkezinizi, [accent]merkezinizin üstüne daha gelişmiş bir merkez[] koyarak geliştirebilirsiniz. \n\n[accent]Parçacık[] olarak adlandırılan fakirhanenizin üstüne [accent]Temel[] olarak adlandırılan merkezinizi koyun. Merkezinizin etrafında hiçbir yapı olmamalıdır.
|
||||||
hint.presetLaunch = [accent]Donmuş Ormanlar[] gibi [accent]ana sektörlere iniş[] herhangi bir yerden yapılabilir. Yakındaki bir sektörden fırlatma gerektirmez.\n\nBunun gibi [accent]sayı ile isimlendirilmiş[] sektörleri ele geçirmek [accent]isteğe bağlıdır.[].
|
hint.presetLaunch = [accent]Donmuş Ormanlar[] gibi [accent]ana sektörlere iniş[] herhangi bir yerden yapılabilir. Yakındaki bir sektörden fırlatma gerektirmez.\n\nBunun gibi [accent]sayı ile isimlendirilmiş[] sektörleri ele geçirmek [accent]isteğe bağlıdır.[].
|
||||||
|
hint.presetDifficulty = Bu sektör, [scarlet]yüksek tehlike[] barındırıyor.\nBöyle bir sektöre hazırlıksız fırlatış yapmak [accent]tavsiye edilmez[].
|
||||||
hint.coreIncinerate = Bir çekirdek ağzına kadar dolduktan sonra, ekstra itemler [accent]eritilir[].
|
hint.coreIncinerate = Bir çekirdek ağzına kadar dolduktan sonra, ekstra itemler [accent]eritilir[].
|
||||||
hint.coopCampaign = Arkadaşlarınla Multiplayer Campaign oynarken, her yaptığınız Araştırma ve item aktarımı, senin oyun içi Campaign ine de aktarılır.
|
hint.coopCampaign = Arkadaşlarınla Multiplayer Campaign oynarken, her yaptığınız Araştırma ve item aktarımı, senin oyun içi Campaign ine de aktarılır.
|
||||||
#Yukarıdaki bağzı cümleler Anti Dragon tarafından çevirildi.
|
#Yukarıdaki bağzı cümleler Anti Dragon tarafından çevirildi.
|
||||||
@@ -1438,6 +1448,8 @@ block.item-source.description = Seçilen eşyadan sonsuz verir. Sadece Yaratıc
|
|||||||
block.item-void.description = Verilen eşyaları yok eder. Sadece Yaratıcı Modda.
|
block.item-void.description = Verilen eşyaları yok eder. Sadece Yaratıcı Modda.
|
||||||
block.liquid-source.description = Seçilen sıvıyı sonsuz verir. Sadece Yaratıcı Modda.
|
block.liquid-source.description = Seçilen sıvıyı sonsuz verir. Sadece Yaratıcı Modda.
|
||||||
block.liquid-void.description = Verilen sıvıları yok eder. Sadece Yaratıcı Modda.
|
block.liquid-void.description = Verilen sıvıları yok eder. Sadece Yaratıcı Modda.
|
||||||
|
block.payload-source.description = Sınırsız bir şekilde Eleman ve Kargo oluşturur. Sadece Yaratıcı Modda.
|
||||||
|
block.payload-void.description = Tüm Yük ve Elemanları Yok Eder. Sadece Yaratıcı Modda.
|
||||||
block.copper-wall.description = Ucuz bir savunma bloğu.\nİlk birkaç dalgada merkezi ve silahları korumak için kullanışlıdır.
|
block.copper-wall.description = Ucuz bir savunma bloğu.\nİlk birkaç dalgada merkezi ve silahları korumak için kullanışlıdır.
|
||||||
block.copper-wall-large.description = Ucuz bir savunma bloğu.\nİlk birkaç dalgada merkezi ve taretleri korumak için kullanışlıdır.\nBirçok blok alan kaplar.
|
block.copper-wall-large.description = Ucuz bir savunma bloğu.\nİlk birkaç dalgada merkezi ve taretleri korumak için kullanışlıdır.\nBirçok blok alan kaplar.
|
||||||
block.titanium-wall.description = Orta derecede güçlü savunma bloğu.\nDüşmanlardan orta derecede koruma sağlar.
|
block.titanium-wall.description = Orta derecede güçlü savunma bloğu.\nDüşmanlardan orta derecede koruma sağlar.
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ screenshot = Зняток мапи збережено до {0}
|
|||||||
screenshot.invalid = Мапа занадто велика, тому, мабуть, не вистачає пам’яті для знятку мапи.
|
screenshot.invalid = Мапа занадто велика, тому, мабуть, не вистачає пам’яті для знятку мапи.
|
||||||
gameover = Гра завершена
|
gameover = Гра завершена
|
||||||
gameover.disconnect = Від’єднатися
|
gameover.disconnect = Від’єднатися
|
||||||
gameover.pvp = [accent]{0}[] команда перемогла!
|
gameover.pvp = [accent]{0}[] перемогли!
|
||||||
gameover.waiting = [accent]Очікуємо наступно мапу…
|
gameover.waiting = [accent]Очікуємо наступно мапу…
|
||||||
highscore = [accent]Новий рекорд!
|
highscore = [accent]Новий рекорд!
|
||||||
copied = Скопійовано.
|
copied = Скопійовано.
|
||||||
@@ -98,6 +98,7 @@ customgame = Користувацька гра
|
|||||||
newgame = Нова гра
|
newgame = Нова гра
|
||||||
none = <нічого>
|
none = <нічого>
|
||||||
none.found = [lightgray]<нічого не знайдено>
|
none.found = [lightgray]<нічого не знайдено>
|
||||||
|
none.inmap = [lightgray]<нічого на мапі не знайдено>
|
||||||
minimap = Мінімапа
|
minimap = Мінімапа
|
||||||
position = Місцезнаходження
|
position = Місцезнаходження
|
||||||
close = Закрити
|
close = Закрити
|
||||||
@@ -208,6 +209,7 @@ server.refreshing = Оновлення сервера
|
|||||||
hosts.none = [lightgray]Локальних ігор не знайдено
|
hosts.none = [lightgray]Локальних ігор не знайдено
|
||||||
host.invalid = [scarlet]Не вдалося під’єднатися до сервера.
|
host.invalid = [scarlet]Не вдалося під’єднатися до сервера.
|
||||||
servers.local = Локальні сервери
|
servers.local = Локальні сервери
|
||||||
|
servers.local.steam = Локальні сервери і сервери від гравців Steam
|
||||||
servers.remote = Віддалені сервери
|
servers.remote = Віддалені сервери
|
||||||
servers.global = Глобальні сервери
|
servers.global = Глобальні сервери
|
||||||
|
|
||||||
@@ -308,7 +310,7 @@ data.invalid = Це не дійсні ігрові дані.
|
|||||||
data.import.confirm = Вивантаження зовнішніх даних перезапише[scarlet] ВСІ[] ваші поточні ігрові дані.\n[accent]Це неможливо скасувати![]\n\nЯк тільки дані імпортуються, гра негайно закриється.
|
data.import.confirm = Вивантаження зовнішніх даних перезапише[scarlet] ВСІ[] ваші поточні ігрові дані.\n[accent]Це неможливо скасувати![]\n\nЯк тільки дані імпортуються, гра негайно закриється.
|
||||||
quit.confirm = Ви дійсно хочете вийти?
|
quit.confirm = Ви дійсно хочете вийти?
|
||||||
loading = [accent]Завантаження…
|
loading = [accent]Завантаження…
|
||||||
reloading = [accent]Перезавантаження модифікацій…
|
downloading = [accent]Завантаження…
|
||||||
saving = [accent]Збереження…
|
saving = [accent]Збереження…
|
||||||
respawn = [accent][[{0}][], щоби відродитися в ядрі
|
respawn = [accent][[{0}][], щоби відродитися в ядрі
|
||||||
cancelbuilding = [accent][[{0}][] для очищення плану
|
cancelbuilding = [accent][[{0}][] для очищення плану
|
||||||
@@ -337,8 +339,8 @@ builtin = Вбудована
|
|||||||
map.delete.confirm = Ви дійсно хочете видалити цю мапу? Цю дію неможливо буде скасувати!
|
map.delete.confirm = Ви дійсно хочете видалити цю мапу? Цю дію неможливо буде скасувати!
|
||||||
map.random = [accent]Випадкова мапа
|
map.random = [accent]Випадкова мапа
|
||||||
map.nospawn = Ця мапа не має жодного ядра для появи гравця! Додайте [accent]помаранчеве[] ядро до цієї мапи в редакторі.
|
map.nospawn = Ця мапа не має жодного ядра для появи гравця! Додайте [accent]помаранчеве[] ядро до цієї мапи в редакторі.
|
||||||
map.nospawn.pvp = У цієї мапи немає ворожих ядер, у яких гравець може з’явитися! Додайте [scarlet]не помаранчеве[] ядро до цієї мапи в редакторі.
|
map.nospawn.pvp = У цієї мапи немає ворожих ядер, у яких гравець може з’явитися! Додайте [#{0}]{1}[] ядро до цієї мапи в редакторі.
|
||||||
map.nospawn.attack = У цієї мапи немає ворожих ядер, у яких гравець може з’явитися! Додайте [scarlet]червоне[] ядро до цієї мапи в редакторі.
|
map.nospawn.attack = У цієї мапи немає ворожих ядер, у яких гравець може з’явитися! Додайте [#{0}]{1}[] ядро до цієї мапи в редакторі.
|
||||||
map.invalid = Помилка завантаження мапи: пошкоджений або невірний файл мапи.
|
map.invalid = Помилка завантаження мапи: пошкоджений або невірний файл мапи.
|
||||||
workshop.update = Оновити предмет
|
workshop.update = Оновити предмет
|
||||||
workshop.error = Помилка під час отримання інформації з Майстерні: {0}
|
workshop.error = Помилка під час отримання інформації з Майстерні: {0}
|
||||||
@@ -519,6 +521,7 @@ configure = Налаштувати вивантаження
|
|||||||
loadout = Вивантаження
|
loadout = Вивантаження
|
||||||
resources = Ресурси
|
resources = Ресурси
|
||||||
bannedblocks = Заборонені блоки
|
bannedblocks = Заборонені блоки
|
||||||
|
bannedunits = Заборонені одиниці
|
||||||
addall = Додати все
|
addall = Додати все
|
||||||
launch.from = Запуск з [accent]{0}
|
launch.from = Запуск з [accent]{0}
|
||||||
launch.destination = Пункт призначення: {0}
|
launch.destination = Пункт призначення: {0}
|
||||||
@@ -540,10 +543,13 @@ weather.snow.name = Сніг
|
|||||||
weather.sandstorm.name = Піщана буря
|
weather.sandstorm.name = Піщана буря
|
||||||
weather.sporestorm.name = Спорова буря
|
weather.sporestorm.name = Спорова буря
|
||||||
weather.fog.name = Туман
|
weather.fog.name = Туман
|
||||||
|
sectorlist = Сектори
|
||||||
|
sectorlist.attacked = {0} під атакою
|
||||||
sectors.unexplored = [lightgray]Не досліджено
|
sectors.unexplored = [lightgray]Не досліджено
|
||||||
sectors.resources = Ресурси:
|
sectors.resources = Ресурси:
|
||||||
sectors.production = Виробництво:
|
sectors.production = Виробництво:
|
||||||
sectors.export = Експортування:
|
sectors.export = Експортування:
|
||||||
|
sectors.import = Імпортування:
|
||||||
sectors.time = Час:
|
sectors.time = Час:
|
||||||
sectors.threat = Загроза:
|
sectors.threat = Загроза:
|
||||||
sectors.wave = Хвиля:
|
sectors.wave = Хвиля:
|
||||||
@@ -696,7 +702,7 @@ stat.maxconsecutive = Максимальна послідовність
|
|||||||
stat.buildcost = Вартість будування
|
stat.buildcost = Вартість будування
|
||||||
stat.inaccuracy = Розкид
|
stat.inaccuracy = Розкид
|
||||||
stat.shots = Постріли
|
stat.shots = Постріли
|
||||||
stat.reload = Постріли за сек.
|
stat.reload = Скорострільність
|
||||||
stat.ammo = Боєприпаси
|
stat.ammo = Боєприпаси
|
||||||
stat.shieldhealth = Міцність щита
|
stat.shieldhealth = Міцність щита
|
||||||
stat.cooldowntime = Тривалість охолодження
|
stat.cooldowntime = Тривалість охолодження
|
||||||
@@ -740,7 +746,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.boost = Підсилення: +{0}%
|
||||||
bar.powerbalance = Енергія: {0} за с.
|
bar.powerbalance = Енергія: {0} за с.
|
||||||
bar.powerstored = Зберігає: {0}/{1}
|
bar.powerstored = Зберігає: {0}/{1}
|
||||||
bar.poweramount = Енергія: {0}
|
bar.poweramount = Енергія: {0}
|
||||||
@@ -761,7 +767,7 @@ bullet.damage = [stat]{0}[lightgray] шкода
|
|||||||
bullet.splashdamage = [stat]{0}[lightgray] шкода по ділянці ~[stat] {1}[lightgray] плиток
|
bullet.splashdamage = [stat]{0}[lightgray] шкода по ділянці ~[stat] {1}[lightgray] плиток
|
||||||
bullet.incendiary = [stat]запальний
|
bullet.incendiary = [stat]запальний
|
||||||
bullet.homing = [stat]самонаведення
|
bullet.homing = [stat]самонаведення
|
||||||
bullet.frag = [stat]шкода по ділянці
|
bullet.frags = [stat]{0}[lightgray]x шкода по ділянці від снарядів:
|
||||||
bullet.lightning = [stat]{0}[lightgray]x блискавки ~ [stat]{1}[lightgray] шкоди
|
bullet.lightning = [stat]{0}[lightgray]x блискавки ~ [stat]{1}[lightgray] шкоди
|
||||||
bullet.buildingdamage = [stat]{0}%[lightgray] шкода по будівлям
|
bullet.buildingdamage = [stat]{0}%[lightgray] шкода по будівлям
|
||||||
bullet.knockback = [stat]{0}[lightgray] відкидання
|
bullet.knockback = [stat]{0}[lightgray] відкидання
|
||||||
@@ -799,19 +805,19 @@ category.items = Предмети
|
|||||||
category.crafting = Виробництво
|
category.crafting = Виробництво
|
||||||
category.function = Стрільба
|
category.function = Стрільба
|
||||||
category.optional = Додаткові поліпшення
|
category.optional = Додаткові поліпшення
|
||||||
|
setting.skipcoreanimation.name = Пропустити запуск ядра та анімацію приземлення
|
||||||
setting.landscape.name = Тільки альбомний (горизонтальний) режим
|
setting.landscape.name = Тільки альбомний (горизонтальний) режим
|
||||||
setting.shadows.name = Тіні
|
setting.shadows.name = Тіні
|
||||||
setting.blockreplace.name = Пропонування щодо автоматичної заміни блоків
|
setting.blockreplace.name = Пропонування щодо автоматичної заміни блоків
|
||||||
setting.linear.name = Лінійна фільтрація
|
setting.linear.name = Лінійна фільтрація
|
||||||
setting.hints.name = Підказки
|
setting.hints.name = Підказки
|
||||||
setting.flow.name = Показувати темп швидкості ресурсів
|
setting.logichints.name = Підказки при роботі з логікою
|
||||||
setting.backgroundpause.name = Пауза в разі згортанні
|
setting.backgroundpause.name = Пауза в разі згортанні
|
||||||
setting.buildautopause.name = Автоматичне призупинення будування
|
setting.buildautopause.name = Автоматичне призупинення будування
|
||||||
setting.doubletapmine.name = Подвійне торкання для початку видобування
|
setting.doubletapmine.name = Подвійне торкання для початку видобування
|
||||||
setting.modcrashdisable.name = Вимикати модифікації після аварійного запуску
|
setting.modcrashdisable.name = Вимикати модифікації після аварійного запуску
|
||||||
setting.animatedwater.name = Анімаційні рідини
|
setting.animatedwater.name = Анімаційні рідини
|
||||||
setting.animatedshields.name = Анімаційні щити
|
setting.animatedshields.name = Анімаційні щити
|
||||||
setting.antialias.name = Згладжування[lightgray] (потребує перезапуску)[]
|
|
||||||
setting.playerindicators.name = Позначки гравців
|
setting.playerindicators.name = Позначки гравців
|
||||||
setting.indicators.name = Позначки противників
|
setting.indicators.name = Позначки противників
|
||||||
setting.autotarget.name = Автострільба
|
setting.autotarget.name = Автострільба
|
||||||
@@ -820,7 +826,8 @@ 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 = Масштабування користувацького інтерфейсу[lightgray] (потребує перезапуску)[]
|
setting.uiscale.name = Масштабування користувацького інтерфейсу
|
||||||
|
setting.uiscale.description = Потрібен перезапуск для застосування змін.
|
||||||
setting.swapdiagonal.name = Завжди діагональне розміщення
|
setting.swapdiagonal.name = Завжди діагональне розміщення
|
||||||
setting.difficulty.training = Навчання
|
setting.difficulty.training = Навчання
|
||||||
setting.difficulty.easy = Легка
|
setting.difficulty.easy = Легка
|
||||||
@@ -838,7 +845,9 @@ setting.saveinterval.name = Інтервал збереження
|
|||||||
setting.seconds = {0} секунд
|
setting.seconds = {0} секунд
|
||||||
setting.milliseconds = {0} мілісекунд
|
setting.milliseconds = {0} мілісекунд
|
||||||
setting.fullscreen.name = Повноекранний режим
|
setting.fullscreen.name = Повноекранний режим
|
||||||
setting.borderlesswindow.name = Вікно без полів[lightgray] (може потребувати перезапуску)
|
setting.borderlesswindow.name = Вікно без полів
|
||||||
|
setting.borderlesswindow.name.windows = Повний екран без полів
|
||||||
|
setting.borderlesswindow.description = Можливо, потрібен перезапуск для застосування змін.
|
||||||
setting.fps.name = Показувати FPS і затримку до сервера
|
setting.fps.name = Показувати FPS і затримку до сервера
|
||||||
setting.smoothcamera.name = Гладка камера
|
setting.smoothcamera.name = Гладка камера
|
||||||
setting.vsync.name = Вертикальна синхронізація
|
setting.vsync.name = Вертикальна синхронізація
|
||||||
@@ -859,6 +868,7 @@ setting.playerlimit.name = Обмеження гравців
|
|||||||
setting.chatopacity.name = Непрозорість чату
|
setting.chatopacity.name = Непрозорість чату
|
||||||
setting.lasersopacity.name = Непрозорість лазерів енергопостачання
|
setting.lasersopacity.name = Непрозорість лазерів енергопостачання
|
||||||
setting.bridgeopacity.name = Непрозорість мостів
|
setting.bridgeopacity.name = Непрозорість мостів
|
||||||
|
setting.showweather.name = Показувати погоду
|
||||||
setting.playerchat.name = Показувати хмару чата над гравцями
|
setting.playerchat.name = Показувати хмару чата над гравцями
|
||||||
public.confirm = Ви хочете зробити цю гру загальнодоступною?\n[accent]Будь-хто може приєднатися до вашої гри.\n[lightgray]Це можна змінити в Налаштування->Гра->Загальнодоступність гри.
|
public.confirm = Ви хочете зробити цю гру загальнодоступною?\n[accent]Будь-хто може приєднатися до вашої гри.\n[lightgray]Це можна змінити в Налаштування->Гра->Загальнодоступність гри.
|
||||||
public.confirm.really = Якщо ви хочете грати з друзями, використовуйте [green]Запросити друзів[] замість [scarlet]Публічного серверу[]!\nВи справді хочете зробити свою гру [scarlet]публічною[]?
|
public.confirm.really = Якщо ви хочете грати з друзями, використовуйте [green]Запросити друзів[] замість [scarlet]Публічного серверу[]!\nВи справді хочете зробити свою гру [scarlet]публічною[]?
|
||||||
@@ -958,6 +968,8 @@ rules.wavetimer = Таймер для хвиль
|
|||||||
rules.waves = Хвилі
|
rules.waves = Хвилі
|
||||||
rules.attack = Режим атаки
|
rules.attack = Режим атаки
|
||||||
rules.buildai = Будування ШІ
|
rules.buildai = Будування ШІ
|
||||||
|
rules.aitier = Рівень складності будівель ШІ [0;1]
|
||||||
|
rules.cleanupdeadteams = Очистити будівлі переможеної команди (PvP)
|
||||||
rules.corecapture = Захоплення ядра після знищення
|
rules.corecapture = Захоплення ядра після знищення
|
||||||
rules.polygoncoreprotection = Полігональний захист ядер
|
rules.polygoncoreprotection = Полігональний захист ядер
|
||||||
rules.enemyCheat = Нескінченні ресурси для червоної команди ШІ
|
rules.enemyCheat = Нескінченні ресурси для червоної команди ШІ
|
||||||
@@ -977,12 +989,15 @@ rules.deconstructrefundmultiplier = Множник відшкодування в
|
|||||||
rules.waitForWaveToEnd = Хвилі чекають на завершення попередньої
|
rules.waitForWaveToEnd = Хвилі чекають на завершення попередньої
|
||||||
rules.dropzoneradius = Радіус зони висадки:[lightgray] (у плитках)
|
rules.dropzoneradius = Радіус зони висадки:[lightgray] (у плитках)
|
||||||
rules.unitammo = Бойові одиниці потребують боєприпасів
|
rules.unitammo = Бойові одиниці потребують боєприпасів
|
||||||
|
rules.enemyteam = Ворожа команда
|
||||||
|
rules.playerteam = Команда гравця
|
||||||
rules.title.waves = Хвилі
|
rules.title.waves = Хвилі
|
||||||
rules.title.resourcesbuilding = Ресурси й будування
|
rules.title.resourcesbuilding = Ресурси й будування
|
||||||
rules.title.enemy = Противники
|
rules.title.enemy = Противники
|
||||||
rules.title.unit = Бойові одиниці
|
rules.title.unit = Бойові одиниці
|
||||||
rules.title.experimental = Експериментальне
|
rules.title.experimental = Експериментальне
|
||||||
rules.title.environment = Середовище
|
rules.title.environment = Середовище
|
||||||
|
rules.title.teams = Команди
|
||||||
rules.lighting = Світлотінь
|
rules.lighting = Світлотінь
|
||||||
rules.enemyLights = Ворожі вогні
|
rules.enemyLights = Ворожі вогні
|
||||||
rules.fire = Вогонь
|
rules.fire = Вогонь
|
||||||
@@ -1055,7 +1070,6 @@ unit.scepter.name = Верховна влада
|
|||||||
unit.reign.name = Верховний Порядок
|
unit.reign.name = Верховний Порядок
|
||||||
unit.vela.name = Пульсар Вітрил
|
unit.vela.name = Пульсар Вітрил
|
||||||
unit.corvus.name = Ґава
|
unit.corvus.name = Ґава
|
||||||
block.resupply-point.name = Пункт постачання
|
|
||||||
block.parallax.name = Паралакс
|
block.parallax.name = Паралакс
|
||||||
block.cliff.name = Скеля
|
block.cliff.name = Скеля
|
||||||
block.sand-boulder.name = Пісочний валун
|
block.sand-boulder.name = Пісочний валун
|
||||||
@@ -1247,7 +1261,6 @@ block.meltdown.name = Розплавлювач
|
|||||||
block.foreshadow.name = Передвісник
|
block.foreshadow.name = Передвісник
|
||||||
block.container.name = Сховище
|
block.container.name = Сховище
|
||||||
block.launch-pad.name = Пусковий майданчик
|
block.launch-pad.name = Пусковий майданчик
|
||||||
block.launch-pad-large.name = Великий пусковий майданчик
|
|
||||||
block.segment.name = Сегмент
|
block.segment.name = Сегмент
|
||||||
block.command-center.name = Командний центр
|
block.command-center.name = Командний центр
|
||||||
block.ground-factory.name = Наземний завод
|
block.ground-factory.name = Наземний завод
|
||||||
@@ -1268,10 +1281,10 @@ block.payload-source.name = Вантажне джерело
|
|||||||
block.disassembler.name = Розбирач
|
block.disassembler.name = Розбирач
|
||||||
block.silicon-crucible.name = Кремнієвий тигель
|
block.silicon-crucible.name = Кремнієвий тигель
|
||||||
block.overdrive-dome.name = Великий прискорювач
|
block.overdrive-dome.name = Великий прискорювач
|
||||||
|
block.interplanetary-accelerator.name = Міжпланетний прискорювач
|
||||||
block.block-forge.name = Блок-кузня
|
block.block-forge.name = Блок-кузня
|
||||||
block.block-loader.name = Блок-завантажувач
|
block.block-loader.name = Блок-завантажувач
|
||||||
block.block-unloader.name = Блок-вивантажувач
|
block.block-unloader.name = Блок-вивантажувач
|
||||||
block.interplanetary-accelerator.name = Міжпланетний прискорювач
|
|
||||||
block.switch.name = Перемикач
|
block.switch.name = Перемикач
|
||||||
block.micro-processor.name = Мікропроцесор
|
block.micro-processor.name = Мікропроцесор
|
||||||
block.logic-processor.name = Логічний процесор
|
block.logic-processor.name = Логічний процесор
|
||||||
@@ -1280,13 +1293,13 @@ block.logic-display.name = Логічний дисплей
|
|||||||
block.large-logic-display.name = Великий логічний дисплей
|
block.large-logic-display.name = Великий логічний дисплей
|
||||||
block.memory-cell.name = Комірка пам’яті
|
block.memory-cell.name = Комірка пам’яті
|
||||||
block.memory-bank.name = Блок пам’яті
|
block.memory-bank.name = Блок пам’яті
|
||||||
team.blue.name = Синя
|
team.blue.name = Сині
|
||||||
team.crux.name = Загарбники
|
team.crux.name = Загарбники
|
||||||
team.sharded.name = Розколоті
|
team.sharded.name = Розколоті
|
||||||
team.orange.name = Помаранчева
|
team.orange.name = Помаранчеві
|
||||||
team.derelict.name = Знедолена
|
team.derelict.name = Переможені
|
||||||
team.green.name = Зелена
|
team.green.name = Зелені
|
||||||
team.purple.name = Фіолетова
|
team.purple.name = Фіолетові
|
||||||
hint.skip = Пропустити
|
hint.skip = Пропустити
|
||||||
hint.desktopMove = Використовуйте [accent][[WASD][], щоби рухатися.
|
hint.desktopMove = Використовуйте [accent][[WASD][], щоби рухатися.
|
||||||
hint.zoom = [accent]Прокручуйте коліщатком миші[], щоби збільшити чи зменшити масштаб мапи.
|
hint.zoom = [accent]Прокручуйте коліщатком миші[], щоби збільшити чи зменшити масштаб мапи.
|
||||||
@@ -1305,6 +1318,7 @@ hhint.breaking = Натисніть [accent]ПКМ[] і тягніть, щоби
|
|||||||
hint.breaking.mobile = Активуйте [accent]молот[] внизу праворуч і торкніться блоків, щоби їх розібрати.\n\nУтримуйте палець протягом секунди і протягніть, щоби розібрати виділене.
|
hint.breaking.mobile = Активуйте [accent]молот[] внизу праворуч і торкніться блоків, щоби їх розібрати.\n\nУтримуйте палець протягом секунди і протягніть, щоби розібрати виділене.
|
||||||
hint.blockInfo = Подивіться інформацію про блок. Перейдіть до [accent]меню будівництва[] і натисніть на кнопку [accent][[?][] правпоруч
|
hint.blockInfo = Подивіться інформацію про блок. Перейдіть до [accent]меню будівництва[] і натисніть на кнопку [accent][[?][] правпоруч
|
||||||
hint.research = Використовуйте кнопку [accent]Дослідження[] для дослідження нової технології.
|
hint.research = Використовуйте кнопку [accent]Дослідження[] для дослідження нової технології.
|
||||||
|
hint.derelict = Будівлі [accent]Переможених[] є зламаними залишками старих баз, які більше не функціонують.\n\nЇх можна [accent]деконструювати[] для отримання ресурсів.
|
||||||
hint.research.mobile = Використовуйте [accent]Дослідження[] в [accent]меню[] для дослідження нової технології.
|
hint.research.mobile = Використовуйте [accent]Дослідження[] в [accent]меню[] для дослідження нової технології.
|
||||||
hint.unitControl = Утримуйте [accent][[лівий Ctrl][] і [accent]натисніть[] на одиницю чи башту, щоби контролювати її.
|
hint.unitControl = Утримуйте [accent][[лівий Ctrl][] і [accent]натисніть[] на одиницю чи башту, щоби контролювати її.
|
||||||
hint.unitControl.mobile = [accent][Торкніться двічі[], щоби контролювати союзні одиниці чи башти.
|
hint.unitControl.mobile = [accent][Торкніться двічі[], щоби контролювати союзні одиниці чи башти.
|
||||||
@@ -1338,7 +1352,7 @@ 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 = Використовується в сонячних панелях, складній електроніці та боєприпасах самонаведення для башт.
|
||||||
item.plastanium.description = Використовується в передових одиницях та у фрагментованих боєприпасах.
|
item.plastanium.description = Використовується в передових одиницях та у фрагментованих боєприпасах.
|
||||||
@@ -1352,7 +1366,7 @@ liquid.water.description = Використовується для охолод
|
|||||||
liquid.slag.description = Переробляється у відокремлювачах у складові метали або розпорошується на ворогів як зброя.
|
liquid.slag.description = Переробляється у відокремлювачах у складові метали або розпорошується на ворогів як зброя.
|
||||||
liquid.oil.description = Використовується у виробництві передових матеріалів і як запальні боєприпаси.
|
liquid.oil.description = Використовується у виробництві передових матеріалів і як запальні боєприпаси.
|
||||||
liquid.cryofluid.description = Використовується як теплоносій у реакторах, баштах і заводах.
|
liquid.cryofluid.description = Використовується як теплоносій у реакторах, баштах і заводах.
|
||||||
block.resupply-point.description = Поповнює найближчі одиниці мідними боєприпасами. Несумісний з одиницями, що потребують заряду акумулятора.
|
block.derelict = [lightgray]Переможені
|
||||||
block.armored-conveyor.description = Переміщує предмети вперед. Не приймає введення з боків ні з чого, крім інших конвеєрних стрічок.
|
block.armored-conveyor.description = Переміщує предмети вперед. Не приймає введення з боків ні з чого, крім інших конвеєрних стрічок.
|
||||||
block.illuminator.description = Випромінює світло.
|
block.illuminator.description = Випромінює світло.
|
||||||
block.message.description = Зберігає повідомлення для комунікації між союзниками.
|
block.message.description = Зберігає повідомлення для комунікації між союзниками.
|
||||||
@@ -1496,6 +1510,8 @@ block.memory-bank.description = Зберігає інформацію для л
|
|||||||
block.logic-display.description = Показує довільну графіку з логічного процесора.
|
block.logic-display.description = Показує довільну графіку з логічного процесора.
|
||||||
block.large-logic-display.description = Показує довільну графіку з логічного процесора.
|
block.large-logic-display.description = Показує довільну графіку з логічного процесора.
|
||||||
block.interplanetary-accelerator.description = Велика електромагнітна башта-рейкотрон. Прискорює ядра, щоби подолати планетне тяжіння для міжпланетного розгортання.
|
block.interplanetary-accelerator.description = Велика електромагнітна башта-рейкотрон. Прискорює ядра, щоби подолати планетне тяжіння для міжпланетного розгортання.
|
||||||
|
block.repair-turret.description = Безпервно ремонтує найближчу пошкоджену одиницю. Для прискорення ремонтування можна охолодити.
|
||||||
|
block.payload-propulsion-tower.description = Структура транспортування вантажу на великі відстані. Вистрілює вантаж в інші вантажні катапульти.
|
||||||
unit.dagger.description = Вистрілює стандартними кулями в найближчих ворогах.
|
unit.dagger.description = Вистрілює стандартними кулями в найближчих ворогах.
|
||||||
unit.mace.description = Вистрілює потоками полум’я в найближчих ворогів.
|
unit.mace.description = Вистрілює потоками полум’я в найближчих ворогів.
|
||||||
unit.fortress.description = Вистрілює з дальнобійної артилерії в наземних цілей.
|
unit.fortress.description = Вистрілює з дальнобійної артилерії в наземних цілей.
|
||||||
@@ -1529,6 +1545,12 @@ unit.omura.description = Вистрілює у ворогів далекобій
|
|||||||
unit.alpha.description = Захищає ядро «Уламок» від противників. Будує споруди.
|
unit.alpha.description = Захищає ядро «Уламок» від противників. Будує споруди.
|
||||||
unit.beta.description = Захищає ядро «Штаб» від противників. Будує споруди.
|
unit.beta.description = Захищає ядро «Штаб» від противників. Будує споруди.
|
||||||
unit.gamma.description = Захищає ядро «Атом» від противників. Будує споруди.
|
unit.gamma.description = Захищає ядро «Атом» від противників. Будує споруди.
|
||||||
|
unit.retusa.description = Розміщує міни. Ремонтує найближчі одиниці.
|
||||||
|
unit.oxynoe.description = Вистрілює потоками полум'я, яке ремонтує споруди та наносить шкоду ворогам. Захищає від ворожик снарядів за допомогою башти точкової оборони.
|
||||||
|
unit.cyerce.description = Вистрілює у ворогів навідними касетними ракетами. Ремонтує найближчі одиниці.
|
||||||
|
unit.aegires.description = Приголомшлює ворожі одиниці та будівлі, що входять до його енергетичного поля. Ремонтує всіх союзників.
|
||||||
|
unit.navanax.description = Вистрілює вибухонебезпечні снаряди електромагнітного імпульсу, завдаючи значної шкоди ворожим енергетичним мережам та ремонтуючи союзницькі споруди. Розплавляє сусідніх ворогів за допомогою 4 автономних лазерних веж.
|
||||||
|
|
||||||
|
|
||||||
lst.read = Зчитує число із з’єднаної комірки пам’яті.
|
lst.read = Зчитує число із з’єднаної комірки пам’яті.
|
||||||
lst.write = Записує числу у з’єднану комірки пам’яті.
|
lst.write = Записує числу у з’єднану комірки пам’яті.
|
||||||
|
|||||||
@@ -770,7 +770,7 @@ bar.corereq = Yêu cầu căn cứ
|
|||||||
bar.drillspeed = Tốc độ khoan: {0}/giây
|
bar.drillspeed = Tốc độ khoan: {0}/giây
|
||||||
bar.pumpspeed = Tốc độ bơm: {0}/giây
|
bar.pumpspeed = Tốc độ bơm: {0}/giây
|
||||||
bar.efficiency = Hiệu suất: {0}%
|
bar.efficiency = Hiệu suất: {0}%
|
||||||
bar.boost = Tăng tốc: {0}%
|
bar.boost = Tăng tốc: +{0}%
|
||||||
bar.powerbalance = Năng lượng: {0}/giây
|
bar.powerbalance = Năng lượng: {0}/giây
|
||||||
bar.powerstored = Lưu trữ: {0}/{1}
|
bar.powerstored = Lưu trữ: {0}/{1}
|
||||||
bar.poweramount = Năng lượng: {0}
|
bar.poweramount = Năng lượng: {0}
|
||||||
|
|||||||
@@ -78,13 +78,12 @@ schematic.tagexists = 該標籤已存在。
|
|||||||
|
|
||||||
stats = 統計
|
stats = 統計
|
||||||
stat.wave = 打敗的波次:[accent]{0}
|
stat.wave = 打敗的波次:[accent]{0}
|
||||||
stat.enemiesDestroyed = 摧毀的敵人:[accent]{0}
|
stat.unitsCreated = 建造單位數:[accent] {0}
|
||||||
|
stat.enemiesDestroyed = 摧毀敵人數:[accent]{0}
|
||||||
stat.built = 建設的建築:[accent]{0}
|
stat.built = 建設的建築:[accent]{0}
|
||||||
stat.destroyed = 摧毀的建築:[accent]{0}
|
stat.destroyed = 摧毀的建築:[accent]{0}
|
||||||
stat.deconstructed = 拆除的建築:[accent]{0}
|
stat.deconstructed = 拆除的建築:[accent]{0}
|
||||||
stat.delivered = 發射的核心資源:
|
|
||||||
stat.playtime = 遊玩時間:[accent] {0}
|
stat.playtime = 遊玩時間:[accent] {0}
|
||||||
stat.rank = 最終排名:[accent]{0}
|
|
||||||
|
|
||||||
globalitems = [accent]全域物品
|
globalitems = [accent]全域物品
|
||||||
map.delete = 確認要刪除「[accent]{0}[]」地圖嗎?
|
map.delete = 確認要刪除「[accent]{0}[]」地圖嗎?
|
||||||
@@ -93,7 +92,8 @@ level.select = 選擇關卡
|
|||||||
level.mode = 遊戲模式:
|
level.mode = 遊戲模式:
|
||||||
coreattack = 〈核心正在受到攻擊!〉
|
coreattack = 〈核心正在受到攻擊!〉
|
||||||
nearpoint = 【[scarlet]立即離開空降區[]】\n湮滅即將來臨
|
nearpoint = 【[scarlet]立即離開空降區[]】\n湮滅即將來臨
|
||||||
database = 核心數據庫
|
database = 核心資料庫
|
||||||
|
database.button = 資料庫
|
||||||
savegame = 儲存遊戲
|
savegame = 儲存遊戲
|
||||||
loadgame = 載入遊戲
|
loadgame = 載入遊戲
|
||||||
joingame = 多人連線
|
joingame = 多人連線
|
||||||
@@ -101,6 +101,7 @@ customgame = 自訂遊戲
|
|||||||
newgame = 新遊戲
|
newgame = 新遊戲
|
||||||
none = 〈沒有〉
|
none = 〈沒有〉
|
||||||
none.found = [lightgray]〈查無結果〉
|
none.found = [lightgray]〈查無結果〉
|
||||||
|
none.inmap = [lightgray]〈地圖中無結果〉
|
||||||
minimap = 小地圖
|
minimap = 小地圖
|
||||||
position = 位置
|
position = 位置
|
||||||
close = 關閉
|
close = 關閉
|
||||||
@@ -168,6 +169,7 @@ launchcore = 發射核心
|
|||||||
filename = 檔案名稱︰
|
filename = 檔案名稱︰
|
||||||
unlocked = 已解鎖新內容!
|
unlocked = 已解鎖新內容!
|
||||||
available = 可研究新科技!
|
available = 可研究新科技!
|
||||||
|
unlock.incampaign = <在戰役中解鎖>
|
||||||
completed = [accent]完成
|
completed = [accent]完成
|
||||||
techtree = 科技樹
|
techtree = 科技樹
|
||||||
research.legacy = [accent]5.0[] 偵測到舊有科技資料。\n請問要[accent]載入[]資料,還是[accent]放棄[]並重置新戰役的科技樹(建議)?
|
research.legacy = [accent]5.0[] 偵測到舊有科技資料。\n請問要[accent]載入[]資料,還是[accent]放棄[]並重置新戰役的科技樹(建議)?
|
||||||
@@ -214,6 +216,7 @@ hosts.none = [lightgray]找不到區域網路伺服器!
|
|||||||
host.invalid = [scarlet]無法連線至伺服器。
|
host.invalid = [scarlet]無法連線至伺服器。
|
||||||
|
|
||||||
servers.local = 區域伺服器
|
servers.local = 區域伺服器
|
||||||
|
servers.local.steam = 開放遊戲間與區域伺服器
|
||||||
servers.remote = 遠端伺服器
|
servers.remote = 遠端伺服器
|
||||||
servers.global = 社群伺服器
|
servers.global = 社群伺服器
|
||||||
|
|
||||||
@@ -315,7 +318,7 @@ data.invalid = 這不是有效的遊戲資料。
|
|||||||
data.import.confirm = 導入外部資料將會覆寫您目前[scarlet]所有的[]遊戲資料,\n[accent]此動作無法復原![]\n\n匯入資料後,您的遊戲將立刻結束。
|
data.import.confirm = 導入外部資料將會覆寫您目前[scarlet]所有的[]遊戲資料,\n[accent]此動作無法復原![]\n\n匯入資料後,您的遊戲將立刻結束。
|
||||||
quit.confirm = 您確定要結束嗎?
|
quit.confirm = 您確定要結束嗎?
|
||||||
loading = [accent]載入中……
|
loading = [accent]載入中……
|
||||||
reloading = [accent]模組重新載入中……
|
downloading = [accent]下載中……
|
||||||
saving = [accent]儲存中……
|
saving = [accent]儲存中……
|
||||||
respawn = [accent][[{0}][]重生
|
respawn = [accent][[{0}][]重生
|
||||||
cancelbuilding = [accent][[{0}][]清除計畫
|
cancelbuilding = [accent][[{0}][]清除計畫
|
||||||
@@ -343,9 +346,9 @@ custom = 自訂
|
|||||||
builtin = 内建
|
builtin = 内建
|
||||||
map.delete.confirm = 確認要刪除地圖嗎?此動作無法復原!
|
map.delete.confirm = 確認要刪除地圖嗎?此動作無法復原!
|
||||||
map.random = [accent]隨機地圖
|
map.random = [accent]隨機地圖
|
||||||
map.nospawn = 這個地圖沒有核心!請在編輯器中添加一個[accent]橘色[]的核心。
|
map.nospawn = 這個地圖沒有核心!請在編輯器中添加一個[#{0}]{1}[]的核心。
|
||||||
map.nospawn.pvp = 這個地圖沒有敵對核心讓玩家重生!請在編輯器中添加一個[scarlet]不是橘色[]的核心。
|
map.nospawn.pvp = 這個地圖沒有敵對核心讓玩家重生!請在編輯器中添加一個[scarlet]不是橘色[]的核心。
|
||||||
map.nospawn.attack = 這個地圖沒有敵人核心可以攻擊!請在編輯器中添加一個[scarlet]紅色[]的核心。
|
map.nospawn.attack = 這個地圖沒有敵人核心可以攻擊!請在編輯器中添加一個[#{0}]{1}[]的核心。
|
||||||
map.invalid = 地圖載入錯誤:地圖可能已經損毀。
|
map.invalid = 地圖載入錯誤:地圖可能已經損毀。
|
||||||
workshop.update = 更新項目
|
workshop.update = 更新項目
|
||||||
workshop.error = 擷取工作坊詳細資訊時出錯:{0}
|
workshop.error = 擷取工作坊詳細資訊時出錯:{0}
|
||||||
@@ -383,7 +386,8 @@ waves.waves = 波次
|
|||||||
waves.perspawn = 每次生成
|
waves.perspawn = 每次生成
|
||||||
waves.shields = 護盾/波次
|
waves.shields = 護盾/波次
|
||||||
waves.to = 至
|
waves.to = 至
|
||||||
waves.guardian = 頭目
|
waves.max = 最大單位數
|
||||||
|
waves.guardian = 守衛者
|
||||||
waves.preview = 預覽
|
waves.preview = 預覽
|
||||||
waves.edit = 編輯……
|
waves.edit = 編輯……
|
||||||
waves.copy = 複製到剪貼簿
|
waves.copy = 複製到剪貼簿
|
||||||
@@ -391,6 +395,11 @@ waves.load = 從剪貼簿載入
|
|||||||
waves.invalid = 剪貼簿中的波次無效。
|
waves.invalid = 剪貼簿中的波次無效。
|
||||||
waves.copied = 波次已複製。
|
waves.copied = 波次已複製。
|
||||||
waves.none = 無自訂敵人。\n請注意,若沒有波次佈局將自動替換為預設佈局。
|
waves.none = 無自訂敵人。\n請注意,若沒有波次佈局將自動替換為預設佈局。
|
||||||
|
waves.sort = 分類排序:
|
||||||
|
waves.sort.reverse = 反向排序
|
||||||
|
waves.sort.begin = 開始
|
||||||
|
waves.sort.health = 血量
|
||||||
|
waves.sort.type = 兵種
|
||||||
|
|
||||||
#校正用空行
|
#校正用空行
|
||||||
wavemode.counts = 數量
|
wavemode.counts = 數量
|
||||||
@@ -460,6 +469,7 @@ toolmode.drawteams = 繪製團隊
|
|||||||
toolmode.drawteams.description = 繪製團隊而非方塊。
|
toolmode.drawteams.description = 繪製團隊而非方塊。
|
||||||
|
|
||||||
filters.empty = [lightgray]沒有過濾器!使用下面的按鈕新增一個。
|
filters.empty = [lightgray]沒有過濾器!使用下面的按鈕新增一個。
|
||||||
|
|
||||||
filter.distort = 扭曲
|
filter.distort = 扭曲
|
||||||
filter.noise = 雜訊
|
filter.noise = 雜訊
|
||||||
filter.enemyspawn = 敵人重生選擇
|
filter.enemyspawn = 敵人重生選擇
|
||||||
@@ -476,6 +486,7 @@ filter.clear = 清除
|
|||||||
filter.option.ignore = 忽略
|
filter.option.ignore = 忽略
|
||||||
filter.scatter = 分散
|
filter.scatter = 分散
|
||||||
filter.terrain = 地形
|
filter.terrain = 地形
|
||||||
|
|
||||||
filter.option.scale = 規模
|
filter.option.scale = 規模
|
||||||
filter.option.chance = 機會
|
filter.option.chance = 機會
|
||||||
filter.option.mag = 大小
|
filter.option.mag = 大小
|
||||||
@@ -490,6 +501,7 @@ filter.option.block = 方塊
|
|||||||
filter.option.floor = 地板
|
filter.option.floor = 地板
|
||||||
filter.option.flooronto = 目標地板
|
filter.option.flooronto = 目標地板
|
||||||
filter.option.target = 目標
|
filter.option.target = 目標
|
||||||
|
filter.option.replacement = 取代
|
||||||
filter.option.wall = 牆
|
filter.option.wall = 牆
|
||||||
filter.option.ore = 礦石
|
filter.option.ore = 礦石
|
||||||
filter.option.floor2 = 次要地板
|
filter.option.floor2 = 次要地板
|
||||||
@@ -533,7 +545,8 @@ configure = 設定
|
|||||||
|
|
||||||
loadout = 裝載
|
loadout = 裝載
|
||||||
resources = 資源
|
resources = 資源
|
||||||
bannedblocks = 停用方塊
|
bannedblocks = 禁用方塊
|
||||||
|
bannedunits = 禁用單位
|
||||||
addall = 全部加入
|
addall = 全部加入
|
||||||
launch.from = 發射來源:[accent]{0}
|
launch.from = 發射來源:[accent]{0}
|
||||||
launch.destination = 目的地:{0}
|
launch.destination = 目的地:{0}
|
||||||
@@ -558,10 +571,13 @@ weather.sandstorm.name = 沙塵暴
|
|||||||
weather.sporestorm.name = 孢子風暴
|
weather.sporestorm.name = 孢子風暴
|
||||||
weather.fog.name = 霧
|
weather.fog.name = 霧
|
||||||
|
|
||||||
|
sectorlist = 地區
|
||||||
|
sectorlist.attacked = {0} 遭受攻擊
|
||||||
sectors.unexplored = [lightgray]未探索
|
sectors.unexplored = [lightgray]未探索
|
||||||
sectors.resources = 資源:
|
sectors.resources = 資源:
|
||||||
sectors.production = 生產:
|
sectors.production = 生產:
|
||||||
sectors.export = 出口:
|
sectors.export = 輸出:
|
||||||
|
sectors.import = 輸入:
|
||||||
sectors.time = 佔領時間:
|
sectors.time = 佔領時間:
|
||||||
sectors.threat = 危險性:
|
sectors.threat = 危險性:
|
||||||
sectors.wave = 波次:
|
sectors.wave = 波次:
|
||||||
@@ -639,10 +655,12 @@ status.sapped.name = 被吸血
|
|||||||
status.electrified.name = 觸電
|
status.electrified.name = 觸電
|
||||||
status.spore-slowed.name = 孢子緩速
|
status.spore-slowed.name = 孢子緩速
|
||||||
status.tarred.name = 焦油
|
status.tarred.name = 焦油
|
||||||
|
status.overdrive.name = 超載
|
||||||
status.overclock.name = 快轉
|
status.overclock.name = 快轉
|
||||||
status.shocked.name = 電擊
|
status.shocked.name = 電擊
|
||||||
status.blasted.name = 爆炸
|
status.blasted.name = 爆炸
|
||||||
status.unmoving.name = 立定
|
status.unmoving.name = 立定
|
||||||
|
status.boss.name = 守衛者
|
||||||
|
|
||||||
settings.language = 語言
|
settings.language = 語言
|
||||||
settings.data = 遊戲資料
|
settings.data = 遊戲資料
|
||||||
@@ -675,6 +693,7 @@ unit.nobuild = [scarlet]單位不能建造
|
|||||||
lastaccessed = [lightgray]最後使用:{0}
|
lastaccessed = [lightgray]最後使用:{0}
|
||||||
block.unknown = [lightgray]???
|
block.unknown = [lightgray]???
|
||||||
|
|
||||||
|
stat.showinmap = <加載地圖以顯示>
|
||||||
stat.description = 用途
|
stat.description = 用途
|
||||||
stat.input = 輸入
|
stat.input = 輸入
|
||||||
stat.output = 輸出
|
stat.output = 輸出
|
||||||
@@ -720,7 +739,7 @@ stat.maxconsecutive = 最大連續
|
|||||||
stat.buildcost = 建造成本
|
stat.buildcost = 建造成本
|
||||||
stat.inaccuracy = 誤差
|
stat.inaccuracy = 誤差
|
||||||
stat.shots = 射擊數
|
stat.shots = 射擊數
|
||||||
stat.reload = 射擊次數/秒
|
stat.reload = 射擊速率
|
||||||
stat.ammo = 彈藥
|
stat.ammo = 彈藥
|
||||||
stat.shieldhealth = 護盾生命值
|
stat.shieldhealth = 護盾生命值
|
||||||
stat.cooldowntime = 冷確時間
|
stat.cooldowntime = 冷確時間
|
||||||
@@ -766,7 +785,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.boost = 速度加成:+{0}%
|
||||||
bar.powerbalance = 能量變化:{0}
|
bar.powerbalance = 能量變化:{0}
|
||||||
bar.powerstored = 能量存量:{0}/{1}
|
bar.powerstored = 能量存量:{0}/{1}
|
||||||
bar.poweramount = 能量:{0}
|
bar.poweramount = 能量:{0}
|
||||||
@@ -789,7 +808,7 @@ bullet.damage = [stat]{0}[lightgray]傷害
|
|||||||
bullet.splashdamage = [stat]{0}[lightgray]範圍傷害 ~[stat] {1}[lightgray]格
|
bullet.splashdamage = [stat]{0}[lightgray]範圍傷害 ~[stat] {1}[lightgray]格
|
||||||
bullet.incendiary = [stat]燃燒
|
bullet.incendiary = [stat]燃燒
|
||||||
bullet.homing = [stat]追蹤
|
bullet.homing = [stat]追蹤
|
||||||
bullet.frag = [stat]破片彈
|
bullet.frag = [stat]{0}[lightgray]x 破片彈
|
||||||
bullet.lightning = [stat]{0}[lightgray]x 電弧 ~ [stat]{1}[lightgray] 傷害
|
bullet.lightning = [stat]{0}[lightgray]x 電弧 ~ [stat]{1}[lightgray] 傷害
|
||||||
bullet.buildingdamage = [stat]{0}%[lightgray] 建築傷害
|
bullet.buildingdamage = [stat]{0}%[lightgray] 建築傷害
|
||||||
bullet.knockback = [stat]{0}[lightgray]擊退
|
bullet.knockback = [stat]{0}[lightgray]擊退
|
||||||
@@ -802,6 +821,7 @@ bullet.reload = [stat]{0}[lightgray]×射擊速率
|
|||||||
unit.blocks = 方塊
|
unit.blocks = 方塊
|
||||||
unit.blockssquared = 方塊²
|
unit.blockssquared = 方塊²
|
||||||
unit.powersecond = 能量單位/秒
|
unit.powersecond = 能量單位/秒
|
||||||
|
unit.tilessecond = 方格/秒
|
||||||
unit.liquidsecond = 液體單位/秒
|
unit.liquidsecond = 液體單位/秒
|
||||||
unit.itemssecond = 物品/秒
|
unit.itemssecond = 物品/秒
|
||||||
unit.liquidunits = 液體單位
|
unit.liquidunits = 液體單位
|
||||||
@@ -825,22 +845,21 @@ category.power = 能量
|
|||||||
category.liquids = 液體
|
category.liquids = 液體
|
||||||
category.items = 物品
|
category.items = 物品
|
||||||
category.crafting = 需求
|
category.crafting = 需求
|
||||||
category.function = 方法
|
category.function = 功能
|
||||||
category.optional = 可選的強化
|
category.optional = 額外的強化效果
|
||||||
|
setting.skipcoreanimation.name = 跳過核心發射/降落動畫
|
||||||
setting.landscape.name = 鎖定水平畫面
|
setting.landscape.name = 鎖定水平畫面
|
||||||
setting.shadows.name = 陰影
|
setting.shadows.name = 陰影
|
||||||
setting.blockreplace.name = 方塊建造建議
|
setting.blockreplace.name = 方塊建造建議
|
||||||
setting.linear.name = 線性過濾
|
setting.linear.name = 線性過濾
|
||||||
setting.hints.name = 提示
|
setting.hints.name = 提示
|
||||||
setting.logichints.name = 邏輯提示
|
setting.logichints.name = 邏輯提示
|
||||||
setting.flow.name = 顯示資源輸送速度
|
setting.backgroundpause.name = 背景執行時暫停遊戲
|
||||||
setting.backgroundpause.name = 背景執行時暫停
|
|
||||||
setting.buildautopause.name = 自動暫停建築
|
setting.buildautopause.name = 自動暫停建築
|
||||||
setting.doubletapmine.name = 連續點擊以挖礦
|
setting.doubletapmine.name = 連續點擊以挖礦
|
||||||
setting.modcrashdisable.name = 閃退後停用模組
|
setting.modcrashdisable.name = 閃退後停用模組
|
||||||
setting.animatedwater.name = 液體動畫
|
setting.animatedwater.name = 顯示液面動畫
|
||||||
setting.animatedshields.name = 護盾動畫
|
setting.animatedshields.name = 顯示護盾動畫
|
||||||
setting.antialias.name = 消除鋸齒[lightgray](需要重新啟動遊戲)[]
|
|
||||||
setting.playerindicators.name = 盟友標示
|
setting.playerindicators.name = 盟友標示
|
||||||
setting.indicators.name = 敵方標示
|
setting.indicators.name = 敵方標示
|
||||||
setting.autotarget.name = 自動射擊
|
setting.autotarget.name = 自動射擊
|
||||||
@@ -849,7 +868,8 @@ 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 = 使用者介面縮放[lightgray](需要重新啟動遊戲)[]
|
setting.uiscale.name = 操作介面大小
|
||||||
|
setting.uiscale.description = 需要重新啟動遊戲以更改大小
|
||||||
setting.swapdiagonal.name = 預設對角線放置
|
setting.swapdiagonal.name = 預設對角線放置
|
||||||
setting.difficulty.training = 訓練
|
setting.difficulty.training = 訓練
|
||||||
setting.difficulty.easy = 簡單
|
setting.difficulty.easy = 簡單
|
||||||
@@ -867,7 +887,9 @@ setting.saveinterval.name = 自動存檔間隔
|
|||||||
setting.seconds = {0}秒
|
setting.seconds = {0}秒
|
||||||
setting.milliseconds = {0}毫秒
|
setting.milliseconds = {0}毫秒
|
||||||
setting.fullscreen.name = 全螢幕
|
setting.fullscreen.name = 全螢幕
|
||||||
setting.borderlesswindow.name = 無邊框視窗[lightgray](可能需要重新啟動遊戲)
|
setting.borderlesswindow.name = 無邊框視窗
|
||||||
|
setting.borderlesswindow.name.windows = 無邊框全螢幕
|
||||||
|
setting.borderlesswindow.description = 可能需重新啟動遊戲以變更
|
||||||
setting.fps.name = 顯示FPS與延遲
|
setting.fps.name = 顯示FPS與延遲
|
||||||
setting.smoothcamera.name = 平滑攝影機
|
setting.smoothcamera.name = 平滑攝影機
|
||||||
setting.vsync.name = 垂直同步
|
setting.vsync.name = 垂直同步
|
||||||
@@ -990,7 +1012,10 @@ rules.wavetimer = 波次時間
|
|||||||
rules.waves = 波次
|
rules.waves = 波次
|
||||||
rules.attack = 攻擊模式
|
rules.attack = 攻擊模式
|
||||||
rules.buildai = 電腦自動建築
|
rules.buildai = 電腦自動建築
|
||||||
|
rules.aitier = AI 等級
|
||||||
|
rules.cleanupdeadteams = 移除戰敗玩家的建築(對戰)
|
||||||
rules.corecapture = 佔領摧毀的核心
|
rules.corecapture = 佔領摧毀的核心
|
||||||
|
rules.polygoncoreprotection = 核心禁築區呈多邊形
|
||||||
rules.enemyCheat = 電腦無限資源
|
rules.enemyCheat = 電腦無限資源
|
||||||
rules.blockhealthmultiplier = 建築物耐久度倍數
|
rules.blockhealthmultiplier = 建築物耐久度倍數
|
||||||
rules.blockdamagemultiplier = 建築物傷害倍數
|
rules.blockdamagemultiplier = 建築物傷害倍數
|
||||||
@@ -1007,12 +1032,15 @@ rules.deconstructrefundmultiplier = 拆除資源返還比例
|
|||||||
rules.waitForWaveToEnd = 等待所有敵人毀滅才開始下一波次
|
rules.waitForWaveToEnd = 等待所有敵人毀滅才開始下一波次
|
||||||
rules.dropzoneradius = 空降區半徑:[lightgray](格)
|
rules.dropzoneradius = 空降區半徑:[lightgray](格)
|
||||||
rules.unitammo = 單位需要彈藥
|
rules.unitammo = 單位需要彈藥
|
||||||
|
rules.enemyteam = 敵方隊伍
|
||||||
|
rules.playerteam = 玩家隊伍
|
||||||
rules.title.waves = 波次
|
rules.title.waves = 波次
|
||||||
rules.title.resourcesbuilding = 資源與建築
|
rules.title.resourcesbuilding = 資源與建築
|
||||||
rules.title.enemy = 敵人
|
rules.title.enemy = 敵人
|
||||||
rules.title.unit = 單位
|
rules.title.unit = 單位
|
||||||
rules.title.experimental = 實驗中
|
rules.title.experimental = 實驗中
|
||||||
rules.title.environment = 環境
|
rules.title.environment = 環境
|
||||||
|
rules.title.teams = 分隊
|
||||||
rules.lighting = 光照
|
rules.lighting = 光照
|
||||||
rules.enemyLights = 敵方發光
|
rules.enemyLights = 敵方發光
|
||||||
rules.fire = 火
|
rules.fire = 火
|
||||||
@@ -1091,7 +1119,6 @@ unit.reign.name = 帝王
|
|||||||
unit.vela.name = 船帆座
|
unit.vela.name = 船帆座
|
||||||
unit.corvus.name = 烏鴉座
|
unit.corvus.name = 烏鴉座
|
||||||
|
|
||||||
block.resupply-point.name = 補給點
|
|
||||||
block.parallax.name = 視差
|
block.parallax.name = 視差
|
||||||
block.cliff.name = 峭壁
|
block.cliff.name = 峭壁
|
||||||
block.sand-boulder.name = 沙礫巨岩
|
block.sand-boulder.name = 沙礫巨岩
|
||||||
@@ -1161,6 +1188,7 @@ block.spore-cluster.name = 孢子簇
|
|||||||
block.metal-floor.name = 金屬地板
|
block.metal-floor.name = 金屬地板
|
||||||
block.metal-floor-2.name = 金屬地板 2
|
block.metal-floor-2.name = 金屬地板 2
|
||||||
block.metal-floor-3.name = 金屬地板 3
|
block.metal-floor-3.name = 金屬地板 3
|
||||||
|
block.metal-floor-4.name = 金屬地板 4
|
||||||
block.metal-floor-5.name = 金屬地板 5
|
block.metal-floor-5.name = 金屬地板 5
|
||||||
block.metal-floor-damaged.name = 損壞的金屬地板
|
block.metal-floor-damaged.name = 損壞的金屬地板
|
||||||
block.dark-panel-1.name = 黑面板 1
|
block.dark-panel-1.name = 黑面板 1
|
||||||
@@ -1282,7 +1310,6 @@ block.meltdown.name = 熔毀砲
|
|||||||
block.foreshadow.name = 狙擊砲
|
block.foreshadow.name = 狙擊砲
|
||||||
block.container.name = 容器
|
block.container.name = 容器
|
||||||
block.launch-pad.name = 小型發射台
|
block.launch-pad.name = 小型發射台
|
||||||
block.launch-pad-large.name = 大型發射台
|
|
||||||
block.segment.name = 片段
|
block.segment.name = 片段
|
||||||
block.command-center.name = 指揮中心
|
block.command-center.name = 指揮中心
|
||||||
block.ground-factory.name = 地面工廠
|
block.ground-factory.name = 地面工廠
|
||||||
@@ -1294,14 +1321,20 @@ block.exponential-reconstructor.name = 四級重塑者
|
|||||||
block.tetrative-reconstructor.name = 五級重塑者
|
block.tetrative-reconstructor.name = 五級重塑者
|
||||||
block.payload-conveyor.name = 原料輸送帶
|
block.payload-conveyor.name = 原料輸送帶
|
||||||
block.payload-router.name = 原料分配器
|
block.payload-router.name = 原料分配器
|
||||||
|
block.duct.name = 類真空管
|
||||||
|
block.duct-router.name = 真空管分配器
|
||||||
|
block.duct-bridge.name = 真空管橋
|
||||||
|
block.payload-propulsion-tower.name = 原料推進塔
|
||||||
|
block.payload-void.name = 原料虛空
|
||||||
|
block.payload-source.name = 原料源
|
||||||
block.disassembler.name = 還原機
|
block.disassembler.name = 還原機
|
||||||
block.silicon-crucible.name = 矽爐
|
block.silicon-crucible.name = 矽爐
|
||||||
block.overdrive-dome.name = 高速拱頂
|
block.overdrive-dome.name = 高速拱頂
|
||||||
|
block.interplanetary-accelerator.name = 星際加速站
|
||||||
#以下為實驗性建築,未來可能移除 experimental, may be removed
|
#以下為實驗性建築,未來可能移除 experimental, may be removed
|
||||||
block.block-forge.name = 方塊鑄造坊
|
block.block-forge.name = 方塊鑄造坊
|
||||||
block.block-loader.name = 方塊裝載器
|
block.block-loader.name = 方塊裝載器
|
||||||
block.block-unloader.name = 方塊卸載器
|
block.block-unloader.name = 方塊卸載器
|
||||||
block.interplanetary-accelerator.name = 星際加速站
|
|
||||||
|
|
||||||
block.switch.name = 按鈕
|
block.switch.name = 按鈕
|
||||||
block.micro-processor.name = 微處理器
|
block.micro-processor.name = 微處理器
|
||||||
@@ -1335,6 +1368,8 @@ hint.placeConveyor.mobile = [accent]輸送帶[]能夠將物品運到其他地方
|
|||||||
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.blockInfo = 點擊各種方塊的[accent][[?][]按鈕以檢視該方塊的資訊
|
||||||
|
hint.derelict = [accent]Derelict[] 地圖中有先前基地留下的遺骸。\n\n可以[accent]銷毀[]這些建築獲得資源。
|
||||||
hint.research = 使用 \ue875 [accent]研究[] 按鈕來研究新科技。
|
hint.research = 使用 \ue875 [accent]研究[] 按鈕來研究新科技。
|
||||||
hint.research.mobile = 使用 \ue875 [accent]研究[] 按鈕來研究新科技。
|
hint.research.mobile = 使用 \ue875 [accent]研究[] 按鈕來研究新科技。
|
||||||
hint.unitControl = 按住[accent][[L-ctrl][]並[accent]點擊[]以控制我方的機甲和砲台。
|
hint.unitControl = 按住[accent][[L-ctrl][]並[accent]點擊[]以控制我方的機甲和砲台。
|
||||||
@@ -1386,7 +1421,7 @@ liquid.slag.description = 各種不同類型的熔融金屬混合在一起的液
|
|||||||
liquid.oil.description = 用於進階材料製造的液體。可以轉化為煤炭作為燃料或噴灑向敵方單位後點燃作為武器。
|
liquid.oil.description = 用於進階材料製造的液體。可以轉化為煤炭作為燃料或噴灑向敵方單位後點燃作為武器。
|
||||||
liquid.cryofluid.description = 一種安定,無腐蝕性的液體,用水及鈦混合成。具有很高的比熱。廣泛的用作冷卻劑。
|
liquid.cryofluid.description = 一種安定,無腐蝕性的液體,用水及鈦混合成。具有很高的比熱。廣泛的用作冷卻劑。
|
||||||
|
|
||||||
block.resupply-point.description = 補給銅礦彈藥給附近的單位。無法用於需要電池電力的單位。
|
block.derelict = [lightgray]殘骸
|
||||||
block.armored-conveyor.description = 以與鈦輸送帶相同的速度移動物品,但擁有更高的防禦。不接受任何從側面輸入的資源。
|
block.armored-conveyor.description = 以與鈦輸送帶相同的速度移動物品,但擁有更高的防禦。不接受任何從側面輸入的資源。
|
||||||
block.illuminator.description = 小而美的光源。
|
block.illuminator.description = 小而美的光源。
|
||||||
block.message.description = 儲存一條訊息。用於盟友之間的溝通。
|
block.message.description = 儲存一條訊息。用於盟友之間的溝通。
|
||||||
@@ -1412,6 +1447,8 @@ block.item-source.description = 無限輸出物品。僅限沙盒。
|
|||||||
block.item-void.description = 不使用能量銷毀任何進入它的物品。僅限沙盒。
|
block.item-void.description = 不使用能量銷毀任何進入它的物品。僅限沙盒。
|
||||||
block.liquid-source.description = 無限輸出液體。僅限沙盒。
|
block.liquid-source.description = 無限輸出液體。僅限沙盒。
|
||||||
block.liquid-void.description = 銷毀所有輸入的液體。僅限沙盒。
|
block.liquid-void.description = 銷毀所有輸入的液體。僅限沙盒。
|
||||||
|
block.payload-source.description = 無限輸出原料。僅限沙盒。
|
||||||
|
block.payload-void.description = 銷毀所有進入的原料。僅限沙盒。
|
||||||
block.copper-wall.description = 一種便宜的防禦方塊。\n用於前幾波防衛核心和砲塔。
|
block.copper-wall.description = 一種便宜的防禦方塊。\n用於前幾波防衛核心和砲塔。
|
||||||
block.copper-wall-large.description = 一種便宜的防禦方塊。\n用於前幾波防禦核心和砲塔\n佔據多個方塊。
|
block.copper-wall-large.description = 一種便宜的防禦方塊。\n用於前幾波防禦核心和砲塔\n佔據多個方塊。
|
||||||
block.titanium-wall.description = 一個中等強度的防禦方塊。\n提供對敵人的適度保護。
|
block.titanium-wall.description = 一個中等強度的防禦方塊。\n提供對敵人的適度保護。
|
||||||
@@ -1530,6 +1567,8 @@ block.memory-bank.description = 為邏輯處理器儲存資料。大容量。
|
|||||||
block.logic-display.description = 顯示由處理器輸出的任意圖像。
|
block.logic-display.description = 顯示由處理器輸出的任意圖像。
|
||||||
block.large-logic-display.description = 顯示由處理器輸出的任意圖像。
|
block.large-logic-display.description = 顯示由處理器輸出的任意圖像。
|
||||||
block.interplanetary-accelerator.description = 巨大的電磁砲塔。將核心加速至脫離速度以在其他星球部署。
|
block.interplanetary-accelerator.description = 巨大的電磁砲塔。將核心加速至脫離速度以在其他星球部署。
|
||||||
|
block.repair-turret.description = 持續修復最靠近的受損單位。能使用冷卻劑。
|
||||||
|
block.payload-propulsion-tower.description = 遠程原料輸送建築。發射原料至另一個連接的推進塔。
|
||||||
|
|
||||||
unit.dagger.description = 發射普通子彈攻擊附近敵人。
|
unit.dagger.description = 發射普通子彈攻擊附近敵人。
|
||||||
unit.mace.description = 噴發烈焰攻擊所有附近敵人。
|
unit.mace.description = 噴發烈焰攻擊所有附近敵人。
|
||||||
@@ -1564,6 +1603,11 @@ unit.omura.description = 對敵人發射遠程穿透型砲彈。建造曳光戰
|
|||||||
unit.alpha.description = 抵禦敵軍對核心:碎片的攻擊。建造建築物。
|
unit.alpha.description = 抵禦敵軍對核心:碎片的攻擊。建造建築物。
|
||||||
unit.beta.description = 抵禦敵軍對核心:基地的攻擊。建造建築物。
|
unit.beta.description = 抵禦敵軍對核心:基地的攻擊。建造建築物。
|
||||||
unit.gamma.description = 抵禦敵軍對核心:核子的攻擊。建造建築物。
|
unit.gamma.description = 抵禦敵軍對核心:核子的攻擊。建造建築物。
|
||||||
|
unit.retusa.description = 布置水雷。修復友方單位。
|
||||||
|
unit.oxynoe.description = 射出帶回復建築的火焰。具小型方陣炮。
|
||||||
|
unit.cyerce.description = 發射追蹤集束飛彈。修復友方單位。
|
||||||
|
unit.aegires.description = 電擊所有在能量場內的敵方單位、建築。修復友方單位。
|
||||||
|
unit.navanax.description = 發射電磁脈衝砲彈。能對敵方電力建築造成大量傷害,並修復友方建築。具4座雷射自動砲台攻擊附近敵人。
|
||||||
|
|
||||||
lst.read = [accent]讀取[]記憶體中的一項數值
|
lst.read = [accent]讀取[]記憶體中的一項數值
|
||||||
lst.write = [accent]寫入[]一項數值到記憶體中
|
lst.write = [accent]寫入[]一項數值到記憶體中
|
||||||
@@ -1578,6 +1622,8 @@ lst.sensor = 獲取該建築或單位的數據
|
|||||||
lst.set = 設一個變數
|
lst.set = 設一個變數
|
||||||
lst.operation = 加減乘除和計算機概論
|
lst.operation = 加減乘除和計算機概論
|
||||||
lst.end = 跳到第一個重頭開始執行
|
lst.end = 跳到第一個重頭開始執行
|
||||||
|
lst.wait = 等待特定秒數
|
||||||
|
lst.lookup = Look up an item/liquid/unit/block type by ID.\nTotal counts of each type can be accessed with:\n[accent]@unitCount[] / [accent]@itemCount[] / [accent]@liquidCount[] / [accent]@blockCount[]
|
||||||
lst.jump = 條件式跳到其他指令執行
|
lst.jump = 條件式跳到其他指令執行
|
||||||
lst.unitbind = 綁定下一同種單位,存入[accent]@unit[]中.
|
lst.unitbind = 綁定下一同種單位,存入[accent]@unit[]中.
|
||||||
lst.unitcontrol = 控制現在綁定的單位
|
lst.unitcontrol = 控制現在綁定的單位
|
||||||
@@ -1597,6 +1643,7 @@ laccess.controller = 單位的控制者。受處理器控制時回傳處理器
|
|||||||
laccess.dead = 單位或建築是否已死亡或不存在。
|
laccess.dead = 單位或建築是否已死亡或不存在。
|
||||||
laccess.controlled = 將回傳:\n處理器控制:[accent]@ctrlProcessor[]\n玩家控制:[accent]@ctrlPlayer[]\n在隊形中:[accent]@ctrlFormation[]\n其他:[accent]0[]。
|
laccess.controlled = 將回傳:\n處理器控制:[accent]@ctrlProcessor[]\n玩家控制:[accent]@ctrlPlayer[]\n在隊形中:[accent]@ctrlFormation[]\n其他:[accent]0[]。
|
||||||
laccess.commanded = [red]Deprecated. Will be removed![]\nUse [accent]controlled[] instead.
|
laccess.commanded = [red]Deprecated. Will be removed![]\nUse [accent]controlled[] instead.
|
||||||
|
laccess.progress = 建造、生產進度。以 0 到 1 表示。以及砲台裝填。
|
||||||
|
|
||||||
graphicstype.clear = 重製版面為指定顏色
|
graphicstype.clear = 重製版面為指定顏色
|
||||||
graphicstype.color = 為後續所有圖畫指令設定顏色
|
graphicstype.color = 為後續所有圖畫指令設定顏色
|
||||||
@@ -1628,9 +1675,15 @@ lenum.min = 兩數取小
|
|||||||
lenum.max = 兩數取大
|
lenum.max = 兩數取大
|
||||||
lenum.angle = 向量與x軸夾角
|
lenum.angle = 向量與x軸夾角
|
||||||
lenum.len = 向量長度
|
lenum.len = 向量長度
|
||||||
|
|
||||||
lenum.sin = 度數Sin值
|
lenum.sin = 度數Sin值
|
||||||
lenum.cos = 度數Cos值
|
lenum.cos = 度數Cos值
|
||||||
lenum.tan = 度數Tan值
|
lenum.tan = 度數Tan值
|
||||||
|
|
||||||
|
lenum.asin = Arc sin,輸出度數
|
||||||
|
lenum.acos = Arc cos,輸出度數
|
||||||
|
lenum.atan = Arc tan,輸出度數
|
||||||
|
|
||||||
#not a typo, look up 'range notation'
|
#not a typo, look up 'range notation'
|
||||||
lenum.rand = 產生隨機數值: [0, 值).
|
lenum.rand = 產生隨機數值: [0, 值).
|
||||||
lenum.log = 自然對數(ln、log_e).
|
lenum.log = 自然對數(ln、log_e).
|
||||||
|
|||||||
@@ -127,3 +127,4 @@ WilloIzCitron
|
|||||||
SAMBUYYA
|
SAMBUYYA
|
||||||
genNAowl
|
genNAowl
|
||||||
TranquillyUnpleasant
|
TranquillyUnpleasant
|
||||||
|
Darkness6030
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
63743=spawn|block-spawn-ui
|
63743=spawn|block-spawn-ui
|
||||||
63742=deepwater|block-deepwater-ui
|
63742=deepwater|block-deepwater-ui
|
||||||
63741=water|block-water-ui
|
63741=shallow-water|block-shallow-water-ui
|
||||||
63740=tainted-water|block-tainted-water-ui
|
63740=tainted-water|block-tainted-water-ui
|
||||||
63739=darksand-tainted-water|block-darksand-tainted-water-ui
|
63739=darksand-tainted-water|block-darksand-tainted-water-ui
|
||||||
63738=sand-water|block-sand-water-ui
|
63738=sand-water|block-sand-water-ui
|
||||||
@@ -357,6 +357,6 @@
|
|||||||
63357=crux|team-crux
|
63357=crux|team-crux
|
||||||
63358=derelict|team-derelict
|
63358=derelict|team-derelict
|
||||||
63350=deep-water|block-deep-water-ui
|
63350=deep-water|block-deep-water-ui
|
||||||
63349=shallow-water|block-shallow-water-ui
|
|
||||||
63348=molten-slag|block-molten-slag-ui
|
63348=molten-slag|block-molten-slag-ui
|
||||||
63347=crater-stone|block-crater-stone-ui
|
63347=crater-stone|block-crater-stone-ui
|
||||||
|
63346=deep-tainted-water|block-deep-tainted-water-ui
|
||||||
|
|||||||
BIN
core/assets/maps/coastline.msav
Normal file
BIN
core/assets/maps/navalFortress.msav
Normal file
BIN
core/assets/sounds/wind3.ogg
Normal file
@@ -56,6 +56,9 @@ public abstract class ClientLauncher extends ApplicationCore implements Platform
|
|||||||
Log.info("[GL] Using @ context.", gl30 != null ? "OpenGL 3" : "OpenGL 2");
|
Log.info("[GL] Using @ context.", gl30 != null ? "OpenGL 3" : "OpenGL 2");
|
||||||
if(maxTextureSize < 4096) Log.warn("[GL] Your maximum texture size is below the recommended minimum of 4096. This will cause severe performance issues.");
|
if(maxTextureSize < 4096) Log.warn("[GL] Your maximum texture size is below the recommended minimum of 4096. This will cause severe performance issues.");
|
||||||
Log.info("[JAVA] Version: @", OS.javaVersion);
|
Log.info("[JAVA] Version: @", OS.javaVersion);
|
||||||
|
long ram = Runtime.getRuntime().maxMemory();
|
||||||
|
boolean gb = ram >= 1024 * 1024 * 1024;
|
||||||
|
Log.info("[RAM] Available: @ @", Strings.fixed(gb ? ram / 1024f / 1024 / 1024f : ram / 1024f / 1024f, 1), gb ? "GB" : "MB");
|
||||||
|
|
||||||
Time.setDeltaProvider(() -> {
|
Time.setDeltaProvider(() -> {
|
||||||
float result = Core.graphics.getDeltaTime() * 60f;
|
float result = Core.graphics.getDeltaTime() * 60f;
|
||||||
@@ -83,7 +86,7 @@ public abstract class ClientLauncher extends ApplicationCore implements Platform
|
|||||||
Fonts.loadDefaultFont();
|
Fonts.loadDefaultFont();
|
||||||
|
|
||||||
//load fallback atlas if max texture size is below 4096
|
//load fallback atlas if max texture size is below 4096
|
||||||
assets.load(new AssetDescriptor<>(maxTextureSize >= 4096 ? "sprites/sprites.aatls" : "sprites/fallback/sprites.aatls", TextureAtlas.class)).loaded = t -> atlas = (TextureAtlas)t;
|
assets.load(new AssetDescriptor<>(maxTextureSize >= 4096 ? "sprites/sprites.aatls" : "sprites/fallback/sprites.aatls", TextureAtlas.class)).loaded = t -> atlas = t;
|
||||||
assets.loadRun("maps", Map.class, () -> maps.loadPreviews());
|
assets.loadRun("maps", Map.class, () -> maps.loadPreviews());
|
||||||
|
|
||||||
Musics.load();
|
Musics.load();
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ public class Vars implements Loadable{
|
|||||||
/** Name of current Steam player. */
|
/** Name of current Steam player. */
|
||||||
public static String steamPlayerName = "";
|
public static String steamPlayerName = "";
|
||||||
/** Default accessible content types used for player-selectable icons. */
|
/** Default accessible content types used for player-selectable icons. */
|
||||||
public static final ContentType[] defaultContentIcons = {ContentType.item, ContentType.liquid, ContentType.block};
|
public static final ContentType[] defaultContentIcons = {ContentType.item, ContentType.liquid, ContentType.block, ContentType.unit};
|
||||||
/** Wall darkness radius. */
|
/** Wall darkness radius. */
|
||||||
public static final int darkRadius = 4;
|
public static final int darkRadius = 4;
|
||||||
/** Maximum extra padding around deployment schematics. */
|
/** Maximum extra padding around deployment schematics. */
|
||||||
@@ -87,7 +87,7 @@ public class Vars implements Loadable{
|
|||||||
public static final int maxNameLength = 40;
|
public static final int maxNameLength = 40;
|
||||||
/** displayed item size when ingame. */
|
/** displayed item size when ingame. */
|
||||||
public static final float itemSize = 5f;
|
public static final float itemSize = 5f;
|
||||||
/** units outside of this bound will die instantly */
|
/** units outside this bound will die instantly */
|
||||||
public static final float finalWorldBounds = 250;
|
public static final float finalWorldBounds = 250;
|
||||||
/** range for building */
|
/** range for building */
|
||||||
public static final float buildingRange = 220f;
|
public static final float buildingRange = 220f;
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ import mindustry.game.*;
|
|||||||
import mindustry.game.Schematic.*;
|
import mindustry.game.Schematic.*;
|
||||||
import mindustry.game.Teams.*;
|
import mindustry.game.Teams.*;
|
||||||
import mindustry.gen.*;
|
import mindustry.gen.*;
|
||||||
|
import mindustry.maps.generators.*;
|
||||||
import mindustry.type.*;
|
import mindustry.type.*;
|
||||||
import mindustry.world.*;
|
import mindustry.world.*;
|
||||||
import mindustry.world.blocks.defense.*;
|
import mindustry.world.blocks.defense.*;
|
||||||
@@ -25,7 +26,6 @@ import static mindustry.Vars.*;
|
|||||||
|
|
||||||
public class BaseAI{
|
public class BaseAI{
|
||||||
private static final Vec2 axis = new Vec2(), rotator = new Vec2();
|
private static final Vec2 axis = new Vec2(), rotator = new Vec2();
|
||||||
private static final float correctPercent = 0.5f;
|
|
||||||
private static final int attempts = 4;
|
private static final int attempts = 4;
|
||||||
private static final float emptyChance = 0.01f;
|
private static final float emptyChance = 0.01f;
|
||||||
private static final int timerStep = 0, timerSpawn = 1, timerRefreshPath = 2;
|
private static final int timerStep = 0, timerSpawn = 1, timerRefreshPath = 2;
|
||||||
@@ -46,6 +46,7 @@ public class BaseAI{
|
|||||||
boolean calculating, startedCalculating;
|
boolean calculating, startedCalculating;
|
||||||
int calcCount = 0;
|
int calcCount = 0;
|
||||||
int totalCalcs = 0;
|
int totalCalcs = 0;
|
||||||
|
Block wallType;
|
||||||
|
|
||||||
public BaseAI(TeamData data){
|
public BaseAI(TeamData data){
|
||||||
this.data = data;
|
this.data = data;
|
||||||
@@ -53,6 +54,10 @@ public class BaseAI{
|
|||||||
|
|
||||||
public void update(){
|
public void update(){
|
||||||
|
|
||||||
|
if(wallType == null){
|
||||||
|
wallType = BaseGenerator.getDifficultyWall(1, data.team.rules().aiTier / 0.8f);
|
||||||
|
}
|
||||||
|
|
||||||
if(data.team.rules().aiCoreSpawn && timer.get(timerSpawn, 60 * 2.5f) && data.hasCore()){
|
if(data.team.rules().aiCoreSpawn && timer.get(timerSpawn, 60 * 2.5f) && data.hasCore()){
|
||||||
CoreBlock block = (CoreBlock)data.core().block;
|
CoreBlock block = (CoreBlock)data.core().block;
|
||||||
int coreUnits = Groups.unit.count(u -> u.team == data.team && u.type == block.unitType);
|
int coreUnits = Groups.unit.count(u -> u.team == data.team && u.type == block.unitType);
|
||||||
@@ -89,7 +94,7 @@ public class BaseAI{
|
|||||||
calculating = false;
|
calculating = false;
|
||||||
}
|
}
|
||||||
}else{
|
}else{
|
||||||
var field = pathfinder.getField(state.rules.waveTeam, Pathfinder.costGround, Pathfinder.fieldCore);
|
var field = pathfinder.getField(data.team, Pathfinder.costGround, Pathfinder.fieldCore);
|
||||||
|
|
||||||
if(field.weights != null){
|
if(field.weights != null){
|
||||||
int[][] weights = field.weights;
|
int[][] weights = field.weights;
|
||||||
@@ -120,7 +125,7 @@ public class BaseAI{
|
|||||||
}
|
}
|
||||||
|
|
||||||
//found the end.
|
//found the end.
|
||||||
if(calcTile.build instanceof CoreBuild b && b.team == state.rules.defaultTeam){
|
if(calcTile.build instanceof CoreBuild b && b.team != data.team){
|
||||||
//clean up calculations and flush results
|
//clean up calculations and flush results
|
||||||
calculating = false;
|
calculating = false;
|
||||||
calcCount = 0;
|
calcCount = 0;
|
||||||
@@ -271,7 +276,7 @@ public class BaseAI{
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void tryWalls(){
|
private void tryWalls(){
|
||||||
Block wall = Blocks.copperWall;
|
Block wall = wallType;
|
||||||
Building spawnt = state.rules.defaultTeam.core() != null ? state.rules.defaultTeam.core() : data.team.core();
|
Building spawnt = state.rules.defaultTeam.core() != null ? state.rules.defaultTeam.core() : data.team.core();
|
||||||
Tile spawn = spawnt == null ? null : spawnt.tile;
|
Tile spawn = spawnt == null ? null : spawnt.tile;
|
||||||
|
|
||||||
|
|||||||
@@ -50,10 +50,12 @@ public class BlockIndexer{
|
|||||||
clearFlags();
|
clearFlags();
|
||||||
|
|
||||||
Events.on(TilePreChangeEvent.class, event -> {
|
Events.on(TilePreChangeEvent.class, event -> {
|
||||||
|
if(state.isEditor()) return;
|
||||||
removeIndex(event.tile);
|
removeIndex(event.tile);
|
||||||
});
|
});
|
||||||
|
|
||||||
Events.on(TileChangeEvent.class, event -> {
|
Events.on(TileChangeEvent.class, event -> {
|
||||||
|
if(state.isEditor()) return;
|
||||||
addIndex(event.tile);
|
addIndex(event.tile);
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -109,7 +111,7 @@ public class BlockIndexer{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//update the unit cap when building is remove
|
//update the unit cap when building is removed
|
||||||
data.unitCap -= tile.block().unitCapModifier;
|
data.unitCap -= tile.block().unitCapModifier;
|
||||||
|
|
||||||
//unregister building from building quadtree
|
//unregister building from building quadtree
|
||||||
@@ -202,15 +204,20 @@ public class BlockIndexer{
|
|||||||
}
|
}
|
||||||
|
|
||||||
public boolean eachBlock(@Nullable Team team, float wx, float wy, float range, Boolf<Building> pred, Cons<Building> cons){
|
public boolean eachBlock(@Nullable Team team, float wx, float wy, float range, Boolf<Building> pred, Cons<Building> cons){
|
||||||
breturnArray.clear();
|
|
||||||
|
|
||||||
if(team == null){
|
if(team == null){
|
||||||
|
returnBool = false;
|
||||||
|
|
||||||
allBuildings(wx, wy, range, b -> {
|
allBuildings(wx, wy, range, b -> {
|
||||||
if(pred.get(b)){
|
if(pred.get(b)){
|
||||||
breturnArray.add(b);
|
returnBool = true;
|
||||||
|
cons.get(b);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
return returnBool;
|
||||||
}else{
|
}else{
|
||||||
|
breturnArray.clear();
|
||||||
|
|
||||||
var buildings = team.data().buildings;
|
var buildings = team.data().buildings;
|
||||||
if(buildings == null) return false;
|
if(buildings == null) return false;
|
||||||
buildings.intersect(wx - range, wy - range, range*2f, range*2f, b -> {
|
buildings.intersect(wx - range, wy - range, range*2f, range*2f, b -> {
|
||||||
|
|||||||
@@ -138,7 +138,7 @@ public class Pathfinder implements Runnable{
|
|||||||
/** Starts or restarts the pathfinding thread. */
|
/** Starts or restarts the pathfinding thread. */
|
||||||
private void start(){
|
private void start(){
|
||||||
stop();
|
stop();
|
||||||
thread = Threads.daemon(this);
|
thread = Threads.daemon("Pathfinder", this);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Stops the pathfinding thread. */
|
/** Stops the pathfinding thread. */
|
||||||
|
|||||||
@@ -56,7 +56,7 @@ public class WaveSpawner{
|
|||||||
public void spawnEnemies(){
|
public void spawnEnemies(){
|
||||||
spawning = true;
|
spawning = true;
|
||||||
|
|
||||||
eachGroundSpawn((spawnX, spawnY, doShockwave) -> {
|
eachGroundSpawn(-1, (spawnX, spawnY, doShockwave) -> {
|
||||||
if(doShockwave){
|
if(doShockwave){
|
||||||
doShockwave(spawnX, spawnY);
|
doShockwave(spawnX, spawnY);
|
||||||
}
|
}
|
||||||
@@ -70,7 +70,7 @@ public class WaveSpawner{
|
|||||||
if(group.type.flying){
|
if(group.type.flying){
|
||||||
float spread = margin / 1.5f;
|
float spread = margin / 1.5f;
|
||||||
|
|
||||||
eachFlyerSpawn((spawnX, spawnY) -> {
|
eachFlyerSpawn(group.spawn, (spawnX, spawnY) -> {
|
||||||
for(int i = 0; i < spawned; i++){
|
for(int i = 0; i < spawned; i++){
|
||||||
Unit unit = group.createUnit(state.rules.waveTeam, state.wave - 1);
|
Unit unit = group.createUnit(state.rules.waveTeam, state.wave - 1);
|
||||||
unit.set(spawnX + Mathf.range(spread), spawnY + Mathf.range(spread));
|
unit.set(spawnX + Mathf.range(spread), spawnY + Mathf.range(spread));
|
||||||
@@ -80,7 +80,7 @@ public class WaveSpawner{
|
|||||||
}else{
|
}else{
|
||||||
float spread = tilesize * 2;
|
float spread = tilesize * 2;
|
||||||
|
|
||||||
eachGroundSpawn((spawnX, spawnY, doShockwave) -> {
|
eachGroundSpawn(group.spawn, (spawnX, spawnY, doShockwave) -> {
|
||||||
|
|
||||||
for(int i = 0; i < spawned; i++){
|
for(int i = 0; i < spawned; i++){
|
||||||
Tmp.v1.rnd(spread);
|
Tmp.v1.rnd(spread);
|
||||||
@@ -102,12 +102,14 @@ public class WaveSpawner{
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void eachGroundSpawn(Intc2 cons){
|
public void eachGroundSpawn(Intc2 cons){
|
||||||
eachGroundSpawn((x, y, shock) -> cons.get(World.toTile(x), World.toTile(y)));
|
eachGroundSpawn(-1, (x, y, shock) -> cons.get(World.toTile(x), World.toTile(y)));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void eachGroundSpawn(SpawnConsumer cons){
|
private void eachGroundSpawn(int filterPos, SpawnConsumer cons){
|
||||||
if(state.hasSpawns()){
|
if(state.hasSpawns()){
|
||||||
for(Tile spawn : spawns){
|
for(Tile spawn : spawns){
|
||||||
|
if(filterPos != -1 && filterPos != spawn.pos()) continue;
|
||||||
|
|
||||||
cons.accept(spawn.worldx(), spawn.worldy(), true);
|
cons.accept(spawn.worldx(), spawn.worldy(), true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -115,6 +117,8 @@ public class WaveSpawner{
|
|||||||
if(state.rules.attackMode && state.teams.isActive(state.rules.waveTeam) && !state.teams.playerCores().isEmpty()){
|
if(state.rules.attackMode && state.teams.isActive(state.rules.waveTeam) && !state.teams.playerCores().isEmpty()){
|
||||||
Building firstCore = state.teams.playerCores().first();
|
Building firstCore = state.teams.playerCores().first();
|
||||||
for(Building core : state.rules.waveTeam.cores()){
|
for(Building core : state.rules.waveTeam.cores()){
|
||||||
|
if(filterPos != -1 && filterPos != core.pos()) continue;
|
||||||
|
|
||||||
Tmp.v1.set(firstCore).sub(core).limit(coreMargin + core.block.size * tilesize /2f * Mathf.sqrt2);
|
Tmp.v1.set(firstCore).sub(core).limit(coreMargin + core.block.size * tilesize /2f * Mathf.sqrt2);
|
||||||
|
|
||||||
boolean valid = false;
|
boolean valid = false;
|
||||||
@@ -147,8 +151,10 @@ public class WaveSpawner{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void eachFlyerSpawn(Floatc2 cons){
|
private void eachFlyerSpawn(int filterPos, Floatc2 cons){
|
||||||
for(Tile tile : spawns){
|
for(Tile tile : spawns){
|
||||||
|
if(filterPos != -1 && filterPos != tile.pos()) continue;
|
||||||
|
|
||||||
float angle = Angles.angle(world.width() / 2f, world.height() / 2f, tile.x, tile.y);
|
float angle = Angles.angle(world.width() / 2f, world.height() / 2f, tile.x, tile.y);
|
||||||
float trns = Math.max(world.width(), world.height()) * Mathf.sqrt2 * tilesize;
|
float trns = Math.max(world.width(), world.height()) * Mathf.sqrt2 * tilesize;
|
||||||
float spawnX = Mathf.clamp(world.width() * tilesize / 2f + Angles.trnsx(angle, trns), -margin, world.width() * tilesize + margin);
|
float spawnX = Mathf.clamp(world.width() * tilesize / 2f + Angles.trnsx(angle, trns), -margin, world.width() * tilesize + margin);
|
||||||
@@ -158,6 +164,8 @@ public class WaveSpawner{
|
|||||||
|
|
||||||
if(state.rules.attackMode && state.teams.isActive(state.rules.waveTeam)){
|
if(state.rules.attackMode && state.teams.isActive(state.rules.waveTeam)){
|
||||||
for(Building core : state.rules.waveTeam.data().cores){
|
for(Building core : state.rules.waveTeam.data().cores){
|
||||||
|
if(filterPos != -1 && filterPos != core.pos()) continue;
|
||||||
|
|
||||||
cons.get(core.x, core.y);
|
cons.get(core.x, core.y);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -171,7 +179,7 @@ public class WaveSpawner{
|
|||||||
|
|
||||||
public int countFlyerSpawns(){
|
public int countFlyerSpawns(){
|
||||||
tmpCount = 0;
|
tmpCount = 0;
|
||||||
eachFlyerSpawn((x, y) -> tmpCount ++);
|
eachFlyerSpawn(-1, (x, y) -> tmpCount ++);
|
||||||
return tmpCount;
|
return tmpCount;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -196,6 +204,7 @@ public class WaveSpawner{
|
|||||||
unit.apply(StatusEffects.invincible, 60f);
|
unit.apply(StatusEffects.invincible, 60f);
|
||||||
unit.add();
|
unit.add();
|
||||||
|
|
||||||
|
Events.fire(new UnitSpawnEvent(unit));
|
||||||
Call.spawnEffect(unit.x, unit.y, unit.rotation, unit.type);
|
Call.spawnEffect(unit.x, unit.y, unit.rotation, unit.type);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -15,11 +15,12 @@ import static mindustry.Vars.*;
|
|||||||
public class BuilderAI extends AIController{
|
public class BuilderAI extends AIController{
|
||||||
public static float buildRadius = 1500, retreatDst = 110f, fleeRange = 370f, retreatDelay = Time.toSeconds * 2f;
|
public static float buildRadius = 1500, retreatDst = 110f, fleeRange = 370f, retreatDelay = Time.toSeconds * 2f;
|
||||||
|
|
||||||
|
public @Nullable Unit following;
|
||||||
|
public @Nullable Teamc enemy;
|
||||||
|
public @Nullable BlockPlan lastPlan;
|
||||||
|
|
||||||
boolean found = false;
|
boolean found = false;
|
||||||
@Nullable Unit following;
|
|
||||||
@Nullable Teamc enemy;
|
|
||||||
float retreatTimer;
|
float retreatTimer;
|
||||||
@Nullable BlockPlan lastPlan;
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void updateMovement(){
|
public void updateMovement(){
|
||||||
|
|||||||
@@ -21,12 +21,12 @@ public class DefenderAI extends AIController{
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void updateTargeting(){
|
public void updateTargeting(){
|
||||||
if(retarget()) target = findTarget(unit.x, unit.y, unit.range(), true, true);
|
if(retarget()) target = findTarget(unit.x, unit.y, unit.range(), true, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected Teamc findTarget(float x, float y, float range, boolean air, boolean ground){
|
public Teamc findTarget(float x, float y, float range, boolean air, boolean ground){
|
||||||
|
|
||||||
//find unit to follow if not in rally mode
|
//find unit to follow if not in rally mode
|
||||||
if(command() != UnitCommand.rally){
|
if(command() != UnitCommand.rally){
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ public class FlyingAI extends AIController{
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected Teamc findTarget(float x, float y, float range, boolean air, boolean ground){
|
public Teamc findTarget(float x, float y, float range, boolean air, boolean ground){
|
||||||
var result = findMainTarget(x, y, range, air, ground);
|
var result = findMainTarget(x, y, range, air, ground);
|
||||||
|
|
||||||
//if the main target is in range, use it, otherwise target whatever is closest
|
//if the main target is in range, use it, otherwise target whatever is closest
|
||||||
@@ -40,7 +40,7 @@ public class FlyingAI extends AIController{
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected Teamc findMainTarget(float x, float y, float range, boolean air, boolean ground){
|
public Teamc findMainTarget(float x, float y, float range, boolean air, boolean ground){
|
||||||
var core = targetFlag(x, y, BlockFlag.core, true);
|
var core = targetFlag(x, y, BlockFlag.core, true);
|
||||||
|
|
||||||
if(core != null && Mathf.within(x, y, core.getX(), core.getY(), range)){
|
if(core != null && Mathf.within(x, y, core.getX(), core.getY(), range)){
|
||||||
|
|||||||
@@ -53,7 +53,7 @@ public class FormationAI extends AIController implements FormationMember{
|
|||||||
|
|
||||||
Vec2 realtarget = vec.set(target).add(leader.vel);
|
Vec2 realtarget = vec.set(target).add(leader.vel);
|
||||||
|
|
||||||
float speed = unit.realSpeed() * Time.delta;
|
float speed = unit.speed() * Time.delta;
|
||||||
unit.approach(Mathf.arrive(unit.x, unit.y, realtarget.x, realtarget.y, unit.vel, speed, 0f, speed, 1f).scl(1f / Time.delta));
|
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()){
|
||||||
|
|||||||
@@ -2,7 +2,6 @@ package mindustry.ai.types;
|
|||||||
|
|
||||||
import arc.math.*;
|
import arc.math.*;
|
||||||
import mindustry.ai.*;
|
import mindustry.ai.*;
|
||||||
import mindustry.entities.*;
|
|
||||||
import mindustry.entities.units.*;
|
import mindustry.entities.units.*;
|
||||||
import mindustry.gen.*;
|
import mindustry.gen.*;
|
||||||
import mindustry.world.*;
|
import mindustry.world.*;
|
||||||
@@ -49,13 +48,6 @@ public class GroundAI extends AIController{
|
|||||||
unit.elevation = Mathf.approachDelta(unit.elevation, 0f, unit.type.riseSpeed);
|
unit.elevation = Mathf.approachDelta(unit.elevation, 0f, unit.type.riseSpeed);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!Units.invalidateTarget(target, unit, unit.range()) && unit.type.rotateShooting){
|
faceTarget();
|
||||||
if(unit.type.hasWeapons()){
|
|
||||||
unit.lookAt(Predict.intercept(unit, target, unit.type.weapons.first().bullet.speed));
|
|
||||||
}
|
|
||||||
}else if(unit.moving()){
|
|
||||||
unit.lookAt(unit.vel().angle());
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -47,10 +47,10 @@ public class HugAI extends AIController{
|
|||||||
})){
|
})){
|
||||||
if(unit.within(target, (unit.hitSize + (target instanceof Sized s ? s.hitSize() : 1f)) * 0.6f)){
|
if(unit.within(target, (unit.hitSize + (target instanceof Sized s ? s.hitSize() : 1f)) * 0.6f)){
|
||||||
//circle target
|
//circle target
|
||||||
unit.moveAt(vec.set(target).sub(unit).rotate(90f).setLength(unit.speed()));
|
unit.movePref(vec.set(target).sub(unit).rotate(90f).setLength(unit.speed()));
|
||||||
}else{
|
}else{
|
||||||
//move toward target in a straight line
|
//move toward target in a straight line
|
||||||
unit.moveAt(vec.set(target).sub(unit).limit(unit.speed()));
|
unit.movePref(vec.set(target).sub(unit).limit(unit.speed()));
|
||||||
}
|
}
|
||||||
}else if(move){
|
}else if(move){
|
||||||
pathfind(Pathfinder.fieldCore);
|
pathfind(Pathfinder.fieldCore);
|
||||||
@@ -69,13 +69,6 @@ public class HugAI extends AIController{
|
|||||||
unit.elevation = Mathf.approachDelta(unit.elevation, 0f, unit.type.riseSpeed);
|
unit.elevation = Mathf.approachDelta(unit.elevation, 0f, unit.type.riseSpeed);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!Units.invalidateTarget(target, unit, unit.range()) && unit.type.rotateShooting){
|
faceTarget();
|
||||||
if(unit.type.hasWeapons()){
|
|
||||||
unit.lookAt(Predict.intercept(unit, target, unit.type.weapons.first().bullet.speed));
|
|
||||||
}
|
|
||||||
}else if(unit.moving()){
|
|
||||||
unit.lookAt(unit.vel().angle());
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -44,7 +44,7 @@ public class LogicAI extends AIController{
|
|||||||
private ObjectSet<Object> radars = new ObjectSet<>();
|
private ObjectSet<Object> radars = new ObjectSet<>();
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void updateMovement(){
|
public void updateMovement(){
|
||||||
if(itemTimer >= 0) itemTimer -= Time.delta;
|
if(itemTimer >= 0) itemTimer -= Time.delta;
|
||||||
if(payTimer >= 0) payTimer -= Time.delta;
|
if(payTimer >= 0) payTimer -= Time.delta;
|
||||||
|
|
||||||
@@ -114,14 +114,14 @@ public class LogicAI extends AIController{
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void moveTo(Position target, float circleLength, float smooth){
|
public void moveTo(Position target, float circleLength, float smooth){
|
||||||
if(target == null) return;
|
if(target == null) return;
|
||||||
|
|
||||||
vec.set(target).sub(unit);
|
vec.set(target).sub(unit);
|
||||||
|
|
||||||
float length = circleLength <= 0.001f ? 1f : Mathf.clamp((unit.dst(target) - circleLength) / smooth, -1f, 1f);
|
float length = circleLength <= 0.001f ? 1f : Mathf.clamp((unit.dst(target) - circleLength) / smooth, -1f, 1f);
|
||||||
|
|
||||||
vec.setLength(unit.realSpeed() * length);
|
vec.setLength(unit.speed() * length);
|
||||||
if(length < -0.5f){
|
if(length < -0.5f){
|
||||||
vec.rotate(180f);
|
vec.rotate(180f);
|
||||||
}else if(length < 0){
|
}else if(length < 0){
|
||||||
@@ -141,29 +141,29 @@ public class LogicAI extends AIController{
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected boolean checkTarget(Teamc target, float x, float y, float range){
|
public boolean checkTarget(Teamc target, float x, float y, float range){
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
//always retarget
|
//always retarget
|
||||||
@Override
|
@Override
|
||||||
protected boolean retarget(){
|
public boolean retarget(){
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected boolean invalid(Teamc target){
|
public boolean invalid(Teamc target){
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected boolean shouldShoot(){
|
public boolean shouldShoot(){
|
||||||
return shoot && !(unit.type.canBoost && boost);
|
return shoot && !(unit.type.canBoost && boost);
|
||||||
}
|
}
|
||||||
|
|
||||||
//always aim for the main target
|
//always aim for the main target
|
||||||
@Override
|
@Override
|
||||||
protected Teamc target(float x, float y, float range, boolean air, boolean ground){
|
public Teamc target(float x, float y, float range, boolean air, boolean ground){
|
||||||
return switch(aimControl){
|
return switch(aimControl){
|
||||||
case target -> posTarget;
|
case target -> posTarget;
|
||||||
case targetp -> mainTarget;
|
case targetp -> mainTarget;
|
||||||
|
|||||||
@@ -9,12 +9,12 @@ import mindustry.world.*;
|
|||||||
import static mindustry.Vars.*;
|
import static mindustry.Vars.*;
|
||||||
|
|
||||||
public class MinerAI extends AIController{
|
public class MinerAI extends AIController{
|
||||||
boolean mining = true;
|
public boolean mining = true;
|
||||||
Item targetItem;
|
public Item targetItem;
|
||||||
Tile ore;
|
public Tile ore;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void updateMovement(){
|
public void updateMovement(){
|
||||||
Building core = unit.closestCore();
|
Building core = unit.closestCore();
|
||||||
|
|
||||||
if(!(unit.canMine()) || core == null) return;
|
if(!(unit.canMine()) || core == null) return;
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ public class RepairAI extends AIController{
|
|||||||
float retreatTimer;
|
float retreatTimer;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void updateMovement(){
|
public void updateMovement(){
|
||||||
if(target instanceof Building){
|
if(target instanceof Building){
|
||||||
boolean shoot = false;
|
boolean shoot = false;
|
||||||
|
|
||||||
@@ -56,7 +56,7 @@ public class RepairAI extends AIController{
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void updateTargeting(){
|
public void updateTargeting(){
|
||||||
Building target = Units.findDamagedTile(unit.team, unit.x, unit.y);
|
Building target = Units.findDamagedTile(unit.team, unit.x, unit.y);
|
||||||
|
|
||||||
if(target instanceof ConstructBuild) target = null;
|
if(target instanceof ConstructBuild) target = null;
|
||||||
|
|||||||
@@ -41,10 +41,6 @@ public class SuicideAI extends GroundAI{
|
|||||||
shoot = unit.within(target, unit.type.weapons.first().bullet.range() +
|
shoot = unit.within(target, unit.type.weapons.first().bullet.range() +
|
||||||
(target instanceof Building b ? b.block.size * Vars.tilesize / 2f : ((Hitboxc)target).hitSize() / 2f));
|
(target instanceof Building b ? b.block.size * Vars.tilesize / 2f : ((Hitboxc)target).hitSize() / 2f));
|
||||||
|
|
||||||
if(unit.type.hasWeapons()){
|
|
||||||
unit.aimLook(Predict.intercept(unit, target, unit.type.weapons.first().bullet.speed));
|
|
||||||
}
|
|
||||||
|
|
||||||
//do not move toward walls or transport blocks
|
//do not move toward walls or transport blocks
|
||||||
if(!(target instanceof Building build && !(build.block instanceof CoreBlock) && (
|
if(!(target instanceof Building build && !(build.block instanceof CoreBlock) && (
|
||||||
build.block.group == BlockGroup.walls ||
|
build.block.group == BlockGroup.walls ||
|
||||||
@@ -76,7 +72,7 @@ public class SuicideAI extends GroundAI{
|
|||||||
if(!blocked){
|
if(!blocked){
|
||||||
moveToTarget = true;
|
moveToTarget = true;
|
||||||
//move towards target directly
|
//move towards target directly
|
||||||
unit.moveAt(vec.set(target).sub(unit).limit(unit.speed()));
|
unit.movePref(vec.set(target).sub(unit).limit(unit.speed()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -103,15 +99,15 @@ public class SuicideAI extends GroundAI{
|
|||||||
pathfind(Pathfinder.fieldCore);
|
pathfind(Pathfinder.fieldCore);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(unit.moving()) unit.lookAt(unit.vel().angle());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
unit.controlWeapons(rotate, shoot);
|
unit.controlWeapons(rotate, shoot);
|
||||||
|
|
||||||
|
faceTarget();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected Teamc target(float x, float y, float range, boolean air, boolean ground){
|
public Teamc target(float x, float y, float range, boolean air, boolean ground){
|
||||||
return Units.closestTarget(unit.team, x, y, range, u -> u.checkTarget(air, ground), t -> ground &&
|
return Units.closestTarget(unit.team, x, y, range, u -> u.checkTarget(air, ground), t -> ground &&
|
||||||
!(t.block instanceof Conveyor || t.block instanceof Conduit)); //do not target conveyors/conduits
|
!(t.block instanceof Conveyor || t.block instanceof Conduit)); //do not target conveyors/conduits
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -179,7 +179,7 @@ public class SoundControl{
|
|||||||
float avol = Core.settings.getInt("ambientvol", 100) / 100f;
|
float avol = Core.settings.getInt("ambientvol", 100) / 100f;
|
||||||
|
|
||||||
sounds.each((sound, data) -> {
|
sounds.each((sound, data) -> {
|
||||||
data.curVolume = Mathf.lerpDelta(data.curVolume, data.volume * avol, 0.2f);
|
data.curVolume = Mathf.lerpDelta(data.curVolume, data.volume * avol, 0.11f);
|
||||||
|
|
||||||
boolean play = data.curVolume > 0.01f;
|
boolean play = data.curVolume > 0.01f;
|
||||||
float pan = Mathf.zero(data.total, 0.0001f) ? 0f : sound.calcPan(data.sum.x / data.total, data.sum.y / data.total);
|
float pan = Mathf.zero(data.total, 0.0001f) ? 0f : sound.calcPan(data.sum.x / data.total, data.sum.y / data.total);
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ public class Blocks implements ContentList{
|
|||||||
public static Block
|
public static Block
|
||||||
|
|
||||||
//environment
|
//environment
|
||||||
air, spawn, cliff, deepwater, water, taintedWater, tar, slag, stone, craters, charr, sand, darksand, dirt, mud, ice, snow, darksandTaintedWater, space,
|
air, spawn, cliff, deepwater, water, taintedWater, deepTaintedWater, tar, slag, stone, craters, charr, sand, darksand, dirt, mud, ice, snow, darksandTaintedWater, space,
|
||||||
dacite,
|
dacite,
|
||||||
stoneWall, dirtWall, sporeWall, iceWall, daciteWall, sporePine, snowPine, pine, shrubs, whiteTree, whiteTreeDead, sporeCluster,
|
stoneWall, dirtWall, sporeWall, iceWall, daciteWall, sporePine, snowPine, pine, shrubs, whiteTree, whiteTreeDead, sporeCluster,
|
||||||
iceSnow, sandWater, darksandWater, duneWall, sandWall, moss, sporeMoss, shale, shaleWall, shaleBoulder, sandBoulder, daciteBoulder, boulder, snowBoulder, basaltBoulder, grass, salt,
|
iceSnow, sandWater, darksandWater, duneWall, sandWall, moss, sporeMoss, shale, shaleWall, shaleBoulder, sandBoulder, daciteBoulder, boulder, snowBoulder, basaltBoulder, grass, salt,
|
||||||
@@ -142,7 +142,19 @@ public class Blocks implements ContentList{
|
|||||||
}};
|
}};
|
||||||
|
|
||||||
taintedWater = new Floor("tainted-water"){{
|
taintedWater = new Floor("tainted-water"){{
|
||||||
speedMultiplier = 0.17f;
|
speedMultiplier = 0.5f;
|
||||||
|
variants = 0;
|
||||||
|
status = StatusEffects.wet;
|
||||||
|
statusDuration = 90f;
|
||||||
|
liquidDrop = Liquids.water;
|
||||||
|
isLiquid = true;
|
||||||
|
cacheLayer = CacheLayer.water;
|
||||||
|
albedo = 0.5f;
|
||||||
|
attributes.set(Attribute.spores, 0.15f);
|
||||||
|
}};
|
||||||
|
|
||||||
|
deepTaintedWater = new Floor("deep-tainted-water"){{
|
||||||
|
speedMultiplier = 0.18f;
|
||||||
variants = 0;
|
variants = 0;
|
||||||
status = StatusEffects.wet;
|
status = StatusEffects.wet;
|
||||||
statusDuration = 140f;
|
statusDuration = 140f;
|
||||||
@@ -313,6 +325,7 @@ public class Blocks implements ContentList{
|
|||||||
|
|
||||||
sporeWall = new StaticWall("spore-wall"){{
|
sporeWall = new StaticWall("spore-wall"){{
|
||||||
variants = 2;
|
variants = 2;
|
||||||
|
taintedWater.asFloor().wall = deepTaintedWater.asFloor().wall = this;
|
||||||
}};
|
}};
|
||||||
|
|
||||||
dirtWall = new StaticWall("dirt-wall"){{
|
dirtWall = new StaticWall("dirt-wall"){{
|
||||||
@@ -429,7 +442,7 @@ public class Blocks implements ContentList{
|
|||||||
Seq.with(metalFloor, metalFloorDamaged, metalFloor2, metalFloor3, metalFloor4, metalFloor5, darkPanel1, darkPanel2, darkPanel3, darkPanel4, darkPanel5, darkPanel6)
|
Seq.with(metalFloor, metalFloorDamaged, metalFloor2, metalFloor3, metalFloor4, metalFloor5, darkPanel1, darkPanel2, darkPanel3, darkPanel4, darkPanel5, darkPanel6)
|
||||||
.each(b -> b.asFloor().wall = darkMetal);
|
.each(b -> b.asFloor().wall = darkMetal);
|
||||||
|
|
||||||
pebbles = new DoubleOverlayFloor("pebbles");
|
pebbles = new OverlayFloor("pebbles");
|
||||||
|
|
||||||
tendrils = new OverlayFloor("tendrils");
|
tendrils = new OverlayFloor("tendrils");
|
||||||
|
|
||||||
@@ -509,6 +522,8 @@ public class Blocks implements ContentList{
|
|||||||
hasPower = true;
|
hasPower = true;
|
||||||
hasLiquids = false;
|
hasLiquids = false;
|
||||||
drawer = new DrawSmelter(Color.valueOf("ffef99"));
|
drawer = new DrawSmelter(Color.valueOf("ffef99"));
|
||||||
|
ambientSound = Sounds.smelter;
|
||||||
|
ambientSoundVolume = 0.07f;
|
||||||
|
|
||||||
consumes.items(with(Items.coal, 1, Items.sand, 2));
|
consumes.items(with(Items.coal, 1, Items.sand, 2));
|
||||||
consumes.power(0.50f);
|
consumes.power(0.50f);
|
||||||
@@ -525,6 +540,8 @@ public class Blocks implements ContentList{
|
|||||||
itemCapacity = 30;
|
itemCapacity = 30;
|
||||||
boostScale = 0.15f;
|
boostScale = 0.15f;
|
||||||
drawer = new DrawSmelter(Color.valueOf("ffef99"));
|
drawer = new DrawSmelter(Color.valueOf("ffef99"));
|
||||||
|
ambientSound = Sounds.smelter;
|
||||||
|
ambientSoundVolume = 0.07f;
|
||||||
|
|
||||||
consumes.items(with(Items.coal, 4, Items.sand, 6, Items.pyratite, 1));
|
consumes.items(with(Items.coal, 4, Items.sand, 6, Items.pyratite, 1));
|
||||||
consumes.power(4f);
|
consumes.power(4f);
|
||||||
@@ -538,6 +555,8 @@ public class Blocks implements ContentList{
|
|||||||
size = 2;
|
size = 2;
|
||||||
hasPower = hasItems = true;
|
hasPower = hasItems = true;
|
||||||
drawer = new DrawSmelter(Color.valueOf("ffc099"));
|
drawer = new DrawSmelter(Color.valueOf("ffc099"));
|
||||||
|
ambientSound = Sounds.smelter;
|
||||||
|
ambientSoundVolume = 0.07f;
|
||||||
|
|
||||||
consumes.items(with(Items.lead, 1, Items.sand, 1));
|
consumes.items(with(Items.lead, 1, Items.sand, 1));
|
||||||
consumes.power(0.60f);
|
consumes.power(0.60f);
|
||||||
@@ -603,7 +622,7 @@ public class Blocks implements ContentList{
|
|||||||
rotate = false;
|
rotate = false;
|
||||||
solid = true;
|
solid = true;
|
||||||
outputsLiquid = true;
|
outputsLiquid = true;
|
||||||
drawer = new DrawMixer();
|
drawer = new DrawMixer(true);
|
||||||
|
|
||||||
consumes.power(1f);
|
consumes.power(1f);
|
||||||
consumes.item(Items.titanium);
|
consumes.item(Items.titanium);
|
||||||
@@ -664,10 +683,10 @@ public class Blocks implements ContentList{
|
|||||||
disassembler = new Separator("disassembler"){{
|
disassembler = new Separator("disassembler"){{
|
||||||
requirements(Category.crafting, with(Items.plastanium, 40, Items.titanium, 100, Items.silicon, 150, Items.thorium, 80));
|
requirements(Category.crafting, with(Items.plastanium, 40, Items.titanium, 100, Items.silicon, 150, Items.thorium, 80));
|
||||||
results = with(
|
results = with(
|
||||||
Items.sand, 4,
|
Items.sand, 2,
|
||||||
Items.graphite, 2,
|
Items.graphite, 1,
|
||||||
Items.titanium, 2,
|
Items.titanium, 1,
|
||||||
Items.thorium, 2
|
Items.thorium, 1
|
||||||
);
|
);
|
||||||
hasPower = true;
|
hasPower = true;
|
||||||
craftTime = 15f;
|
craftTime = 15f;
|
||||||
@@ -1001,6 +1020,7 @@ public class Blocks implements ContentList{
|
|||||||
|
|
||||||
distributor = new Router("distributor"){{
|
distributor = new Router("distributor"){{
|
||||||
requirements(Category.distribution, with(Items.lead, 4, Items.copper, 4));
|
requirements(Category.distribution, with(Items.lead, 4, Items.copper, 4));
|
||||||
|
buildCostMultiplier = 3f;
|
||||||
size = 2;
|
size = 2;
|
||||||
}};
|
}};
|
||||||
|
|
||||||
@@ -1152,12 +1172,14 @@ public class Blocks implements ContentList{
|
|||||||
battery = new Battery("battery"){{
|
battery = new Battery("battery"){{
|
||||||
requirements(Category.power, with(Items.copper, 5, Items.lead, 20));
|
requirements(Category.power, with(Items.copper, 5, Items.lead, 20));
|
||||||
consumes.powerBuffered(4000f);
|
consumes.powerBuffered(4000f);
|
||||||
|
baseExplosiveness = 1f;
|
||||||
}};
|
}};
|
||||||
|
|
||||||
batteryLarge = new Battery("battery-large"){{
|
batteryLarge = new Battery("battery-large"){{
|
||||||
requirements(Category.power, with(Items.titanium, 20, Items.lead, 40, Items.silicon, 20));
|
requirements(Category.power, with(Items.titanium, 20, Items.lead, 40, Items.silicon, 20));
|
||||||
size = 3;
|
size = 3;
|
||||||
consumes.powerBuffered(50000f);
|
consumes.powerBuffered(50000f);
|
||||||
|
baseExplosiveness = 5f;
|
||||||
}};
|
}};
|
||||||
|
|
||||||
combustionGenerator = new BurnerGenerator("combustion-generator"){{
|
combustionGenerator = new BurnerGenerator("combustion-generator"){{
|
||||||
@@ -1882,7 +1904,7 @@ public class Blocks implements ContentList{
|
|||||||
requirements(Category.units, with(Items.copper, 50, Items.lead, 120, Items.silicon, 80));
|
requirements(Category.units, with(Items.copper, 50, Items.lead, 120, Items.silicon, 80));
|
||||||
plans = Seq.with(
|
plans = Seq.with(
|
||||||
new UnitPlan(UnitTypes.dagger, 60f * 15, with(Items.silicon, 10, Items.lead, 10)),
|
new UnitPlan(UnitTypes.dagger, 60f * 15, with(Items.silicon, 10, Items.lead, 10)),
|
||||||
new UnitPlan(UnitTypes.crawler, 60f * 12, with(Items.silicon, 10, Items.coal, 20)),
|
new UnitPlan(UnitTypes.crawler, 60f * 10, with(Items.silicon, 8, Items.coal, 10)),
|
||||||
new UnitPlan(UnitTypes.nova, 60f * 40, with(Items.silicon, 30, Items.lead, 20, Items.titanium, 20))
|
new UnitPlan(UnitTypes.nova, 60f * 40, with(Items.silicon, 30, Items.lead, 20, Items.titanium, 20))
|
||||||
);
|
);
|
||||||
size = 3;
|
size = 3;
|
||||||
@@ -2077,11 +2099,15 @@ public class Blocks implements ContentList{
|
|||||||
payloadSource = new PayloadSource("payload-source"){{
|
payloadSource = new PayloadSource("payload-source"){{
|
||||||
requirements(Category.units, BuildVisibility.sandboxOnly, with());
|
requirements(Category.units, BuildVisibility.sandboxOnly, with());
|
||||||
size = 5;
|
size = 5;
|
||||||
|
alwaysUnlocked = true;
|
||||||
|
group = BlockGroup.units;
|
||||||
}};
|
}};
|
||||||
|
|
||||||
payloadVoid = new PayloadVoid("payload-void"){{
|
payloadVoid = new PayloadVoid("payload-void"){{
|
||||||
requirements(Category.units, BuildVisibility.sandboxOnly, with());
|
requirements(Category.units, BuildVisibility.sandboxOnly, with());
|
||||||
size = 5;
|
size = 5;
|
||||||
|
alwaysUnlocked = true;
|
||||||
|
group = BlockGroup.units;
|
||||||
}};
|
}};
|
||||||
|
|
||||||
//TODO move
|
//TODO move
|
||||||
|
|||||||
@@ -32,7 +32,9 @@ public class Fx{
|
|||||||
//lifetime is how many frames it takes to fade out the trail
|
//lifetime is how many frames it takes to fade out the trail
|
||||||
e.lifetime = trail.length * 1.4f;
|
e.lifetime = trail.length * 1.4f;
|
||||||
|
|
||||||
trail.shorten();
|
if(!state.isPaused()){
|
||||||
|
trail.shorten();
|
||||||
|
}
|
||||||
trail.drawCap(e.color, e.rotation);
|
trail.drawCap(e.color, e.rotation);
|
||||||
trail.draw(e.color, e.rotation);
|
trail.draw(e.color, e.rotation);
|
||||||
}),
|
}),
|
||||||
@@ -393,12 +395,6 @@ public class Fx{
|
|||||||
Lines.circle(e.x, e.y, 2f + e.finpow() * 7f);
|
Lines.circle(e.x, e.y, 2f + e.finpow() * 7f);
|
||||||
}),
|
}),
|
||||||
|
|
||||||
healDenamic = new Effect(11, e -> {
|
|
||||||
color(Pal.heal);
|
|
||||||
stroke(e.fout() * 2f);
|
|
||||||
Lines.circle(e.x, e.y, 2f + e.finpow() * e.rotation);
|
|
||||||
}),
|
|
||||||
|
|
||||||
shieldWave = new Effect(22, e -> {
|
shieldWave = new Effect(22, e -> {
|
||||||
color(e.color, 0.7f);
|
color(e.color, 0.7f);
|
||||||
stroke(e.fout() * 2f);
|
stroke(e.fout() * 2f);
|
||||||
@@ -1000,7 +996,9 @@ public class Fx{
|
|||||||
float length = 20f * e.finpow();
|
float length = 20f * e.finpow();
|
||||||
float size = 7f * e.fout();
|
float size = 7f * e.fout();
|
||||||
|
|
||||||
rect(((Item)e.data).fullIcon, e.x + trnsx(e.rotation, length), e.y + trnsy(e.rotation, length), size, size);
|
if(!(e.data instanceof Item item)) return;
|
||||||
|
|
||||||
|
rect(item.fullIcon, e.x + trnsx(e.rotation, length), e.y + trnsy(e.rotation, length), size, size);
|
||||||
}),
|
}),
|
||||||
|
|
||||||
shockwave = new Effect(10f, 80f, e -> {
|
shockwave = new Effect(10f, 80f, e -> {
|
||||||
@@ -1887,7 +1885,7 @@ public class Fx{
|
|||||||
rand.setSeed(e.id);
|
rand.setSeed(e.id);
|
||||||
Tmp.v1.trns(e.rotation, e.finpow() * 90f * rand.random(0.2f, 1f));
|
Tmp.v1.trns(e.rotation, e.finpow() * 90f * rand.random(0.2f, 1f));
|
||||||
Fill.circle(e.x + Tmp.v1.x, e.y + Tmp.v1.y, 8f * rand.random(0.6f, 1f) * e.fout(0.2f));
|
Fill.circle(e.x + Tmp.v1.x, e.y + Tmp.v1.y, 8f * rand.random(0.6f, 1f) * e.fout(0.2f));
|
||||||
}).layer(Layer.block + 1f),
|
}).layer(Layer.groundUnit + 1f),
|
||||||
|
|
||||||
unitShieldBreak = new Effect(35, e -> {
|
unitShieldBreak = new Effect(35, e -> {
|
||||||
if(!(e.data instanceof Unitc)) return;
|
if(!(e.data instanceof Unitc)) return;
|
||||||
|
|||||||
@@ -10,7 +10,8 @@ public class SectorPresets implements ContentList{
|
|||||||
groundZero,
|
groundZero,
|
||||||
craters, biomassFacility, frozenForest, ruinousShores, windsweptIslands, stainedMountains, tarFields,
|
craters, biomassFacility, frozenForest, ruinousShores, windsweptIslands, stainedMountains, tarFields,
|
||||||
fungalPass, extractionOutpost, saltFlats, overgrowth,
|
fungalPass, extractionOutpost, saltFlats, overgrowth,
|
||||||
impact0078, desolateRift, nuclearComplex, planetaryTerminal;
|
impact0078, desolateRift, nuclearComplex, planetaryTerminal,
|
||||||
|
coastline, navalFortress;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void load(){
|
public void load(){
|
||||||
@@ -64,6 +65,15 @@ public class SectorPresets implements ContentList{
|
|||||||
useAI = false;
|
useAI = false;
|
||||||
}};
|
}};
|
||||||
|
|
||||||
|
coastline = new SectorPreset("coastline", serpulo, 108){{
|
||||||
|
captureWave = 30;
|
||||||
|
difficulty = 5;
|
||||||
|
}};
|
||||||
|
|
||||||
|
navalFortress = new SectorPreset("navalFortress", serpulo, 216){{
|
||||||
|
difficulty = 9;
|
||||||
|
}};
|
||||||
|
|
||||||
fungalPass = new SectorPreset("fungalPass", serpulo, 21){{
|
fungalPass = new SectorPreset("fungalPass", serpulo, 21){{
|
||||||
difficulty = 4;
|
difficulty = 4;
|
||||||
useAI = false;
|
useAI = false;
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import arc.*;
|
|||||||
import arc.graphics.*;
|
import arc.graphics.*;
|
||||||
import arc.math.*;
|
import arc.math.*;
|
||||||
import mindustry.ctype.*;
|
import mindustry.ctype.*;
|
||||||
|
import mindustry.game.*;
|
||||||
import mindustry.game.EventType.*;
|
import mindustry.game.EventType.*;
|
||||||
import mindustry.type.*;
|
import mindustry.type.*;
|
||||||
import mindustry.graphics.*;
|
import mindustry.graphics.*;
|
||||||
@@ -163,7 +164,7 @@ public class StatusEffects implements ContentList{
|
|||||||
}};
|
}};
|
||||||
|
|
||||||
boss = new StatusEffect("boss"){{
|
boss = new StatusEffect("boss"){{
|
||||||
color = Pal.health;
|
color = Team.crux.color;
|
||||||
permanent = true;
|
permanent = true;
|
||||||
damageMultiplier = 1.3f;
|
damageMultiplier = 1.3f;
|
||||||
healthMultiplier = 1.5f;
|
healthMultiplier = 1.5f;
|
||||||
|
|||||||
@@ -421,11 +421,11 @@ public class TechTree implements ContentList{
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
node(retusa, () -> {
|
node(retusa, Seq.with(new SectorComplete(windsweptIslands)), () -> {
|
||||||
node(oxynoe, () -> {
|
node(oxynoe, Seq.with(new SectorComplete(coastline)), () -> {
|
||||||
node(cyerce, () -> {
|
node(cyerce, () -> {
|
||||||
node(aegires, () -> {
|
node(aegires, () -> {
|
||||||
node(navanax, () -> {
|
node(navanax, Seq.with(new SectorComplete(navalFortress)), () -> {
|
||||||
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
@@ -531,7 +531,22 @@ public class TechTree implements ContentList{
|
|||||||
new Research(airFactory),
|
new Research(airFactory),
|
||||||
new Research(door)
|
new Research(door)
|
||||||
), () -> {
|
), () -> {
|
||||||
|
node(coastline, Seq.with(
|
||||||
|
new SectorComplete(windsweptIslands),
|
||||||
|
new Research(navalFactory),
|
||||||
|
new Research(payloadConveyor)
|
||||||
|
), () -> {
|
||||||
|
node(navalFortress, Seq.with(
|
||||||
|
new SectorComplete(coastline),
|
||||||
|
new SectorComplete(extractionOutpost),
|
||||||
|
new Research(oxynoe),
|
||||||
|
new Research(minke),
|
||||||
|
new Research(cyclone),
|
||||||
|
new Research(ripple)
|
||||||
|
), () -> {
|
||||||
|
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -152,7 +152,7 @@ public class UnitTypes implements ContentList{
|
|||||||
}};
|
}};
|
||||||
|
|
||||||
scepter = new UnitType("scepter"){{
|
scepter = new UnitType("scepter"){{
|
||||||
speed = 0.35f;
|
speed = 0.36f;
|
||||||
hitSize = 22f;
|
hitSize = 22f;
|
||||||
rotateSpeed = 2.1f;
|
rotateSpeed = 2.1f;
|
||||||
health = 9000;
|
health = 9000;
|
||||||
@@ -180,7 +180,7 @@ public class UnitTypes implements ContentList{
|
|||||||
inaccuracy = 3f;
|
inaccuracy = 3f;
|
||||||
shotDelay = 4f;
|
shotDelay = 4f;
|
||||||
|
|
||||||
bullet = new BasicBulletType(7f, 45){{
|
bullet = new BasicBulletType(7f, 50){{
|
||||||
width = 11f;
|
width = 11f;
|
||||||
height = 20f;
|
height = 20f;
|
||||||
lifetime = 25f;
|
lifetime = 25f;
|
||||||
@@ -189,7 +189,7 @@ public class UnitTypes implements ContentList{
|
|||||||
lightningLength = 6;
|
lightningLength = 6;
|
||||||
lightningColor = Pal.surge;
|
lightningColor = Pal.surge;
|
||||||
//standard bullet damage is far too much for lightning
|
//standard bullet damage is far too much for lightning
|
||||||
lightningDamage = 19;
|
lightningDamage = 20;
|
||||||
}};
|
}};
|
||||||
}},
|
}},
|
||||||
|
|
||||||
@@ -238,7 +238,7 @@ public class UnitTypes implements ContentList{
|
|||||||
ejectEffect = Fx.casing4;
|
ejectEffect = Fx.casing4;
|
||||||
shootSound = Sounds.bang;
|
shootSound = Sounds.bang;
|
||||||
|
|
||||||
bullet = new BasicBulletType(13f, 65){{
|
bullet = new BasicBulletType(13f, 70){{
|
||||||
pierce = true;
|
pierce = true;
|
||||||
pierceCap = 10;
|
pierceCap = 10;
|
||||||
width = 14f;
|
width = 14f;
|
||||||
@@ -413,7 +413,7 @@ public class UnitTypes implements ContentList{
|
|||||||
vela = new UnitType("vela"){{
|
vela = new UnitType("vela"){{
|
||||||
hitSize = 24f;
|
hitSize = 24f;
|
||||||
|
|
||||||
rotateSpeed = 1.7f;
|
rotateSpeed = 1.8f;
|
||||||
canDrown = false;
|
canDrown = false;
|
||||||
mechFrontSway = 1f;
|
mechFrontSway = 1f;
|
||||||
buildSpeed = 3f;
|
buildSpeed = 3f;
|
||||||
@@ -423,7 +423,7 @@ public class UnitTypes implements ContentList{
|
|||||||
ammoType = new PowerAmmoType(2500);
|
ammoType = new PowerAmmoType(2500);
|
||||||
|
|
||||||
speed = 0.44f;
|
speed = 0.44f;
|
||||||
boostMultiplier = 2.2f;
|
boostMultiplier = 2.4f;
|
||||||
engineOffset = 12f;
|
engineOffset = 12f;
|
||||||
engineSize = 6f;
|
engineSize = 6f;
|
||||||
lowAltitude = true;
|
lowAltitude = true;
|
||||||
@@ -436,6 +436,7 @@ public class UnitTypes implements ContentList{
|
|||||||
immunities = ObjectSet.with(StatusEffects.burning);
|
immunities = ObjectSet.with(StatusEffects.burning);
|
||||||
|
|
||||||
commandLimit = 8;
|
commandLimit = 8;
|
||||||
|
singleTarget = true;
|
||||||
|
|
||||||
weapons.add(new Weapon("vela-weapon"){{
|
weapons.add(new Weapon("vela-weapon"){{
|
||||||
mirror = false;
|
mirror = false;
|
||||||
@@ -479,6 +480,18 @@ public class UnitTypes implements ContentList{
|
|||||||
shootStatus = StatusEffects.slow;
|
shootStatus = StatusEffects.slow;
|
||||||
shootStatusDuration = bullet.lifetime + firstShotDelay;
|
shootStatusDuration = bullet.lifetime + firstShotDelay;
|
||||||
}});
|
}});
|
||||||
|
|
||||||
|
weapons.add(new RepairBeamWeapon("repair-beam-weapon-center-large"){{
|
||||||
|
x = 44 / 4f;
|
||||||
|
y = -30f / 4f;
|
||||||
|
shootY = 6f;
|
||||||
|
beamWidth = 0.8f;
|
||||||
|
repairSpeed = 1.4f;
|
||||||
|
|
||||||
|
bullet = new BulletType(){{
|
||||||
|
maxRange = 120f;
|
||||||
|
}};
|
||||||
|
}});
|
||||||
}};
|
}};
|
||||||
|
|
||||||
corvus = new UnitType("corvus"){{
|
corvus = new UnitType("corvus"){{
|
||||||
@@ -1056,7 +1069,7 @@ public class UnitTypes implements ContentList{
|
|||||||
rotateSpeed = 1.9f;
|
rotateSpeed = 1.9f;
|
||||||
flying = true;
|
flying = true;
|
||||||
lowAltitude = true;
|
lowAltitude = true;
|
||||||
health = 7000;
|
health = 7200;
|
||||||
armor = 9f;
|
armor = 9f;
|
||||||
engineOffset = 21;
|
engineOffset = 21;
|
||||||
engineSize = 5.3f;
|
engineSize = 5.3f;
|
||||||
@@ -1064,13 +1077,13 @@ public class UnitTypes implements ContentList{
|
|||||||
targetFlags = new BlockFlag[]{BlockFlag.generator, BlockFlag.core, null};
|
targetFlags = new BlockFlag[]{BlockFlag.generator, BlockFlag.core, null};
|
||||||
ammoType = new ItemAmmoType(Items.thorium);
|
ammoType = new ItemAmmoType(Items.thorium);
|
||||||
|
|
||||||
BulletType missiles = new MissileBulletType(2.7f, 14){{
|
BulletType missiles = new MissileBulletType(2.7f, 18){{
|
||||||
width = 8f;
|
width = 8f;
|
||||||
height = 8f;
|
height = 8f;
|
||||||
shrinkY = 0f;
|
shrinkY = 0f;
|
||||||
drag = -0.01f;
|
drag = -0.01f;
|
||||||
splashDamageRadius = 20f;
|
splashDamageRadius = 20f;
|
||||||
splashDamage = 34f;
|
splashDamage = 37f;
|
||||||
ammoMultiplier = 4f;
|
ammoMultiplier = 4f;
|
||||||
lifetime = 50f;
|
lifetime = 50f;
|
||||||
hitEffect = Fx.blastExplosion;
|
hitEffect = Fx.blastExplosion;
|
||||||
@@ -1125,13 +1138,13 @@ public class UnitTypes implements ContentList{
|
|||||||
}};
|
}};
|
||||||
|
|
||||||
eclipse = new UnitType("eclipse"){{
|
eclipse = new UnitType("eclipse"){{
|
||||||
speed = 0.52f;
|
speed = 0.54f;
|
||||||
accel = 0.04f;
|
accel = 0.04f;
|
||||||
drag = 0.04f;
|
drag = 0.04f;
|
||||||
rotateSpeed = 1f;
|
rotateSpeed = 1f;
|
||||||
flying = true;
|
flying = true;
|
||||||
lowAltitude = true;
|
lowAltitude = true;
|
||||||
health = 21000;
|
health = 22000;
|
||||||
engineOffset = 38;
|
engineOffset = 38;
|
||||||
engineSize = 7.3f;
|
engineSize = 7.3f;
|
||||||
hitSize = 58f;
|
hitSize = 58f;
|
||||||
@@ -1140,10 +1153,10 @@ public class UnitTypes implements ContentList{
|
|||||||
targetFlags = new BlockFlag[]{BlockFlag.reactor, BlockFlag.battery, BlockFlag.core, null};
|
targetFlags = new BlockFlag[]{BlockFlag.reactor, BlockFlag.battery, BlockFlag.core, null};
|
||||||
ammoType = new ItemAmmoType(Items.thorium);
|
ammoType = new ItemAmmoType(Items.thorium);
|
||||||
|
|
||||||
BulletType fragBullet = new FlakBulletType(4f, 5){{
|
BulletType fragBullet = new FlakBulletType(4f, 15){{
|
||||||
shootEffect = Fx.shootBig;
|
shootEffect = Fx.shootBig;
|
||||||
ammoMultiplier = 4f;
|
ammoMultiplier = 4f;
|
||||||
splashDamage = 60f;
|
splashDamage = 65f;
|
||||||
splashDamageRadius = 25f;
|
splashDamageRadius = 25f;
|
||||||
collidesGround = true;
|
collidesGround = true;
|
||||||
lifetime = 47f;
|
lifetime = 47f;
|
||||||
@@ -1166,7 +1179,7 @@ public class UnitTypes implements ContentList{
|
|||||||
rotate = true;
|
rotate = true;
|
||||||
|
|
||||||
bullet = new LaserBulletType(){{
|
bullet = new LaserBulletType(){{
|
||||||
damage = 110f;
|
damage = 115f;
|
||||||
sideAngle = 20f;
|
sideAngle = 20f;
|
||||||
sideWidth = 1.5f;
|
sideWidth = 1.5f;
|
||||||
sideLength = 80f;
|
sideLength = 80f;
|
||||||
@@ -1335,7 +1348,7 @@ public class UnitTypes implements ContentList{
|
|||||||
quad = new UnitType("quad"){{
|
quad = new UnitType("quad"){{
|
||||||
armor = 8f;
|
armor = 8f;
|
||||||
health = 6000;
|
health = 6000;
|
||||||
speed = 1.3f;
|
speed = 1.2f;
|
||||||
rotateSpeed = 2f;
|
rotateSpeed = 2f;
|
||||||
accel = 0.05f;
|
accel = 0.05f;
|
||||||
drag = 0.017f;
|
drag = 0.017f;
|
||||||
@@ -1444,7 +1457,7 @@ public class UnitTypes implements ContentList{
|
|||||||
armor = 2f;
|
armor = 2f;
|
||||||
|
|
||||||
weapons.add(new Weapon("mount-weapon"){{
|
weapons.add(new Weapon("mount-weapon"){{
|
||||||
reload = 12f;
|
reload = 13f;
|
||||||
x = 4f;
|
x = 4f;
|
||||||
shootY = 4f;
|
shootY = 4f;
|
||||||
y = 1.5f;
|
y = 1.5f;
|
||||||
@@ -1455,7 +1468,7 @@ public class UnitTypes implements ContentList{
|
|||||||
|
|
||||||
weapons.add(new Weapon("missiles-mount"){{
|
weapons.add(new Weapon("missiles-mount"){{
|
||||||
mirror = false;
|
mirror = false;
|
||||||
reload = 23f;
|
reload = 25f;
|
||||||
x = 0f;
|
x = 0f;
|
||||||
y = -5f;
|
y = -5f;
|
||||||
rotate = true;
|
rotate = true;
|
||||||
@@ -1498,15 +1511,13 @@ public class UnitTypes implements ContentList{
|
|||||||
trailY = -4f;
|
trailY = -4f;
|
||||||
trailScl = 1.9f;
|
trailScl = 1.9f;
|
||||||
|
|
||||||
abilities.add(new StatusFieldAbility(StatusEffects.overclock, 60f * 6, 60f * 6f, 60f));
|
|
||||||
|
|
||||||
weapons.add(new Weapon("mount-weapon"){{
|
weapons.add(new Weapon("mount-weapon"){{
|
||||||
reload = 15f;
|
reload = 10f;
|
||||||
x = 5f;
|
x = 5f;
|
||||||
y = 3.5f;
|
y = 3.5f;
|
||||||
rotate = true;
|
rotate = true;
|
||||||
rotateSpeed = 5f;
|
rotateSpeed = 5f;
|
||||||
inaccuracy = 10f;
|
inaccuracy = 8f;
|
||||||
ejectEffect = Fx.casing1;
|
ejectEffect = Fx.casing1;
|
||||||
shootSound = Sounds.shoot;
|
shootSound = Sounds.shoot;
|
||||||
bullet = Bullets.flakLead;
|
bullet = Bullets.flakLead;
|
||||||
@@ -1522,7 +1533,15 @@ public class UnitTypes implements ContentList{
|
|||||||
shake = 1.5f;
|
shake = 1.5f;
|
||||||
ejectEffect = Fx.casing2;
|
ejectEffect = Fx.casing2;
|
||||||
shootSound = Sounds.bang;
|
shootSound = Sounds.bang;
|
||||||
bullet = Bullets.artilleryDense;
|
bullet = new ArtilleryBulletType(3f, 20, "shell"){{
|
||||||
|
hitEffect = Fx.flakExplosion;
|
||||||
|
knockback = 0.8f;
|
||||||
|
lifetime = 80f;
|
||||||
|
width = height = 11f;
|
||||||
|
collidesTiles = false;
|
||||||
|
splashDamageRadius = 30f * 0.75f;
|
||||||
|
splashDamage = 40f;
|
||||||
|
}};
|
||||||
}});
|
}});
|
||||||
}};
|
}};
|
||||||
|
|
||||||
@@ -1561,15 +1580,14 @@ public class UnitTypes implements ContentList{
|
|||||||
ejectEffect = Fx.casing3;
|
ejectEffect = Fx.casing3;
|
||||||
shootSound = Sounds.artillery;
|
shootSound = Sounds.artillery;
|
||||||
|
|
||||||
bullet = new ArtilleryBulletType(3.2f, 12){{
|
bullet = new ArtilleryBulletType(3.2f, 15){{
|
||||||
trailMult = 0.8f;
|
trailMult = 0.8f;
|
||||||
hitEffect = Fx.massiveExplosion;
|
hitEffect = Fx.massiveExplosion;
|
||||||
knockback = 1.5f;
|
knockback = 1.5f;
|
||||||
lifetime = 80f;
|
lifetime = 84f;
|
||||||
height = 15.5f;
|
height = 15.5f;
|
||||||
width = 15f;
|
width = 15f;
|
||||||
collidesTiles = false;
|
collidesTiles = false;
|
||||||
ammoMultiplier = 4f;
|
|
||||||
splashDamageRadius = 40f;
|
splashDamageRadius = 40f;
|
||||||
splashDamage = 70f;
|
splashDamage = 70f;
|
||||||
backColor = Pal.missileYellowBack;
|
backColor = Pal.missileYellowBack;
|
||||||
@@ -1857,6 +1875,8 @@ public class UnitTypes implements ContentList{
|
|||||||
trailScl = 1.9f;
|
trailScl = 1.9f;
|
||||||
ammoType = new ItemAmmoType(Items.coal);
|
ammoType = new ItemAmmoType(Items.coal);
|
||||||
|
|
||||||
|
abilities.add(new StatusFieldAbility(StatusEffects.overclock, 60f * 6, 60f * 6f, 60f));
|
||||||
|
|
||||||
buildSpeed = 2f;
|
buildSpeed = 2f;
|
||||||
|
|
||||||
weapons.add(new Weapon("plasma-mount-weapon"){{
|
weapons.add(new Weapon("plasma-mount-weapon"){{
|
||||||
|
|||||||
@@ -8,8 +8,9 @@ import arc.struct.*;
|
|||||||
import arc.util.*;
|
import arc.util.*;
|
||||||
import mindustry.content.*;
|
import mindustry.content.*;
|
||||||
import mindustry.ctype.*;
|
import mindustry.ctype.*;
|
||||||
import mindustry.game.EventType.*;
|
|
||||||
import mindustry.entities.bullet.*;
|
import mindustry.entities.bullet.*;
|
||||||
|
import mindustry.game.EventType.*;
|
||||||
|
import mindustry.io.*;
|
||||||
import mindustry.mod.Mods.*;
|
import mindustry.mod.Mods.*;
|
||||||
import mindustry.type.*;
|
import mindustry.type.*;
|
||||||
import mindustry.world.*;
|
import mindustry.world.*;
|
||||||
@@ -211,10 +212,16 @@ public class ContentLoader{
|
|||||||
}
|
}
|
||||||
|
|
||||||
public <T extends MappableContent> T getByName(ContentType type, String name){
|
public <T extends MappableContent> T getByName(ContentType type, String name){
|
||||||
if(contentNameMap[type.ordinal()] == null){
|
var map = contentNameMap[type.ordinal()];
|
||||||
return null;
|
|
||||||
|
if(map == null) return null;
|
||||||
|
|
||||||
|
//load fallbacks
|
||||||
|
if(type == ContentType.block){
|
||||||
|
name = SaveVersion.modContentNameMap.get(name, name);
|
||||||
}
|
}
|
||||||
return (T)contentNameMap[type.ordinal()].get(name);
|
|
||||||
|
return (T)map.get(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
public <T extends Content> T getByID(ContentType type, int id){
|
public <T extends Content> T getByID(ContentType type, int id){
|
||||||
|
|||||||
@@ -172,13 +172,19 @@ public class Control implements ApplicationListener, Loadable{
|
|||||||
|
|
||||||
Events.on(BlockDestroyEvent.class, e -> {
|
Events.on(BlockDestroyEvent.class, e -> {
|
||||||
if(e.tile.team() == player.team()){
|
if(e.tile.team() == player.team()){
|
||||||
state.stats.buildingsDestroyed++;
|
state.stats.buildingsDestroyed ++;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
Events.on(UnitDestroyEvent.class, e -> {
|
Events.on(UnitDestroyEvent.class, e -> {
|
||||||
if(e.unit.team() != player.team()){
|
if(e.unit.team() != player.team()){
|
||||||
state.stats.enemyUnitsDestroyed++;
|
state.stats.enemyUnitsDestroyed ++;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
Events.on(UnitCreateEvent.class, e -> {
|
||||||
|
if(e.unit.team == state.rules.defaultTeam){
|
||||||
|
state.stats.unitsCreated++;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -164,14 +164,14 @@ public class NetClient implements ApplicationListener{
|
|||||||
public static void sound(Sound sound, float volume, float pitch, float pan){
|
public static void sound(Sound sound, float volume, float pitch, float pan){
|
||||||
if(sound == null) return;
|
if(sound == null) return;
|
||||||
|
|
||||||
sound.play(volume * Core.settings.getInt("sfxvol") / 100f, pitch, pan);
|
sound.play(Mathf.clamp(volume, 0, 4f) * Core.settings.getInt("sfxvol") / 100f, pitch, pan);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Remote(variants = Variant.both, unreliable = true)
|
@Remote(variants = Variant.both, unreliable = true)
|
||||||
public static void soundAt(Sound sound, float x, float y, float volume, float pitch){
|
public static void soundAt(Sound sound, float x, float y, float volume, float pitch){
|
||||||
if(sound == null) return;
|
if(sound == null) return;
|
||||||
|
|
||||||
sound.at(x, y, pitch, volume);
|
sound.at(x, y, pitch, Mathf.clamp(volume, 0, 4f));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Remote(variants = Variant.both, unreliable = true)
|
@Remote(variants = Variant.both, unreliable = true)
|
||||||
|
|||||||
@@ -647,7 +647,7 @@ public class NetServer implements ApplicationListener{
|
|||||||
Unit unit = player.unit();
|
Unit unit = player.unit();
|
||||||
|
|
||||||
long elapsed = Math.min(Time.timeSinceMillis(con.lastReceivedClientTime), 1500);
|
long elapsed = Math.min(Time.timeSinceMillis(con.lastReceivedClientTime), 1500);
|
||||||
float maxSpeed = unit.realSpeed();
|
float maxSpeed = unit.speed();
|
||||||
|
|
||||||
float maxMove = elapsed / 1000f * 60f * maxSpeed * 1.2f;
|
float maxMove = elapsed / 1000f * 60f * maxSpeed * 1.2f;
|
||||||
|
|
||||||
@@ -896,7 +896,7 @@ public class NetServer implements ApplicationListener{
|
|||||||
}
|
}
|
||||||
|
|
||||||
String fixName(String name){
|
String fixName(String name){
|
||||||
name = name.trim();
|
name = name.trim().replace("\n", "").replace("\t", "");
|
||||||
if(name.equals("[") || name.equals("]")){
|
if(name.equals("[") || name.equals("]")){
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -105,8 +105,8 @@ public class Renderer implements ApplicationListener{
|
|||||||
for(int i = 0; i < splashes.length; i++) splashes[i] = atlas.find("splash-" + i);
|
for(int i = 0; i < splashes.length; i++) splashes[i] = atlas.find("splash-" + i);
|
||||||
|
|
||||||
assets.load("sprites/clouds.png", Texture.class).loaded = t -> {
|
assets.load("sprites/clouds.png", Texture.class).loaded = t -> {
|
||||||
((Texture)t).setWrap(TextureWrap.repeat);
|
t.setWrap(TextureWrap.repeat);
|
||||||
((Texture)t).setFilter(TextureFilter.linear);
|
t.setFilter(TextureFilter.linear);
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -114,7 +114,7 @@ public class Renderer implements ApplicationListener{
|
|||||||
public void update(){
|
public void update(){
|
||||||
Color.white.set(1f, 1f, 1f, 1f);
|
Color.white.set(1f, 1f, 1f, 1f);
|
||||||
|
|
||||||
float dest = Mathf.round(targetscale, 0.5f);
|
float dest = Mathf.clamp(Mathf.round(targetscale, 0.5f), minScale(), maxScale());
|
||||||
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;
|
||||||
@@ -504,6 +504,8 @@ public class Renderer implements ApplicationListener{
|
|||||||
|
|
||||||
public void showLaunch(CoreBlock coreType){
|
public void showLaunch(CoreBlock coreType){
|
||||||
Vars.ui.hudfrag.showLaunch();
|
Vars.ui.hudfrag.showLaunch();
|
||||||
|
Vars.control.input.frag.config.hideConfig();
|
||||||
|
Vars.control.input.frag.inv.hide();
|
||||||
launchCoreType = coreType;
|
launchCoreType = coreType;
|
||||||
launching = true;
|
launching = true;
|
||||||
landCore = player.team().core();
|
landCore = player.team().core();
|
||||||
|
|||||||
@@ -356,30 +356,23 @@ public class World{
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void raycastEach(int x0f, int y0f, int x1, int y1, Raycaster cons){
|
public void raycastEach(int x0f, int y0f, int x1, int y1, Raycaster cons){
|
||||||
int x0 = x0f;
|
int x0 = x0f, dx = Math.abs(x1 - x0), sx = x0 < x1 ? 1 : -1;
|
||||||
int y0 = y0f;
|
int y0 = y0f, dy = Math.abs(y1 - y0), sy = y0 < y1 ? 1 : -1;
|
||||||
int dx = Math.abs(x1 - x0);
|
int e2, err = dx - dy;
|
||||||
int dy = Math.abs(y1 - y0);
|
|
||||||
|
|
||||||
int sx = x0 < x1 ? 1 : -1;
|
|
||||||
int sy = y0 < y1 ? 1 : -1;
|
|
||||||
|
|
||||||
int err = dx - dy;
|
|
||||||
int e2;
|
|
||||||
while(true){
|
while(true){
|
||||||
|
|
||||||
if(cons.accept(x0, y0)) break;
|
if(cons.accept(x0, y0)) break;
|
||||||
if(x0 == x1 && y0 == y1) break;
|
if(x0 == x1 && y0 == y1) break;
|
||||||
|
|
||||||
e2 = 2 * err;
|
e2 = 2 * err;
|
||||||
if(e2 > -dy){
|
if(e2 > -dy){
|
||||||
err = err - dy;
|
err -= dy;
|
||||||
x0 = x0 + sx;
|
x0 += sx;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(e2 < dx){
|
if(e2 < dx){
|
||||||
err = err + dx;
|
err += dx;
|
||||||
y0 = y0 + sy;
|
y0 += sy;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -27,6 +27,8 @@ public abstract class UnlockableContent extends MappableContent{
|
|||||||
public boolean alwaysUnlocked = false;
|
public boolean alwaysUnlocked = false;
|
||||||
/** Whether to show the description in the research dialog preview. */
|
/** Whether to show the description in the research dialog preview. */
|
||||||
public boolean inlineDescription = true;
|
public boolean inlineDescription = true;
|
||||||
|
/** Whether details of blocks are hidden in custom games if they haven't been unlocked in campaign mode. */
|
||||||
|
public boolean hideDetails = true;
|
||||||
/** Special logic icon ID. */
|
/** Special logic icon ID. */
|
||||||
public int iconId = 0;
|
public int iconId = 0;
|
||||||
/** Icon of the content to use in UI. */
|
/** Icon of the content to use in UI. */
|
||||||
@@ -149,9 +151,17 @@ public abstract class UnlockableContent extends MappableContent{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean unlockedNowHost(){
|
||||||
|
if(!state.isCampaign()) return true;
|
||||||
|
return net != null && net.client() ?
|
||||||
|
alwaysUnlocked || state.rules.researched.contains(name) :
|
||||||
|
unlocked || alwaysUnlocked;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean unlocked(){
|
public boolean unlocked(){
|
||||||
if(net != null && net.client()) return alwaysUnlocked || state.rules.researched.contains(name);
|
return net != null && net.client() ?
|
||||||
return unlocked || alwaysUnlocked;
|
alwaysUnlocked || unlocked || state.rules.researched.contains(name) :
|
||||||
|
unlocked || alwaysUnlocked;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Locks this content again. */
|
/** Locks this content again. */
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ import mindustry.world.*;
|
|||||||
import static mindustry.Vars.*;
|
import static mindustry.Vars.*;
|
||||||
|
|
||||||
public class MapEditor{
|
public class MapEditor{
|
||||||
public static final int[] brushSizes = {1, 2, 3, 4, 5, 9, 15, 20};
|
public static final float[] brushSizes = {1, 1.5f, 2, 3, 4, 5, 9, 15, 20};
|
||||||
|
|
||||||
public StringMap tags = new StringMap();
|
public StringMap tags = new StringMap();
|
||||||
public MapRenderer renderer = new MapRenderer();
|
public MapRenderer renderer = new MapRenderer();
|
||||||
@@ -28,7 +28,7 @@ public class MapEditor{
|
|||||||
private DrawOperation currentOp;
|
private DrawOperation currentOp;
|
||||||
private boolean loading;
|
private boolean loading;
|
||||||
|
|
||||||
public int brushSize = 1;
|
public float brushSize = 1;
|
||||||
public int rotation;
|
public int rotation;
|
||||||
public Block drawBlock = Blocks.stone;
|
public Block drawBlock = Blocks.stone;
|
||||||
public Team drawTeam = Team.sharded;
|
public Team drawTeam = Team.sharded;
|
||||||
@@ -227,8 +227,9 @@ public class MapEditor{
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void drawCircle(int x, int y, Cons<Tile> drawer){
|
public void drawCircle(int x, int y, Cons<Tile> drawer){
|
||||||
for(int rx = -brushSize; rx <= brushSize; rx++){
|
int clamped = (int)brushSize;
|
||||||
for(int ry = -brushSize; ry <= brushSize; ry++){
|
for(int rx = -clamped; rx <= clamped; rx++){
|
||||||
|
for(int ry = -clamped; ry <= clamped; ry++){
|
||||||
if(Mathf.within(rx, ry, brushSize - 0.5f + 0.0001f)){
|
if(Mathf.within(rx, ry, brushSize - 0.5f + 0.0001f)){
|
||||||
int wx = x + rx, wy = y + ry;
|
int wx = x + rx, wy = y + ry;
|
||||||
|
|
||||||
@@ -243,8 +244,9 @@ public class MapEditor{
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void drawSquare(int x, int y, Cons<Tile> drawer){
|
public void drawSquare(int x, int y, Cons<Tile> drawer){
|
||||||
for(int rx = -brushSize; rx <= brushSize; rx++){
|
int clamped = (int)brushSize;
|
||||||
for(int ry = -brushSize; ry <= brushSize; ry++){
|
for(int rx = -clamped; rx <= clamped; rx++){
|
||||||
|
for(int ry = -clamped; ry <= clamped; ry++){
|
||||||
int wx = x + rx, wy = y + ry;
|
int wx = x + rx, wy = y + ry;
|
||||||
|
|
||||||
if(wx < 0 || wy < 0 || wx >= width() || wy >= height()){
|
if(wx < 0 || wy < 0 || wx >= width() || wy >= height()){
|
||||||
|
|||||||
@@ -576,13 +576,11 @@ public class MapEditorDialog extends Dialog implements Disposable{
|
|||||||
}).growX().top();
|
}).growX().top();
|
||||||
}
|
}
|
||||||
|
|
||||||
if(experimental){
|
mid.row();
|
||||||
mid.row();
|
|
||||||
|
|
||||||
mid.table(t -> {
|
mid.table(t -> {
|
||||||
t.button("Cliffs", Icon.terrain, Styles.cleart, editor::addCliffs).growX().margin(9f);
|
t.button("@editor.cliffs", Icon.terrain, Styles.cleart, editor::addCliffs).growX().margin(9f);
|
||||||
}).growX().top();
|
}).growX().top();
|
||||||
}
|
|
||||||
}).margin(0).left().growY();
|
}).margin(0).left().growY();
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -232,7 +232,7 @@ public class MapGenerateDialog extends BaseDialog{
|
|||||||
}else{
|
}else{
|
||||||
Core.scene.setScrollFocus(null);
|
Core.scene.setScrollFocus(null);
|
||||||
}
|
}
|
||||||
}).grow().uniformX().get().setScrollingDisabled(true, false);
|
}).grow().uniformX().scrollX(false);
|
||||||
}).grow();
|
}).grow();
|
||||||
|
|
||||||
buffer1 = create();
|
buffer1 = create();
|
||||||
@@ -350,7 +350,7 @@ public class MapGenerateDialog extends BaseDialog{
|
|||||||
update();
|
update();
|
||||||
selection.hide();
|
selection.hide();
|
||||||
}).with(Table::left).get().getLabelCell().growX().left().padLeft(5).labelAlign(Align.left);
|
}).with(Table::left).get().getLabelCell().growX().left().padLeft(5).labelAlign(Align.left);
|
||||||
}).get().setScrollingDisabled(true, false);
|
}).scrollX(false);
|
||||||
|
|
||||||
selection.addCloseButton();
|
selection.addCloseButton();
|
||||||
selection.show();
|
selection.show();
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ import mindustry.content.*;
|
|||||||
import mindustry.game.*;
|
import mindustry.game.*;
|
||||||
import mindustry.graphics.*;
|
import mindustry.graphics.*;
|
||||||
import mindustry.world.*;
|
import mindustry.world.*;
|
||||||
|
import mindustry.world.blocks.environment.*;
|
||||||
|
|
||||||
import static mindustry.Vars.*;
|
import static mindustry.Vars.*;
|
||||||
|
|
||||||
@@ -132,6 +133,11 @@ public class MapRenderer implements Disposable{
|
|||||||
wall.editorVariantRegions()[Mathf.randomSeed(idxWall, 0, wall.editorVariantRegions().length - 1)] :
|
wall.editorVariantRegions()[Mathf.randomSeed(idxWall, 0, wall.editorVariantRegions().length - 1)] :
|
||||||
wall.editorIcon();
|
wall.editorIcon();
|
||||||
|
|
||||||
|
if(wall == Blocks.cliff){
|
||||||
|
mesh.setColor(Tmp.c1.set(floor.mapColor).mul(1.6f));
|
||||||
|
region = ((Cliff)Blocks.cliff).editorCliffs[tile.data & 0xff];
|
||||||
|
}
|
||||||
|
|
||||||
offsetX = tilesize / 2f - region.width / 2f * Draw.scl;
|
offsetX = tilesize / 2f - region.width / 2f * Draw.scl;
|
||||||
offsetY = tilesize / 2f - region.height / 2f * Draw.scl;
|
offsetY = tilesize / 2f - region.height / 2f * Draw.scl;
|
||||||
}else if(wall == Blocks.air && !tile.overlay().isAir()){
|
}else if(wall == Blocks.air && !tile.overlay().isAir()){
|
||||||
|
|||||||
@@ -15,6 +15,8 @@ public class MapResizeDialog extends BaseDialog{
|
|||||||
|
|
||||||
public MapResizeDialog(Intc2 cons){
|
public MapResizeDialog(Intc2 cons){
|
||||||
super("@editor.resizemap");
|
super("@editor.resizemap");
|
||||||
|
|
||||||
|
closeOnBack();
|
||||||
shown(() -> {
|
shown(() -> {
|
||||||
cont.clear();
|
cont.clear();
|
||||||
width = editor.width();
|
width = editor.width();
|
||||||
|
|||||||
@@ -38,7 +38,8 @@ public class MapView extends Element implements GestureListener{
|
|||||||
|
|
||||||
for(int i = 0; i < MapEditor.brushSizes.length; i++){
|
for(int i = 0; i < MapEditor.brushSizes.length; i++){
|
||||||
float size = MapEditor.brushSizes[i];
|
float size = MapEditor.brushSizes[i];
|
||||||
brushPolygons[i] = Geometry.pixelCircle(size, (index, x, y) -> Mathf.dst(x, y, index, index) <= index - 0.5f);
|
float mod = size % 1f;
|
||||||
|
brushPolygons[i] = Geometry.pixelCircle(size, (index, x, y) -> Mathf.dst(x, y, index - mod, index - mod) <= size - 0.5f);
|
||||||
}
|
}
|
||||||
|
|
||||||
Core.input.getInputProcessors().insert(0, new GestureDetector(20, 0.5f, 2, 0.15f, this));
|
Core.input.getInputProcessors().insert(0, new GestureDetector(20, 0.5f, 2, 0.15f, this));
|
||||||
|
|||||||
@@ -38,8 +38,14 @@ public class WaveGraph extends Table{
|
|||||||
|
|
||||||
lay.setText(font, "1");
|
lay.setText(font, "1");
|
||||||
|
|
||||||
|
int maxY = switch(mode){
|
||||||
|
case counts -> nextStep(max);
|
||||||
|
case health -> nextStep((int)maxHealth);
|
||||||
|
case totals -> nextStep(maxTotal);
|
||||||
|
};
|
||||||
|
|
||||||
float fh = lay.height;
|
float fh = lay.height;
|
||||||
float offsetX = Scl.scl(30f), offsetY = Scl.scl(22f) + fh + Scl.scl(5f);
|
float offsetX = Scl.scl(lay.width * (maxY + "").length() * 2), offsetY = Scl.scl(22f) + fh + Scl.scl(5f);
|
||||||
|
|
||||||
float graphX = x + offsetX, graphY = y + offsetY, graphW = width - offsetX, graphH = height - offsetY;
|
float graphX = x + offsetX, graphY = y + offsetY, graphW = width - offsetX, graphH = height - offsetY;
|
||||||
float spacing = graphW / (values.length - 1);
|
float spacing = graphW / (values.length - 1);
|
||||||
@@ -53,7 +59,7 @@ public class WaveGraph extends Table{
|
|||||||
|
|
||||||
for(int i = 0; i < values.length; i++){
|
for(int i = 0; i < values.length; i++){
|
||||||
int val = values[i][type.id];
|
int val = values[i][type.id];
|
||||||
float cx = graphX + i*spacing, cy = graphY + val * graphH / max;
|
float cx = graphX + i * spacing, cy = graphY + val * graphH / maxY;
|
||||||
Lines.linePoint(cx, cy);
|
Lines.linePoint(cx, cy);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -69,7 +75,7 @@ public class WaveGraph extends Table{
|
|||||||
sum += values[i][type.id];
|
sum += values[i][type.id];
|
||||||
}
|
}
|
||||||
|
|
||||||
float cx = graphX + i*spacing, cy = graphY + sum * graphH / maxTotal;
|
float cx = graphX + i * spacing, cy = graphY + sum * graphH / maxY;
|
||||||
Lines.linePoint(cx, cy);
|
Lines.linePoint(cx, cy);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -84,7 +90,7 @@ public class WaveGraph extends Table{
|
|||||||
sum += (type.health) * values[i][type.id];
|
sum += (type.health) * values[i][type.id];
|
||||||
}
|
}
|
||||||
|
|
||||||
float cx = graphX + i*spacing, cy = graphY + sum * graphH / maxHealth;
|
float cx = graphX + i * spacing, cy = graphY + sum * graphH / maxY;
|
||||||
Lines.linePoint(cx, cy);
|
Lines.linePoint(cx, cy);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -92,19 +98,23 @@ public class WaveGraph extends Table{
|
|||||||
}
|
}
|
||||||
|
|
||||||
//how many numbers can fit here
|
//how many numbers can fit here
|
||||||
float totalMarks = (graphH - getMarginBottom() *2f) / (lay.height * 2);
|
float totalMarks = Mathf.clamp(maxY, 1, 10);
|
||||||
|
|
||||||
int markSpace = Math.max(1, Mathf.ceil(max / totalMarks));
|
int markSpace = Math.max(1, Mathf.ceil(maxY / totalMarks));
|
||||||
|
|
||||||
Draw.color(Color.lightGray);
|
Draw.color(Color.lightGray);
|
||||||
for(int i = 0; i < max; i += markSpace){
|
Draw.alpha(0.1f);
|
||||||
float cy = graphY + i * graphH / max, cx = graphX;
|
|
||||||
//Lines.line(cx, cy, cx + len, cy);
|
for(int i = 0; i < maxY; i += markSpace){
|
||||||
|
float cy = graphY + i * graphH / maxY, cx = graphX;
|
||||||
|
|
||||||
|
Lines.line(cx, cy, cx + graphW, cy);
|
||||||
|
|
||||||
lay.setText(font, "" + i);
|
lay.setText(font, "" + i);
|
||||||
|
|
||||||
font.draw("" + i, cx, cy + lay.height/2f, Align.right);
|
font.draw("" + i, cx, cy + lay.height / 2f, Align.right);
|
||||||
}
|
}
|
||||||
|
Draw.alpha(1f);
|
||||||
|
|
||||||
float len = Scl.scl(4f);
|
float len = Scl.scl(4f);
|
||||||
font.setColor(Color.lightGray);
|
font.setColor(Color.lightGray);
|
||||||
@@ -113,7 +123,7 @@ public class WaveGraph extends Table{
|
|||||||
float cy = y + fh, cx = graphX + graphW / (values.length - 1) * i;
|
float cy = y + fh, cx = graphX + graphW / (values.length - 1) * i;
|
||||||
|
|
||||||
Lines.line(cx, cy, cx, cy + len);
|
Lines.line(cx, cy, cx, cy + len);
|
||||||
if(i == values.length/2){
|
if(i == values.length / 2){
|
||||||
font.draw("" + (i + from + 1), cx, cy - Scl.scl(2f), Align.center);
|
font.draw("" + (i + from + 1), cx, cy - Scl.scl(2f), Align.center);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -164,13 +174,24 @@ public class WaveGraph extends Table{
|
|||||||
sum += spawned;
|
sum += spawned;
|
||||||
}
|
}
|
||||||
maxTotal = Math.max(maxTotal, sum);
|
maxTotal = Math.max(maxTotal, sum);
|
||||||
maxHealth = Math.max(maxHealth,healthsum);
|
maxHealth = Math.max(maxHealth, healthsum);
|
||||||
}
|
}
|
||||||
|
|
||||||
ObjectSet<UnitType> usedCopy = new ObjectSet<>(used);
|
ObjectSet<UnitType> usedCopy = new ObjectSet<>(used);
|
||||||
|
|
||||||
colors.clear();
|
colors.clear();
|
||||||
colors.left();
|
colors.left();
|
||||||
|
colors.button("@waves.units.hide", Styles.cleart, () -> {
|
||||||
|
if(hidden.size == usedCopy.size){
|
||||||
|
hidden.clear();
|
||||||
|
}else{
|
||||||
|
hidden.addAll(usedCopy);
|
||||||
|
}
|
||||||
|
|
||||||
|
used.clear();
|
||||||
|
used.addAll(usedCopy);
|
||||||
|
for(UnitType o : hidden) used.remove(o);
|
||||||
|
}).update(b -> b.setText(hidden.size == usedCopy.size ? "@waves.units.show" : "@waves.units.hide")).height(32f).width(130f);
|
||||||
colors.pane(t -> {
|
colors.pane(t -> {
|
||||||
t.left();
|
t.left();
|
||||||
for(UnitType type : used){
|
for(UnitType type : used){
|
||||||
@@ -189,7 +210,7 @@ public class WaveGraph extends Table{
|
|||||||
for(UnitType o : hidden) used.remove(o);
|
for(UnitType o : hidden) used.remove(o);
|
||||||
}).update(b -> b.setChecked(hidden.contains(type)));
|
}).update(b -> b.setChecked(hidden.contains(type)));
|
||||||
}
|
}
|
||||||
}).get().setScrollingDisabled(false, true);
|
}).scrollY(false);
|
||||||
|
|
||||||
for(UnitType type : hidden){
|
for(UnitType type : hidden){
|
||||||
used.remove(type);
|
used.remove(type);
|
||||||
@@ -200,6 +221,23 @@ public class WaveGraph extends Table{
|
|||||||
return Tmp.c1.fromHsv(type.id / (float)Vars.content.units().size * 360f, 0.7f, 1f);
|
return Tmp.c1.fromHsv(type.id / (float)Vars.content.units().size * 360f, 0.7f, 1f);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int nextStep(float value){
|
||||||
|
int order = 1;
|
||||||
|
while(order < value){
|
||||||
|
if(order * 2 > value){
|
||||||
|
return order * 2;
|
||||||
|
}
|
||||||
|
if(order * 5 > value){
|
||||||
|
return order * 5;
|
||||||
|
}
|
||||||
|
if(order * 10 > value){
|
||||||
|
return order * 10;
|
||||||
|
}
|
||||||
|
order *= 10;
|
||||||
|
}
|
||||||
|
return order;
|
||||||
|
}
|
||||||
|
|
||||||
enum Mode{
|
enum Mode{
|
||||||
counts, totals, health;
|
counts, totals, health;
|
||||||
|
|
||||||
|
|||||||
@@ -1,8 +1,11 @@
|
|||||||
package mindustry.editor;
|
package mindustry.editor;
|
||||||
|
|
||||||
import arc.*;
|
import arc.*;
|
||||||
|
import arc.graphics.*;
|
||||||
import arc.math.*;
|
import arc.math.*;
|
||||||
|
import arc.math.geom.*;
|
||||||
import arc.scene.event.*;
|
import arc.scene.event.*;
|
||||||
|
import arc.scene.style.*;
|
||||||
import arc.scene.ui.*;
|
import arc.scene.ui.*;
|
||||||
import arc.scene.ui.TextField.*;
|
import arc.scene.ui.TextField.*;
|
||||||
import arc.scene.ui.layout.*;
|
import arc.scene.ui.layout.*;
|
||||||
@@ -17,16 +20,21 @@ import mindustry.type.*;
|
|||||||
import mindustry.ui.*;
|
import mindustry.ui.*;
|
||||||
import mindustry.ui.dialogs.*;
|
import mindustry.ui.dialogs.*;
|
||||||
|
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
import static mindustry.Vars.*;
|
import static mindustry.Vars.*;
|
||||||
import static mindustry.game.SpawnGroup.*;
|
import static mindustry.game.SpawnGroup.*;
|
||||||
|
|
||||||
public class WaveInfoDialog extends BaseDialog{
|
public class WaveInfoDialog extends BaseDialog{
|
||||||
private int displayed = 20;
|
private int displayed = 20;
|
||||||
Seq<SpawnGroup> groups = new Seq<>();
|
Seq<SpawnGroup> groups = new Seq<>();
|
||||||
|
private SpawnGroup expandedGroup;
|
||||||
|
|
||||||
private Table table;
|
private Table table;
|
||||||
private int start = 0;
|
private int start = 0;
|
||||||
private UnitType lastType = UnitTypes.dagger;
|
private UnitType lastType = UnitTypes.dagger;
|
||||||
|
private Sort sort = Sort.begin;
|
||||||
|
private boolean reverseSort = false;
|
||||||
private float updateTimer, updatePeriod = 1f;
|
private float updateTimer, updatePeriod = 1f;
|
||||||
private WaveGraph graph = new WaveGraph();
|
private WaveGraph graph = new WaveGraph();
|
||||||
|
|
||||||
@@ -39,37 +47,69 @@ public class WaveInfoDialog extends BaseDialog{
|
|||||||
addCloseListener();
|
addCloseListener();
|
||||||
|
|
||||||
onResize(this::setup);
|
onResize(this::setup);
|
||||||
|
buttons.button(Icon.filter, () -> {
|
||||||
|
BaseDialog dialog = new BaseDialog("@waves.sort");
|
||||||
|
dialog.setFillParent(false);
|
||||||
|
dialog.cont.table(Tex.button, t -> {
|
||||||
|
for(Sort s : Sort.all){
|
||||||
|
t.button("@waves.sort." + s, Styles.clearTogglet, () -> {
|
||||||
|
sort = s;
|
||||||
|
dialog.hide();
|
||||||
|
buildGroups();
|
||||||
|
}).size(150f, 60f).checked(s == sort);
|
||||||
|
}
|
||||||
|
}).row();
|
||||||
|
dialog.cont.check("@waves.sort.reverse", b -> {
|
||||||
|
reverseSort = b;
|
||||||
|
buildGroups();
|
||||||
|
}).padTop(4).checked(reverseSort).padBottom(8f);
|
||||||
|
dialog.addCloseButton();
|
||||||
|
dialog.show();
|
||||||
|
buildGroups();
|
||||||
|
}).size(60f, 64f);
|
||||||
|
|
||||||
addCloseButton();
|
addCloseButton();
|
||||||
|
|
||||||
buttons.button("@waves.edit", () -> {
|
buttons.button("@waves.edit", Icon.pencil, () -> {
|
||||||
BaseDialog dialog = new BaseDialog("@waves.edit");
|
BaseDialog dialog = new BaseDialog("@waves.edit");
|
||||||
dialog.addCloseButton();
|
dialog.addCloseButton();
|
||||||
dialog.setFillParent(false);
|
dialog.setFillParent(false);
|
||||||
dialog.cont.defaults().size(210f, 64f);
|
dialog.cont.table(Tex.button, t -> {
|
||||||
dialog.cont.button("@waves.copy", () -> {
|
var style = Styles.cleart;
|
||||||
ui.showInfoFade("@waves.copied");
|
t.defaults().size(210f, 58f);
|
||||||
Core.app.setClipboardText(maps.writeWaves(groups));
|
|
||||||
dialog.hide();
|
t.button("@waves.copy", Icon.copy, style, () -> {
|
||||||
}).disabled(b -> groups == null);
|
ui.showInfoFade("@waves.copied");
|
||||||
dialog.cont.row();
|
Core.app.setClipboardText(maps.writeWaves(groups));
|
||||||
dialog.cont.button("@waves.load", () -> {
|
dialog.hide();
|
||||||
try{
|
}).disabled(b -> groups == null).marginLeft(12f).row();
|
||||||
groups = maps.readWaves(Core.app.getClipboardText());
|
|
||||||
|
t.button("@waves.load", Icon.download, style, () -> {
|
||||||
|
try{
|
||||||
|
groups = maps.readWaves(Core.app.getClipboardText());
|
||||||
|
buildGroups();
|
||||||
|
}catch(Exception e){
|
||||||
|
e.printStackTrace();
|
||||||
|
ui.showErrorMessage("@waves.invalid");
|
||||||
|
}
|
||||||
|
dialog.hide();
|
||||||
|
}).marginLeft(12f).disabled(b -> Core.app.getClipboardText() == null || Core.app.getClipboardText().isEmpty()).row();
|
||||||
|
|
||||||
|
t.button("@settings.reset", Icon.upload, style, () -> ui.showConfirm("@confirm", "@settings.clear.confirm", () -> {
|
||||||
|
groups = JsonIO.copy(waves.get());
|
||||||
buildGroups();
|
buildGroups();
|
||||||
}catch(Exception e){
|
dialog.hide();
|
||||||
e.printStackTrace();
|
})).marginLeft(12f).row();
|
||||||
ui.showErrorMessage("@waves.invalid");
|
|
||||||
}
|
t.button("@clear", Icon.cancel, style, () -> ui.showConfirm("@confirm", "@settings.clear.confirm", () -> {
|
||||||
dialog.hide();
|
groups.clear();
|
||||||
}).disabled(b -> Core.app.getClipboardText() == null || Core.app.getClipboardText().isEmpty());
|
buildGroups();
|
||||||
dialog.cont.row();
|
dialog.hide();
|
||||||
dialog.cont.button("@settings.reset", () -> ui.showConfirm("@confirm", "@settings.clear.confirm", () -> {
|
})).marginLeft(12f);
|
||||||
groups = JsonIO.copy(waves.get());
|
});
|
||||||
buildGroups();
|
|
||||||
dialog.hide();
|
|
||||||
}));
|
|
||||||
dialog.show();
|
dialog.show();
|
||||||
}).size(270f, 64f);
|
}).size(250f, 64f);
|
||||||
|
|
||||||
buttons.defaults().width(60f);
|
buttons.defaults().width(60f);
|
||||||
|
|
||||||
@@ -129,11 +169,14 @@ public class WaveInfoDialog extends BaseDialog{
|
|||||||
|
|
||||||
cont.clear();
|
cont.clear();
|
||||||
cont.stack(new Table(Tex.clear, main -> {
|
cont.stack(new Table(Tex.clear, main -> {
|
||||||
main.pane(t -> table = t).growX().growY().padRight(8f).get().setScrollingDisabled(true, false);
|
main.pane(t -> table = t).growX().growY().padRight(8f).scrollX(false);
|
||||||
main.row();
|
main.row();
|
||||||
main.button("@add", () -> {
|
main.button("@add", () -> {
|
||||||
if(groups == null) groups = new Seq<>();
|
if(groups == null) groups = new Seq<>();
|
||||||
groups.add(new SpawnGroup(lastType));
|
SpawnGroup newGroup = new SpawnGroup(lastType);
|
||||||
|
groups.add(newGroup);
|
||||||
|
expandedGroup = newGroup;
|
||||||
|
showUpdate(newGroup);
|
||||||
buildGroups();
|
buildGroups();
|
||||||
}).growX().height(70f);
|
}).growX().height(70f);
|
||||||
}), new Label("@waves.none"){{
|
}), new Label("@waves.none"){{
|
||||||
@@ -154,6 +197,8 @@ public class WaveInfoDialog extends BaseDialog{
|
|||||||
table.margin(10f);
|
table.margin(10f);
|
||||||
|
|
||||||
if(groups != null){
|
if(groups != null){
|
||||||
|
groups.sort(sort.sort);
|
||||||
|
if(reverseSort) groups.reverse();
|
||||||
|
|
||||||
for(SpawnGroup group : groups){
|
for(SpawnGroup group : groups){
|
||||||
table.table(Tex.button, t -> {
|
table.table(Tex.button, t -> {
|
||||||
@@ -165,84 +210,138 @@ public class WaveInfoDialog extends BaseDialog{
|
|||||||
|
|
||||||
b.add().growX();
|
b.add().growX();
|
||||||
|
|
||||||
b.button(Icon.cancel, () -> {
|
b.label(() -> (group.begin + 1) + "").color(Color.lightGray).minWidth(45f).labelAlign(Align.left).left();
|
||||||
|
|
||||||
|
b.button(Icon.copySmall, Styles.emptyi, () -> {
|
||||||
|
SpawnGroup newGroup = group.copy();
|
||||||
|
expandedGroup = newGroup;
|
||||||
|
groups.add(newGroup);
|
||||||
|
buildGroups();
|
||||||
|
}).pad(-6).size(46f);
|
||||||
|
|
||||||
|
b.button(group.effect != null && group.effect != StatusEffects.none ?
|
||||||
|
new TextureRegionDrawable(group.effect.uiIcon) :
|
||||||
|
Icon.logicSmall,
|
||||||
|
Styles.emptyi, () -> showEffect(group)).pad(-6).size(46f);
|
||||||
|
|
||||||
|
b.button(Icon.unitsSmall, Styles.emptyi, () -> showUpdate(group)).pad(-6).size(46f);
|
||||||
|
b.button(Icon.cancel, Styles.emptyi, () -> {
|
||||||
groups.remove(group);
|
groups.remove(group);
|
||||||
table.getCell(t).pad(0f);
|
table.getCell(t).pad(0f);
|
||||||
t.remove();
|
t.remove();
|
||||||
updateWaves();
|
buildGroups();
|
||||||
}).pad(-6).size(46f).padRight(-12f);
|
}).pad(-6).size(46f).padRight(-12f);
|
||||||
}, () -> showUpdate(group)).height(46f).pad(-6f).padBottom(0f);
|
}, () -> {
|
||||||
|
expandedGroup = expandedGroup == group ? null : group;
|
||||||
|
buildGroups();
|
||||||
|
}).height(46f).pad(-6f).padBottom(0f).row();
|
||||||
|
|
||||||
t.row();
|
if(expandedGroup == group){
|
||||||
t.table(spawns -> {
|
t.table(spawns -> {
|
||||||
spawns.field("" + (group.begin + 1), TextFieldFilter.digitsOnly, text -> {
|
spawns.field("" + (group.begin + 1), TextFieldFilter.digitsOnly, text -> {
|
||||||
if(Strings.canParsePositiveInt(text)){
|
if(Strings.canParsePositiveInt(text)){
|
||||||
group.begin = Strings.parseInt(text) - 1;
|
group.begin = Strings.parseInt(text) - 1;
|
||||||
updateWaves();
|
updateWaves();
|
||||||
}
|
}
|
||||||
}).width(100f);
|
}).width(100f);
|
||||||
spawns.add("@waves.to").padLeft(4).padRight(4);
|
spawns.add("@waves.to").padLeft(4).padRight(4);
|
||||||
spawns.field(group.end == never ? "" : (group.end + 1) + "", TextFieldFilter.digitsOnly, text -> {
|
spawns.field(group.end == never ? "" : (group.end + 1) + "", TextFieldFilter.digitsOnly, text -> {
|
||||||
if(Strings.canParsePositiveInt(text)){
|
if(Strings.canParsePositiveInt(text)){
|
||||||
group.end = Strings.parseInt(text) - 1;
|
group.end = Strings.parseInt(text) - 1;
|
||||||
updateWaves();
|
updateWaves();
|
||||||
}else if(text.isEmpty()){
|
}else if(text.isEmpty()){
|
||||||
group.end = never;
|
group.end = never;
|
||||||
updateWaves();
|
updateWaves();
|
||||||
}
|
}
|
||||||
}).width(100f).get().setMessageText("∞");
|
}).width(100f).get().setMessageText("∞");
|
||||||
});
|
}).row();
|
||||||
t.row();
|
|
||||||
t.table(p -> {
|
|
||||||
p.add("@waves.every").padRight(4);
|
|
||||||
p.field(group.spacing + "", TextFieldFilter.digitsOnly, text -> {
|
|
||||||
if(Strings.canParsePositiveInt(text) && Strings.parseInt(text) > 0){
|
|
||||||
group.spacing = Strings.parseInt(text);
|
|
||||||
updateWaves();
|
|
||||||
}
|
|
||||||
}).width(100f);
|
|
||||||
p.add("@waves.waves").padLeft(4);
|
|
||||||
});
|
|
||||||
|
|
||||||
t.row();
|
t.table(p -> {
|
||||||
t.table(a -> {
|
p.add("@waves.every").padRight(4);
|
||||||
a.field(group.unitAmount + "", TextFieldFilter.digitsOnly, text -> {
|
p.field(group.spacing + "", TextFieldFilter.digitsOnly, text -> {
|
||||||
if(Strings.canParsePositiveInt(text)){
|
if(Strings.canParsePositiveInt(text) && Strings.parseInt(text) > 0){
|
||||||
group.unitAmount = Strings.parseInt(text);
|
group.spacing = Strings.parseInt(text);
|
||||||
updateWaves();
|
updateWaves();
|
||||||
}
|
}
|
||||||
}).width(80f);
|
}).width(100f);
|
||||||
|
p.add("@waves.waves").padLeft(4);
|
||||||
|
}).row();
|
||||||
|
|
||||||
a.add(" + ");
|
t.table(a -> {
|
||||||
a.field(Strings.fixed(Math.max((Mathf.zero(group.unitScaling) ? 0 : 1f / group.unitScaling), 0), 2), TextFieldFilter.floatsOnly, text -> {
|
a.field(group.unitAmount + "", TextFieldFilter.digitsOnly, text -> {
|
||||||
if(Strings.canParsePositiveFloat(text)){
|
if(Strings.canParsePositiveInt(text)){
|
||||||
group.unitScaling = 1f / Strings.parseFloat(text);
|
group.unitAmount = Strings.parseInt(text);
|
||||||
updateWaves();
|
updateWaves();
|
||||||
}
|
}
|
||||||
}).width(80f);
|
}).width(80f);
|
||||||
a.add("@waves.perspawn").padLeft(4);
|
|
||||||
});
|
|
||||||
t.row();
|
|
||||||
t.table(a -> {
|
|
||||||
a.field((int)group.shields + "", TextFieldFilter.digitsOnly, text -> {
|
|
||||||
if(Strings.canParsePositiveInt(text)){
|
|
||||||
group.shields = Strings.parseInt(text);
|
|
||||||
updateWaves();
|
|
||||||
}
|
|
||||||
}).width(80f);
|
|
||||||
|
|
||||||
a.add(" + ");
|
a.add(" + ");
|
||||||
a.field((int)group.shieldScaling + "", TextFieldFilter.digitsOnly, text -> {
|
a.field(Strings.fixed(Math.max((Mathf.zero(group.unitScaling) ? 0 : 1f / group.unitScaling), 0), 2), TextFieldFilter.floatsOnly, text -> {
|
||||||
if(Strings.canParsePositiveInt(text)){
|
if(Strings.canParsePositiveFloat(text)){
|
||||||
group.shieldScaling = Strings.parseInt(text);
|
group.unitScaling = 1f / Strings.parseFloat(text);
|
||||||
updateWaves();
|
updateWaves();
|
||||||
}
|
}
|
||||||
}).width(80f);
|
}).width(80f);
|
||||||
a.add("@waves.shields").padLeft(4);
|
a.add("@waves.perspawn").padLeft(4);
|
||||||
});
|
}).row();
|
||||||
|
|
||||||
t.row();
|
t.table(a -> {
|
||||||
t.check("@waves.guardian", b -> group.effect = (b ? StatusEffects.boss : null)).padTop(4).update(b -> b.setChecked(group.effect == StatusEffects.boss)).padBottom(8f);
|
a.field(group.max + "", TextFieldFilter.digitsOnly, text -> {
|
||||||
|
if(Strings.canParsePositiveInt(text)){
|
||||||
|
group.max = Strings.parseInt(text);
|
||||||
|
updateWaves();
|
||||||
|
}
|
||||||
|
}).width(80f);
|
||||||
|
|
||||||
|
a.add("@waves.max").padLeft(5);
|
||||||
|
}).row();
|
||||||
|
|
||||||
|
t.table(a -> {
|
||||||
|
a.field((int)group.shields + "", TextFieldFilter.digitsOnly, text -> {
|
||||||
|
if(Strings.canParsePositiveInt(text)){
|
||||||
|
group.shields = Strings.parseInt(text);
|
||||||
|
updateWaves();
|
||||||
|
}
|
||||||
|
}).width(80f);
|
||||||
|
|
||||||
|
a.add(" + ");
|
||||||
|
a.field((int)group.shieldScaling + "", TextFieldFilter.digitsOnly, text -> {
|
||||||
|
if(Strings.canParsePositiveInt(text)){
|
||||||
|
group.shieldScaling = Strings.parseInt(text);
|
||||||
|
updateWaves();
|
||||||
|
}
|
||||||
|
}).width(80f);
|
||||||
|
a.add("@waves.shields").padLeft(4);
|
||||||
|
}).row();
|
||||||
|
|
||||||
|
t.check("@waves.guardian", b -> {
|
||||||
|
group.effect = (b ? StatusEffects.boss : null);
|
||||||
|
buildGroups();
|
||||||
|
}).padTop(4).update(b -> b.setChecked(group.effect == StatusEffects.boss)).padBottom(8f).row();
|
||||||
|
|
||||||
|
//spawn positions are clunky and thus experimental for now
|
||||||
|
if(experimental){
|
||||||
|
t.table(a -> {
|
||||||
|
a.add("spawn at ");
|
||||||
|
|
||||||
|
a.field(group.spawn == -1 ? "" : Point2.x(group.spawn) + "", TextFieldFilter.digitsOnly, text -> {
|
||||||
|
if(Strings.canParsePositiveInt(text)){
|
||||||
|
group.spawn = Point2.pack(Strings.parseInt(text), Point2.y(group.spawn));
|
||||||
|
Log.info(group.spawn);
|
||||||
|
}
|
||||||
|
}).width(70f);
|
||||||
|
|
||||||
|
a.add(",");
|
||||||
|
|
||||||
|
a.field(group.spawn == -1 ? "" : Point2.y(group.spawn) + "", TextFieldFilter.digitsOnly, text -> {
|
||||||
|
if(Strings.canParsePositiveInt(text)){
|
||||||
|
group.spawn = Point2.pack(Point2.x(group.spawn), Strings.parseInt(text));
|
||||||
|
Log.info(group.spawn);
|
||||||
|
}
|
||||||
|
}).width(70f);
|
||||||
|
}).padBottom(8f).padTop(-8f).row();
|
||||||
|
}
|
||||||
|
}
|
||||||
}).width(340f).pad(8);
|
}).width(340f).pad(8);
|
||||||
|
|
||||||
table.row();
|
table.row();
|
||||||
@@ -274,9 +373,57 @@ public class WaveInfoDialog extends BaseDialog{
|
|||||||
if(++i % 3 == 0) p.row();
|
if(++i % 3 == 0) p.row();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
dialog.addCloseButton();
|
||||||
dialog.show();
|
dialog.show();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void showEffect(SpawnGroup group){
|
||||||
|
BaseDialog dialog = new BaseDialog("");
|
||||||
|
dialog.setFillParent(true);
|
||||||
|
dialog.cont.pane(p -> {
|
||||||
|
int i = 0;
|
||||||
|
for(StatusEffect effect : content.statusEffects()){
|
||||||
|
if(effect != StatusEffects.none && (effect.isHidden() || effect.reactive)) continue;
|
||||||
|
|
||||||
|
p.button(t -> {
|
||||||
|
t.left();
|
||||||
|
if(effect.uiIcon != null && effect != StatusEffects.none){
|
||||||
|
t.image(effect.uiIcon).size(8 * 4).scaling(Scaling.fit).padRight(2f);
|
||||||
|
}else{
|
||||||
|
t.image(Icon.none).size(8 * 4).scaling(Scaling.fit).padRight(2f);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(effect != StatusEffects.none){
|
||||||
|
t.add(effect.localizedName);
|
||||||
|
}else{
|
||||||
|
t.add("@settings.resetKey");
|
||||||
|
}
|
||||||
|
}, () -> {
|
||||||
|
group.effect = effect;
|
||||||
|
dialog.hide();
|
||||||
|
buildGroups();
|
||||||
|
}).pad(2).margin(12f).fillX();
|
||||||
|
if(++i % 3 == 0) p.row();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
dialog.addCloseButton();
|
||||||
|
dialog.show();
|
||||||
|
}
|
||||||
|
|
||||||
|
enum Sort{
|
||||||
|
begin(Structs.comps(Structs.comparingFloat(g -> g.begin), Structs.comparingFloat(g -> g.type.id))),
|
||||||
|
health(Structs.comps(Structs.comparingFloat(g -> g.type.health), Structs.comparingFloat(g -> g.begin))),
|
||||||
|
type(Structs.comps(Structs.comparingFloat(g -> g.type.id), Structs.comparingFloat(g -> g.begin)));
|
||||||
|
|
||||||
|
static final Sort[] all = values();
|
||||||
|
|
||||||
|
final Comparator<SpawnGroup> sort;
|
||||||
|
|
||||||
|
Sort(Comparator<SpawnGroup> sort){
|
||||||
|
this.sort = sort;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void updateWaves(){
|
void updateWaves(){
|
||||||
graph.groups = groups;
|
graph.groups = groups;
|
||||||
graph.from = start;
|
graph.from = start;
|
||||||
|
|||||||
@@ -48,8 +48,8 @@ public class Damage{
|
|||||||
public static void dynamicExplosion(float x, float y, float flammability, float explosiveness, float power, float radius, boolean damage, boolean fire, @Nullable Team ignoreTeam, Effect explosionFx){
|
public static void dynamicExplosion(float x, float y, float flammability, float explosiveness, float power, float radius, boolean damage, boolean fire, @Nullable Team ignoreTeam, Effect explosionFx){
|
||||||
if(damage){
|
if(damage){
|
||||||
for(int i = 0; i < Mathf.clamp(power / 700, 0, 8); i++){
|
for(int i = 0; i < Mathf.clamp(power / 700, 0, 8); i++){
|
||||||
int length = 5 + Mathf.clamp((int)(power / 500), 1, 20);
|
int length = 5 + Mathf.clamp((int)(Mathf.pow(power, 0.98f) / 500), 1, 18);
|
||||||
Time.run(i * 0.8f + Mathf.random(4f), () -> Lightning.create(Team.derelict, Pal.power, 3, x, y, Mathf.random(360f), length + Mathf.range(2)));
|
Time.run(i * 0.8f + Mathf.random(4f), () -> Lightning.create(Team.derelict, Pal.power, 3 + Mathf.pow(power, 0.35f), x, y, Mathf.random(360f), length + Mathf.range(2)));
|
||||||
}
|
}
|
||||||
|
|
||||||
if(fire){
|
if(fire){
|
||||||
@@ -465,8 +465,8 @@ public class Damage{
|
|||||||
for(int dx = -trad; dx <= trad; dx++){
|
for(int dx = -trad; dx <= trad; dx++){
|
||||||
for(int dy = -trad; dy <= trad; dy++){
|
for(int dy = -trad; dy <= trad; dy++){
|
||||||
Tile tile = world.tile(Math.round(x / tilesize) + dx, Math.round(y / tilesize) + dy);
|
Tile tile = world.tile(Math.round(x / tilesize) + dx, Math.round(y / tilesize) + dy);
|
||||||
if(tile != null && tile.build != null && (team == null ||team.isEnemy(tile.team())) && Mathf.dst(dx, dy) <= trad){
|
if(tile != null && tile.build != null && (team == null ||team.isEnemy(tile.team())) && dx*dx + dy*dy <= trad){
|
||||||
tile.build.damage(damage);
|
tile.build.damage(team, damage);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,7 +19,8 @@ import static mindustry.Vars.*;
|
|||||||
public class Effect{
|
public class Effect{
|
||||||
private static final float shakeFalloff = 10000f;
|
private static final float shakeFalloff = 10000f;
|
||||||
private static final EffectContainer container = new EffectContainer();
|
private static final EffectContainer container = new EffectContainer();
|
||||||
private static final Seq<Effect> all = new Seq<>();
|
|
||||||
|
public static final Seq<Effect> all = new Seq<>();
|
||||||
|
|
||||||
private boolean initialized;
|
private boolean initialized;
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package mindustry.entities;
|
package mindustry.entities;
|
||||||
|
|
||||||
|
import arc.func.*;
|
||||||
import arc.math.*;
|
import arc.math.*;
|
||||||
import arc.math.geom.*;
|
import arc.math.geom.*;
|
||||||
import arc.struct.*;
|
import arc.struct.*;
|
||||||
@@ -23,7 +24,9 @@ public class EntityCollisions{
|
|||||||
private Rect r2 = new Rect();
|
private Rect r2 = new Rect();
|
||||||
|
|
||||||
//entity collisions
|
//entity collisions
|
||||||
private Seq<Hitboxc> arrOut = new Seq<>();
|
private Seq<Hitboxc> arrOut = new Seq<>(Hitboxc.class);
|
||||||
|
private Cons<Hitboxc> hitCons = this::updateCollision;
|
||||||
|
private Cons<QuadTree> treeCons = tree -> tree.intersect(r2, arrOut);
|
||||||
|
|
||||||
public void moveCheck(Hitboxc entity, float deltax, float deltay, SolidPred solidCheck){
|
public void moveCheck(Hitboxc entity, float deltax, float deltay, SolidPred solidCheck){
|
||||||
if(!solidCheck.solid(entity.tileX(), entity.tileY())){
|
if(!solidCheck.solid(entity.tileX(), entity.tileY())){
|
||||||
@@ -36,7 +39,7 @@ public class EntityCollisions{
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void move(Hitboxc entity, float deltax, float deltay, SolidPred solidCheck){
|
public void move(Hitboxc entity, float deltax, float deltay, SolidPred solidCheck){
|
||||||
if(Math.abs(deltax) < 0.0001f & Math.abs(deltay) < 0.0001f) return;
|
if(Math.abs(deltax) < 0.0001f & Math.abs(deltay) < 0.0001f) return;
|
||||||
|
|
||||||
boolean movedx = false;
|
boolean movedx = false;
|
||||||
|
|
||||||
@@ -132,7 +135,7 @@ public class EntityCollisions{
|
|||||||
|
|
||||||
public static boolean waterSolid(int x, int y){
|
public static boolean waterSolid(int x, int y){
|
||||||
Tile tile = world.tile(x, y);
|
Tile tile = world.tile(x, y);
|
||||||
return tile == null || (tile.solid() || !tile.floor().isLiquid);
|
return tile == null || tile.solid() || !tile.floor().isLiquid;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean solid(int x, int y){
|
public static boolean solid(int x, int y){
|
||||||
@@ -213,28 +216,34 @@ public class EntityCollisions{
|
|||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public <T extends Hitboxc> void collide(EntityGroup<T> groupa){
|
public <T extends Hitboxc> void collide(EntityGroup<T> groupa){
|
||||||
groupa.each(solid -> {
|
groupa.each((Cons<T>)hitCons);
|
||||||
solid.hitbox(r1);
|
}
|
||||||
r1.x += (solid.lastX() - solid.getX());
|
|
||||||
r1.y += (solid.lastY() - solid.getY());
|
|
||||||
|
|
||||||
solid.hitbox(r2);
|
private void updateCollision(Hitboxc solid){
|
||||||
r2.merge(r1);
|
solid.hitbox(r1);
|
||||||
|
r1.x += (solid.lastX() - solid.getX());
|
||||||
|
r1.y += (solid.lastY() - solid.getY());
|
||||||
|
|
||||||
arrOut.clear();
|
solid.hitbox(r2);
|
||||||
|
r2.merge(r1);
|
||||||
|
|
||||||
//get all targets based on what entity wants to collide with
|
arrOut.clear();
|
||||||
solid.getCollisions(tree -> tree.intersect(r2, arrOut));
|
|
||||||
|
|
||||||
for(Hitboxc sc : arrOut){
|
//get all targets based on what entity wants to collide with
|
||||||
sc.hitbox(r1);
|
solid.getCollisions(treeCons);
|
||||||
if(r2.overlaps(r1)){
|
|
||||||
checkCollide(solid, sc);
|
var items = arrOut.items;
|
||||||
//break out of loop when this object hits something
|
int size = arrOut.size;
|
||||||
if(!solid.isAdded()) return;
|
|
||||||
}
|
for(int i = 0; i < size; i++){
|
||||||
|
Hitboxc sc = items[i];
|
||||||
|
sc.hitbox(r1);
|
||||||
|
if(r2.overlaps(r1)){
|
||||||
|
checkCollide(solid, sc);
|
||||||
|
//break out of loop when this object hits something
|
||||||
|
if(!solid.isAdded()) return;
|
||||||
}
|
}
|
||||||
});
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public interface SolidPred{
|
public interface SolidPred{
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ import arc.util.*;
|
|||||||
import mindustry.*;
|
import mindustry.*;
|
||||||
import mindustry.content.*;
|
import mindustry.content.*;
|
||||||
import mindustry.entities.*;
|
import mindustry.entities.*;
|
||||||
|
import mindustry.game.*;
|
||||||
import mindustry.gen.*;
|
import mindustry.gen.*;
|
||||||
import mindustry.graphics.*;
|
import mindustry.graphics.*;
|
||||||
import mindustry.type.*;
|
import mindustry.type.*;
|
||||||
@@ -25,7 +26,7 @@ public class EnergyFieldAbility extends Ability{
|
|||||||
public Sound shootSound = Sounds.spark;
|
public Sound shootSound = Sounds.spark;
|
||||||
public float statusDuration = 60f * 6f;
|
public float statusDuration = 60f * 6f;
|
||||||
public float x, y;
|
public float x, y;
|
||||||
public boolean hitBuildings = true;
|
public boolean targetGround = true, targetAir = true, hitBuildings = true, hitUnits = true;
|
||||||
public int maxTargets = 25;
|
public int maxTargets = 25;
|
||||||
public float healPercent = 2.5f;
|
public float healPercent = 2.5f;
|
||||||
|
|
||||||
@@ -98,14 +99,20 @@ public class EnergyFieldAbility extends Ability{
|
|||||||
|
|
||||||
all.clear();
|
all.clear();
|
||||||
|
|
||||||
Units.nearby(null, rx, ry, range, other -> {
|
if(hitUnits){
|
||||||
if(other != unit){
|
Units.nearby(null, rx, ry, range, other -> {
|
||||||
all.add(other);
|
if(other != unit && (other.isFlying() ? targetAir : targetGround)){
|
||||||
}
|
all.add(other);
|
||||||
});
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
if(hitBuildings){
|
if(hitBuildings && targetGround){
|
||||||
Units.nearbyBuildings(rx, ry, range, all::add);
|
Units.nearbyBuildings(rx, ry, range, b -> {
|
||||||
|
if(b.team != Team.derelict || state.rules.coreCapture){
|
||||||
|
all.add(b);
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
all.sort(h -> h.dst2(rx, ry));
|
all.sort(h -> h.dst2(rx, ry));
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import arc.util.*;
|
|||||||
import mindustry.*;
|
import mindustry.*;
|
||||||
import mindustry.content.*;
|
import mindustry.content.*;
|
||||||
import mindustry.entities.*;
|
import mindustry.entities.*;
|
||||||
|
import mindustry.game.EventType.*;
|
||||||
import mindustry.gen.*;
|
import mindustry.gen.*;
|
||||||
import mindustry.graphics.*;
|
import mindustry.graphics.*;
|
||||||
import mindustry.type.*;
|
import mindustry.type.*;
|
||||||
@@ -40,6 +41,7 @@ public class UnitSpawnAbility extends Ability{
|
|||||||
Unit u = this.unit.create(unit.team);
|
Unit u = this.unit.create(unit.team);
|
||||||
u.set(x, y);
|
u.set(x, y);
|
||||||
u.rotation = unit.rotation;
|
u.rotation = unit.rotation;
|
||||||
|
Events.fire(new UnitCreateEvent(u, null, unit));
|
||||||
if(!Vars.net.client()){
|
if(!Vars.net.client()){
|
||||||
u.add();
|
u.add();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -346,13 +346,7 @@ public class BulletType extends Content implements Cloneable{
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void update(Bullet b){
|
public void update(Bullet b){
|
||||||
if(!headless && trailLength > 0){
|
updateTrail(b);
|
||||||
if(b.trail == null){
|
|
||||||
b.trail = new Trail(trailLength);
|
|
||||||
}
|
|
||||||
b.trail.length = trailLength;
|
|
||||||
b.trail.update(b.x, b.y, trailInterp.apply(b.fin()));
|
|
||||||
}
|
|
||||||
|
|
||||||
if(homingPower > 0.0001f && b.time >= homingDelay){
|
if(homingPower > 0.0001f && b.time >= homingDelay){
|
||||||
Teamc target;
|
Teamc target;
|
||||||
@@ -387,6 +381,16 @@ public class BulletType extends Content implements Cloneable{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void updateTrail(Bullet b){
|
||||||
|
if(!headless && trailLength > 0){
|
||||||
|
if(b.trail == null){
|
||||||
|
b.trail = new Trail(trailLength);
|
||||||
|
}
|
||||||
|
b.trail.length = trailLength;
|
||||||
|
b.trail.update(b.x, b.y, trailInterp.apply(b.fin()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void init(){
|
public void init(){
|
||||||
if(pierceCap >= 1){
|
if(pierceCap >= 1){
|
||||||
|
|||||||
@@ -7,6 +7,9 @@ import mindustry.entities.*;
|
|||||||
import mindustry.gen.*;
|
import mindustry.gen.*;
|
||||||
|
|
||||||
public class RailBulletType extends BulletType{
|
public class RailBulletType extends BulletType{
|
||||||
|
//for calculating the furthest point
|
||||||
|
static float furthest = 0;
|
||||||
|
|
||||||
public Effect pierceEffect = Fx.hitBulletSmall, updateEffect = Fx.none;
|
public Effect pierceEffect = Fx.hitBulletSmall, updateEffect = Fx.none;
|
||||||
/** Multiplier of damage decreased per health pierced. */
|
/** Multiplier of damage decreased per health pierced. */
|
||||||
public float pierceDamageFactor = 1f;
|
public float pierceDamageFactor = 1f;
|
||||||
@@ -47,6 +50,11 @@ public class RailBulletType extends BulletType{
|
|||||||
|
|
||||||
//subtract health from each consecutive pierce
|
//subtract health from each consecutive pierce
|
||||||
b.damage -= Math.min(b.damage, sub);
|
b.damage -= Math.min(b.damage, sub);
|
||||||
|
|
||||||
|
//bullet was stopped, decrease furthest distance
|
||||||
|
if(b.damage <= 0f){
|
||||||
|
furthest = Math.min(furthest, b.dst(pos));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -54,8 +62,9 @@ public class RailBulletType extends BulletType{
|
|||||||
super.init(b);
|
super.init(b);
|
||||||
|
|
||||||
b.fdata = length;
|
b.fdata = length;
|
||||||
|
furthest = length;
|
||||||
Damage.collideLine(b, b.team, b.type.hitEffect, b.x, b.y, b.rotation(), length, false, false);
|
Damage.collideLine(b, b.team, b.type.hitEffect, b.x, b.y, b.rotation(), length, false, false);
|
||||||
float resultLen = b.fdata;
|
float resultLen = furthest;
|
||||||
|
|
||||||
Vec2 nor = Tmp.v1.trns(b.rotation(), 1f).nor();
|
Vec2 nor = Tmp.v1.trns(b.rotation(), 1f).nor();
|
||||||
for(float i = 0; i <= resultLen; i += updateEffectSeg){
|
for(float i = 0; i <= resultLen; i += updateEffectSeg){
|
||||||
|
|||||||
@@ -94,6 +94,10 @@ abstract class BuilderComp implements Posc, Statusc, Teamc, Rotc{
|
|||||||
|
|
||||||
if(!within(tile, finalPlaceDst)) return;
|
if(!within(tile, finalPlaceDst)) return;
|
||||||
|
|
||||||
|
if(!headless){
|
||||||
|
Vars.control.sound.loop(Sounds.build, tile, 0.51f);
|
||||||
|
}
|
||||||
|
|
||||||
if(!(tile.build instanceof ConstructBuild cb)){
|
if(!(tile.build instanceof ConstructBuild cb)){
|
||||||
if(!current.initialized && !current.breaking && Build.validPlace(current.block, team, current.x, current.y, current.rotation)){
|
if(!current.initialized && !current.breaking && Build.validPlace(current.block, team, current.x, current.y, current.rotation)){
|
||||||
boolean hasAll = infinite || current.isRotation(team) || !Structs.contains(current.block.requirements, i -> core != null && !core.items.has(i.item, Math.min(Mathf.round(i.amount * state.rules.buildCostMultiplier), 1)));
|
boolean hasAll = infinite || current.isRotation(team) || !Structs.contains(current.block.requirements, i -> core != null && !core.items.has(i.item, Math.min(Mathf.round(i.amount * state.rules.buildCostMultiplier), 1)));
|
||||||
|
|||||||
@@ -1509,6 +1509,10 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Buildingc, Timerc,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(cons != null){
|
||||||
|
cons.update();
|
||||||
|
}
|
||||||
|
|
||||||
if(enabled || !block.noUpdateDisabled){
|
if(enabled || !block.noUpdateDisabled){
|
||||||
updateTile();
|
updateTile();
|
||||||
}
|
}
|
||||||
@@ -1521,10 +1525,6 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Buildingc, Timerc,
|
|||||||
liquids.update(updateFlow);
|
liquids.update(updateFlow);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(cons != null){
|
|
||||||
cons.update();
|
|
||||||
}
|
|
||||||
|
|
||||||
if(power != null){
|
if(power != null){
|
||||||
power.graph.update();
|
power.graph.update();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -118,36 +118,7 @@ abstract class BulletComp implements Timedc, Damagec, Hitboxc, Teamc, Posc, Draw
|
|||||||
type.update(self());
|
type.update(self());
|
||||||
|
|
||||||
if(type.collidesTiles && type.collides && type.collidesGround){
|
if(type.collidesTiles && type.collides && type.collidesGround){
|
||||||
world.raycastEach(World.toTile(lastX()), World.toTile(lastY()), tileX(), tileY(), (x, y) -> {
|
tileRaycast(World.toTile(lastX()), World.toTile(lastY()), tileX(), tileY());
|
||||||
|
|
||||||
Building build = world.build(x, y);
|
|
||||||
if(build == null || !isAdded()) return false;
|
|
||||||
|
|
||||||
if(build.collide(self()) && type.testCollision(self(), build) && !build.dead() && (type.collidesTeam || build.team != team) && !(type.pierceBuilding && hasCollided(build.id))){
|
|
||||||
boolean remove = false;
|
|
||||||
|
|
||||||
float health = build.health;
|
|
||||||
|
|
||||||
if(build.team != team){
|
|
||||||
remove = build.collision(self());
|
|
||||||
}
|
|
||||||
|
|
||||||
if(remove || type.collidesTeam){
|
|
||||||
if(!type.pierceBuilding){
|
|
||||||
hit = true;
|
|
||||||
remove();
|
|
||||||
}else{
|
|
||||||
collided.add(build.id);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
type.hitTile(self(), build, health, true);
|
|
||||||
|
|
||||||
return !type.pierceBuilding;
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if(type.pierceCap != -1 && collided.size >= type.pierceCap){
|
if(type.pierceCap != -1 && collided.size >= type.pierceCap){
|
||||||
@@ -156,6 +127,56 @@ abstract class BulletComp implements Timedc, Damagec, Hitboxc, Teamc, Posc, Draw
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//copy-paste of World#raycastEach, inlined for lambda capture performance.
|
||||||
|
@Override
|
||||||
|
public void tileRaycast(int x0f, int y0f, int x1, int y1){
|
||||||
|
int x = x0f, dx = Math.abs(x1 - x), sx = x < x1 ? 1 : -1;
|
||||||
|
int y = y0f, dy = Math.abs(y1 - y), sy = y < y1 ? 1 : -1;
|
||||||
|
int e2, err = dx - dy;
|
||||||
|
int ww = world.width(), wh = world.height();
|
||||||
|
|
||||||
|
while(x >= 0 && y >= 0 && x < ww && y < wh){
|
||||||
|
Building build = world.build(x, y);
|
||||||
|
if(build != null && isAdded() && build.collide(self()) && type.testCollision(self(), build)
|
||||||
|
&& !build.dead() && (type.collidesTeam || build.team != team) && !(type.pierceBuilding && hasCollided(build.id))){
|
||||||
|
|
||||||
|
boolean remove = false;
|
||||||
|
float health = build.health;
|
||||||
|
|
||||||
|
if(build.team != team){
|
||||||
|
remove = build.collision(self());
|
||||||
|
}
|
||||||
|
|
||||||
|
if(remove || type.collidesTeam){
|
||||||
|
if(!type.pierceBuilding){
|
||||||
|
hit = true;
|
||||||
|
remove();
|
||||||
|
}else{
|
||||||
|
collided.add(build.id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
type.hitTile(self(), build, health, true);
|
||||||
|
|
||||||
|
//stop raycasting when building is hit
|
||||||
|
if(type.pierceBuilding) return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(x == x1 && y == y1) break;
|
||||||
|
|
||||||
|
e2 = 2 * err;
|
||||||
|
if(e2 > -dy){
|
||||||
|
err -= dy;
|
||||||
|
x += sx;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(e2 < dx){
|
||||||
|
err += dx;
|
||||||
|
y += sy;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void draw(){
|
public void draw(){
|
||||||
Draw.z(type.layer);
|
Draw.z(type.layer);
|
||||||
|
|||||||
@@ -41,6 +41,10 @@ abstract class FlyingComp implements Posc, Velc, Healthc, Hitboxc{
|
|||||||
return isGrounded() && !hovering;
|
return isGrounded() && !hovering;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
boolean emitWalkSound(){
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
void landed(){
|
void landed(){
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -52,7 +56,7 @@ abstract class FlyingComp implements Posc, Velc, Healthc, Hitboxc{
|
|||||||
|
|
||||||
void moveAt(Vec2 vector, float acceleration){
|
void moveAt(Vec2 vector, float acceleration){
|
||||||
Vec2 t = tmp1.set(vector); //target vector
|
Vec2 t = tmp1.set(vector); //target vector
|
||||||
tmp2.set(t).sub(vel).limit(acceleration * vector.len() * Time.delta * floorSpeedMultiplier()); //delta vector
|
tmp2.set(t).sub(vel).limit(acceleration * vector.len() * Time.delta); //delta vector
|
||||||
vel.add(tmp2);
|
vel.add(tmp2);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -80,7 +84,7 @@ abstract class FlyingComp implements Posc, Velc, Healthc, Hitboxc{
|
|||||||
floor.walkEffect.at(x, y, hitSize() / 8f, floor.mapColor);
|
floor.walkEffect.at(x, y, hitSize() / 8f, floor.mapColor);
|
||||||
splashTimer = 0f;
|
splashTimer = 0f;
|
||||||
|
|
||||||
if(!(this instanceof WaterMovec)){
|
if(emitWalkSound()){
|
||||||
floor.walkSound.at(x, y, Mathf.random(floor.walkSoundPitchMin, floor.walkSoundPitchMax), floor.walkSoundVolume);
|
floor.walkSound.at(x, y, Mathf.random(floor.walkSoundPitchMin, floor.walkSoundPitchMax), floor.walkSoundVolume);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -76,6 +76,17 @@ abstract class MechComp implements Posc, Flyingc, Hitboxc, Unitc, Mechc, Elevati
|
|||||||
return raw;
|
return raw;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@Replace
|
||||||
|
public void rotateMove(Vec2 vec){
|
||||||
|
//mechs use baseRotation to rotate, not rotation.
|
||||||
|
moveAt(Tmp.v2.trns(baseRotation, vec.len()));
|
||||||
|
|
||||||
|
if(!vec.isZero()){
|
||||||
|
baseRotation = Angles.moveToward(baseRotation, vec.angle(), type.rotateSpeed * Math.max(Time.delta, 1));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void moveAt(Vec2 vector, float acceleration){
|
public void moveAt(Vec2 vector, float acceleration){
|
||||||
//mark walking state when moving in a controlled manner
|
//mark walking state when moving in a controlled manner
|
||||||
|
|||||||
@@ -40,8 +40,8 @@ abstract class PuddleComp implements Posc, Puddlec, Drawc{
|
|||||||
|
|
||||||
@Import int id;
|
@Import int id;
|
||||||
@Import float x, y;
|
@Import float x, y;
|
||||||
|
@Import boolean added;
|
||||||
|
|
||||||
transient private boolean mismatch = false;
|
|
||||||
transient float accepting, updateTime, lastRipple = Time.time + Mathf.random(40f);
|
transient float accepting, updateTime, lastRipple = Time.time + Mathf.random(40f);
|
||||||
float amount;
|
float amount;
|
||||||
Tile tile;
|
Tile tile;
|
||||||
@@ -79,9 +79,12 @@ abstract class PuddleComp implements Posc, Puddlec, Drawc{
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(Puddles.get(tile) != self()){
|
if(Puddles.get(tile) != self() && added){
|
||||||
mismatch = true;
|
//force removal without pool free
|
||||||
remove();
|
Groups.all.remove(self());
|
||||||
|
Groups.draw.remove(self());
|
||||||
|
Groups.puddle.remove(self());
|
||||||
|
added = false;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -134,9 +137,7 @@ abstract class PuddleComp implements Posc, Puddlec, Drawc{
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void remove(){
|
public void remove(){
|
||||||
if(!mismatch){
|
Puddles.remove(tile);
|
||||||
Puddles.remove(tile);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -11,7 +11,6 @@ import arc.util.*;
|
|||||||
import mindustry.ai.*;
|
import mindustry.ai.*;
|
||||||
import mindustry.ai.types.*;
|
import mindustry.ai.types.*;
|
||||||
import mindustry.annotations.Annotations.*;
|
import mindustry.annotations.Annotations.*;
|
||||||
import mindustry.content.*;
|
|
||||||
import mindustry.core.*;
|
import mindustry.core.*;
|
||||||
import mindustry.ctype.*;
|
import mindustry.ctype.*;
|
||||||
import mindustry.entities.*;
|
import mindustry.entities.*;
|
||||||
@@ -51,6 +50,15 @@ abstract class UnitComp implements Healthc, Physicsc, Hitboxc, Statusc, Teamc, I
|
|||||||
private transient boolean wasPlayer;
|
private transient boolean wasPlayer;
|
||||||
private transient boolean wasHealed;
|
private transient boolean wasHealed;
|
||||||
|
|
||||||
|
/** Move based on preferred unit movement type. */
|
||||||
|
public void movePref(Vec2 movement){
|
||||||
|
if(type.omniMovement){
|
||||||
|
moveAt(movement);
|
||||||
|
}else{
|
||||||
|
rotateMove(movement);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void moveAt(Vec2 vector){
|
public void moveAt(Vec2 vector){
|
||||||
moveAt(vector, type.accel);
|
moveAt(vector, type.accel);
|
||||||
}
|
}
|
||||||
@@ -95,15 +103,18 @@ abstract class UnitComp implements Healthc, Physicsc, Hitboxc, Statusc, Teamc, I
|
|||||||
return type.hasWeapons();
|
return type.hasWeapons();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** @return speed with boost & floor multipliers factored in. */
|
||||||
public float speed(){
|
public float speed(){
|
||||||
float strafePenalty = isGrounded() || !isPlayer() ? 1f : Mathf.lerp(1f, type.strafePenalty, Angles.angleDist(vel().angle(), rotation) / 180f);
|
float strafePenalty = isGrounded() || !isPlayer() ? 1f : Mathf.lerp(1f, type.strafePenalty, Angles.angleDist(vel().angle(), rotation) / 180f);
|
||||||
|
float boost = Mathf.lerp(1f, type.canBoost ? type.boostMultiplier : 1f, elevation);
|
||||||
//limit speed to minimum formation speed to preserve formation
|
//limit speed to minimum formation speed to preserve formation
|
||||||
return (isCommanding() ? minFormationSpeed * 0.98f : type.speed) * strafePenalty;
|
return (isCommanding() ? minFormationSpeed * 0.98f : type.speed) * strafePenalty * boost * floorSpeedMultiplier();
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @return speed with boost multipliers factored in. */
|
/** @deprecated use speed() instead */
|
||||||
|
@Deprecated
|
||||||
public float realSpeed(){
|
public float realSpeed(){
|
||||||
return Mathf.lerp(1f, type.canBoost ? type.boostMultiplier : 1f, elevation) * speed() * floorSpeedMultiplier();
|
return speed();
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Iterates through this unit and everything it is controlling. */
|
/** Iterates through this unit and everything it is controlling. */
|
||||||
@@ -469,12 +480,13 @@ abstract class UnitComp implements Healthc, Physicsc, Hitboxc, Statusc, Teamc, I
|
|||||||
|
|
||||||
if(!spawnedByCore){
|
if(!spawnedByCore){
|
||||||
Damage.dynamicExplosion(x, y, flammability, explosiveness, power, bounds() / 2f, state.rules.damageExplosions, item().flammability > 1, team, type.deathExplosionEffect);
|
Damage.dynamicExplosion(x, y, flammability, explosiveness, power, bounds() / 2f, state.rules.damageExplosions, item().flammability > 1, team, type.deathExplosionEffect);
|
||||||
|
}else{
|
||||||
|
type.deathExplosionEffect.at(x, y, bounds() / 2f / 8f);
|
||||||
}
|
}
|
||||||
|
|
||||||
float shake = hitSize / 3f;
|
float shake = hitSize / 3f;
|
||||||
|
|
||||||
Effect.scorch(x, y, (int)(hitSize / 5));
|
Effect.scorch(x, y, (int)(hitSize / 5));
|
||||||
Fx.explosion.at(this);
|
|
||||||
Effect.shake(shake, shake, this);
|
Effect.shake(shake, shake, this);
|
||||||
type.deathSound.at(this);
|
type.deathSound.at(this);
|
||||||
|
|
||||||
@@ -486,7 +498,7 @@ abstract class UnitComp implements Healthc, Physicsc, Hitboxc, Statusc, Teamc, I
|
|||||||
|
|
||||||
//if this unit crash landed (was flying), damage stuff in a radius
|
//if this unit crash landed (was flying), damage stuff in a radius
|
||||||
if(type.flying && !spawnedByCore){
|
if(type.flying && !spawnedByCore){
|
||||||
Damage.damage(team,x, y, Mathf.pow(hitSize, 0.94f) * 1.25f, Mathf.pow(hitSize, 0.75f) * type.crashDamageMultiplier * 5f, true, false, true);
|
Damage.damage(team, x, y, Mathf.pow(hitSize, 0.94f) * 1.25f, Mathf.pow(hitSize, 0.75f) * type.crashDamageMultiplier * 5f, true, false, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!headless){
|
if(!headless){
|
||||||
|
|||||||
@@ -27,13 +27,14 @@ abstract class WaterMoveComp implements Posc, Velc, Hitboxc, Flyingc, Unitc{
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void update(){
|
public void update(){
|
||||||
|
boolean flying = isFlying();
|
||||||
for(int i = 0; i < 2; i++){
|
for(int i = 0; i < 2; i++){
|
||||||
Trail t = i == 0 ? tleft : tright;
|
Trail t = i == 0 ? tleft : tright;
|
||||||
t.length = type.trailLength;
|
t.length = type.trailLength;
|
||||||
|
|
||||||
int sign = i == 0 ? -1 : 1;
|
int sign = i == 0 ? -1 : 1;
|
||||||
float cx = Angles.trnsx(rotation - 90, type.trailX * sign, type.trailY) + x, cy = Angles.trnsy(rotation - 90, type.trailX * sign, type.trailY) + y;
|
float cx = Angles.trnsx(rotation - 90, type.trailX * sign, type.trailY) + x, cy = Angles.trnsy(rotation - 90, type.trailX * sign, type.trailY) + y;
|
||||||
t.update(cx, cy, world.floorWorld(cx, cy).isLiquid ? 1 : 0);
|
t.update(cx, cy, world.floorWorld(cx, cy).isLiquid && !flying ? 1 : 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -43,6 +44,13 @@ abstract class WaterMoveComp implements Posc, Velc, Hitboxc, Flyingc, Unitc{
|
|||||||
return Pathfinder.costNaval;
|
return Pathfinder.costNaval;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//don't want obnoxious splashing
|
||||||
|
@Override
|
||||||
|
@Replace
|
||||||
|
public boolean emitWalkSound(){
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void add(){
|
public void add(){
|
||||||
tleft.clear();
|
tleft.clear();
|
||||||
@@ -71,6 +79,12 @@ abstract class WaterMoveComp implements Posc, Velc, Hitboxc, Flyingc, Unitc{
|
|||||||
return isFlying() ? null : EntityCollisions::waterSolid;
|
return isFlying() ? null : EntityCollisions::waterSolid;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Replace
|
||||||
|
@Override
|
||||||
|
public boolean onSolid(){
|
||||||
|
return EntityCollisions.waterSolid(tileX(), tileY());
|
||||||
|
}
|
||||||
|
|
||||||
@Replace
|
@Replace
|
||||||
public float floorSpeedMultiplier(){
|
public float floorSpeedMultiplier(){
|
||||||
Floor on = isFlying() ? Blocks.air.asFloor() : floorOn();
|
Floor on = isFlying() ? Blocks.air.asFloor() : floorOn();
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ public class MultiEffect extends Effect{
|
|||||||
@Override
|
@Override
|
||||||
public void init(){
|
public void init(){
|
||||||
for(Effect f : effects){
|
for(Effect f : effects){
|
||||||
|
f.init();
|
||||||
clip = Math.max(clip, f.clip);
|
clip = Math.max(clip, f.clip);
|
||||||
lifetime = Math.max(lifetime, f.lifetime);
|
lifetime = Math.max(lifetime, f.lifetime);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,17 +4,24 @@ import arc.*;
|
|||||||
import arc.graphics.*;
|
import arc.graphics.*;
|
||||||
import arc.graphics.g2d.*;
|
import arc.graphics.g2d.*;
|
||||||
import arc.math.*;
|
import arc.math.*;
|
||||||
|
import arc.math.geom.*;
|
||||||
import arc.util.*;
|
import arc.util.*;
|
||||||
import mindustry.entities.*;
|
import mindustry.entities.*;
|
||||||
import mindustry.graphics.*;
|
import mindustry.graphics.*;
|
||||||
|
|
||||||
/** The most essential effect class. Can create particles in various shapes. */
|
/** The most essential effect class. Can create particles in various shapes. */
|
||||||
public class ParticleEffect extends Effect{
|
public class ParticleEffect extends Effect{
|
||||||
|
private static final Rand rand = new Rand();
|
||||||
|
private static final Vec2 rv = new Vec2();
|
||||||
|
|
||||||
public Color colorFrom = Color.white.cpy(), colorTo = Color.white.cpy();
|
public Color colorFrom = Color.white.cpy(), colorTo = Color.white.cpy();
|
||||||
public int particles = 6;
|
public int particles = 6;
|
||||||
|
public boolean randLength = true;
|
||||||
public float cone = 180f, length = 20f, baseLength = 0f;
|
public float cone = 180f, length = 20f, baseLength = 0f;
|
||||||
/** Particle size/length/radius interpolation. */
|
/** Particle size/length/radius interpolation. */
|
||||||
public Interp interp = Interp.linear;
|
public Interp interp = Interp.linear;
|
||||||
|
/** Particle size interpolation. Null to use interp. */
|
||||||
|
public @Nullable Interp sizeInterp = null;
|
||||||
public float offsetX, offsetY;
|
public float offsetX, offsetY;
|
||||||
public float lightScl = 2f, lightOpacity = 0.6f;
|
public float lightScl = 2f, lightOpacity = 0.6f;
|
||||||
public @Nullable Color lightColor;
|
public @Nullable Color lightColor;
|
||||||
@@ -39,6 +46,7 @@ public class ParticleEffect extends Effect{
|
|||||||
@Override
|
@Override
|
||||||
public void init(){
|
public void init(){
|
||||||
clip = Math.max(clip, length + Math.max(sizeFrom, sizeTo));
|
clip = Math.max(clip, length + Math.max(sizeFrom, sizeTo));
|
||||||
|
if(sizeInterp == null) sizeInterp = interp;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -47,25 +55,35 @@ public class ParticleEffect extends Effect{
|
|||||||
|
|
||||||
float rawfin = e.fin();
|
float rawfin = e.fin();
|
||||||
float fin = e.fin(interp);
|
float fin = e.fin(interp);
|
||||||
float rad = interp.apply(sizeFrom, sizeTo, rawfin) * 2;
|
float rad = sizeInterp.apply(sizeFrom, sizeTo, rawfin) * 2;
|
||||||
float ox = e.x + Angles.trnsx(e.rotation, offsetX, offsetY), oy = e.y + Angles.trnsy(e.rotation, offsetX, offsetY);
|
float ox = e.x + Angles.trnsx(e.rotation, offsetX, offsetY), oy = e.y + Angles.trnsy(e.rotation, offsetX, offsetY);
|
||||||
|
|
||||||
Draw.color(colorFrom, colorTo, fin);
|
Draw.color(colorFrom, colorTo, fin);
|
||||||
Color lightColor = this.lightColor == null ? Draw.getColor() : this.lightColor;
|
Color lightColor = this.lightColor == null ? Draw.getColor() : this.lightColor;
|
||||||
|
|
||||||
if(line){
|
if(line){
|
||||||
Lines.stroke(interp.apply(strokeFrom, strokeTo, rawfin));
|
Lines.stroke(sizeInterp.apply(strokeFrom, strokeTo, rawfin));
|
||||||
float len = interp.apply(lenFrom, lenTo, rawfin);
|
float len = sizeInterp.apply(lenFrom, lenTo, rawfin);
|
||||||
|
|
||||||
|
rand.setSeed(e.id);
|
||||||
|
for(int i = 0; i < particles; i++){
|
||||||
|
float l = length * fin + baseLength;
|
||||||
|
rv.trns(e.rotation + rand.range(cone), !randLength ? l : rand.random(l));
|
||||||
|
float x = rv.x, y = rv.y;
|
||||||
|
|
||||||
Angles.randLenVectors(e.id, particles, length * fin + baseLength, e.rotation, cone, (x, y) -> {
|
|
||||||
Lines.lineAngle(ox + x, oy + y, Mathf.angle(x, y), len);
|
Lines.lineAngle(ox + x, oy + y, Mathf.angle(x, y), len);
|
||||||
Drawf.light(ox + x, oy + y, len * lightScl, lightColor, lightOpacity* Draw.getColor().a);
|
Drawf.light(ox + x, oy + y, len * lightScl, lightColor, lightOpacity * Draw.getColor().a);
|
||||||
});
|
}
|
||||||
}else{
|
}else{
|
||||||
Angles.randLenVectors(e.id, particles, length * fin + baseLength, e.rotation, cone, (x, y) -> {
|
rand.setSeed(e.id);
|
||||||
|
for(int i = 0; i < particles; i++){
|
||||||
|
float l = length * fin + baseLength;
|
||||||
|
rv.trns(e.rotation + rand.range(cone), !randLength ? l : rand.random(l));
|
||||||
|
float x = rv.x, y = rv.y;
|
||||||
|
|
||||||
Draw.rect(tex, ox + x, oy + y, rad, rad, e.rotation + offset + e.time * spin);
|
Draw.rect(tex, ox + x, oy + y, rad, rad, e.rotation + offset + e.time * spin);
|
||||||
Drawf.light(ox + x, oy + y, rad * lightScl, lightColor, lightOpacity * Draw.getColor().a);
|
Drawf.light(ox + x, oy + y, rad * lightScl, lightColor, lightOpacity * Draw.getColor().a);
|
||||||
});
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -46,19 +46,19 @@ public class AIController implements UnitController{
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
protected AIController fallback(){
|
public AIController fallback(){
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected boolean useFallback(){
|
public boolean useFallback(){
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected UnitCommand command(){
|
public UnitCommand command(){
|
||||||
return unit.team.data().command;
|
return unit.team.data().command;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void updateVisuals(){
|
public void updateVisuals(){
|
||||||
if(unit.isFlying()){
|
if(unit.isFlying()){
|
||||||
unit.wobble();
|
unit.wobble();
|
||||||
|
|
||||||
@@ -66,21 +66,38 @@ public class AIController implements UnitController{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void updateMovement(){
|
public void updateMovement(){
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void updateTargeting(){
|
public void updateTargeting(){
|
||||||
if(unit.hasWeapons()){
|
if(unit.hasWeapons()){
|
||||||
updateWeapons();
|
updateWeapons();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected boolean invalid(Teamc target){
|
/** For ground units: Looks at the target, or the movement position. Does not apply to non-omni units. */
|
||||||
|
public void faceTarget(){
|
||||||
|
if(unit.type.omniMovement || unit instanceof Mechc){
|
||||||
|
if(!Units.invalidateTarget(target, unit, unit.range()) && unit.type.rotateShooting && unit.type.hasWeapons()){
|
||||||
|
unit.lookAt(Predict.intercept(unit, target, unit.type.weapons.first().bullet.speed));
|
||||||
|
}else if(unit.moving()){
|
||||||
|
unit.lookAt(unit.vel().angle());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void faceMovement(){
|
||||||
|
if((unit.type.omniMovement || unit instanceof Mechc) && unit.moving()){
|
||||||
|
unit.lookAt(unit.vel().angle());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean invalid(Teamc target){
|
||||||
return Units.invalidateTarget(target, unit.team, unit.x, unit.y);
|
return Units.invalidateTarget(target, unit.team, unit.x, unit.y);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void pathfind(int pathTarget){
|
public void pathfind(int pathTarget){
|
||||||
int costType = unit.pathType();
|
int costType = unit.pathType();
|
||||||
|
|
||||||
Tile tile = unit.tileOn();
|
Tile tile = unit.tileOn();
|
||||||
@@ -89,10 +106,10 @@ public class AIController implements UnitController{
|
|||||||
|
|
||||||
if(tile == targetTile || (costType == Pathfinder.costNaval && !targetTile.floor().isLiquid)) return;
|
if(tile == targetTile || (costType == Pathfinder.costNaval && !targetTile.floor().isLiquid)) return;
|
||||||
|
|
||||||
unit.moveAt(vec.trns(unit.angleTo(targetTile.worldx(), targetTile.worldy()), unit.speed()));
|
unit.movePref(vec.trns(unit.angleTo(targetTile.worldx(), targetTile.worldy()), unit.speed()));
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void updateWeapons(){
|
public void updateWeapons(){
|
||||||
float rotation = unit.rotation - 90;
|
float rotation = unit.rotation - 90;
|
||||||
boolean ret = retarget();
|
boolean ret = retarget();
|
||||||
|
|
||||||
@@ -146,45 +163,45 @@ public class AIController implements UnitController{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected boolean checkTarget(Teamc target, float x, float y, float range){
|
public boolean checkTarget(Teamc target, float x, float y, float range){
|
||||||
return Units.invalidateTarget(target, unit.team, x, y, range);
|
return Units.invalidateTarget(target, unit.team, x, y, range);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected boolean shouldShoot(){
|
public boolean shouldShoot(){
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected Teamc targetFlag(float x, float y, BlockFlag flag, boolean enemy){
|
public Teamc targetFlag(float x, float y, BlockFlag flag, boolean enemy){
|
||||||
if(unit.team == Team.derelict) return null;
|
if(unit.team == Team.derelict) return null;
|
||||||
Tile target = Geometry.findClosest(x, y, enemy ? indexer.getEnemy(unit.team, flag) : indexer.getAllied(unit.team, flag));
|
Tile target = Geometry.findClosest(x, y, enemy ? indexer.getEnemy(unit.team, flag) : indexer.getAllied(unit.team, flag));
|
||||||
return target == null ? null : target.build;
|
return target == null ? null : target.build;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected Teamc target(float x, float y, float range, boolean air, boolean ground){
|
public Teamc target(float x, float y, float range, boolean air, boolean ground){
|
||||||
return Units.closestTarget(unit.team, x, y, range, u -> u.checkTarget(air, ground), t -> ground);
|
return Units.closestTarget(unit.team, x, y, range, u -> u.checkTarget(air, ground), t -> ground);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected boolean retarget(){
|
public boolean retarget(){
|
||||||
return timer.get(timerTarget, target == null ? 40 : 90);
|
return timer.get(timerTarget, target == null ? 40 : 90);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected Teamc findMainTarget(float x, float y, float range, boolean air, boolean ground){
|
public Teamc findMainTarget(float x, float y, float range, boolean air, boolean ground){
|
||||||
return findTarget(x, y, range, air, ground);
|
return findTarget(x, y, range, air, ground);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected Teamc findTarget(float x, float y, float range, boolean air, boolean ground){
|
public Teamc findTarget(float x, float y, float range, boolean air, boolean ground){
|
||||||
return target(x, y, range, air, ground);
|
return target(x, y, range, air, ground);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void init(){
|
public void init(){
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected @Nullable Tile getClosestSpawner(){
|
public @Nullable Tile getClosestSpawner(){
|
||||||
return Geometry.findClosest(unit.x, unit.y, Vars.spawner.getSpawns());
|
return Geometry.findClosest(unit.x, unit.y, Vars.spawner.getSpawns());
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void unloadPayloads(){
|
public void unloadPayloads(){
|
||||||
if(unit instanceof Payloadc pay && pay.hasPayload() && target instanceof Building && pay.payloads().peek() instanceof UnitPayload){
|
if(unit instanceof Payloadc pay && pay.hasPayload() && target instanceof Building && pay.payloads().peek() instanceof UnitPayload){
|
||||||
if(target.within(unit, Math.max(unit.type().range + 1f, 75f))){
|
if(target.within(unit, Math.max(unit.type().range + 1f, 75f))){
|
||||||
pay.dropLastPayload();
|
pay.dropLastPayload();
|
||||||
@@ -192,11 +209,11 @@ public class AIController implements UnitController{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void circle(Position target, float circleLength){
|
public void circle(Position target, float circleLength){
|
||||||
circle(target, circleLength, unit.speed());
|
circle(target, circleLength, unit.speed());
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void circle(Position target, float circleLength, float speed){
|
public void circle(Position target, float circleLength, float speed){
|
||||||
if(target == null) return;
|
if(target == null) return;
|
||||||
|
|
||||||
vec.set(target).sub(unit);
|
vec.set(target).sub(unit);
|
||||||
@@ -210,18 +227,18 @@ public class AIController implements UnitController{
|
|||||||
unit.moveAt(vec);
|
unit.moveAt(vec);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void moveTo(Position target, float circleLength){
|
public void moveTo(Position target, float circleLength){
|
||||||
moveTo(target, circleLength, 100f);
|
moveTo(target, circleLength, 100f);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void moveTo(Position target, float circleLength, float smooth){
|
public void moveTo(Position target, float circleLength, float smooth){
|
||||||
if(target == null) return;
|
if(target == null) return;
|
||||||
|
|
||||||
vec.set(target).sub(unit);
|
vec.set(target).sub(unit);
|
||||||
|
|
||||||
float length = circleLength <= 0.001f ? 1f : Mathf.clamp((unit.dst(target) - circleLength) / smooth, -1f, 1f);
|
float length = circleLength <= 0.001f ? 1f : Mathf.clamp((unit.dst(target) - circleLength) / smooth, -1f, 1f);
|
||||||
|
|
||||||
vec.setLength(unit.realSpeed() * length);
|
vec.setLength(unit.speed() * length);
|
||||||
if(length < -0.5f){
|
if(length < -0.5f){
|
||||||
vec.rotate(180f);
|
vec.rotate(180f);
|
||||||
}else if(length < 0){
|
}else if(length < 0){
|
||||||
|
|||||||
25
core/src/mindustry/entities/units/UnitDecal.java
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
package mindustry.entities.units;
|
||||||
|
|
||||||
|
import arc.graphics.*;
|
||||||
|
import mindustry.graphics.*;
|
||||||
|
|
||||||
|
/** A sprite drawn in addition to the base unit sprites. */
|
||||||
|
public class UnitDecal{
|
||||||
|
public String region = "error";
|
||||||
|
public float x, y, rotation;
|
||||||
|
public float layer = Layer.flyingUnit + 1f;
|
||||||
|
public float xScale = 1f, yScale = 1f;
|
||||||
|
public Color color = Color.white;
|
||||||
|
|
||||||
|
public UnitDecal(String region, float x, float y, float rotation, float layer, Color color){
|
||||||
|
this.region = region;
|
||||||
|
this.x = x;
|
||||||
|
this.y = y;
|
||||||
|
this.rotation = rotation;
|
||||||
|
this.layer = layer;
|
||||||
|
this.color = color;
|
||||||
|
}
|
||||||
|
|
||||||
|
public UnitDecal(){
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -411,14 +411,29 @@ public class EventType{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Called when a unit is created in a reconstructor or factory. */
|
/** Called when a unit is created in a reconstructor, factory or other unit. */
|
||||||
public static class UnitCreateEvent{
|
public static class UnitCreateEvent{
|
||||||
public final Unit unit;
|
public final Unit unit;
|
||||||
public final Building spawner;
|
public final @Nullable Building spawner;
|
||||||
|
public final @Nullable Unit spawnerUnit;
|
||||||
|
|
||||||
public UnitCreateEvent(Unit unit, Building spawner){
|
public UnitCreateEvent(Unit unit, Building spawner, Unit spawnerUnit){
|
||||||
this.unit = unit;
|
this.unit = unit;
|
||||||
this.spawner = spawner;
|
this.spawner = spawner;
|
||||||
|
this.spawnerUnit = spawnerUnit;
|
||||||
|
}
|
||||||
|
|
||||||
|
public UnitCreateEvent(Unit unit, Building spawner){
|
||||||
|
this(unit, spawner, null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Called when a unit is spawned by wave. */
|
||||||
|
public static class UnitSpawnEvent{
|
||||||
|
public final Unit unit;
|
||||||
|
|
||||||
|
public UnitSpawnEvent(Unit unit) {
|
||||||
|
this.unit = unit;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,52 +1,16 @@
|
|||||||
package mindustry.game;
|
package mindustry.game;
|
||||||
|
|
||||||
import arc.math.*;
|
|
||||||
import arc.struct.*;
|
|
||||||
import mindustry.type.*;
|
|
||||||
|
|
||||||
//TODO more stats:
|
|
||||||
//- units constructed
|
|
||||||
public class GameStats{
|
public class GameStats{
|
||||||
/** Total items delivered to global resoure counter. Campaign only. */
|
|
||||||
public ObjectIntMap<Item> itemsDelivered = new ObjectIntMap<>();
|
|
||||||
/** Enemy (red team) units destroyed. */
|
/** Enemy (red team) units destroyed. */
|
||||||
public int enemyUnitsDestroyed;
|
public int enemyUnitsDestroyed;
|
||||||
/** Total waves lasted. */
|
/** Total waves lasted. */
|
||||||
public int wavesLasted;
|
public int wavesLasted;
|
||||||
/** Total (ms) time lasted in this save/zone. */
|
|
||||||
public long timeLasted;
|
|
||||||
/** Friendly buildings fully built. */
|
/** Friendly buildings fully built. */
|
||||||
public int buildingsBuilt;
|
public int buildingsBuilt;
|
||||||
/** Friendly buildings fully deconstructed. */
|
/** Friendly buildings fully deconstructed. */
|
||||||
public int buildingsDeconstructed;
|
public int buildingsDeconstructed;
|
||||||
/** Friendly buildings destroyed. */
|
/** Friendly buildings destroyed. */
|
||||||
public int buildingsDestroyed;
|
public int buildingsDestroyed;
|
||||||
|
/** Total units created by any means. */
|
||||||
//unused
|
public int unitsCreated;
|
||||||
public RankResult calculateRank(Sector sector){
|
|
||||||
float score = 0;
|
|
||||||
|
|
||||||
int rankIndex = Mathf.clamp((int)score, 0, Rank.all.length - 1);
|
|
||||||
Rank rank = Rank.all[rankIndex];
|
|
||||||
String sign = Math.abs((rankIndex + 0.5f) - score) < 0.2f || rank.name().contains("S") ? "" : (rankIndex + 0.5f) < score ? "-" : "+";
|
|
||||||
|
|
||||||
return new RankResult(rank, sign);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static class RankResult{
|
|
||||||
public final Rank rank;
|
|
||||||
/** + or - */
|
|
||||||
public final String modifier;
|
|
||||||
|
|
||||||
public RankResult(Rank rank, String modifier){
|
|
||||||
this.rank = rank;
|
|
||||||
this.modifier = modifier;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public enum Rank{
|
|
||||||
F, D, C, B, A, S, SS;
|
|
||||||
|
|
||||||
public static final Rank[] all = values();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||