Compare commits
152 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
bdb4ae2f85 | ||
|
|
850b0d0210 | ||
|
|
fa0f161106 | ||
|
|
59aff44a55 | ||
|
|
aa74679998 | ||
|
|
61db253d4a | ||
|
|
fef8ee925b | ||
|
|
5cb5434ffe | ||
|
|
2f71a4092f | ||
|
|
a97573c5a9 | ||
|
|
108baa467d | ||
|
|
193015f1cd | ||
|
|
b64432dafd | ||
|
|
d66bb3a539 | ||
|
|
5ca5025fb1 | ||
|
|
497a68e792 | ||
|
|
737fa4fa69 | ||
|
|
3d3e33912e | ||
|
|
235fee091e | ||
|
|
00e3a59463 | ||
|
|
269c48b65b | ||
|
|
adbe55b0db | ||
|
|
f5222674ff | ||
|
|
c19a7e8452 | ||
|
|
aab79a90fb | ||
|
|
f3b6f0a29b | ||
|
|
d1fb436d6d | ||
|
|
1734d02291 | ||
|
|
f8c7739d5a | ||
|
|
7a1f332731 | ||
|
|
9cd19c0470 | ||
|
|
c9ca08ff1c | ||
|
|
c14532ecae | ||
|
|
b66cc8d8d7 | ||
|
|
b6ed5fbd6f | ||
|
|
2fec2156f6 | ||
|
|
35b3231b84 | ||
|
|
f77c32cbb2 | ||
|
|
7ec5aa28b3 | ||
|
|
373d004752 | ||
|
|
0ee137fe05 | ||
|
|
9c5d75c439 | ||
|
|
adbfcdf16a | ||
|
|
0716ecad55 | ||
|
|
9160ee546c | ||
|
|
7897d2858c | ||
|
|
b88364ab48 | ||
|
|
7727da40b4 | ||
|
|
17e68f7a93 | ||
|
|
120aa7c12a | ||
|
|
53214f0ddc | ||
|
|
d89a1fac70 | ||
|
|
0c00000910 | ||
|
|
f4f46eb924 | ||
|
|
b873adf5fc | ||
|
|
72fb66e5b2 | ||
|
|
af691c980d | ||
|
|
b3be906e28 | ||
|
|
1c22e2ed28 | ||
|
|
95fd073432 | ||
|
|
fcb9ebb8c3 | ||
|
|
4ab063679b | ||
|
|
db13bffad6 | ||
|
|
b719a0cd35 | ||
|
|
d506685bba | ||
|
|
8cf2068a70 | ||
|
|
14e4203ee7 | ||
|
|
447562b2f1 | ||
|
|
02c03e9c67 | ||
|
|
f8ddf952ca | ||
|
|
8436599c79 | ||
|
|
4c51519b8a | ||
|
|
0f199fa4b4 | ||
|
|
b28aff4a7b | ||
|
|
ba227d64fb | ||
|
|
7656aedb6b | ||
|
|
6e967dce70 | ||
|
|
232415f1d7 | ||
|
|
b2ed0ee884 | ||
|
|
6ffc8ba3c5 | ||
|
|
82f0d6a542 | ||
|
|
40e0303786 | ||
|
|
0e3bb40eb4 | ||
|
|
730cb14f6a | ||
|
|
c18ab184b7 | ||
|
|
b85cbe515e | ||
|
|
b58f202e9e | ||
|
|
fde23ceea0 | ||
|
|
aab2437c4c | ||
|
|
b7f7be839d | ||
|
|
6b7a63aba5 | ||
|
|
0c46d5088c | ||
|
|
254425d9ad | ||
|
|
c7ff20d47d | ||
|
|
1db5a9f3c2 | ||
|
|
34cf8466d6 | ||
|
|
8c20203084 | ||
|
|
a7ed7a71d5 | ||
|
|
2583541c0f | ||
|
|
1674b2dfd6 | ||
|
|
96de7c8321 | ||
|
|
7879648090 | ||
|
|
5772f5e7da | ||
|
|
54db6bda85 | ||
|
|
4ffcf252b7 | ||
|
|
b3b44214e0 | ||
|
|
89942416ac | ||
|
|
974d3498c1 | ||
|
|
1804111f88 | ||
|
|
5b2dc021a6 | ||
|
|
37d7b3d7fb | ||
|
|
33d4ab9edb | ||
|
|
f7f2b3438c | ||
|
|
0ed7934df0 | ||
|
|
55920e6242 | ||
|
|
820920e5f9 | ||
|
|
8e21c627a7 | ||
|
|
6973ed7d55 | ||
|
|
0980495a28 | ||
|
|
5c6b659ce3 | ||
|
|
35e263223d | ||
|
|
07ba378095 | ||
|
|
6e10f86546 | ||
|
|
fc6ee11ffe | ||
|
|
84cd87370f | ||
|
|
822fe9ab7a | ||
|
|
57b22a9cab | ||
|
|
278c4f17e5 | ||
|
|
b0d4607798 | ||
|
|
3f7dc66ac0 | ||
|
|
1c2b1fb757 | ||
|
|
eb31483a15 | ||
|
|
8fb7cdaba6 | ||
|
|
61d81046ae | ||
|
|
0c3d7e09e0 | ||
|
|
a9f9ddcacf | ||
|
|
a559c3581e | ||
|
|
dd5389c738 | ||
|
|
ac25e17286 | ||
|
|
9de4c89e76 | ||
|
|
2f6846d8c3 | ||
|
|
c3e60531c4 | ||
|
|
44aff82a6c | ||
|
|
7619e7643d | ||
|
|
353ef05b93 | ||
|
|
2801e4ed80 | ||
|
|
173dd0a90e | ||
|
|
e5412aeb1b | ||
|
|
0eec955a3d | ||
|
|
47038ac06d | ||
|
|
8041c305ad | ||
|
|
e0d249898e |
5
.github/pull_request_template.md
vendored
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
If your pull request is **not** translation or serverlist-related, read the list of requirements below and check each box:
|
||||||
|
|
||||||
|
- [ ] I have read the [contribution guidelines](https://github.com/Anuken/Mindustry/blob/master/CONTRIBUTING.md).
|
||||||
|
- [ ] I have ensured that my code compiles, if applicable.
|
||||||
|
- [ ] I have ensured that any new features in this PR function correctly in-game, if applicable.
|
||||||
@@ -7,6 +7,7 @@ buildscript{
|
|||||||
}
|
}
|
||||||
|
|
||||||
dependencies{
|
dependencies{
|
||||||
|
//note that later versions, like alpha05, fail to work correctly
|
||||||
classpath 'com.android.tools.build:gradle:7.1.0-alpha02'
|
classpath 'com.android.tools.build:gradle:7.1.0-alpha02'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -18,7 +19,6 @@ configurations{ natives }
|
|||||||
repositories{
|
repositories{
|
||||||
mavenCentral()
|
mavenCentral()
|
||||||
maven{ url "https://maven.google.com" }
|
maven{ url "https://maven.google.com" }
|
||||||
jcenter() //remove later once google/JetBrains fixes the dependency
|
|
||||||
}
|
}
|
||||||
|
|
||||||
task deploy(type: Copy){
|
task deploy(type: Copy){
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
package mindustry.annotations.impl;
|
package mindustry.annotations.impl;
|
||||||
|
|
||||||
|
import arc.*;
|
||||||
|
import arc.audio.*;
|
||||||
import arc.files.*;
|
import arc.files.*;
|
||||||
import arc.scene.style.*;
|
import arc.scene.style.*;
|
||||||
import arc.struct.*;
|
import arc.struct.*;
|
||||||
@@ -118,9 +120,31 @@ public class AssetsProcess extends BaseProcessor{
|
|||||||
void processSounds(String classname, String path, String rtype) throws Exception{
|
void processSounds(String classname, String path, String rtype) throws Exception{
|
||||||
TypeSpec.Builder type = TypeSpec.classBuilder(classname).addModifiers(Modifier.PUBLIC);
|
TypeSpec.Builder type = TypeSpec.classBuilder(classname).addModifiers(Modifier.PUBLIC);
|
||||||
MethodSpec.Builder loadBegin = MethodSpec.methodBuilder("load").addModifiers(Modifier.PUBLIC, Modifier.STATIC);
|
MethodSpec.Builder loadBegin = MethodSpec.methodBuilder("load").addModifiers(Modifier.PUBLIC, Modifier.STATIC);
|
||||||
|
CodeBlock.Builder staticb = CodeBlock.builder();
|
||||||
|
|
||||||
|
type.addField(FieldSpec.builder(IntMap.class, "idToSound", Modifier.STATIC, Modifier.PRIVATE).initializer("new IntMap()").build());
|
||||||
|
type.addField(FieldSpec.builder(ObjectIntMap.class, "soundToId", Modifier.STATIC, Modifier.PRIVATE).initializer("new ObjectIntMap()").build());
|
||||||
|
|
||||||
|
type.addMethod(MethodSpec.methodBuilder("getSoundId")
|
||||||
|
.addModifiers(Modifier.PUBLIC, Modifier.STATIC)
|
||||||
|
.addParameter(Sound.class, "sound")
|
||||||
|
.returns(int.class)
|
||||||
|
.addStatement("return soundToId.get(sound, -1)").build());
|
||||||
|
|
||||||
|
type.addMethod(MethodSpec.methodBuilder("getSound")
|
||||||
|
.addModifiers(Modifier.PUBLIC, Modifier.STATIC)
|
||||||
|
.addParameter(int.class, "id")
|
||||||
|
.returns(Sound.class)
|
||||||
|
.addStatement("return (Sound)idToSound.get(id, () -> Sounds.none)").build());
|
||||||
|
|
||||||
HashSet<String> names = new HashSet<>();
|
HashSet<String> names = new HashSet<>();
|
||||||
Fi.get(path).walk(p -> {
|
Seq<Fi> files = new Seq<>();
|
||||||
|
Fi.get(path).walk(files::add);
|
||||||
|
|
||||||
|
files.sortComparing(Fi::name);
|
||||||
|
int id = 0;
|
||||||
|
|
||||||
|
for(Fi p : files){
|
||||||
String name = p.nameWithoutExtension();
|
String name = p.nameWithoutExtension();
|
||||||
|
|
||||||
if(names.contains(name)){
|
if(names.contains(name)){
|
||||||
@@ -133,14 +157,20 @@ public class AssetsProcess extends BaseProcessor{
|
|||||||
|
|
||||||
String filepath = path.substring(path.lastIndexOf("/") + 1) + p.path().substring(p.path().lastIndexOf(path) + path.length());
|
String filepath = path.substring(path.lastIndexOf("/") + 1) + p.path().substring(p.path().lastIndexOf(path) + path.length());
|
||||||
|
|
||||||
String filename = "\"" + filepath + "\"";
|
staticb.addStatement("soundToId.put($L, $L)", name, id);
|
||||||
loadBegin.addStatement("arc.Core.assets.load(" + filename + ", " + rtype + ".class).loaded = a -> " + name + " = (" + rtype + ")a", filepath, filepath.replace(".ogg", ".mp3"));
|
|
||||||
|
|
||||||
type.addField(FieldSpec.builder(ClassName.bestGuess(rtype), name, Modifier.STATIC, Modifier.PUBLIC).initializer("new arc.audio." + rtype.substring(rtype.lastIndexOf(".") + 1) + "()").build());
|
loadBegin.addStatement("$T.assets.load($S, $L.class).loaded = a -> { $L = ($L)a; soundToId.put(a, $L); idToSound.put($L, a); }",
|
||||||
});
|
Core.class, filepath, rtype, name, rtype, id, id);
|
||||||
|
|
||||||
|
type.addField(FieldSpec.builder(ClassName.bestGuess(rtype), name, Modifier.STATIC, Modifier.PUBLIC).initializer("new " + rtype + "()").build());
|
||||||
|
|
||||||
|
id ++;
|
||||||
|
}
|
||||||
|
|
||||||
|
type.addStaticBlock(staticb.build());
|
||||||
|
|
||||||
if(classname.equals("Sounds")){
|
if(classname.equals("Sounds")){
|
||||||
type.addField(FieldSpec.builder(ClassName.bestGuess(rtype), "none", Modifier.STATIC, Modifier.PUBLIC).initializer("new arc.audio." + rtype.substring(rtype.lastIndexOf(".") + 1) + "()").build());
|
type.addField(FieldSpec.builder(ClassName.bestGuess(rtype), "none", Modifier.STATIC, Modifier.PUBLIC).initializer("new " + rtype + "()").build());
|
||||||
}
|
}
|
||||||
|
|
||||||
type.addMethod(loadBegin.build());
|
type.addMethod(loadBegin.build());
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import com.sun.tools.javac.code.Attribute.Enum;
|
|||||||
import com.sun.tools.javac.code.Attribute.Error;
|
import com.sun.tools.javac.code.Attribute.Error;
|
||||||
import com.sun.tools.javac.code.Attribute.Visitor;
|
import com.sun.tools.javac.code.Attribute.Visitor;
|
||||||
import com.sun.tools.javac.code.Attribute.*;
|
import com.sun.tools.javac.code.Attribute.*;
|
||||||
|
import com.sun.tools.javac.code.Scope.*;
|
||||||
import com.sun.tools.javac.code.Type;
|
import com.sun.tools.javac.code.Type;
|
||||||
import com.sun.tools.javac.code.Symbol.*;
|
import com.sun.tools.javac.code.Symbol.*;
|
||||||
import com.sun.tools.javac.code.Type.ArrayType;
|
import com.sun.tools.javac.code.Type.ArrayType;
|
||||||
@@ -64,36 +65,13 @@ public class AnnotationProxyMaker{
|
|||||||
LinkedHashMap map = new LinkedHashMap();
|
LinkedHashMap map = new LinkedHashMap();
|
||||||
ClassSymbol cl = (ClassSymbol)this.anno.type.tsym;
|
ClassSymbol cl = (ClassSymbol)this.anno.type.tsym;
|
||||||
|
|
||||||
//try to use Java 8 API for this if possible
|
for(Symbol s : cl.members().getSymbols(LookupKind.NON_RECURSIVE)){
|
||||||
try{
|
if(s.getKind() == ElementKind.METHOD){
|
||||||
Class entryClass = Class.forName("com.sun.tools.javac.code.Scope$Entry");
|
MethodSymbol var4 = (MethodSymbol)s;
|
||||||
Object members = cl.members();
|
Attribute var5 = var4.getDefaultValue();
|
||||||
Field field = members.getClass().getField("elems");
|
if(var5 != null){
|
||||||
Object elems = field.get(members);
|
map.put(var4, var5);
|
||||||
Field siblingField = entryClass.getField("sibling");
|
|
||||||
Field symField = entryClass.getField("sym");
|
|
||||||
for(Object currEntry = elems; currEntry != null; currEntry = siblingField.get(currEntry)){
|
|
||||||
handleSymbol((Symbol)symField.get(currEntry), map);
|
|
||||||
}
|
|
||||||
|
|
||||||
}catch(Throwable e){
|
|
||||||
//otherwise try other API
|
|
||||||
|
|
||||||
try{
|
|
||||||
Class lookupClass = Class.forName("com.sun.tools.javac.code.Scope$LookupKind");
|
|
||||||
Field nonRecField = lookupClass.getField("NON_RECURSIVE");
|
|
||||||
Object nonRec = nonRecField.get(null);
|
|
||||||
Scope scope = cl.members();
|
|
||||||
Method getSyms = scope.getClass().getMethod("getSymbols", lookupClass);
|
|
||||||
Iterable<Symbol> it = (Iterable<Symbol>)getSyms.invoke(scope, nonRec);
|
|
||||||
Iterator<Symbol> i = it.iterator();
|
|
||||||
while(i.hasNext()){
|
|
||||||
handleSymbol(i.next(), map);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}catch(Throwable death){
|
|
||||||
//I tried
|
|
||||||
throw new RuntimeException(death);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -104,17 +82,6 @@ public class AnnotationProxyMaker{
|
|||||||
return map;
|
return map;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void handleSymbol(Symbol sym, LinkedHashMap map){
|
|
||||||
|
|
||||||
if(sym.getKind() == ElementKind.METHOD){
|
|
||||||
MethodSymbol var4 = (MethodSymbol)sym;
|
|
||||||
Attribute var5 = var4.getDefaultValue();
|
|
||||||
if(var5 != null){
|
|
||||||
map.put(var4, var5);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private Object generateValue(MethodSymbol var1, Attribute var2){
|
private Object generateValue(MethodSymbol var1, Attribute var2){
|
||||||
AnnotationProxyMaker.ValueVisitor var3 = new AnnotationProxyMaker.ValueVisitor(var1);
|
AnnotationProxyMaker.ValueVisitor var3 = new AnnotationProxyMaker.ValueVisitor(var1);
|
||||||
return var3.getValue(var2);
|
return var3.getValue(var2);
|
||||||
|
|||||||
@@ -12,6 +12,10 @@ import java.lang.Class;
|
|||||||
import java.lang.annotation.*;
|
import java.lang.annotation.*;
|
||||||
import java.lang.reflect.*;
|
import java.lang.reflect.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Wrapper over Element with added utility functions.
|
||||||
|
* I would have preferred to use extension methods for this, but Java doesn't have any.
|
||||||
|
* */
|
||||||
public class Selement<T extends Element>{
|
public class Selement<T extends Element>{
|
||||||
public final T e;
|
public final T e;
|
||||||
|
|
||||||
|
|||||||
@@ -57,7 +57,7 @@ allprojects{
|
|||||||
if(!project.hasProperty("versionType")) versionType = 'official'
|
if(!project.hasProperty("versionType")) versionType = 'official'
|
||||||
appName = 'Mindustry'
|
appName = 'Mindustry'
|
||||||
steamworksVersion = '0b86023401880bb5e586bc404bedbaae9b1f1c94'
|
steamworksVersion = '0b86023401880bb5e586bc404bedbaae9b1f1c94'
|
||||||
rhinoVersion = '55bf0dac1cfa7770672fd26112512c733ca9d5dc'
|
rhinoVersion = '9f792d202471fb3789eab7bb261fec13d67287e2'
|
||||||
|
|
||||||
loadVersionProps = {
|
loadVersionProps = {
|
||||||
return new Properties().with{p -> p.load(file('../core/assets/version.properties').newReader()); return p }
|
return new Properties().with{p -> p.load(file('../core/assets/version.properties').newReader()); return p }
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1012 B |
|
Before Width: | Height: | Size: 558 B After Width: | Height: | Size: 685 B |
|
After Width: | Height: | Size: 874 B |
|
After Width: | Height: | Size: 871 B |
|
After Width: | Height: | Size: 1.2 KiB |
|
After Width: | Height: | Size: 1.2 KiB |
BIN
core/assets-raw/sprites/blocks/storage/core-shard-thruster1.png
Normal file
|
After Width: | Height: | Size: 528 B |
BIN
core/assets-raw/sprites/blocks/storage/core-shard-thruster2.png
Normal file
|
After Width: | Height: | Size: 512 B |
|
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.3 KiB |
@@ -101,6 +101,7 @@ customgame = Custom Game
|
|||||||
newgame = New Game
|
newgame = New Game
|
||||||
none = <none>
|
none = <none>
|
||||||
none.found = [lightgray]<none found>
|
none.found = [lightgray]<none found>
|
||||||
|
none.inmap = [lightgray]<none in map>
|
||||||
minimap = Minimap
|
minimap = Minimap
|
||||||
position = Position
|
position = Position
|
||||||
close = Close
|
close = Close
|
||||||
@@ -214,6 +215,7 @@ hosts.none = [lightgray]No local games found!
|
|||||||
host.invalid = [scarlet]Can't connect to host.
|
host.invalid = [scarlet]Can't connect to host.
|
||||||
|
|
||||||
servers.local = Local Servers
|
servers.local = Local Servers
|
||||||
|
servers.local.steam = Open Games & Local Servers
|
||||||
servers.remote = Remote Servers
|
servers.remote = Remote Servers
|
||||||
servers.global = Community Servers
|
servers.global = Community Servers
|
||||||
|
|
||||||
@@ -565,6 +567,7 @@ sectors.unexplored = [lightgray]Unexplored
|
|||||||
sectors.resources = Resources:
|
sectors.resources = Resources:
|
||||||
sectors.production = Production:
|
sectors.production = Production:
|
||||||
sectors.export = Export:
|
sectors.export = Export:
|
||||||
|
sectors.import = Import:
|
||||||
sectors.time = Time:
|
sectors.time = Time:
|
||||||
sectors.threat = Threat:
|
sectors.threat = Threat:
|
||||||
sectors.wave = Wave:
|
sectors.wave = Wave:
|
||||||
@@ -724,7 +727,7 @@ stat.maxconsecutive = Max Consecutive
|
|||||||
stat.buildcost = Build Cost
|
stat.buildcost = Build Cost
|
||||||
stat.inaccuracy = Inaccuracy
|
stat.inaccuracy = Inaccuracy
|
||||||
stat.shots = Shots
|
stat.shots = Shots
|
||||||
stat.reload = Shots/Second
|
stat.reload = Firing Rate
|
||||||
stat.ammo = Ammo
|
stat.ammo = Ammo
|
||||||
stat.shieldhealth = Shield Health
|
stat.shieldhealth = Shield Health
|
||||||
stat.cooldowntime = Cooldown Time
|
stat.cooldowntime = Cooldown Time
|
||||||
@@ -793,7 +796,7 @@ bullet.damage = [stat]{0}[lightgray] damage
|
|||||||
bullet.splashdamage = [stat]{0}[lightgray] area dmg ~[stat] {1}[lightgray] tiles
|
bullet.splashdamage = [stat]{0}[lightgray] area dmg ~[stat] {1}[lightgray] tiles
|
||||||
bullet.incendiary = [stat]incendiary
|
bullet.incendiary = [stat]incendiary
|
||||||
bullet.homing = [stat]homing
|
bullet.homing = [stat]homing
|
||||||
bullet.frag = [stat]frag
|
bullet.frags = [stat]{0}[lightgray]x frag bullets:
|
||||||
bullet.lightning = [stat]{0}[lightgray]x lightning ~ [stat]{1}[lightgray] damage
|
bullet.lightning = [stat]{0}[lightgray]x lightning ~ [stat]{1}[lightgray] damage
|
||||||
bullet.buildingdamage = [stat]{0}%[lightgray] building damage
|
bullet.buildingdamage = [stat]{0}%[lightgray] building damage
|
||||||
bullet.knockback = [stat]{0}[lightgray] knockback
|
bullet.knockback = [stat]{0}[lightgray] knockback
|
||||||
@@ -832,20 +835,19 @@ category.items = Items
|
|||||||
category.crafting = Input/Output
|
category.crafting = Input/Output
|
||||||
category.function = Function
|
category.function = Function
|
||||||
category.optional = Optional Enhancements
|
category.optional = Optional Enhancements
|
||||||
|
setting.skipcoreanimation.name = Skip Core Launch/Land Animation
|
||||||
setting.landscape.name = Lock Landscape
|
setting.landscape.name = Lock Landscape
|
||||||
setting.shadows.name = Shadows
|
setting.shadows.name = Shadows
|
||||||
setting.blockreplace.name = Automatic Block Suggestions
|
setting.blockreplace.name = Automatic Block Suggestions
|
||||||
setting.linear.name = Linear Filtering
|
setting.linear.name = Linear Filtering
|
||||||
setting.hints.name = Hints
|
setting.hints.name = Hints
|
||||||
setting.logichints.name = Logic Hints
|
setting.logichints.name = Logic Hints
|
||||||
setting.flow.name = Display Resource Flow Rate
|
|
||||||
setting.backgroundpause.name = Pause In Background
|
setting.backgroundpause.name = Pause In Background
|
||||||
setting.buildautopause.name = Auto-Pause Building
|
setting.buildautopause.name = Auto-Pause Building
|
||||||
setting.doubletapmine.name = Double-Tap to Mine
|
setting.doubletapmine.name = Double-Tap to Mine
|
||||||
setting.modcrashdisable.name = Disable Mods On Startup Crash
|
setting.modcrashdisable.name = Disable Mods On Startup Crash
|
||||||
setting.animatedwater.name = Animated Surfaces
|
setting.animatedwater.name = Animated Surfaces
|
||||||
setting.animatedshields.name = Animated Shields
|
setting.animatedshields.name = Animated Shields
|
||||||
setting.antialias.name = Antialias[lightgray] (requires restart)[]
|
|
||||||
setting.playerindicators.name = Player Indicators
|
setting.playerindicators.name = Player Indicators
|
||||||
setting.indicators.name = Enemy Indicators
|
setting.indicators.name = Enemy Indicators
|
||||||
setting.autotarget.name = Auto-Target
|
setting.autotarget.name = Auto-Target
|
||||||
@@ -854,7 +856,8 @@ setting.touchscreen.name = Touchscreen Controls
|
|||||||
setting.fpscap.name = Max FPS
|
setting.fpscap.name = Max FPS
|
||||||
setting.fpscap.none = None
|
setting.fpscap.none = None
|
||||||
setting.fpscap.text = {0} FPS
|
setting.fpscap.text = {0} FPS
|
||||||
setting.uiscale.name = UI Scaling[lightgray] (restart required)[]
|
setting.uiscale.name = UI Scaling
|
||||||
|
setting.uiscale.description = Restart required to apply changes.
|
||||||
setting.swapdiagonal.name = Always Diagonal Placement
|
setting.swapdiagonal.name = Always Diagonal Placement
|
||||||
setting.difficulty.training = Training
|
setting.difficulty.training = Training
|
||||||
setting.difficulty.easy = Easy
|
setting.difficulty.easy = Easy
|
||||||
@@ -872,7 +875,8 @@ setting.saveinterval.name = Save Interval
|
|||||||
setting.seconds = {0} seconds
|
setting.seconds = {0} seconds
|
||||||
setting.milliseconds = {0} milliseconds
|
setting.milliseconds = {0} milliseconds
|
||||||
setting.fullscreen.name = Fullscreen
|
setting.fullscreen.name = Fullscreen
|
||||||
setting.borderlesswindow.name = Borderless Window[lightgray] (restart may be required)
|
setting.borderlesswindow.name = Borderless Window
|
||||||
|
setting.borderlesswindow.description = Restart may be required to apply changes.
|
||||||
setting.fps.name = Show FPS & Ping
|
setting.fps.name = Show FPS & Ping
|
||||||
setting.smoothcamera.name = Smooth Camera
|
setting.smoothcamera.name = Smooth Camera
|
||||||
setting.vsync.name = VSync
|
setting.vsync.name = VSync
|
||||||
@@ -995,6 +999,7 @@ rules.wavetimer = Wave Timer
|
|||||||
rules.waves = Waves
|
rules.waves = Waves
|
||||||
rules.attack = Attack Mode
|
rules.attack = Attack Mode
|
||||||
rules.buildai = AI Building
|
rules.buildai = AI Building
|
||||||
|
rules.cleanupdeadteams = Clean Up Defeated Team Buildings (PvP)
|
||||||
rules.corecapture = Capture Core On Destruction
|
rules.corecapture = Capture Core On Destruction
|
||||||
rules.polygoncoreprotection = Polygonal Core Protection
|
rules.polygoncoreprotection = Polygonal Core Protection
|
||||||
rules.enemyCheat = Infinite AI (Red Team) Resources
|
rules.enemyCheat = Infinite AI (Red Team) Resources
|
||||||
@@ -1289,7 +1294,6 @@ block.meltdown.name = Meltdown
|
|||||||
block.foreshadow.name = Foreshadow
|
block.foreshadow.name = Foreshadow
|
||||||
block.container.name = Container
|
block.container.name = Container
|
||||||
block.launch-pad.name = Launch Pad
|
block.launch-pad.name = Launch Pad
|
||||||
block.launch-pad-large.name = Large Launch Pad
|
|
||||||
block.segment.name = Segment
|
block.segment.name = Segment
|
||||||
block.command-center.name = Command Center
|
block.command-center.name = Command Center
|
||||||
block.ground-factory.name = Ground Factory
|
block.ground-factory.name = Ground Factory
|
||||||
@@ -1310,11 +1314,11 @@ block.payload-source.name = Payload Source
|
|||||||
block.disassembler.name = Disassembler
|
block.disassembler.name = Disassembler
|
||||||
block.silicon-crucible.name = Silicon Crucible
|
block.silicon-crucible.name = Silicon Crucible
|
||||||
block.overdrive-dome.name = Overdrive Dome
|
block.overdrive-dome.name = Overdrive Dome
|
||||||
|
block.interplanetary-accelerator.name = Interplanetary Accelerator
|
||||||
#experimental, may be removed
|
#experimental, may be removed
|
||||||
block.block-forge.name = Block Forge
|
block.block-forge.name = Block Forge
|
||||||
block.block-loader.name = Block Loader
|
block.block-loader.name = Block Loader
|
||||||
block.block-unloader.name = Block Unloader
|
block.block-unloader.name = Block Unloader
|
||||||
block.interplanetary-accelerator.name = Interplanetary Accelerator
|
|
||||||
|
|
||||||
block.switch.name = Switch
|
block.switch.name = Switch
|
||||||
block.micro-processor.name = Micro Processor
|
block.micro-processor.name = Micro Processor
|
||||||
@@ -1349,6 +1353,7 @@ hint.placeTurret = Place \uf861 [accent]Turrets[] to defend your base from enemi
|
|||||||
hint.breaking = [accent]Right-click[] and drag to break blocks.
|
hint.breaking = [accent]Right-click[] and drag to break blocks.
|
||||||
hint.breaking.mobile = Activate the \ue817 [accent]hammer[] in the bottom right and tap to break blocks.\n\nHold down your finger for a second and drag to break in a selection.
|
hint.breaking.mobile = Activate the \ue817 [accent]hammer[] in the bottom right and tap to break blocks.\n\nHold down your finger for a second and drag to break in a selection.
|
||||||
hint.blockInfo = View information of a block by selecting it in the [accent]build menu[], then selecting the [accent][[?][] button at the right.
|
hint.blockInfo = View information of a block by selecting it in the [accent]build menu[], then selecting the [accent][[?][] button at the right.
|
||||||
|
hint.derelict = [accent]Derelict[] structures are broken remnants of old bases that no longer function.\n\nThese structures can be [accent]deconstructed[] for resources.
|
||||||
hint.research = Use the \ue875 [accent]Research[] button to research new technology.
|
hint.research = Use the \ue875 [accent]Research[] button to research new technology.
|
||||||
hint.research.mobile = Use the \ue875 [accent]Research[] button in the \ue88c [accent]Menu[] to research new technology.
|
hint.research.mobile = Use the \ue875 [accent]Research[] button in the \ue88c [accent]Menu[] to research new technology.
|
||||||
hint.unitControl = Hold [accent][[L-ctrl][] and [accent]click[] to control friendly units or turrets.
|
hint.unitControl = Hold [accent][[L-ctrl][] and [accent]click[] to control friendly units or turrets.
|
||||||
@@ -1400,6 +1405,7 @@ liquid.slag.description = Refined in separators into constituent metals, or spra
|
|||||||
liquid.oil.description = Used in advanced material production and as incendiary ammunition.
|
liquid.oil.description = Used in advanced material production and as incendiary ammunition.
|
||||||
liquid.cryofluid.description = Used as coolant in reactors, turrets and factories.
|
liquid.cryofluid.description = Used as coolant in reactors, turrets and factories.
|
||||||
|
|
||||||
|
block.derelict = [lightgray] Derelict
|
||||||
block.resupply-point.description = Resupplies nearby units with copper ammunition. Not compatible with units that require battery power.
|
block.resupply-point.description = Resupplies nearby units with copper ammunition. Not compatible with units that require battery power.
|
||||||
block.armored-conveyor.description = Moves items forward. Does not accept inputs from the sides.
|
block.armored-conveyor.description = Moves items forward. Does not accept inputs from the sides.
|
||||||
block.illuminator.description = Emits light.
|
block.illuminator.description = Emits light.
|
||||||
@@ -1544,6 +1550,8 @@ block.memory-bank.description = Stores information for a logic processor. High c
|
|||||||
block.logic-display.description = Displays arbitrary graphics from a logic processor.
|
block.logic-display.description = Displays arbitrary graphics from a logic processor.
|
||||||
block.large-logic-display.description = Displays arbitrary graphics from a logic processor.
|
block.large-logic-display.description = Displays arbitrary graphics from a logic processor.
|
||||||
block.interplanetary-accelerator.description = A massive electromagnetic railgun tower. Accelerates cores to escape velocity for interplanetary deployment.
|
block.interplanetary-accelerator.description = A massive electromagnetic railgun tower. Accelerates cores to escape velocity for interplanetary deployment.
|
||||||
|
block.repair-turret.description = Continuously repairs the closest damaged unit in its vicinity. Optionally accepts coolant.
|
||||||
|
block.payload-propulsion-tower.description = Long-range payload transport structure. Shoots payloads to other linked payload propulsion towers.
|
||||||
|
|
||||||
unit.dagger.description = Fires standard bullets at all nearby enemies.
|
unit.dagger.description = Fires standard bullets at all nearby enemies.
|
||||||
unit.mace.description = Fires streams of flame at all nearby enemies.
|
unit.mace.description = Fires streams of flame at all nearby enemies.
|
||||||
@@ -1578,6 +1586,11 @@ unit.omura.description = Fires a long-range piercing railgun bolt at enemies. Co
|
|||||||
unit.alpha.description = Defends the Shard core from enemies. Builds structures.
|
unit.alpha.description = Defends the Shard core from enemies. Builds structures.
|
||||||
unit.beta.description = Defends the Foundation core from enemies. Builds structures.
|
unit.beta.description = Defends the Foundation core from enemies. Builds structures.
|
||||||
unit.gamma.description = Defends the Nucleus core from enemies. Builds structures.
|
unit.gamma.description = Defends the Nucleus core from enemies. Builds structures.
|
||||||
|
unit.retusa.description = Places proximity mines. Repairs allied units.
|
||||||
|
unit.oxynoe.description = Fires structure-repairing streams of flame at nearby enemies. Targets nearby enemy projectiles with a point defense turret.
|
||||||
|
unit.cyerce.description = Fires seeking cluster-missiles at enemies. Repairs allied units.
|
||||||
|
unit.aegires.description = Shocks all enemy units and structures that enter its energy field. Repairs all allies.
|
||||||
|
unit.navanax.description = Fires explosive EMP projectiles, dealing significant damage to enemy power networks and repairing allied structures. Melts nearby enemies with 4 autonomous laser turrets.
|
||||||
|
|
||||||
lst.read = Read a number from a linked memory cell.
|
lst.read = Read a number from a linked memory cell.
|
||||||
lst.write = Write a number to a linked memory cell.
|
lst.write = Write a number to a linked memory cell.
|
||||||
|
|||||||
@@ -307,7 +307,7 @@ waiting.players = Čekání na hráče...
|
|||||||
wave.enemies = [lightgray]{0} zbývajících nepřátel
|
wave.enemies = [lightgray]{0} zbývajících nepřátel
|
||||||
wave.enemycores = [accent]{0}[lightgray] nepřátelská jádra
|
wave.enemycores = [accent]{0}[lightgray] nepřátelská jádra
|
||||||
wave.enemycore = [accent]{0}[lightgray] nepřátelské jádro
|
wave.enemycore = [accent]{0}[lightgray] nepřátelské jádro
|
||||||
wave.enemy = [lightgray]{0} zbývající nepřátel
|
wave.enemy = [lightgray]{0} zbývající nepřítel
|
||||||
wave.guardianwarn = Počet vln do příchodu strážce: [accent]{0}[].
|
wave.guardianwarn = Počet vln do příchodu strážce: [accent]{0}[].
|
||||||
wave.guardianwarn.one = [accent]Strážce přijde již příští vlnu![]
|
wave.guardianwarn.one = [accent]Strážce přijde již příští vlnu![]
|
||||||
loadimage = Nahrát obrázek
|
loadimage = Nahrát obrázek
|
||||||
@@ -323,16 +323,16 @@ map.nospawn.attack = Tato mapa nemá nepřátelská jádra, která by mohla být
|
|||||||
map.invalid = Chyba v načítání mapy: poškozený nebo neplatný soubor mapy.
|
map.invalid = Chyba v načítání mapy: poškozený nebo neplatný soubor mapy.
|
||||||
workshop.update = Aktualizovat položku
|
workshop.update = Aktualizovat položku
|
||||||
workshop.error = Chyba při načítání podrobností z Workshopu na Steamu: {0}
|
workshop.error = Chyba při načítání podrobností z Workshopu na Steamu: {0}
|
||||||
map.publish.confirm = Jsi si jistý, že chceš vystavit tuto mapu?\n\n[lightgray]Ujisti se nejprve, že souhlasíš se smluvními podmínkami Workshopu na Steamu (EULA), jinak se Tvoje mapa nezobrazí.[]
|
map.publish.confirm = Jsi si jistý, že chceš publikovat tuto mapu?\n\n[lightgray]Ujisti se nejprve, že souhlasíš se smluvními podmínkami Workshopu na Steamu (EULA), jinak se Tvoje mapa nezobrazí.[]
|
||||||
workshop.menu = Vyber si, co bys chtěl dělat s touto položkou.
|
workshop.menu = Vyber si, co bys chtěl dělat s touto položkou.
|
||||||
workshop.info = Informace o položce
|
workshop.info = Informace o položce
|
||||||
changelog = Seznam změn (volitelně):
|
changelog = Seznam změn (volitelně):
|
||||||
eula = Smluvní podmínky platformy Steam
|
eula = Smluvní podmínky platformy Steam
|
||||||
missing = Tato položka byla smazána nebo přesunuta.\n[lightgray]Položka bude automaticky odebrána ze seznamu Workshopu na Steamu.
|
missing = Tato položka byla smazána nebo přesunuta.\n[lightgray]Položka bude automaticky odebrána ze seznamu Workshopu na Steamu.
|
||||||
publishing = [accent]Publikuji...
|
publishing = [accent]Publikuji...
|
||||||
publish.confirm = Opravdu chceš toto vystavit?\n\n[lightgray]Ujisti se nejprve, že souhlasíš se smluvními podmínkami Workshopu na Steamu (EULA), jinak se Tvoje položky nezobrazí.[]
|
publish.confirm = Opravdu chceš toto publikovat?\n\n[lightgray]Ujisti se nejprve, že souhlasíš se smluvními podmínkami Workshopu na Steamu (EULA), jinak se Tvoje položky nezobrazí.[]
|
||||||
publish.error = Chyba při vystavování položky: {0}
|
publish.error = Chyba při publikování položky: {0}
|
||||||
steam.error = Nepodařilo se inicializovat služby platformy Steam.Chyba: {0}
|
steam.error = Nepodařilo se inicializovat služby platformy Steam. Chyba: {0}
|
||||||
|
|
||||||
editor.brush = Štětec
|
editor.brush = Štětec
|
||||||
editor.openin = Otevřít v editoru
|
editor.openin = Otevřít v editoru
|
||||||
@@ -341,12 +341,12 @@ editor.oregen.info = Generování rud:
|
|||||||
editor.mapinfo = Informace o mapě
|
editor.mapinfo = Informace o mapě
|
||||||
editor.author = Autor:
|
editor.author = Autor:
|
||||||
editor.description = Popis:
|
editor.description = Popis:
|
||||||
editor.nodescription = Než může být mapa publikována, musí mít popisek dlouhý nejméně 4 znaky.
|
editor.nodescription = Než může být mapa publikována, musí mít popis dlouhý nejméně 4 znaky.
|
||||||
editor.waves = Vln:
|
editor.waves = Vln:
|
||||||
editor.rules = Pravidla:
|
editor.rules = Pravidla:
|
||||||
editor.generation = Generace:
|
editor.generation = Generace:
|
||||||
editor.ingame = Upravit ve hře
|
editor.ingame = Upravit ve hře
|
||||||
editor.publish.workshop = Vystavit ve Workshopu na Steamu
|
editor.publish.workshop = Publikovat do Workshopu na Steamu
|
||||||
editor.newmap = Nová mapa
|
editor.newmap = Nová mapa
|
||||||
editor.center = Vycentrovat
|
editor.center = Vycentrovat
|
||||||
workshop = Workshop na Steamu
|
workshop = Workshop na Steamu
|
||||||
@@ -684,6 +684,7 @@ stat.lightningchance = Pravděpodobnost blesku
|
|||||||
stat.lightningdamage = Poškození bleskem
|
stat.lightningdamage = Poškození bleskem
|
||||||
stat.flammability = Hořlavost
|
stat.flammability = Hořlavost
|
||||||
stat.radioactivity = Radioaktivita
|
stat.radioactivity = Radioaktivita
|
||||||
|
stat.charge = Nabití
|
||||||
stat.heatcapacity = Tepelná kapacita
|
stat.heatcapacity = Tepelná kapacita
|
||||||
stat.viscosity = Vazkost
|
stat.viscosity = Vazkost
|
||||||
stat.temperature = Teplota
|
stat.temperature = Teplota
|
||||||
|
|||||||
@@ -101,6 +101,7 @@ customgame = Benutzerdefiniertes Spiel
|
|||||||
newgame = Neues Spiel
|
newgame = Neues Spiel
|
||||||
none = <nichts>
|
none = <nichts>
|
||||||
none.found = [lightgray]<keine gefunden>
|
none.found = [lightgray]<keine gefunden>
|
||||||
|
none.inmap = [lightgray]<keine auf der Karte>
|
||||||
minimap = Minimap
|
minimap = Minimap
|
||||||
position = Position
|
position = Position
|
||||||
close = Schließen
|
close = Schließen
|
||||||
@@ -565,6 +566,7 @@ sectors.unexplored = [lightgray]Unentdeckt
|
|||||||
sectors.resources = Ressourcen:
|
sectors.resources = Ressourcen:
|
||||||
sectors.production = Produktion:
|
sectors.production = Produktion:
|
||||||
sectors.export = Export:
|
sectors.export = Export:
|
||||||
|
sectors.import = Import:
|
||||||
sectors.time = Zeit:
|
sectors.time = Zeit:
|
||||||
sectors.threat = Gefahr:
|
sectors.threat = Gefahr:
|
||||||
sectors.wave = Welle:
|
sectors.wave = Welle:
|
||||||
@@ -724,7 +726,7 @@ stat.maxconsecutive = Max. Konsekutive
|
|||||||
stat.buildcost = Baukosten
|
stat.buildcost = Baukosten
|
||||||
stat.inaccuracy = Ungenauigkeit
|
stat.inaccuracy = Ungenauigkeit
|
||||||
stat.shots = Schüsse
|
stat.shots = Schüsse
|
||||||
stat.reload = Schüsse/Sekunde
|
stat.reload = Schussrate
|
||||||
stat.ammo = Munition
|
stat.ammo = Munition
|
||||||
stat.shieldhealth = Schildlebenspunkte
|
stat.shieldhealth = Schildlebenspunkte
|
||||||
stat.cooldowntime = Cooldown-Zeit
|
stat.cooldowntime = Cooldown-Zeit
|
||||||
@@ -793,7 +795,7 @@ bullet.damage = [stat]{0}[lightgray] Schaden
|
|||||||
bullet.splashdamage = [stat]{0}[lightgray] Flächenschaden ~[stat] {1}[lightgray] Kacheln
|
bullet.splashdamage = [stat]{0}[lightgray] Flächenschaden ~[stat] {1}[lightgray] Kacheln
|
||||||
bullet.incendiary = [stat]entzündend
|
bullet.incendiary = [stat]entzündend
|
||||||
bullet.homing = [stat]zielsuchend
|
bullet.homing = [stat]zielsuchend
|
||||||
bullet.frag = [stat]explosiv
|
bullet.frag = [stat]{0}[lightgray]x explosive Projektile:
|
||||||
bullet.lightning = [stat]{0}[lightgray]x Blitz ~ [stat]{1}[lightgray] Schaden
|
bullet.lightning = [stat]{0}[lightgray]x Blitz ~ [stat]{1}[lightgray] Schaden
|
||||||
bullet.buildingdamage = [stat]{0}%[lightgray]Blockschaden
|
bullet.buildingdamage = [stat]{0}%[lightgray]Blockschaden
|
||||||
bullet.knockback = [stat]{0}[lightgray] zurückstoßend
|
bullet.knockback = [stat]{0}[lightgray] zurückstoßend
|
||||||
@@ -806,6 +808,7 @@ bullet.reload = [stat]{0}[lightgray]x Feuerrate
|
|||||||
unit.blocks = Blöcke
|
unit.blocks = Blöcke
|
||||||
unit.blockssquared = Blöcke²
|
unit.blockssquared = Blöcke²
|
||||||
unit.powersecond = Stromeinheiten/Sekunde
|
unit.powersecond = Stromeinheiten/Sekunde
|
||||||
|
unit.tilessecond = Blöcke/Sekunde
|
||||||
unit.liquidsecond = Flüssigkeitseinheiten/Sekunde
|
unit.liquidsecond = Flüssigkeitseinheiten/Sekunde
|
||||||
unit.itemssecond = Materialeinheiten/Sekunde
|
unit.itemssecond = Materialeinheiten/Sekunde
|
||||||
unit.liquidunits = Flüssigkeitseinheiten
|
unit.liquidunits = Flüssigkeitseinheiten
|
||||||
@@ -844,7 +847,6 @@ setting.doubletapmine.name = Doppeltippen zum Abbauen
|
|||||||
setting.modcrashdisable.name = Mods bei Absturz deaktivieren
|
setting.modcrashdisable.name = Mods bei Absturz deaktivieren
|
||||||
setting.animatedwater.name = Animiertes Wasser
|
setting.animatedwater.name = Animiertes Wasser
|
||||||
setting.animatedshields.name = Animierte Schilde
|
setting.animatedshields.name = Animierte Schilde
|
||||||
setting.antialias.name = Antialias[lightgray] (Neustart erforderlich)[]
|
|
||||||
setting.playerindicators.name = Spieler-Indikatoren
|
setting.playerindicators.name = Spieler-Indikatoren
|
||||||
setting.indicators.name = Verbündeten-Indikatoren
|
setting.indicators.name = Verbündeten-Indikatoren
|
||||||
setting.autotarget.name = Auto-Zielauswahl
|
setting.autotarget.name = Auto-Zielauswahl
|
||||||
@@ -853,7 +855,8 @@ setting.touchscreen.name = Touchscreen-Steuerung
|
|||||||
setting.fpscap.name = Max. FPS
|
setting.fpscap.name = Max. FPS
|
||||||
setting.fpscap.none = Kein(e)
|
setting.fpscap.none = Kein(e)
|
||||||
setting.fpscap.text = {0} FPS
|
setting.fpscap.text = {0} FPS
|
||||||
setting.uiscale.name = UI-Skalierung[lightgray] (Neustart erforderlich)[]
|
setting.uiscale.name = UI-Skalierung
|
||||||
|
setting.uiscale.description = Neustart erforderlich.
|
||||||
setting.swapdiagonal.name = Immer diagonale Platzierung
|
setting.swapdiagonal.name = Immer diagonale Platzierung
|
||||||
setting.difficulty.training = Training
|
setting.difficulty.training = Training
|
||||||
setting.difficulty.easy = Leicht
|
setting.difficulty.easy = Leicht
|
||||||
@@ -871,7 +874,8 @@ setting.saveinterval.name = Autosave-Häufigkeit
|
|||||||
setting.seconds = {0} Sekunden
|
setting.seconds = {0} Sekunden
|
||||||
setting.milliseconds = {0} Millisekunden
|
setting.milliseconds = {0} Millisekunden
|
||||||
setting.fullscreen.name = Vollbild
|
setting.fullscreen.name = Vollbild
|
||||||
setting.borderlesswindow.name = Randloses Fenster [lightgray](Neustart vielleicht erforderlich)
|
setting.borderlesswindow.name = Randloses Fenster
|
||||||
|
setting.borderlesswindow.description = Neustart vielleicht erforderlich.
|
||||||
setting.fps.name = FPS anzeigen
|
setting.fps.name = FPS anzeigen
|
||||||
setting.smoothcamera.name = Sanfte Kamerabewegungen
|
setting.smoothcamera.name = Sanfte Kamerabewegungen
|
||||||
setting.vsync.name = VSync
|
setting.vsync.name = VSync
|
||||||
@@ -994,6 +998,7 @@ rules.wavetimer = Wellen-Timer
|
|||||||
rules.waves = Wellen
|
rules.waves = Wellen
|
||||||
rules.attack = Angriff-Modus
|
rules.attack = Angriff-Modus
|
||||||
rules.buildai = KI kann bauen
|
rules.buildai = KI kann bauen
|
||||||
|
rules.cleanupdeadteams = Blöcke von erorberten Teams zerstören (PvP)
|
||||||
rules.corecapture = Kern nach Zerstörung einnehmen
|
rules.corecapture = Kern nach Zerstörung einnehmen
|
||||||
rules.polygoncoreprotection = Polygonaler Kernschutz
|
rules.polygoncoreprotection = Polygonaler Kernschutz
|
||||||
rules.enemyCheat = Unbegrenzte Ressourcen für die KI (Rotes Team)
|
rules.enemyCheat = Unbegrenzte Ressourcen für die KI (Rotes Team)
|
||||||
@@ -1288,7 +1293,6 @@ block.meltdown.name = Meltdown
|
|||||||
block.foreshadow.name = Foreshadow
|
block.foreshadow.name = Foreshadow
|
||||||
block.container.name = Behälter
|
block.container.name = Behälter
|
||||||
block.launch-pad.name = Launchpad
|
block.launch-pad.name = Launchpad
|
||||||
block.launch-pad-large.name = Großes Launchpad
|
|
||||||
block.segment.name = Segment
|
block.segment.name = Segment
|
||||||
block.command-center.name = Kommandozentrale
|
block.command-center.name = Kommandozentrale
|
||||||
block.ground-factory.name = Bodenfabrik
|
block.ground-factory.name = Bodenfabrik
|
||||||
@@ -1309,11 +1313,11 @@ block.payload-source.name = Frachtquelle
|
|||||||
block.disassembler.name = Großer Trenner
|
block.disassembler.name = Großer Trenner
|
||||||
block.silicon-crucible.name = Silizium Schmelztiegel
|
block.silicon-crucible.name = Silizium Schmelztiegel
|
||||||
block.overdrive-dome.name = Beschleunigungs-Maschine
|
block.overdrive-dome.name = Beschleunigungs-Maschine
|
||||||
|
block.interplanetary-accelerator.name = Interplanetarischer Beschleuniger
|
||||||
#experimental, may be removed
|
#experimental, may be removed
|
||||||
block.block-forge.name = Block-Fabrik
|
block.block-forge.name = Block-Fabrik
|
||||||
block.block-loader.name = Block-Lader
|
block.block-loader.name = Block-Lader
|
||||||
block.block-unloader.name = Block-Entlader
|
block.block-unloader.name = Block-Entlader
|
||||||
block.interplanetary-accelerator.name = Interplanetarischer Beschleuniger
|
|
||||||
|
|
||||||
block.switch.name = Schalter
|
block.switch.name = Schalter
|
||||||
block.micro-processor.name = Mikroprozessor
|
block.micro-processor.name = Mikroprozessor
|
||||||
@@ -1543,6 +1547,8 @@ block.memory-bank.description = Speichert Informationen für einen Prozessor. Ho
|
|||||||
block.logic-display.description = Zeigt mithilfe eines Prozessors Beliebiges an.
|
block.logic-display.description = Zeigt mithilfe eines Prozessors Beliebiges an.
|
||||||
block.large-logic-display.description = Zeigt mithilfe eines Prozessors Beliebiges an.
|
block.large-logic-display.description = Zeigt mithilfe eines Prozessors Beliebiges an.
|
||||||
block.interplanetary-accelerator.description = Ein Riesen-Railgun-Turm, der mithilfe des Elektromagnetismus Kerne auf die nötige Geschwindigkeit bringt, um interplanetarisches Reisen zu ermöglichen.
|
block.interplanetary-accelerator.description = Ein Riesen-Railgun-Turm, der mithilfe des Elektromagnetismus Kerne auf die nötige Geschwindigkeit bringt, um interplanetarisches Reisen zu ermöglichen.
|
||||||
|
block.repair-turret.description = Heilt durchgehend die nächste befreundete, beschädigte Einheit in der Umgebung. Verwendet optional Kühlung.
|
||||||
|
block.payload-propulsion-tower.description = Frachttransportationsturm mit hoher Reichweite. Schießt Fracht zu verbundenen Türmen.
|
||||||
|
|
||||||
unit.dagger.description = Schießt normale Kugeln auf alle Feinde in der Nähe.
|
unit.dagger.description = Schießt normale Kugeln auf alle Feinde in der Nähe.
|
||||||
unit.mace.description = Schießt Feuer auf alle Gegner in der Nähe.
|
unit.mace.description = Schießt Feuer auf alle Gegner in der Nähe.
|
||||||
@@ -1577,6 +1583,11 @@ unit.omura.description = Schießt eine Railgun mit hoher Reichweite, um Gegner z
|
|||||||
unit.alpha.description = Beschützt den Scherbenkern vor Feinden. Baut Blöcke.
|
unit.alpha.description = Beschützt den Scherbenkern vor Feinden. Baut Blöcke.
|
||||||
unit.beta.description = Beschützt den Fundamentkern vor Feinden. Baut Blöcke.
|
unit.beta.description = Beschützt den Fundamentkern vor Feinden. Baut Blöcke.
|
||||||
unit.gamma.description = Beschützt den Nukleuskern vor Feinden. Baut Blöcke.
|
unit.gamma.description = Beschützt den Nukleuskern vor Feinden. Baut Blöcke.
|
||||||
|
unit.retusa.description = Platziert Minen und heilt verbündete Einheiten.
|
||||||
|
unit.oxynoe.description = Schießt Block-heilendes Feuer auf Gegner und zerstört gegnerische Projektile.
|
||||||
|
unit.cyerce.description = Schießt zielsuchende Cluster-Raketen auf Gegner und heilt verbündete Einheiten.
|
||||||
|
unit.aegires.description = Schockt alle gegnerische Einheiten und Blöcke, die das Energiefeld betreten. Heilt alle verbündete.
|
||||||
|
unit.navanax.description = Schießt explosive EMP-Projektile, die gegnerische Stromnetze zerstören und eigene Blöcke heilen. Zerschmilzt Gegner mit 4 autonomen Laserstrahlen.
|
||||||
|
|
||||||
lst.read = Liest einen Wert aus einer verbundenen Spiecherzelle.
|
lst.read = Liest einen Wert aus einer verbundenen Spiecherzelle.
|
||||||
lst.write = Schreibt eine Zahl in einer verbundene Speicherzelle.
|
lst.write = Schreibt eine Zahl in einer verbundene Speicherzelle.
|
||||||
|
|||||||
@@ -101,6 +101,7 @@ customgame = Partie personnalisée
|
|||||||
newgame = Nouvelle partie
|
newgame = Nouvelle partie
|
||||||
none = <Vide>
|
none = <Vide>
|
||||||
none.found = [lightgray]<Introuvable>
|
none.found = [lightgray]<Introuvable>
|
||||||
|
none.inmap = [lightgray]<Introuvable dans la carte>
|
||||||
minimap = Mini-carte
|
minimap = Mini-carte
|
||||||
position = Position
|
position = Position
|
||||||
close = Fermer
|
close = Fermer
|
||||||
@@ -214,6 +215,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.remote = Serveurs distants
|
servers.remote = Serveurs distants
|
||||||
servers.global = Serveurs communautaires
|
servers.global = Serveurs communautaires
|
||||||
|
|
||||||
@@ -725,7 +727,7 @@ stat.maxconsecutive = Max Consécutif
|
|||||||
stat.buildcost = Coût de construction
|
stat.buildcost = Coût de construction
|
||||||
stat.inaccuracy = Précision
|
stat.inaccuracy = Précision
|
||||||
stat.shots = Tirs
|
stat.shots = Tirs
|
||||||
stat.reload = Tirs/Seconde
|
stat.reload = Cadence de tir
|
||||||
stat.ammo = Munitions
|
stat.ammo = Munitions
|
||||||
stat.shieldhealth = Santé du bouclier
|
stat.shieldhealth = Santé du bouclier
|
||||||
stat.cooldowntime = Temps de refroidissement
|
stat.cooldowntime = Temps de refroidissement
|
||||||
@@ -794,7 +796,8 @@ bullet.damage = [stat]{0}[lightgray] dégâts
|
|||||||
bullet.splashdamage = [stat]{0}[lightgray] dégâts de zone ~[stat] {1}[lightgray] blocs
|
bullet.splashdamage = [stat]{0}[lightgray] dégâts de zone ~[stat] {1}[lightgray] blocs
|
||||||
bullet.incendiary = [stat]incendiaire
|
bullet.incendiary = [stat]incendiaire
|
||||||
bullet.homing = [stat]autoguidé
|
bullet.homing = [stat]autoguidé
|
||||||
bullet.frag = [stat]fragmentation
|
bullet.fragbullets = [stat]{0}[lightgray]x balles à fragmentation
|
||||||
|
bullet.frag.stats = [stat]Balle à fragmentation:
|
||||||
bullet.lightning = [stat]{0}[lightgray]x foudre ~ [stat]{1}[lightgray] dégâts
|
bullet.lightning = [stat]{0}[lightgray]x foudre ~ [stat]{1}[lightgray] dégâts
|
||||||
bullet.buildingdamage = [stat]{0}%[lightgray] des dégâts aux bâtiments
|
bullet.buildingdamage = [stat]{0}%[lightgray] des dégâts aux bâtiments
|
||||||
bullet.knockback = [stat]{0}[lightgray] recul
|
bullet.knockback = [stat]{0}[lightgray] recul
|
||||||
@@ -841,14 +844,12 @@ setting.blockreplace.name = Suggestion automatique des Blocs
|
|||||||
setting.linear.name = Filtrage linéaire
|
setting.linear.name = Filtrage linéaire
|
||||||
setting.hints.name = Astuces
|
setting.hints.name = Astuces
|
||||||
setting.logichints.name = Astuces pour les commandes des processeurs
|
setting.logichints.name = Astuces pour les commandes des processeurs
|
||||||
setting.flow.name = Afficher le Débit des ressources
|
|
||||||
setting.backgroundpause.name = Pause en Arrière-plan
|
setting.backgroundpause.name = Pause en Arrière-plan
|
||||||
setting.buildautopause.name = Confirmation avant construction
|
setting.buildautopause.name = Confirmation avant construction
|
||||||
setting.doubletapmine.name = Double-clic pour Miner
|
setting.doubletapmine.name = Double-clic pour Miner
|
||||||
setting.modcrashdisable.name = Désactiver les mods lors d'un crash au démarrage
|
setting.modcrashdisable.name = Désactiver les mods lors d'un crash au démarrage
|
||||||
setting.animatedwater.name = Surfaces Animées
|
setting.animatedwater.name = Surfaces Animées
|
||||||
setting.animatedshields.name = Boucliers Animés
|
setting.animatedshields.name = Boucliers Animés
|
||||||
setting.antialias.name = Anticrénelage[lightgray] (redémarrage du jeu nécessaire)[]
|
|
||||||
setting.playerindicators.name = Indicateurs alliés
|
setting.playerindicators.name = Indicateurs alliés
|
||||||
setting.indicators.name = Indicateurs ennemis
|
setting.indicators.name = Indicateurs ennemis
|
||||||
setting.autotarget.name = Visée automatique
|
setting.autotarget.name = Visée automatique
|
||||||
@@ -857,7 +858,8 @@ setting.touchscreen.name = Commandes d'écran tactile
|
|||||||
setting.fpscap.name = Max FPS
|
setting.fpscap.name = Max FPS
|
||||||
setting.fpscap.none = Illimité
|
setting.fpscap.none = Illimité
|
||||||
setting.fpscap.text = {0} FPS
|
setting.fpscap.text = {0} FPS
|
||||||
setting.uiscale.name = Échelle de l'interface[lightgray] (redémarrage du jeu nécessaire)[]
|
setting.uiscale.name = Échelle de l'interface
|
||||||
|
setting.uiscale.description = Redémarrage du jeu nécessaire pour appliquer les changements.
|
||||||
setting.swapdiagonal.name = Autoriser le placement en diagonale
|
setting.swapdiagonal.name = Autoriser le placement en diagonale
|
||||||
setting.difficulty.training = Entraînement
|
setting.difficulty.training = Entraînement
|
||||||
setting.difficulty.easy = Facile
|
setting.difficulty.easy = Facile
|
||||||
@@ -875,7 +877,8 @@ setting.saveinterval.name = Intervalle des Sauvegardes automatiques
|
|||||||
setting.seconds = {0} secondes
|
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être sans bords[lightgray] (peut nécessiter le redémarrage du jeu)
|
setting.borderlesswindow.name = Fenêtré sans bordures
|
||||||
|
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
|
||||||
setting.vsync.name = Synchronisation Verticale
|
setting.vsync.name = Synchronisation Verticale
|
||||||
@@ -1005,6 +1008,7 @@ rules.wavetimer = Compte à rebours des vagues
|
|||||||
rules.waves = Vagues
|
rules.waves = Vagues
|
||||||
rules.attack = Mode « Attaque »
|
rules.attack = Mode « Attaque »
|
||||||
rules.buildai = Constructions de l'IA
|
rules.buildai = Constructions de l'IA
|
||||||
|
rules.cleanupdeadteams = Détruire les structures des équipes vaincues (JcJ)
|
||||||
rules.corecapture = Capture du Noyau lors de sa Destruction
|
rules.corecapture = Capture du Noyau lors de sa Destruction
|
||||||
rules.polygoncoreprotection = Protection du noyau polygonal
|
rules.polygoncoreprotection = Protection du noyau polygonal
|
||||||
rules.enemyCheat = Ressources infinies pour l'IA (équipe rouge)
|
rules.enemyCheat = Ressources infinies pour l'IA (équipe rouge)
|
||||||
@@ -1299,7 +1303,6 @@ block.meltdown.name = Fusion
|
|||||||
block.foreshadow.name = Présage
|
block.foreshadow.name = Présage
|
||||||
block.container.name = Conteneur
|
block.container.name = Conteneur
|
||||||
block.launch-pad.name = Rampe de lancement
|
block.launch-pad.name = Rampe de lancement
|
||||||
block.launch-pad-large.name = Grande rampe de lancement
|
|
||||||
block.segment.name = Diviseur
|
block.segment.name = Diviseur
|
||||||
block.command-center.name = Centre de Commande
|
block.command-center.name = Centre de Commande
|
||||||
block.ground-factory.name = Usine d'Unités Terrestres
|
block.ground-factory.name = Usine d'Unités Terrestres
|
||||||
@@ -1320,11 +1323,11 @@ block.payload-source.name = Source de Charge utile
|
|||||||
block.disassembler.name = Désassembleur
|
block.disassembler.name = Désassembleur
|
||||||
block.silicon-crucible.name = Grande Fonderie de Silicium
|
block.silicon-crucible.name = Grande Fonderie de Silicium
|
||||||
block.overdrive-dome.name = Dôme Accélérant
|
block.overdrive-dome.name = Dôme Accélérant
|
||||||
|
block.interplanetary-accelerator.name = Accélérateur Interplanétaire
|
||||||
#experimental, may be removed
|
#experimental, may be removed
|
||||||
block.block-forge.name = Forgeur de Blocs
|
block.block-forge.name = Forgeur de Blocs
|
||||||
block.block-loader.name = Chargeur de Blocs
|
block.block-loader.name = Chargeur de Blocs
|
||||||
block.block-unloader.name = Déchargeur de Blocs
|
block.block-unloader.name = Déchargeur de Blocs
|
||||||
block.interplanetary-accelerator.name = Accélérateur Interplanétaire
|
|
||||||
|
|
||||||
block.switch.name = Interrupteur
|
block.switch.name = Interrupteur
|
||||||
block.micro-processor.name = Micro Processeur
|
block.micro-processor.name = Micro Processeur
|
||||||
@@ -1338,7 +1341,7 @@ block.memory-bank.name = Banque de mémoire
|
|||||||
team.blue.name = bleu
|
team.blue.name = bleu
|
||||||
team.crux.name = crux
|
team.crux.name = crux
|
||||||
team.sharded.name = sharded
|
team.sharded.name = sharded
|
||||||
team.derelict.name = derelict
|
team.derelict.name = Vestige
|
||||||
team.green.name = vert
|
team.green.name = vert
|
||||||
team.purple.name = mauve
|
team.purple.name = mauve
|
||||||
|
|
||||||
@@ -1357,8 +1360,9 @@ hint.placeConveyor = Les Convoyeurs transportent les ressources des foreuses ver
|
|||||||
hint.placeConveyor.mobile = Les Convoyeurs transportent les ressources des foreuses vers d'autres blocs. Sélectionnez un \uf896 [accent]Convoyeur[] dans l'onglet \ue814 [accent]Distribution[].\n\nMaintenez votre doigt et déplacez-le pour placer plusieurs convoyeurs.
|
hint.placeConveyor.mobile = Les Convoyeurs transportent les ressources des foreuses vers d'autres blocs. Sélectionnez un \uf896 [accent]Convoyeur[] dans l'onglet \ue814 [accent]Distribution[].\n\nMaintenez votre doigt et déplacez-le pour placer plusieurs convoyeurs.
|
||||||
hint.placeTurret = Placez des \uf861 [accent]Tourelles[] pour défendre votre base contre les ennemis.\n\nLes Tourelles nécessitent des munitions (dans ce cas, du \uf838Cuivre).\nUtilisez les convoyeurs et les foreuses pour les ravitailler.
|
hint.placeTurret = Placez des \uf861 [accent]Tourelles[] pour défendre votre base contre les ennemis.\n\nLes Tourelles nécessitent des munitions (dans ce cas, du \uf838Cuivre).\nUtilisez les convoyeurs et les foreuses pour les ravitailler.
|
||||||
hint.breaking = Maintenez [accent]Clic-droit[] pour détruire des blocs.
|
hint.breaking = Maintenez [accent]Clic-droit[] pour détruire des blocs.
|
||||||
hint.breaking.mobile = Activez le \ue817 [accent]marteau[] en bas à droite Touchez pour détruire des blocs.\n\nRetenez votre doigt pendant une seconde et déplacez-le pour détruire les blocs dans la zone de sélection.
|
hint.breaking.mobile = Activez le \ue817 [accent]marteau[] en bas à droite, Touchez pour détruire des blocs.\n\nRetenez votre doigt pendant une seconde et déplacez-le pour détruire les blocs dans la zone de sélection.
|
||||||
hint.blockInfo = Pour afficher les informations relatives à un bloc, il suffit de le sélectionner dans le [accent]menu de construction[], puis de cliquer sur le bouton [accent][[?][] à droite.
|
hint.blockInfo = Pour afficher les informations relatives à un bloc, il suffit de le sélectionner dans le [accent]menu de construction[], puis de cliquer sur le bouton [accent][[?][] à droite.
|
||||||
|
hint.derelict = [accent]Les structures abandonnées[] sont des vestiges brisés d'anciennes bases qui ne fonctionnent plus. Ces structures peuvent être [accent]déconstruites pour obtenir des ressources.
|
||||||
hint.research = Utilisez le bouton \ue875 [accent]Recherche[] pour rechercher de nouvelles technologies.
|
hint.research = Utilisez le bouton \ue875 [accent]Recherche[] pour rechercher de nouvelles technologies.
|
||||||
hint.research.mobile = Utilisez le bouton \ue875 [accent]Recherche[] dans le \ue88c [accent]Menu[] pour rechercher de nouvelles technologies.
|
hint.research.mobile = Utilisez le bouton \ue875 [accent]Recherche[] dans le \ue88c [accent]Menu[] pour rechercher de nouvelles technologies.
|
||||||
hint.unitControl = Retenez [accent][[Ctrl-gauche][] et [accent]cliquez[] pour contrôler une tourelle ou une unité alliée.
|
hint.unitControl = Retenez [accent][[Ctrl-gauche][] et [accent]cliquez[] pour contrôler une tourelle ou une unité alliée.
|
||||||
@@ -1410,6 +1414,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.resupply-point.description = Approvisionne les unités proches en munitions. Pas compatible avec celles qui ont besoin d'énergie pour tirer.
|
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.
|
||||||
@@ -1518,7 +1523,7 @@ block.scatter.description = Une tourelle anti-aérienne essentielle. Mitraille l
|
|||||||
block.scorch.description = Brûle les ennemis terrestres près de lui. Très efficace à courte portée.
|
block.scorch.description = Brûle les ennemis terrestres près de lui. Très efficace à courte portée.
|
||||||
block.hail.description = Une petite tourelle d'artillerie visant les ennemis terrestres. Efficace à longue portée.
|
block.hail.description = Une petite tourelle d'artillerie visant les ennemis terrestres. Efficace à longue portée.
|
||||||
block.wave.description = Une tourelle de taille moyenne tirant un jet de liquide. Peut éteindre les incendies automatiquement si elle est alimentée en eau.
|
block.wave.description = Une tourelle de taille moyenne tirant un jet de liquide. Peut éteindre les incendies automatiquement si elle est alimentée en eau.
|
||||||
block.lancer.description = Une tourelle de taille moyenne chargeant et tirant de puissants lasers aux ennemis terrestres.
|
block.lancer.description = Une tourelle de taille moyenne chargeant et tirant de puissants lasers sur les ennemis terrestres.
|
||||||
block.arc.description = Une petite tourelle tirant des arcs électriques sur les ennemis.
|
block.arc.description = Une petite tourelle tirant des arcs électriques sur les ennemis.
|
||||||
block.swarmer.description = Une tourelle de taille moyenne attaquant les ennemis terrestres et aériens à l'aide de missiles autoguidés. Consomme beaucoup de munitions.
|
block.swarmer.description = Une tourelle de taille moyenne attaquant les ennemis terrestres et aériens à l'aide de missiles autoguidés. Consomme beaucoup de munitions.
|
||||||
block.salvo.description = Une version plus grande et améliorée de la tourelle Duo. Tire par salves.
|
block.salvo.description = Une version plus grande et améliorée de la tourelle Duo. Tire par salves.
|
||||||
@@ -1531,7 +1536,7 @@ block.foreshadow.description = Une tourelle massive tirant une puissante balle s
|
|||||||
block.repair-point.description = Soigne l'unité endommagée la plus proche.
|
block.repair-point.description = Soigne l'unité endommagée la plus proche.
|
||||||
block.segment.description = Endommage et détruit les tirs ennemis. Les lasers ne peuvent pas être ciblés.
|
block.segment.description = Endommage et détruit les tirs ennemis. Les lasers ne peuvent pas être ciblés.
|
||||||
block.parallax.description = Tire un rayon tracteur qui attire les ennemis volants, infligeant aussi des dégâts.
|
block.parallax.description = Tire un rayon tracteur qui attire les ennemis volants, infligeant aussi des dégâts.
|
||||||
block.tsunami.description = Tire un puissant jet de liquide aux ennemis. Peut éteindre les incendies automatiquement si elle est alimentée en eau.
|
block.tsunami.description = Tire un puissant jet de liquide sur les ennemis. Peut éteindre les incendies automatiquement si elle est alimentée en eau.
|
||||||
block.silicon-crucible.description = Raffine du silicium avec du sable et du charbon en utilisant de la pyratite comme source de chaleur additionnelle. Cette usine est plus efficace dans les endroits chauds.
|
block.silicon-crucible.description = Raffine du silicium avec du sable et du charbon en utilisant de la pyratite comme source de chaleur additionnelle. Cette usine est plus efficace dans les endroits chauds.
|
||||||
block.disassembler.description = Cette version avancée du séparateur peut produire du thorium.
|
block.disassembler.description = Cette version avancée du séparateur peut produire du thorium.
|
||||||
block.overdrive-dome.description = Accélère le fonctionnement des bâtiments autour de lui. Requiert du silicium et du tissu phasé pour fonctionner.
|
block.overdrive-dome.description = Accélère le fonctionnement des bâtiments autour de lui. Requiert du silicium et du tissu phasé pour fonctionner.
|
||||||
@@ -1554,6 +1559,8 @@ block.memory-bank.description = Stocke des informations pour un processeur logiq
|
|||||||
block.logic-display.description = Affiche des images à partir des instructions d'un processeur logique.
|
block.logic-display.description = Affiche des images à partir des instructions d'un processeur logique.
|
||||||
block.large-logic-display.description = Affiche des images à partir des instructions d'un processeur logique. Possède une plus grande résolution qu'un écran.
|
block.large-logic-display.description = Affiche des images à partir des instructions d'un processeur logique. Possède une plus grande résolution qu'un écran.
|
||||||
block.interplanetary-accelerator.description = Un énorme canon électromagnétique à rails. Accélère les Noyaux pour qu'ils échappent à la gravité de leur planète et leur permettent un déploiement interplanétaire.
|
block.interplanetary-accelerator.description = Un énorme canon électromagnétique à rails. Accélère les Noyaux pour qu'ils échappent à la gravité de leur planète et leur permettent un déploiement interplanétaire.
|
||||||
|
block.repair-turret.description = Répare en continu l'unité endommagée la plus proche dans son périmètre. Accepte le liquide de refroidissement en option.
|
||||||
|
block.payload-propulsion-tower.description = Structure de transport de charges utiles à longue portée. Projette des charges utiles vers d'autres tours de propulsion de charges utiles reliées.
|
||||||
|
|
||||||
unit.dagger.description = Tire des balles normales aux ennemis proches.
|
unit.dagger.description = Tire des balles normales aux ennemis proches.
|
||||||
unit.mace.description = Tire des jets de flammes aux ennemis proches.
|
unit.mace.description = Tire des jets de flammes aux ennemis proches.
|
||||||
@@ -1588,6 +1595,11 @@ unit.omura.description = Tire avec un canon à rails à longue portée, une puis
|
|||||||
unit.alpha.description = Défend le Noyau fragment contre les ennemis. Peut construire des structures.
|
unit.alpha.description = Défend le Noyau fragment contre les ennemis. Peut construire des structures.
|
||||||
unit.beta.description = Défend le Noyau fondation contre les ennemis. Peut construire des structures.
|
unit.beta.description = Défend le Noyau fondation contre les ennemis. Peut construire des structures.
|
||||||
unit.gamma.description = Défend le Noyau épicentre contre les ennemis. Peut construire des structures.
|
unit.gamma.description = Défend le Noyau épicentre contre les ennemis. Peut construire des structures.
|
||||||
|
unit.retusa.description = Pose des mines de proximité. Répare les unités alliées.
|
||||||
|
unit.oxynoe.description = Tire des jets de flammes qui réparent les structures et endommage les ennemis proches. Cible les projectiles ennemis proches avec une tourelle de défense ponctuelle.
|
||||||
|
unit.cyerce.description = Tire des missiles à fragmentation sur les ennemis. Répare les unités alliées.
|
||||||
|
unit.aegires.description = Secoue toutes les unités et structures ennemies qui entrent dans son champ d'énergie. Répare tous les alliés.
|
||||||
|
unit.navanax.description = Tire des projectiles explosifs EMP, infligeant des dommages importants aux réseaux électriques ennemis et réparant les structures alliées. Fait fondre les ennemis proches avec 4 tourelles laser autonomes.
|
||||||
|
|
||||||
lst.read = Lit un nombre depuis un bloc de mémoire relié au processeur.
|
lst.read = Lit un nombre depuis un bloc de mémoire relié au processeur.
|
||||||
lst.write = Écrit un nombre dans un bloc de mémoire relié au processeur.
|
lst.write = Écrit un nombre dans un bloc de mémoire relié au processeur.
|
||||||
|
|||||||
@@ -100,7 +100,8 @@ joingame = 게임 참여
|
|||||||
customgame = 사용자 지정 게임
|
customgame = 사용자 지정 게임
|
||||||
newgame = 새 게임
|
newgame = 새 게임
|
||||||
none = < 없음 >
|
none = < 없음 >
|
||||||
none.found = [lightgray]< 없거나 찾을 수 없음 >
|
none.found = [lightgray]< 찾을 수 없음 >
|
||||||
|
none.inmap = [lightgray]< 맵에 없음 >
|
||||||
minimap = 미니맵
|
minimap = 미니맵
|
||||||
position = 위치
|
position = 위치
|
||||||
close = 닫기
|
close = 닫기
|
||||||
@@ -121,7 +122,6 @@ committingchanges = 바뀐 점 적용
|
|||||||
done = 완료
|
done = 완료
|
||||||
feature.unsupported = 기기가 이 기능을 지원하지 않습니다.
|
feature.unsupported = 기기가 이 기능을 지원하지 않습니다.
|
||||||
|
|
||||||
mods.initfailed = [red]⚠[]이전 Mindustry 인스턴스를 초기화하지 못했습니다. 잘못된 모드로 인해 발생한 것일 수 있습니다.\n\n 게임 충돌 무한반복을 막기 위해, [red]모든 모드가 비활성화되었습니다.[]\n\n이 시스템을 비활성화할려면, [accent]설정->게임->로딩 중 충돌 시 모드 비활성화[]설정을 끄세요.
|
|
||||||
mods = 모드
|
mods = 모드
|
||||||
mods.none = [lightgray]모드를 찾을 수 없습니다!
|
mods.none = [lightgray]모드를 찾을 수 없습니다!
|
||||||
mods.guide = 모드 제작 가이드
|
mods.guide = 모드 제작 가이드
|
||||||
@@ -565,6 +565,7 @@ 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 = 단계:
|
||||||
@@ -724,7 +725,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 = 쿨타임
|
||||||
@@ -793,7 +794,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]개 파편 탄환:
|
||||||
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] 넉백
|
||||||
@@ -845,7 +846,6 @@ 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 = 자동 조준
|
||||||
@@ -854,7 +854,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 = 무난
|
||||||
@@ -872,7 +873,8 @@ 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.description = 적용하려면 재시작이 필요할 수도 있습니다.
|
||||||
setting.fps.name = FPS와 핑 표시
|
setting.fps.name = FPS와 핑 표시
|
||||||
setting.smoothcamera.name = 부드러운 시점
|
setting.smoothcamera.name = 부드러운 시점
|
||||||
setting.vsync.name = 수직 동기화
|
setting.vsync.name = 수직 동기화
|
||||||
@@ -995,6 +997,7 @@ rules.wavetimer = 시간 제한이 있는 단계
|
|||||||
rules.waves = 단계
|
rules.waves = 단계
|
||||||
rules.attack = 공격 모드
|
rules.attack = 공격 모드
|
||||||
rules.buildai = AI 건설
|
rules.buildai = AI 건설
|
||||||
|
rules.cleanupdeadteams = 패배한 팀 건물 정리하기 (PvP)
|
||||||
rules.corecapture = 코어 파괴 시 점령
|
rules.corecapture = 코어 파괴 시 점령
|
||||||
rules.polygoncoreprotection = 다각형 코어 건설 금지구역
|
rules.polygoncoreprotection = 다각형 코어 건설 금지구역
|
||||||
rules.enemyCheat = 적Ai 무한자원
|
rules.enemyCheat = 적Ai 무한자원
|
||||||
@@ -1046,7 +1049,7 @@ item.silicon.name = 실리콘
|
|||||||
item.plastanium.name = 플라스터늄
|
item.plastanium.name = 플라스터늄
|
||||||
item.phase-fabric.name = 메타
|
item.phase-fabric.name = 메타
|
||||||
item.surge-alloy.name = 설금
|
item.surge-alloy.name = 설금
|
||||||
item.spore-pod.name = 포자
|
item.spore-pod.name = 포자 꼬투리
|
||||||
item.sand.name = 모래
|
item.sand.name = 모래
|
||||||
item.blast-compound.name = 폭발물
|
item.blast-compound.name = 폭발물
|
||||||
item.pyratite.name = 파이라타이트
|
item.pyratite.name = 파이라타이트
|
||||||
@@ -1289,7 +1292,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 = 지상 공장
|
||||||
@@ -1310,11 +1312,11 @@ 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 = 마이크로 프로세서
|
||||||
@@ -1349,6 +1351,7 @@ hint.placeTurret = 적에게서 기지를 막아내려면 \uf861 [accent]포탑[
|
|||||||
hint.breaking = 블록을 부수려면 [accent]우클릭[]이나 드래그를 하십시오.
|
hint.breaking = 블록을 부수려면 [accent]우클릭[]이나 드래그를 하십시오.
|
||||||
hint.breaking.mobile = 블록을 부수려면 오른쪽 아래의 \ue817 [accent]망치[]를 눌러 해체 모드를 활성화하십시오.\n\n손가락으로 누른 채로 끌어서 해체 범위를 지정하십시오.
|
hint.breaking.mobile = 블록을 부수려면 오른쪽 아래의 \ue817 [accent]망치[]를 눌러 해체 모드를 활성화하십시오.\n\n손가락으로 누른 채로 끌어서 해체 범위를 지정하십시오.
|
||||||
hint.blockInfo = [accent]건설 메뉴[]에서 블록을 선택해서 정보를 보십시오, 그다음 오른쪽의 [accent][[?][] 버튼을 선택하십시오.
|
hint.blockInfo = [accent]건설 메뉴[]에서 블록을 선택해서 정보를 보십시오, 그다음 오른쪽의 [accent][[?][] 버튼을 선택하십시오.
|
||||||
|
hint.derelict = [accent]버려진[] 구조물들은 더 이상 작동하지 않는 오래된 기지의 부서진 잔해입니다.\n\n이 구조물들은 자원으로 다시 [accent]철거[]될 수 있습니다.
|
||||||
hint.research = 새 기술을 연구하려면 \ue875 [accent]연구[]버튼을 누르십시오.
|
hint.research = 새 기술을 연구하려면 \ue875 [accent]연구[]버튼을 누르십시오.
|
||||||
hint.research.mobile = 새 기술을 연구하려면 \ue88c [accent]메뉴[] 아래의 \ue875 [accent]연구[]버튼을 누르십시오.
|
hint.research.mobile = 새 기술을 연구하려면 \ue88c [accent]메뉴[] 아래의 \ue875 [accent]연구[]버튼을 누르십시오.
|
||||||
hint.unitControl = 아군 유닛과 포탑을 조종하려면 [accent][[왼쪽 ctrl][]을 누른 채로 [accent]클릭[] 하십시오.
|
hint.unitControl = 아군 유닛과 포탑을 조종하려면 [accent][[왼쪽 ctrl][]을 누른 채로 [accent]클릭[] 하십시오.
|
||||||
@@ -1400,6 +1403,7 @@ liquid.slag.description = 다양한 종류의 금속들이 함께 섞여 녹아
|
|||||||
liquid.oil.description = 고급 재료 생산에 사용되는 액체. 석탄으로 전환하거나 무기로 뿌려서 불을 지를 수 있습니다.
|
liquid.oil.description = 고급 재료 생산에 사용되는 액체. 석탄으로 전환하거나 무기로 뿌려서 불을 지를 수 있습니다.
|
||||||
liquid.cryofluid.description = 물과 티타늄으로 만든 비부식성 액체. 열용량이 매우 높으며 냉각수로 광범위하게 사용됩니다.
|
liquid.cryofluid.description = 물과 티타늄으로 만든 비부식성 액체. 열용량이 매우 높으며 냉각수로 광범위하게 사용됩니다.
|
||||||
|
|
||||||
|
block.derelict = [lightgray] 버려짐[]
|
||||||
block.resupply-point.description = 주변 유닛들에 구리 탄약을 보급합니다. 배터리 전력이 필요한 유닛들은 호환되지 않습니다.
|
block.resupply-point.description = 주변 유닛들에 구리 탄약을 보급합니다. 배터리 전력이 필요한 유닛들은 호환되지 않습니다.
|
||||||
block.armored-conveyor.description = 앞으로 자원들을 운반합니다. 측면에서 자원들을 받아들이지 않습니다.
|
block.armored-conveyor.description = 앞으로 자원들을 운반합니다. 측면에서 자원들을 받아들이지 않습니다.
|
||||||
block.illuminator.description = 발광합니다.
|
block.illuminator.description = 발광합니다.
|
||||||
@@ -1544,6 +1548,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 = 주변 모든 적에게 화염 줄기를 발사합니다.
|
||||||
@@ -1578,6 +1584,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 = 적 전력망에 상당한 피해를 주고 아군 블록을 수리하는 거대한 EMP 고폭탄을 발사합니다. 4개의 자율 레이저 포탑으로 주변 적을 녹입니다.
|
||||||
|
|
||||||
lst.read = 연결된 메모리 셀에서 숫자 읽기
|
lst.read = 연결된 메모리 셀에서 숫자 읽기
|
||||||
lst.write = 연결된 메모리 셀에 숫자 쓰기
|
lst.write = 연결된 메모리 셀에 숫자 쓰기
|
||||||
@@ -1630,7 +1641,7 @@ lenum.always = 항상 참
|
|||||||
lenum.idiv = 정수 나누기
|
lenum.idiv = 정수 나누기
|
||||||
lenum.div = 나누기\n0으로 나누면 [accent]null[]을 반환합니다.
|
lenum.div = 나누기\n0으로 나누면 [accent]null[]을 반환합니다.
|
||||||
lenum.mod = 나머지
|
lenum.mod = 나머지
|
||||||
lenum.equal = 동치 비교. 형변환 가능\nNull이 아닌 객체가 숫자와 비교할려면 1이 되고, Null이면 0이 됩니다.
|
lenum.equal = 동치 비교. 형변환 가능\nNull이 아닌 객체가 숫자와 비교하려면 1이 되고, Null이면 0이 됩니다.
|
||||||
lenum.notequal = 동치 부정. 형변환 가능
|
lenum.notequal = 동치 부정. 형변환 가능
|
||||||
lenum.strictequal = 엄격한 동치 비교. 형변환 불가능\n[accent]null[]를 확인하는데 쓸 수 있습니다.
|
lenum.strictequal = 엄격한 동치 비교. 형변환 불가능\n[accent]null[]를 확인하는데 쓸 수 있습니다.
|
||||||
lenum.shl = 왼쪽으로 비트 이동
|
lenum.shl = 왼쪽으로 비트 이동
|
||||||
@@ -1817,7 +1828,7 @@ block.inverted-sorter.details =
|
|||||||
block.distributor.details =
|
block.distributor.details =
|
||||||
block.overflow-gate.details =
|
block.overflow-gate.details =
|
||||||
block.underflow-gate.details =
|
block.underflow-gate.details =
|
||||||
block.mass-driver.details = [lightgray][비공식][]발사할려면 최소 아이템 10개가 필요하다.
|
block.mass-driver.details = [lightgray][비공식][]발사하려면 최소 아이템 10개가 필요하다.
|
||||||
block.mechanical-pump.details =
|
block.mechanical-pump.details =
|
||||||
block.rotary-pump.details =
|
block.rotary-pump.details =
|
||||||
block.thermal-pump.details =
|
block.thermal-pump.details =
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ be.ignore = Zignoruj
|
|||||||
be.noupdates = Nie znaleziono aktualizacji.
|
be.noupdates = Nie znaleziono aktualizacji.
|
||||||
be.check = Sprawdź aktualizacje
|
be.check = Sprawdź aktualizacje
|
||||||
|
|
||||||
mod.featured.dialog.title = Przeglądarka Modów
|
mods.browser = Przeglądarka Modów
|
||||||
mods.browser.selected = Wybrany Mod
|
mods.browser.selected = Wybrany Mod
|
||||||
mods.browser.add = Zainsta-\nluj Moda
|
mods.browser.add = Zainsta-\nluj Moda
|
||||||
mods.browser.reinstall = Przeins-\ntaluj
|
mods.browser.reinstall = Przeins-\ntaluj
|
||||||
@@ -67,6 +67,14 @@ schematic.delete.confirm = Ten schemat zostanie usunięty.
|
|||||||
schematic.rename = Zmień nazwę schematu
|
schematic.rename = Zmień nazwę schematu
|
||||||
schematic.info = {0}x{1}, {2} bloków
|
schematic.info = {0}x{1}, {2} bloków
|
||||||
schematic.disabled = [scarlet]Schematy są wyłączone[]\nNie możesz używać schematów na tej [accent]mapie[] lub [accent]serwerze.
|
schematic.disabled = [scarlet]Schematy są wyłączone[]\nNie możesz używać schematów na tej [accent]mapie[] lub [accent]serwerze.
|
||||||
|
schematic.tags = Tagi:
|
||||||
|
schematic.edittags = Zmień Znacznik
|
||||||
|
schematic.addtag = Dodaj Znacznik
|
||||||
|
schematic.texttag = Tekst Znacznika
|
||||||
|
schematic.icontag = Ikona Znacznika
|
||||||
|
schematic.renametag = Zmień Nazwę Znacznika
|
||||||
|
schematic.tagdelconfirm = Czy kompletnie usunąć znacznik?
|
||||||
|
schematic.tagexists = Taki znacznik już istnieje.
|
||||||
|
|
||||||
stats = Statystyki
|
stats = Statystyki
|
||||||
stat.wave = Fale powstrzymane:[accent] {0}
|
stat.wave = Fale powstrzymane:[accent] {0}
|
||||||
@@ -159,7 +167,7 @@ planetmap = Mapa Planety
|
|||||||
launchcore = Wystrzel Rdzeń
|
launchcore = Wystrzel Rdzeń
|
||||||
filename = Nazwa Pliku:
|
filename = Nazwa Pliku:
|
||||||
unlocked = Odblokowano nową zawartość!
|
unlocked = Odblokowano nową zawartość!
|
||||||
available =Nowe Odkrycie dostępne
|
available = Nowe Odkrycie dostępne
|
||||||
completed = [accent]Ukończony
|
completed = [accent]Ukończony
|
||||||
techtree = Drzewo Techno-\nlogiczne
|
techtree = Drzewo Techno-\nlogiczne
|
||||||
research.legacy = Znaleziono badania z wersji [accent]5.0[].\nChcesz [accent]załadować je[], czy [accent]usunąć[] dane z drzewa technologicznego w nowej kampanii (zalecane)?
|
research.legacy = Znaleziono badania z wersji [accent]5.0[].\nChcesz [accent]załadować je[], czy [accent]usunąć[] dane z drzewa technologicznego w nowej kampanii (zalecane)?
|
||||||
@@ -502,7 +510,7 @@ memory = Pam: {0}mb
|
|||||||
memory2 = Pam:\n {0}mb +\n {1}mb
|
memory2 = Pam:\n {0}mb +\n {1}mb
|
||||||
language.restart = Uruchom grę ponownie, aby nowo ustawiony język zaczął funkcjonować.
|
language.restart = Uruchom grę ponownie, aby nowo ustawiony język zaczął funkcjonować.
|
||||||
settings = Ustawienia
|
settings = Ustawienia
|
||||||
tutorial = Poradnik
|
tutorial = Samouczek
|
||||||
tutorial.retake = Ponów Samouczek
|
tutorial.retake = Ponów Samouczek
|
||||||
editor = Edytor
|
editor = Edytor
|
||||||
mapeditor = Edytor Map
|
mapeditor = Edytor Map
|
||||||
@@ -530,7 +538,7 @@ launch.from = Wystrzelony z: [accent]{0}
|
|||||||
launch.destination = Cel: {0}
|
launch.destination = Cel: {0}
|
||||||
configure.invalid = Ilość musi być liczbą pomiędzy 0 a {0}.
|
configure.invalid = Ilość musi być liczbą pomiędzy 0 a {0}.
|
||||||
add = Dodaj...
|
add = Dodaj...
|
||||||
boss.health = Zdrowie Strażnika
|
guardian = Zdrowie Strażnika
|
||||||
|
|
||||||
connectfail = [crimson]Nie można połączyć się z serwerem:\n\n[accent]{0}
|
connectfail = [crimson]Nie można połączyć się z serwerem:\n\n[accent]{0}
|
||||||
error.unreachable = Serwer niedostępny.\nSprawdź, czy adres jest wpisany poprawnie.
|
error.unreachable = Serwer niedostępny.\nSprawdź, czy adres jest wpisany poprawnie.
|
||||||
@@ -620,6 +628,20 @@ sector.extractionOutpost.description = Odległa placówka zbudowana przez wroga
|
|||||||
sector.impact0078.description = Tutaj leżą pozostałości międzygwiezdnego statku transportowego, który jako pierwszy wszedł do tego układu.\n\nWydobądź jak najwięcej z wraku. Zbadaj każdą nienaruszoną technologię.
|
sector.impact0078.description = Tutaj leżą pozostałości międzygwiezdnego statku transportowego, który jako pierwszy wszedł do tego układu.\n\nWydobądź jak najwięcej z wraku. Zbadaj każdą nienaruszoną technologię.
|
||||||
sector.planetaryTerminal.description = Ostatni cel.\n\nTa baza przybrzeżna zawiera strukturę zdolną do wyrzucania rdzeni na lokalne planety. Jest wyjątkowo dobrze strzeżona.\n\nProdukuj jednostki morskie. Jak najszybciej wyeliminuj wroga. Zbadaj tą strukturę.
|
sector.planetaryTerminal.description = Ostatni cel.\n\nTa baza przybrzeżna zawiera strukturę zdolną do wyrzucania rdzeni na lokalne planety. Jest wyjątkowo dobrze strzeżona.\n\nProdukuj jednostki morskie. Jak najszybciej wyeliminuj wroga. Zbadaj tą strukturę.
|
||||||
|
|
||||||
|
status.burning.name = Podpalenie
|
||||||
|
status.freezing.name = Zamrożenie
|
||||||
|
status.wet.name = Mokrość
|
||||||
|
status.muddy.name = Zabłocenie
|
||||||
|
status.melting.name = Topnienie
|
||||||
|
status.sapped.name = Osłabienie
|
||||||
|
status.electrified.name = Naelektryzowanie
|
||||||
|
status.spore-slowed.name = Zarodnikowe Spowolnienie
|
||||||
|
status.tarred.name = Osmołowanie
|
||||||
|
status.overclock.name = Przyspieszenie
|
||||||
|
status.shocked.name = Porażenie
|
||||||
|
status.blasted.name = Wysadzenie
|
||||||
|
status.unmoving.name = Unieruchomienie
|
||||||
|
|
||||||
settings.language = Język
|
settings.language = Język
|
||||||
settings.data = Dane Gry
|
settings.data = Dane Gry
|
||||||
settings.reset = Przywróć Domyślne
|
settings.reset = Przywróć Domyślne
|
||||||
@@ -655,7 +677,8 @@ stat.input = Wejście
|
|||||||
stat.output = Wyjście
|
stat.output = Wyjście
|
||||||
stat.booster = Wzmacniacz
|
stat.booster = Wzmacniacz
|
||||||
stat.tiles = Wymagane Pola
|
stat.tiles = Wymagane Pola
|
||||||
stat.affinities = Uwydajnienie
|
stat.affinities = Uwydajnienia
|
||||||
|
stat.opposites = Przeciwieństwa
|
||||||
stat.powercapacity = Pojemność mocy
|
stat.powercapacity = Pojemność mocy
|
||||||
stat.powershot = moc/strzał
|
stat.powershot = moc/strzał
|
||||||
stat.damage = Obrażenia
|
stat.damage = Obrażenia
|
||||||
@@ -703,7 +726,7 @@ stat.lightningchance = Szansa Na Błyskawicę
|
|||||||
stat.lightningdamage = Obrażenia Błyskawic
|
stat.lightningdamage = Obrażenia Błyskawic
|
||||||
stat.flammability = Palność
|
stat.flammability = Palność
|
||||||
stat.radioactivity = Radioaktywność
|
stat.radioactivity = Radioaktywność
|
||||||
stat.charge = Charge
|
stat.charge = Naładowanie
|
||||||
stat.heatcapacity = Pojemność Cieplna
|
stat.heatcapacity = Pojemność Cieplna
|
||||||
stat.viscosity = Lepkość
|
stat.viscosity = Lepkość
|
||||||
stat.temperature = Temperatura
|
stat.temperature = Temperatura
|
||||||
@@ -717,13 +740,21 @@ stat.abilities = Umiejętności
|
|||||||
stat.canboost = Może przyspieszyć
|
stat.canboost = Może przyspieszyć
|
||||||
stat.flying = Może latać
|
stat.flying = Może latać
|
||||||
stat.ammouse = Zużycie Amunicji
|
stat.ammouse = Zużycie Amunicji
|
||||||
|
stat.damagemultiplier = Mnożnik Obrażeń
|
||||||
|
stat.healthmultiplier = Mnożnik Zdrowia
|
||||||
|
stat.speedmultiplier = Mnożnik Prędkości
|
||||||
|
stat.reloadmultiplier = Mnożnik Prędkości Przeładowywania
|
||||||
|
stat.buildspeedmultiplier = Mnożnik Prędkości Budowania
|
||||||
|
stat.reactive = Reaguje
|
||||||
|
stat.healing = Leczy
|
||||||
|
|
||||||
ability.forcefield = Pole Mocy
|
ability.forcefield = Pole Siłowe
|
||||||
ability.repairfield = Pole Naprawy
|
ability.repairfield = Pole Naprawy
|
||||||
ability.statusfield = Pole Statusu
|
ability.statusfield = Pole Statusu
|
||||||
ability.unitspawn = Fabryka Jednostek {0}
|
ability.unitspawn = Fabryka Jednostek {0}
|
||||||
ability.shieldregenfield = Strefa Tarczy Regenerującej
|
ability.shieldregenfield = Strefa Tarczy Regenerującej
|
||||||
ability.movelightning = Pioruny Poruszania
|
ability.movelightning = Pioruny Poruszania
|
||||||
|
ability.energyfield = Pole Energii: [accent]{0}[] obrażenia ~ [accent]{1}[] bloki / [accent]{2}[] cele
|
||||||
|
|
||||||
bar.drilltierreq = Wymagane Lepsze Wiertło
|
bar.drilltierreq = Wymagane Lepsze Wiertło
|
||||||
bar.noresources = Brak Zasobów
|
bar.noresources = Brak Zasobów
|
||||||
@@ -746,6 +777,7 @@ bar.power = Prąd
|
|||||||
bar.progress = Postęp Budowy
|
bar.progress = Postęp Budowy
|
||||||
bar.input = Wejście
|
bar.input = Wejście
|
||||||
bar.output = Wyjście
|
bar.output = Wyjście
|
||||||
|
bar.strength = [stat]{0}[lightgray]x siły
|
||||||
|
|
||||||
units.processorcontrol = [lightgray]Kontrolowany przez procesor
|
units.processorcontrol = [lightgray]Kontrolowany przez procesor
|
||||||
|
|
||||||
@@ -756,6 +788,7 @@ bullet.sapping = [stat]wyczerpujący
|
|||||||
bullet.homing = [stat]naprowadzający
|
bullet.homing = [stat]naprowadzający
|
||||||
bullet.shock = [stat]piorunowy
|
bullet.shock = [stat]piorunowy
|
||||||
bullet.frag = [stat]fragmentacyjny
|
bullet.frag = [stat]fragmentacyjny
|
||||||
|
bullet.lightning = [stat]{0}[lightgray]x błyskawice ~ [stat]{1}[lightgray] Obrażenia
|
||||||
bullet.buildingdamage = [stat]{0}%[lightgray] obrażeń budynkom
|
bullet.buildingdamage = [stat]{0}%[lightgray] obrażeń budynkom
|
||||||
bullet.knockback = [stat]{0}[lightgray] odrzut
|
bullet.knockback = [stat]{0}[lightgray] odrzut
|
||||||
bullet.pierce = [stat]{0}[lightgray]x przebicia
|
bullet.pierce = [stat]{0}[lightgray]x przebicia
|
||||||
@@ -769,6 +802,7 @@ bullet.reload = [stat]{0}[lightgray]x szybkość ataku
|
|||||||
unit.blocks = bloki
|
unit.blocks = bloki
|
||||||
unit.blockssquared = bloki²
|
unit.blockssquared = bloki²
|
||||||
unit.powersecond = jednostek prądu na sekundę
|
unit.powersecond = jednostek prądu na sekundę
|
||||||
|
unit.tilessecond = bloków na sekundę
|
||||||
unit.liquidsecond = jednostek płynu na sekundę
|
unit.liquidsecond = jednostek płynu na sekundę
|
||||||
unit.itemssecond = przedmiotów na sekundę
|
unit.itemssecond = przedmiotów na sekundę
|
||||||
unit.liquidunits = jednostek płynu
|
unit.liquidunits = jednostek płynu
|
||||||
@@ -991,7 +1025,8 @@ rules.weather.duration = Czas trwania:
|
|||||||
content.item.name = Przedmioty
|
content.item.name = Przedmioty
|
||||||
content.liquid.name = Płyny
|
content.liquid.name = Płyny
|
||||||
content.unit.name = Jednostki
|
content.unit.name = Jednostki
|
||||||
content.block.name = Klocki
|
content.block.name = Bloki
|
||||||
|
content.status.name = Efekty Statusu
|
||||||
content.sector.name = Sektory
|
content.sector.name = Sektory
|
||||||
|
|
||||||
item.copper.name = Miedź
|
item.copper.name = Miedź
|
||||||
@@ -1157,7 +1192,7 @@ block.distributor.name = Dystrybutor
|
|||||||
block.sorter.name = Sortownik
|
block.sorter.name = Sortownik
|
||||||
block.inverted-sorter.name = Odwrotny Sortownik
|
block.inverted-sorter.name = Odwrotny Sortownik
|
||||||
block.message.name = Wiadomość
|
block.message.name = Wiadomość
|
||||||
block.illuminator.name = Illuminator
|
block.illuminator.name = Iluminator
|
||||||
block.overflow-gate.name = Brama Przepełnieniowa
|
block.overflow-gate.name = Brama Przepełnieniowa
|
||||||
block.underflow-gate.name = Brama Niedomiaru
|
block.underflow-gate.name = Brama Niedomiaru
|
||||||
block.silicon-smelter.name = Huta Krzemu
|
block.silicon-smelter.name = Huta Krzemu
|
||||||
@@ -1397,7 +1432,7 @@ block.phase-conveyor.description = Zaawansowany blok transportowy dla przedmiot
|
|||||||
block.sorter.description = Sortuje przedmioty. Jeśli przedmiot pasuje to przechodzi dalej, jeśli nie - to przechodzi na boki.
|
block.sorter.description = Sortuje przedmioty. Jeśli przedmiot pasuje to przechodzi dalej, jeśli nie - to przechodzi na boki.
|
||||||
block.inverted-sorter.description = Sortuje przedmioty jak zwykły sortownik, ale odpowiednie surowce wyciągane są na boki.
|
block.inverted-sorter.description = Sortuje przedmioty jak zwykły sortownik, ale odpowiednie surowce wyciągane są na boki.
|
||||||
block.router.description = Akceptuje przedmioty z jednego miejsca i rozdziela je do trzech innych kierunków. Przydatne w rozdzielaniu materiałów z jednego źródła do wielu celów.\n\n[scarlet]Nigdy nie używaj przy punkcje wejścia materiałów produkcyjnych, ponieważ zostaną one zatkane przez materiały wyjściowe.[]
|
block.router.description = Akceptuje przedmioty z jednego miejsca i rozdziela je do trzech innych kierunków. Przydatne w rozdzielaniu materiałów z jednego źródła do wielu celów.\n\n[scarlet]Nigdy nie używaj przy punkcje wejścia materiałów produkcyjnych, ponieważ zostaną one zatkane przez materiały wyjściowe.[]
|
||||||
block.router.details = Konieczne zło. Nie zaleca się stosowania obok nakładów produkcyjnych, ponieważ zostaną one zatkane.
|
block.router.details = Nieuniknione zło. Nie zaleca się stosowania obok nakładów produkcyjnych, ponieważ zostaną one zatkane.
|
||||||
block.distributor.description = Zaawansowany rozdzielacz, rozdzielający przedmioty do 7 innych kierunków.
|
block.distributor.description = Zaawansowany rozdzielacz, rozdzielający przedmioty do 7 innych kierunków.
|
||||||
block.overflow-gate.description = Rozdzielacz, który przerzuca przedmioty, kiedy główna droga jest przepełniona.
|
block.overflow-gate.description = Rozdzielacz, który przerzuca przedmioty, kiedy główna droga jest przepełniona.
|
||||||
block.underflow-gate.description = Odwrotność bramy przepełnieniowej, który przepuszcza przedmioty główną drogą, gdy boczne drogi są przepełnione.
|
block.underflow-gate.description = Odwrotność bramy przepełnieniowej, który przepuszcza przedmioty główną drogą, gdy boczne drogi są przepełnione.
|
||||||
@@ -1517,150 +1552,155 @@ unit.risso.description = Strzela sporą ilością pocisków i rakiet w najbliżs
|
|||||||
unit.minke.description = Strzela granatami i standardowymi pociskami w najbliższych przeciwników.
|
unit.minke.description = Strzela granatami i standardowymi pociskami w najbliższych przeciwników.
|
||||||
unit.bryde.description = Strzela granatami i rakietami na dużą odległość we wrogów.
|
unit.bryde.description = Strzela granatami i rakietami na dużą odległość we wrogów.
|
||||||
unit.sei.description = Strzela dużą ilością rakiet oraz przebijających zbroje pocisków we wrogów.
|
unit.sei.description = Strzela dużą ilością rakiet oraz przebijających zbroje pocisków we wrogów.
|
||||||
unit.omura.description = Strzela przebijającym superszybkim pociskiem we wrogów ze sporej odległości. Produkuje Błyski (jednostki).
|
unit.omura.description = Strzela przebijającym superszybkim pociskiem we wrogów ze sporej odległości. Produkuje jednostki Flare.
|
||||||
unit.alpha.description = Chroni Rdzeń: Odłamek przed wrogami. Buduje struktury.
|
unit.alpha.description = Chroni Rdzeń: Odłamek przed wrogami. Buduje struktury.
|
||||||
unit.beta.description = Chroni Rdzeń: Podstawa przed wrogami. Buduje struktury.
|
unit.beta.description = Chroni Rdzeń: Podstawa przed wrogami. Buduje struktury.
|
||||||
unit.gamma.description = Chroni Rdzeń: Jądro przed wrogami. Buduje struktury.
|
unit.gamma.description = Chroni Rdzeń: Jądro przed wrogami. Buduje struktury.
|
||||||
|
|
||||||
lst.read = Read a number from a linked memory cell.
|
lst.read = Wczytuje liczbę z połączonej komórki pamięci.
|
||||||
lst.write = Write a number to a linked memory cell.
|
lst.write = Zapisuje liczbę do połączonej komórki pamięci.
|
||||||
lst.print = Add text to the print buffer.\nDoes not display anything until [accent]Print Flush[] is used.
|
lst.print = Dodaje tekst do buforu drukującego.\nNie wyświetla niczego dopóki [accent]Print Flush[] nie jest użyte.
|
||||||
lst.draw = Add an operation to the drawing buffer.\nDoes not display anything until [accent]Draw Flush[] is used.
|
lst.draw = Dodaje operacje do buforu rysującego.\nNie wyświetla niczego dopóki [accent]Draw Flush[] nie jest użyte.
|
||||||
lst.drawflush = Flush queued [accent]Draw[] operations to a display.
|
lst.drawflush = Wyświetla oczekujące operacje z funkcji [accent]Draw[] na wyświetlaczu.
|
||||||
lst.printflush = Flush queued [accent]Print[] operations to a message block.
|
lst.printflush = Dodaje oczekujące operacje z funkcji [accent]Print[] do bloku wiadomości.
|
||||||
lst.getlink = Get a processor link by index. Starts at 0.
|
lst.getlink = Zdobywa połączenie procesora przez indeks. Zaczyna się od 0.
|
||||||
lst.control = Control a building.
|
lst.control = Kontroluje budynek.
|
||||||
lst.radar = Locate units around a building with range.
|
lst.radar = Lokalizuje jednostki wokół budynku w jego zasięgu.
|
||||||
lst.sensor = Get data from a building or unit.
|
lst.sensor = Zdobywa dane z budynku lub jednostki.
|
||||||
lst.set = Set a variable.
|
lst.set = Ustawia zmienną.
|
||||||
lst.operation = Perform an operation on 1-2 variables.
|
lst.operation = Wykonuje operację na 1-2 zmiennych.
|
||||||
lst.end = Jump to the top of the instruction stack.
|
lst.end = Przeskakuje na początek stosu instrukcji.
|
||||||
lst.jump = Conditionally jump to another statement.
|
lst.wait = Czeka określoną liczbę sekund.
|
||||||
lst.unitbind = Bind to the next unit of a type, and store it in [accent]@unit[].
|
lst.lookup = Znajduje typ przedmiotu/cieczy/jednostki/bloku poprzez ID.\nCałkowite zliczenia każdego typu można uzyskać za pomocą:\n[accent]@unitCount[] / [accent]@itemCount[] / [accent]@liquidCount[] / [accent]@blockCount[]
|
||||||
lst.unitcontrol = Control the currently bound unit.
|
lst.jump = Warunkowo przeskakuje do innego stanu.
|
||||||
lst.unitradar = Locate units around the currently bound unit.
|
lst.unitbind = Powiązuje z następną jednostką danego typu i przechowuje ją w [accent]@unit[].
|
||||||
lst.unitlocate = Locate a specific type of position/building anywhere on the map.\nRequires a bound unit.
|
lst.unitcontrol = Kontroluje obecnie powiązaną jednostkę.
|
||||||
|
lst.unitradar = Lokalizuje jednostki wokół obecnie powiązanej jednostki.
|
||||||
|
lst.unitlocate = Lokalizuje specyficzny typ pozycji/budynku gdziekolwiek na mapie.\nWymaga powiązanej jednostki.
|
||||||
|
|
||||||
logic.nounitbuild = [red]Unit building logic is not allowed here.
|
logic.nounitbuild = [red]Logika budowania jednostek nie jest tu dozwolona.
|
||||||
|
|
||||||
lenum.type = Type of building/unit.\ne.g. for any router, this will return [accent]@router[].\nNot a string.
|
lenum.type = Typ budynku/jednostki.\nnp. dla każdego rozdzielacza, zwróci [accent]@router[].\nNie jest łańcuchem znaków (string).
|
||||||
lenum.shoot = Shoot at a position.
|
lenum.shoot = Strzel w określoną pozycje.
|
||||||
lenum.shootp = Shoot at a unit/building with velocity prediction.
|
lenum.shootp = Strzel w jednostkę/budynek z przewidywaną prędkością.
|
||||||
lenum.configure = Building configuration, e.g. sorter item.
|
lenum.configure = Konfiguracja budowania, np. sortowany przedmiot w sortowniku.
|
||||||
lenum.enabled = Whether the block is enabled.
|
lenum.enabled = Sprawdza czy blok jest włączony.
|
||||||
|
|
||||||
laccess.color = Illuminator color.
|
laccess.color = Kolor iluminatora.
|
||||||
laccess.controller = Unit controller. If processor controlled, returns processor.\nIf in a formation, returns leader.\nOtherwise, returns the unit itself.
|
laccess.controller = Kontroler jednostki. Jeśli jest kontrolowana przez procesor, zwraca procesor.\nJeśli we formacji, zwracja przywódcę.\nW innym wypadku zwraca samą jednostkę.
|
||||||
laccess.dead = Whether a unit/building is dead or no longer valid.
|
laccess.dead = Sprawdza czy jednostka/budynek jest zniszczony lub już nie istnieje.
|
||||||
laccess.controlled = Returns:\n[accent]@ctrlProcessor[] if unit controller is processor\n[accent]@ctrlPlayer[] if unit/building controller is player\n[accent]@ctrlFormation[] if unit is in formation\nOtherwise, 0.
|
laccess.controlled = Zwraca:\n[accent]@ctrlProcessor[] jeśli kontrolerem jednostki jest procesor\n[accent]@ctrlPlayer[] jeśli kontrolerem jednostki/budynku jest gracz\n[accent]@ctrlFormation[] jeśli jednostka jest w formacji\nW innym wypadku 0.
|
||||||
laccess.commanded = [red]Deprecated. Will be removed![]\nUse [accent]controlled[] instead.
|
laccess.commanded = [red]Przestarzałe. Zostanie usunięte![]\nZamiast tego użyj [accent]controlled[].
|
||||||
|
laccess.progress = Postęp akcji, od 0 do 1.\nZwraca produkcję, przeładowanie wieżyczki lub postęp konstrukcji.
|
||||||
|
|
||||||
graphicstype.clear = Fill the display with a color.
|
graphicstype.clear = Wypełnia wyświetlacz kolorem.
|
||||||
graphicstype.color = Set color for next drawing operations.
|
graphicstype.color = Ustawia kolor następnych operacji rysujących.
|
||||||
graphicstype.stroke = Set line width.
|
graphicstype.stroke = Ustawia grubość linii.
|
||||||
graphicstype.line = Draw line segment.
|
graphicstype.line = Rysuje segment linii.
|
||||||
graphicstype.rect = Fill a rectangle.
|
graphicstype.rect = Wypełnia prostokąt.
|
||||||
graphicstype.linerect = Draw a rectangle outline.
|
graphicstype.linerect = Rysuje obwód prostokąta.
|
||||||
graphicstype.poly = Fill a regular polygon.
|
graphicstype.poly = Wypełnia regularny wielokąt.
|
||||||
graphicstype.linepoly = Draw a regular polygon outline.
|
graphicstype.linepoly = Rysuje obwód regularnego wielokąta.
|
||||||
graphicstype.triangle = Fill a triangle.
|
graphicstype.triangle = Wypełnia trójkąt.
|
||||||
graphicstype.image = Draw an image of some content.\nex: [accent]@router[] or [accent]@dagger[].
|
graphicstype.image = Rysuje ikonę jakiejś treści.\nnp. [accent]@router[] lub [accent]@dagger[].
|
||||||
|
|
||||||
lenum.always = Always true.
|
lenum.always = Zawsze prawda.
|
||||||
lenum.idiv = Integer division.
|
lenum.idiv = Dzielenie liczb całkowitych.
|
||||||
lenum.div = Division.\nReturns [accent]null[] on divide-by-zero.
|
lenum.div = Dzielenie.\nZwraca [accent]null[] w trakcie dzielenia przez zero.
|
||||||
lenum.mod = Modulo.
|
lenum.mod = Modulo.
|
||||||
lenum.equal = Equal. Coerces types.\nNon-null objects compared with numbers become 1, otherwise 0.
|
lenum.equal = Równość. Wymusza typ.\nNiezerowe objekty połączone z liczbami stają się 1, w innym wypadku 0.
|
||||||
lenum.notequal = Not equal. Coerces types.
|
lenum.notequal = Nierówność. Wymusza typ.
|
||||||
lenum.strictequal = Strict equality. Does not coerce types.\nCan be used to check for [accent]null[].
|
lenum.strictequal = Ścisła równość. Nie wymusza typów.\nMoże być użyte do wykrycia [accent]null[].
|
||||||
lenum.shl = Bit-shift left.
|
lenum.shl = Przesunięcie bitowe w lewo.
|
||||||
lenum.shr = Bit-shift right.
|
lenum.shr = Przesunięcie bitowe w prawo.
|
||||||
lenum.or = Bitwise OR.
|
lenum.or = Bitowe OR (lub).
|
||||||
lenum.land = Logical AND.
|
lenum.land = Logiczne AND (i).
|
||||||
lenum.and = Bitwise AND.
|
lenum.and = Bitowe AND (i).
|
||||||
lenum.not = Bitwise flip.
|
lenum.not = Bitowe NOT.
|
||||||
lenum.xor = Bitwise XOR.
|
lenum.xor = Bitowe XOR.
|
||||||
|
|
||||||
|
lenum.min = Minimum dwóch liczb.
|
||||||
|
lenum.max = Maksimum dwóch liczb.
|
||||||
|
lenum.angle = Kąt wektoru w stopniach.
|
||||||
|
lenum.len = Długość wektoru.
|
||||||
|
|
||||||
|
lenum.sin = Sinus, w stopniach.
|
||||||
|
lenum.cos = Cosinus, w stopniach.
|
||||||
|
lenum.tan = Tangens, w stopniach.
|
||||||
|
|
||||||
lenum.min = Minimum of two numbers.
|
|
||||||
lenum.max = Maximum of two numbers.
|
|
||||||
lenum.angle = Angle of vector in degrees.
|
|
||||||
lenum.len = Length of vector.
|
|
||||||
lenum.sin = Sine, in degrees.
|
|
||||||
lenum.cos = Cosine, in degrees.
|
|
||||||
lenum.tan = Tangent, in degrees.
|
|
||||||
#not a typo, look up 'range notation'
|
#not a typo, look up 'range notation'
|
||||||
lenum.rand = Random decimal in range [0, value).
|
lenum.rand = Losowa liczba w przedziale [0, wartość).
|
||||||
lenum.log = Natural logarithm (ln).
|
lenum.log = Logarytm naturalny (ln).
|
||||||
lenum.log10 = Base 10 logarithm.
|
lenum.log10 = Logarytm o podstawie 10.
|
||||||
lenum.noise = 2D simplex noise.
|
lenum.noise = Szum simplex 2D.
|
||||||
lenum.abs = Absolute value.
|
lenum.abs = Wartość bezwzględna.
|
||||||
lenum.sqrt = Square root.
|
lenum.sqrt = Pierwiastek kwadratowy.
|
||||||
|
|
||||||
lenum.any = Any unit.
|
lenum.any = Dowolna jednostka.
|
||||||
lenum.ally = Ally unit.
|
lenum.ally = Sojusznicza jednostka.
|
||||||
lenum.attacker = Unit with a weapon.
|
lenum.attacker = Jednostka z bronią.
|
||||||
lenum.enemy = Enemy unit.
|
lenum.enemy = Przeciwnik.
|
||||||
lenum.boss = Guardian unit.
|
lenum.boss = Strażnik.
|
||||||
lenum.flying = Flying unit.
|
lenum.flying = Latająca jednostka.
|
||||||
lenum.ground = Ground unit.
|
lenum.ground = Jednostka lądowa.
|
||||||
lenum.player = Unit controlled by a player.
|
lenum.player = Jednostka kontrolowana przez gracza.
|
||||||
|
|
||||||
lenum.ore = Ore deposit.
|
lenum.ore = Depozyt rudy.
|
||||||
lenum.damaged = Damaged ally building.
|
lenum.damaged = Uszkodzony sojuszniczy budynek.
|
||||||
lenum.spawn = Enemy spawn point.\nMay be a core or a position.
|
lenum.spawn = Punkt zrzutu przeciwnika.\nMoże być rdzeniem lub pozycją.
|
||||||
lenum.building = Building in a specific group.
|
lenum.building = Budynek ze specyficznej grupy.
|
||||||
|
|
||||||
lenum.core = Any core.
|
lenum.core = Dowolny rdzeń.
|
||||||
lenum.storage = Storage building, e.g. Vault.
|
lenum.storage = Budynek przechowujący, np. Magazyn.
|
||||||
lenum.generator = Buildings that generate power.
|
lenum.generator = Budynki generujące prąd.
|
||||||
lenum.factory = Buildings that transform resources.
|
lenum.factory = Budynki przetwarzające surowce.
|
||||||
lenum.repair = Repair points.
|
lenum.repair = Punkty naprawy.
|
||||||
lenum.rally = Command center.
|
lenum.rally = Centrum dowodzenia.
|
||||||
lenum.battery = Any battery.
|
lenum.battery = Dowolna bateria.
|
||||||
lenum.resupply = Resupply points.\nOnly relevant when [accent]"Unit Ammo"[] is enabled.
|
lenum.resupply = Punkty uzupełniające.\nMa znaczenie tylko gdy [accent]"Unit Ammo"[] jest załączone.
|
||||||
lenum.reactor = Impact/Thorium reactor.
|
lenum.reactor = Reaktor uderzeniowy/torowy.
|
||||||
lenum.turret = Any turret.
|
lenum.turret = Dowolna wieżyczka.
|
||||||
|
|
||||||
sensor.in = The building/unit to sense.
|
sensor.in = Wykrywany budynek/jednostka.
|
||||||
|
|
||||||
radar.from = Building to sense from.\nSensor range is limited by building range.
|
radar.from = Budynek wykrywający.\nZasięg czujnika jest limitowany przez zasięg budynku.
|
||||||
radar.target = Filter for units to sense.
|
radar.target = Filtr wykrywanych jednostek.
|
||||||
radar.and = Additional filters.
|
radar.and = Dodatkowe filtry.
|
||||||
radar.order = Sorting order. 0 to reverse.
|
radar.order = Kolejność sortowania. 0 aby odwrócić.
|
||||||
radar.sort = Metric to sort results by.
|
radar.sort = Wartość, według której będą sortowane wyniki.
|
||||||
radar.output = Variable to write output unit to.
|
radar.output = Zmienna, do której zostanie przypisana jednostka wyjściowa.
|
||||||
|
|
||||||
unitradar.target = Filter for units to sense.
|
unitradar.target = Filtr wykrywanych jednostek.
|
||||||
unitradar.and = Additional filters.
|
unitradar.and = Dodatkowe filtry.
|
||||||
unitradar.order = Sorting order. 0 to reverse.
|
unitradar.order = Kolejność sortowania. 0 aby odwrócić.
|
||||||
unitradar.sort = Metric to sort results by.
|
unitradar.sort = Wartość, według której będą sortowane wyniki.
|
||||||
unitradar.output = Variable to write output unit to.
|
unitradar.output = Zmienna, do której zostanie przypisana jednostka wyjściowa.
|
||||||
|
|
||||||
control.of = Building to control.
|
control.of = Kontrolowany budynek.
|
||||||
control.unit = Unit/building to aim at.
|
control.unit = Jednostka/budynek, w którą ma celować.
|
||||||
control.shoot = Whether to shoot.
|
control.shoot = Strzelanie.
|
||||||
|
|
||||||
unitlocate.enemy = Whether to locate enemy buildings.
|
unitlocate.enemy = Lokalizowanie budynków przeciwnika.
|
||||||
unitlocate.found = Whether the object was found.
|
unitlocate.found = Znalezienie obiektu.
|
||||||
unitlocate.building = Output variable for located building.
|
unitlocate.building = Zmienna wyjściowa dla zlokalizowanego budynku.
|
||||||
unitlocate.outx = Output X coordinate.
|
unitlocate.outx = Wyjściowy koordynat X.
|
||||||
unitlocate.outy = Output Y coordinate.
|
unitlocate.outy = Wyjściowy koordynat Y.
|
||||||
unitlocate.group = Building group to look for.
|
unitlocate.group = Grupa szukanych budynków.
|
||||||
|
|
||||||
lenum.idle = Don't move, but keep building/mining.\nThe default state.
|
lenum.idle = Przestań się poruszać, jednak nadal buduj/wydobywaj.\nDomyślny stan.
|
||||||
lenum.stop = Stop moving/mining/building.
|
lenum.stop = Przestań poruszać się/kopać/budować.
|
||||||
lenum.move = Move to exact position.
|
lenum.move = Przemieść się do określonej pozycji.
|
||||||
lenum.approach = Approach a position with a radius.
|
lenum.approach = Podejdź do pozycji w promieniu.
|
||||||
lenum.pathfind = Pathfind to the enemy spawn.
|
lenum.pathfind = Odnajdź ścieżkę do punktu zrzutu przeciwników.
|
||||||
lenum.target = Shoot a position.
|
lenum.target = Strzel w określoną pozycje.
|
||||||
lenum.targetp = Shoot a target with velocity prediction.
|
lenum.targetp = Strzel w jednostkę/budynek z przewidywaną prędkością.
|
||||||
lenum.itemdrop = Drop an item.
|
lenum.itemdrop = Upuść przedmiot.
|
||||||
lenum.itemtake = Take an item from a building.
|
lenum.itemtake = Zabierz przedmiot z budynku.
|
||||||
lenum.paydrop = Drop current payload.
|
lenum.paydrop = Upuść obecny ładunek.
|
||||||
lenum.paytake = Pick up payload at current location.
|
lenum.paytake = Podnieś ładunek z obecnego miejsca.
|
||||||
lenum.flag = Numeric unit flag.
|
lenum.flag = Numeryczny znacznik jednostki.
|
||||||
lenum.mine = Mine at a position.
|
lenum.mine = Kop na danej pozycji.
|
||||||
lenum.build = Build a structure.
|
lenum.build = Buduj strukturę.
|
||||||
lenum.getblock = Fetch a building and type at coordinates.\nUnit must be in range of position.\nSolid non-buildings will have the type [accent]@solid[].
|
lenum.getblock = Pobierz budynek i typ z koordynatów.\nJednostka musi być w zasięgu pozycji.\nSolidne niebudynki będą miały typ [accent]@solid[].
|
||||||
lenum.within = Check if unit is near a position.
|
lenum.within = Sprawdź czy jednostka jest w pobliżu pozycji.
|
||||||
lenum.boost = Start/stop boosting.
|
lenum.boost = Zacznij/zakończ boostować.
|
||||||
|
|||||||
@@ -100,6 +100,7 @@ joingame = Intră în Joc
|
|||||||
customgame = Personalizat
|
customgame = Personalizat
|
||||||
newgame = Joc Nou
|
newgame = Joc Nou
|
||||||
none.found = [lightgray]<nu s-a găsit nimic>
|
none.found = [lightgray]<nu s-a găsit nimic>
|
||||||
|
none.inmap = [lightgray]<niciunul pe hartă>
|
||||||
none = <nimic>
|
none = <nimic>
|
||||||
minimap = Minihartă
|
minimap = Minihartă
|
||||||
position = Poziție
|
position = Poziție
|
||||||
@@ -564,7 +565,8 @@ weather.fog.name = Ceață
|
|||||||
sectors.unexplored = [lightgray]Neexplorat
|
sectors.unexplored = [lightgray]Neexplorat
|
||||||
sectors.resources = Resurse:
|
sectors.resources = Resurse:
|
||||||
sectors.production = Producție:
|
sectors.production = Producție:
|
||||||
sectors.export = Export:
|
sectors.export = Exportă:
|
||||||
|
sectors.import = Importă:
|
||||||
sectors.time = Timp:
|
sectors.time = Timp:
|
||||||
sectors.threat = Amenințare:
|
sectors.threat = Amenințare:
|
||||||
sectors.wave = Valul:
|
sectors.wave = Valul:
|
||||||
@@ -643,7 +645,7 @@ 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.overclock.name = Suprasolicitat
|
||||||
status.shocked.name = Șoc
|
status.shocked.name = Electrocutat
|
||||||
status.blasted.name = Explozie
|
status.blasted.name = Explozie
|
||||||
status.unmoving.name = Nemișcat
|
status.unmoving.name = Nemișcat
|
||||||
|
|
||||||
@@ -724,7 +726,7 @@ stat.maxconsecutive = Maxim Consecutive
|
|||||||
stat.buildcost = Cost Construcție
|
stat.buildcost = Cost Construcție
|
||||||
stat.inaccuracy = Inacuratețe
|
stat.inaccuracy = Inacuratețe
|
||||||
stat.shots = Lovituri
|
stat.shots = Lovituri
|
||||||
stat.reload = Lovituri/Secundă
|
stat.reload = Rata de Tragere
|
||||||
stat.ammo = Muniție
|
stat.ammo = Muniție
|
||||||
stat.shieldhealth = Viață Scut
|
stat.shieldhealth = Viață Scut
|
||||||
stat.cooldowntime = Timp de Reîncărcare
|
stat.cooldowntime = Timp de Reîncărcare
|
||||||
@@ -793,10 +795,10 @@ bullet.damage = [stat]{0}[lightgray] forță
|
|||||||
bullet.splashdamage = [stat]{0}[lightgray] forță pe raza ~[stat] {1}[lightgray] pătrate
|
bullet.splashdamage = [stat]{0}[lightgray] forță pe raza ~[stat] {1}[lightgray] pătrate
|
||||||
bullet.incendiary = [stat]incendiar
|
bullet.incendiary = [stat]incendiar
|
||||||
bullet.homing = [stat]cu radar
|
bullet.homing = [stat]cu radar
|
||||||
bullet.frag = [stat]se sparge
|
bullet.frags = [stat]{0}[lightgray]x fragmente:
|
||||||
bullet.lightning = [stat]{0}[lightgray]x fulgere ~ [stat]{1}[lightgray] forță
|
bullet.lightning = [stat]{0}[lightgray]x fulgere ~ [stat]{1}[lightgray] forță
|
||||||
bullet.buildingdamage = [stat]{0}%[lightgray] forță/clădire
|
bullet.buildingdamage = [stat]{0}%[lightgray] forță/clădire
|
||||||
bullet.knockback = [stat]{0} [lightgray]împingere
|
bullet.knockback = [stat]{0}[lightgray] împingere
|
||||||
bullet.pierce = [stat]{0}[lightgray]x penetrează
|
bullet.pierce = [stat]{0}[lightgray]x penetrează
|
||||||
bullet.infinitepierce = [stat]penetrează
|
bullet.infinitepierce = [stat]penetrează
|
||||||
bullet.healpercent = [stat]{0}[lightgray]% reparare
|
bullet.healpercent = [stat]{0}[lightgray]% reparare
|
||||||
@@ -806,6 +808,7 @@ bullet.reload = [stat]{0}[lightgray]x lovituri
|
|||||||
unit.blocks = blocuri
|
unit.blocks = blocuri
|
||||||
unit.blockssquared = blocuri²
|
unit.blockssquared = blocuri²
|
||||||
unit.powersecond = electricitate/secundă
|
unit.powersecond = electricitate/secundă
|
||||||
|
unit.tilessecond = pătrate/secundă
|
||||||
unit.liquidsecond = unități lichid/secundă
|
unit.liquidsecond = unități lichid/secundă
|
||||||
unit.itemssecond = materiale/secundă
|
unit.itemssecond = materiale/secundă
|
||||||
unit.liquidunits = unități lichid
|
unit.liquidunits = unități lichid
|
||||||
@@ -821,7 +824,7 @@ unit.shieldhealth = viață scut
|
|||||||
unit.items = materiale
|
unit.items = materiale
|
||||||
unit.thousands = mii
|
unit.thousands = mii
|
||||||
unit.millions = mil
|
unit.millions = mil
|
||||||
unit.billions = b
|
unit.billions = mld
|
||||||
unit.pershot = /lovitură
|
unit.pershot = /lovitură
|
||||||
category.purpose = Utilizare
|
category.purpose = Utilizare
|
||||||
category.general = General
|
category.general = General
|
||||||
@@ -844,7 +847,6 @@ setting.doubletapmine.name = Dublu-Click pt a Mina
|
|||||||
setting.modcrashdisable.name = Dezactivează Modurile în Cazul unui Crash la Pornire
|
setting.modcrashdisable.name = Dezactivează Modurile în Cazul unui Crash la Pornire
|
||||||
setting.animatedwater.name = Suprafețe Animate
|
setting.animatedwater.name = Suprafețe Animate
|
||||||
setting.animatedshields.name = Scuturi Animate
|
setting.animatedshields.name = Scuturi Animate
|
||||||
setting.antialias.name = Antialiasing[lightgray] (necesită repornire)[]
|
|
||||||
setting.playerindicators.name = Indicatori Jucător
|
setting.playerindicators.name = Indicatori Jucător
|
||||||
setting.indicators.name = Indicatori Inamic
|
setting.indicators.name = Indicatori Inamic
|
||||||
setting.autotarget.name = Auto-Țintire
|
setting.autotarget.name = Auto-Țintire
|
||||||
@@ -853,7 +855,8 @@ setting.touchscreen.name = Controale Touchscreen
|
|||||||
setting.fpscap.name = FPS Maxim
|
setting.fpscap.name = FPS Maxim
|
||||||
setting.fpscap.none = Niciuna
|
setting.fpscap.none = Niciuna
|
||||||
setting.fpscap.text = FPS (0)
|
setting.fpscap.text = FPS (0)
|
||||||
setting.uiscale.name = Scară Interfață [lightgray] (repornirea necesară)[]
|
setting.uiscale.name = Scară Interfață
|
||||||
|
setting.uiscale.description = Repornire necesară pt a aplica schimbările.
|
||||||
setting.swapdiagonal.name = Plasează Mereu Diagonal
|
setting.swapdiagonal.name = Plasează Mereu Diagonal
|
||||||
setting.difficulty.training = Antrenament
|
setting.difficulty.training = Antrenament
|
||||||
setting.difficulty.easy = Ușor
|
setting.difficulty.easy = Ușor
|
||||||
@@ -871,7 +874,8 @@ setting.saveinterval.name = Interval de Salvare
|
|||||||
setting.seconds = {0} secunde
|
setting.seconds = {0} secunde
|
||||||
setting.milliseconds = {0} millisecunde
|
setting.milliseconds = {0} millisecunde
|
||||||
setting.fullscreen.name = Ecran Complet
|
setting.fullscreen.name = Ecran Complet
|
||||||
setting.borderlesswindow.name = Fereastră Fără Margine[lightgray] (repornirea poate fi necesară)
|
setting.borderlesswindow.name = Fereastră Fără Margine
|
||||||
|
setting.borderlesswindow.description = Repornirea poate fi necesară pt a aplica schimbările.
|
||||||
setting.fps.name = Vezi FPS & Ping
|
setting.fps.name = Vezi FPS & Ping
|
||||||
setting.smoothcamera.name = Cameră Graduală
|
setting.smoothcamera.name = Cameră Graduală
|
||||||
setting.vsync.name = VSync
|
setting.vsync.name = VSync
|
||||||
@@ -994,6 +998,7 @@ rules.wavetimer = Valuri pe Timp
|
|||||||
rules.waves = Valuri
|
rules.waves = Valuri
|
||||||
rules.attack = Modul Atac
|
rules.attack = Modul Atac
|
||||||
rules.buildai = AI-ul Construiește
|
rules.buildai = AI-ul Construiește
|
||||||
|
rules.cleanupdeadteams = Îndepărtează Clădirile Echipelor Învinse (PvP)
|
||||||
rules.corecapture = Capturează Nucleele Distruse
|
rules.corecapture = Capturează Nucleele Distruse
|
||||||
rules.enemyCheat = Resurse infinite pt AI (echipa roșie)
|
rules.enemyCheat = Resurse infinite pt AI (echipa roșie)
|
||||||
rules.blockhealthmultiplier = Multiplicatorul Vieții Blocurilor
|
rules.blockhealthmultiplier = Multiplicatorul Vieții Blocurilor
|
||||||
@@ -1278,7 +1283,7 @@ block.surge-wall.name = Perete de Aliaj
|
|||||||
block.surge-wall-large.name = Perete Mare de Aliaj
|
block.surge-wall-large.name = Perete Mare de Aliaj
|
||||||
block.cyclone.name = Ciclon
|
block.cyclone.name = Ciclon
|
||||||
block.fuse.name = Fuse
|
block.fuse.name = Fuse
|
||||||
block.shock-mine.name = Mină cu Șocuri
|
block.shock-mine.name = Mină cu Electroșocuri
|
||||||
block.overdrive-projector.name = Proiector de Suprasolicitare
|
block.overdrive-projector.name = Proiector de Suprasolicitare
|
||||||
block.force-projector.name = Proiector de Forță
|
block.force-projector.name = Proiector de Forță
|
||||||
block.arc.name = Arc
|
block.arc.name = Arc
|
||||||
@@ -1288,7 +1293,6 @@ block.meltdown.name = Meltdown
|
|||||||
block.foreshadow.name = Foreshadow
|
block.foreshadow.name = Foreshadow
|
||||||
block.container.name = Container
|
block.container.name = Container
|
||||||
block.launch-pad.name = Platformă de Lansare
|
block.launch-pad.name = Platformă de Lansare
|
||||||
block.launch-pad-large.name = Platformă de Lansare Mare
|
|
||||||
block.segment.name = Segment
|
block.segment.name = Segment
|
||||||
block.command-center.name = Centru de Comandă
|
block.command-center.name = Centru de Comandă
|
||||||
block.ground-factory.name = Fabrică Unități Artilerie
|
block.ground-factory.name = Fabrică Unități Artilerie
|
||||||
@@ -1348,6 +1352,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.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.
|
||||||
@@ -1399,6 +1404,7 @@ liquid.slag.description = Rafinată în separatoare înapoi în materialele cons
|
|||||||
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] Structuri Abandonate
|
||||||
block.resupply-point.description = Realimentează unitățile din apropiere cu muniție de cupru. Nu este compatibil cu unitățile care se încarcă din baterii.
|
block.resupply-point.description = Realimentează unitățile din apropiere cu muniție de cupru. Nu este compatibil cu unitățile care se încarcă din baterii.
|
||||||
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ă.
|
||||||
@@ -1457,7 +1463,7 @@ block.router.details = Un rău necesar. Nu folosi niciodată pt a introduce mate
|
|||||||
block.distributor.description = Distribuie materialele primite în alte 7 direcții în mod egal.
|
block.distributor.description = Distribuie materialele primite în alte 7 direcții în mod egal.
|
||||||
block.overflow-gate.description = Transportă materialele doar la stânga și dreapta dacă drumul din față este blocat.
|
block.overflow-gate.description = Transportă materialele doar la stânga și dreapta dacă drumul din față este blocat.
|
||||||
block.underflow-gate.description = Opusul porții de revărsare. Transportă materialele în față dacă benzile din stânga și dreapta sunt blocate.
|
block.underflow-gate.description = Opusul porții de revărsare. Transportă materialele în față dacă benzile din stânga și dreapta sunt blocate.
|
||||||
block.mass-driver.description = Dispozitiv folosit pt transportul materialelor pe distanțe mari. Adună mai multe materiale și apoi le lansează până la un alt distributor în masă pe o rază mare.
|
block.mass-driver.description = Structură de transport al materialelor pe distanțe mari. Adună mai multe materiale și apoi le lansează către un alt distributor în masă.
|
||||||
block.mechanical-pump.description = Pompează lichide din mediul înconjurător. Nu necesită electricitate.
|
block.mechanical-pump.description = Pompează lichide din mediul înconjurător. Nu necesită electricitate.
|
||||||
block.rotary-pump.description = Pompează lichide din mediul înconjurător. Necesită electricitate.
|
block.rotary-pump.description = Pompează lichide din mediul înconjurător. Necesită electricitate.
|
||||||
block.thermal-pump.description = Pompează lichide din mediul înconjurător.
|
block.thermal-pump.description = Pompează lichide din mediul înconjurător.
|
||||||
@@ -1543,6 +1549,8 @@ block.memory-bank.description = Stochează informație pt un procesor. Capacitat
|
|||||||
block.logic-display.description = Afișează grafica transmisă de un procesor logic.
|
block.logic-display.description = Afișează grafica transmisă de un procesor logic.
|
||||||
block.large-logic-display.description = Afișează grafica transmisă de un procesor logic.
|
block.large-logic-display.description = Afișează grafica transmisă de un procesor logic.
|
||||||
block.interplanetary-accelerator.description = Un turn masiv cu o armă railgun electromagnetică. Accelerează nucleele la viteză cosmică pt lansare interplanetară.
|
block.interplanetary-accelerator.description = Un turn masiv cu o armă railgun electromagnetică. Accelerează nucleele la viteză cosmică pt lansare interplanetară.
|
||||||
|
block.repair-turret.description = Repară încontinuu cea mai deteriorată unitate din vecinătate. Poate accepta răcitor.
|
||||||
|
block.payload-propulsion-tower.description = Structură de transport al încărcăturii pe distanțe mari. Lansează încărcătura către un alt turn propulsor conectat.
|
||||||
|
|
||||||
unit.dagger.description = Trage cu gloanțe standard către toți inamicii din apropiere.
|
unit.dagger.description = Trage cu gloanțe standard către toți inamicii din apropiere.
|
||||||
unit.mace.description = Trage cu jeturi de flacără aprinsă către toți inamicii din apropiere.
|
unit.mace.description = Trage cu jeturi de flacără aprinsă către toți inamicii din apropiere.
|
||||||
@@ -1577,6 +1585,11 @@ unit.omura.description = Trage cu un railgun cu gloanțe care penetrează scutur
|
|||||||
unit.alpha.description = Apără nucleul Shard de inamici. Construiește structuri.
|
unit.alpha.description = Apără nucleul Shard de inamici. Construiește structuri.
|
||||||
unit.beta.description = Apără nucleul Foundation de inamici. Construiește structuri.
|
unit.beta.description = Apără nucleul Foundation de inamici. Construiește structuri.
|
||||||
unit.gamma.description = Apără nucleul Core de inamici. Construiește structuri.
|
unit.gamma.description = Apără nucleul Core de inamici. Construiește structuri.
|
||||||
|
unit.retusa.description = Plasează mine de proximitate. Repară unitățile aliate.
|
||||||
|
unit.oxynoe.description = Trage cu jeturi de flacără către inamicii din apropiere, reparând structurile aliate. Țintește proiectilele inamice din apropiere cu o armă care le deteriorează și distruge.
|
||||||
|
unit.cyerce.description = Trage cu bombe cu dispersie echipate cu radar către inamici. Repară unitățile aliate.
|
||||||
|
unit.aegires.description = Electrocutează toate unitățile și structurile inamice care intră în câmpul său de energie. Repară toți aliații.
|
||||||
|
unit.navanax.description = Trage cu proiectile EMP explozive, lovind rețelele electrice inamice cu o forță semnificativă și reparând structurile aliate. Topește inamicii din apropiere cu cele 4 arme autonome cu laser.
|
||||||
|
|
||||||
lst.read = Citește un număr dintr-o celulă de memorie conectată.
|
lst.read = Citește un număr dintr-o celulă de memorie conectată.
|
||||||
lst.write = Scrie un număr într-o celulă de memorie conectată.
|
lst.write = Scrie un număr într-o celulă de memorie conectată.
|
||||||
@@ -1591,6 +1604,8 @@ lst.sensor = Obține date de la o clădire sau unitate.
|
|||||||
lst.set = Setează o variabilă.
|
lst.set = Setează o variabilă.
|
||||||
lst.operation = Efectuează o operație pe 1-2 variabile.
|
lst.operation = Efectuează o operație pe 1-2 variabile.
|
||||||
lst.end = Sari la începutul listei de instrucțiuni.
|
lst.end = Sari la începutul listei de instrucțiuni.
|
||||||
|
lst.wait = Așteaptă un anumit număr de secunde.
|
||||||
|
lst.lookup = Caută un tip de material/lichid/unitate/bloc după ID.\nNumărul total din fiecare tip poate fi accesat cu:\n[accent]@unitCount[] / [accent]@itemCount[] / [accent]@liquidCount[] / [accent]@blockCount[]
|
||||||
lst.jump = Dacă condiția este adevărată, mergi la o altă instrucțiune.
|
lst.jump = Dacă condiția este adevărată, mergi la o altă instrucțiune.
|
||||||
lst.unitbind = Controlează următoarea unitate de tipul selectat și reține-o în [accent]@unit[].
|
lst.unitbind = Controlează următoarea unitate de tipul selectat și reține-o în [accent]@unit[].
|
||||||
lst.unitcontrol = Controlează unitatea controlată de procesor.
|
lst.unitcontrol = Controlează unitatea controlată de procesor.
|
||||||
|
|||||||
@@ -845,7 +845,6 @@ 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 = Автозахват цели
|
||||||
@@ -854,7 +853,7 @@ 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.swapdiagonal.name = Всегда диагональное размещение
|
setting.swapdiagonal.name = Всегда диагональное размещение
|
||||||
setting.difficulty.training = Обучение
|
setting.difficulty.training = Обучение
|
||||||
setting.difficulty.easy = Лёгкая
|
setting.difficulty.easy = Лёгкая
|
||||||
@@ -872,7 +871,7 @@ 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.fps.name = Показывать FPS и пинг
|
setting.fps.name = Показывать FPS и пинг
|
||||||
setting.smoothcamera.name = Плавная камера
|
setting.smoothcamera.name = Плавная камера
|
||||||
setting.vsync.name = Вертикальная синхронизация
|
setting.vsync.name = Вертикальная синхронизация
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ discord = เข้าร่วมเซิร์ฟเวอร์ Discord ข
|
|||||||
link.discord.description = พื้นที่พูดคุยอย่างเป็นทางการของ Mindustry
|
link.discord.description = พื้นที่พูดคุยอย่างเป็นทางการของ Mindustry
|
||||||
link.reddit.description = Subreddit ของ Mindustry
|
link.reddit.description = Subreddit ของ Mindustry
|
||||||
link.github.description = แหล่งโค้ดของเกม
|
link.github.description = แหล่งโค้ดของเกม
|
||||||
link.changelog.description = รายการอัพเดต
|
link.changelog.description = รายการอัปเดต
|
||||||
link.dev-builds.description = เวอร์ชั่นระหว่างพัฒนา (ไม่เสถียร)
|
link.dev-builds.description = เวอร์ชั่นระหว่างพัฒนา (ไม่เสถียร)
|
||||||
link.trello.description = บอร์ด Trello อย่างเป็นทางการสำหรับฟีเจอร์ต่างๆ ที่วางแผนไว้
|
link.trello.description = บอร์ด Trello อย่างเป็นทางการสำหรับฟีเจอร์ต่างๆ ที่วางแผนไว้
|
||||||
link.itch.io.description = หน้าเว็บ itch.io สำหรับดาวน์โหลดบน PC
|
link.itch.io.description = หน้าเว็บ itch.io สำหรับดาวน์โหลดบน PC
|
||||||
@@ -36,10 +36,10 @@ load.scripts = สคริปต์
|
|||||||
|
|
||||||
be.update = เวอร์ชั่นรุ่นพัฒนาล่าสุดออกแล้ว:
|
be.update = เวอร์ชั่นรุ่นพัฒนาล่าสุดออกแล้ว:
|
||||||
be.update.confirm = ดาวน์โหลดเวอร์ชั่นใหม่แล้วรีสตาร์ทเลยไหม?
|
be.update.confirm = ดาวน์โหลดเวอร์ชั่นใหม่แล้วรีสตาร์ทเลยไหม?
|
||||||
be.updating = กำลังอัพเดต...
|
be.updating = กำลังอัปเดต...
|
||||||
be.ignore = ยกเลิก
|
be.ignore = ยกเลิก
|
||||||
be.noupdates = ไม่พบอัพเดตใหม่
|
be.noupdates = ไม่พบอัปเดตใหม่
|
||||||
be.check = ตรวจหาอัพเดตใหม่
|
be.check = ตรวจหาอัปเดตใหม่
|
||||||
|
|
||||||
mods.browser = ค้นหาม็อด
|
mods.browser = ค้นหาม็อด
|
||||||
mods.browser.selected = เลือกแล้ว
|
mods.browser.selected = เลือกแล้ว
|
||||||
@@ -93,7 +93,7 @@ level.highscore = คะแนนสูงสุด: [accent]{0}
|
|||||||
level.mode = เกมโหมด:
|
level.mode = เกมโหมด:
|
||||||
coreattack = < แกนกลางถูกโจมตี! >
|
coreattack = < แกนกลางถูกโจมตี! >
|
||||||
nearpoint = [[ [scarlet]ออกจากจุดเกิดด่วน![] ]\nการทำลายล้างกำลังใกล้เข้ามา
|
nearpoint = [[ [scarlet]ออกจากจุดเกิดด่วน![] ]\nการทำลายล้างกำลังใกล้เข้ามา
|
||||||
database = ฐานข้อมูลหลัก
|
database = ฐานข้อมูลแกนกลาง
|
||||||
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 = ปิด
|
||||||
@@ -155,7 +156,7 @@ mod.jarwarn = [scarlet]ม็อดไฟล์ JAR นั้นค่อนข
|
|||||||
mod.item.remove = ไอเท็มนี้เป็นส่วนหนึ่งของม็อด [accent]'{0}'[] หากต้องการนำออก กรุณาถอนการติดตั้งม็อดนั้น
|
mod.item.remove = ไอเท็มนี้เป็นส่วนหนึ่งของม็อด [accent]'{0}'[] หากต้องการนำออก กรุณาถอนการติดตั้งม็อดนั้น
|
||||||
mod.remove.confirm = ม็อดนี้จะถูกลบ
|
mod.remove.confirm = ม็อดนี้จะถูกลบ
|
||||||
mod.author = [lightgray]ผู้สร้าง:[] {0}
|
mod.author = [lightgray]ผู้สร้าง:[] {0}
|
||||||
mod.missing = เซฟนี้มีม็อดที่คุณพึ่งอัพเดตหรือไม่ได้ติดตั้งแล้ว อาจทำให้เซฟเสีย คุณแน่จะหรือว่าจะโหลดเซฟนี้?\n[lightgray]ม็อดที่ใช้:\n{0}
|
mod.missing = เซฟนี้มีม็อดที่คุณพึ่งอัปเดตหรือไม่ได้ติดตั้งแล้ว อาจทำให้เซฟเสีย คุณแน่จะหรือว่าจะโหลดเซฟนี้?\n[lightgray]ม็อดที่ใช้:\n{0}
|
||||||
mod.preview.missing = ก่อนที่จะนำม็อดไปลงในเวิร์กช็อป คุณต้องใส่รูปพรีวิวก่อน\nใส่รูปชื่อ[accent] preview.png[] ลงในโฟลเดอร์ของม็อดแล้วลองอีกครั้ง
|
mod.preview.missing = ก่อนที่จะนำม็อดไปลงในเวิร์กช็อป คุณต้องใส่รูปพรีวิวก่อน\nใส่รูปชื่อ[accent] preview.png[] ลงในโฟลเดอร์ของม็อดแล้วลองอีกครั้ง
|
||||||
mod.folder.missing = ม็อดที่อยู่ในรูปแบบโฟลเดอร์เท่านั้นที่สามารถลงในเวิร์กช็อปได้\nunzip ไฟล์แล้วลบไฟล์ zip เก่า แล้วรีสตาร์ทเกมหรือรีโหลดม็อด
|
mod.folder.missing = ม็อดที่อยู่ในรูปแบบโฟลเดอร์เท่านั้นที่สามารถลงในเวิร์กช็อปได้\nunzip ไฟล์แล้วลบไฟล์ zip เก่า แล้วรีสตาร์ทเกมหรือรีโหลดม็อด
|
||||||
mod.scripts.disable = เครื่องของคุณไม่รองรับม็อดที่มีสคริปต์ คุณจำเป็นต้องปิดม็อดเหล่านี้ก่อนจึงจะสามารถเล่นได้
|
mod.scripts.disable = เครื่องของคุณไม่รองรับม็อดที่มีสคริปต์ คุณจำเป็นต้องปิดม็อดเหล่านี้ก่อนจึงจะสามารถเล่นได้
|
||||||
@@ -166,10 +167,10 @@ noname = ใส่ชื่อ[accent]ผู้เล่น[]ก่อน
|
|||||||
planetmap = แผนที่ดาวเคราะห์
|
planetmap = แผนที่ดาวเคราะห์
|
||||||
launchcore = ส่งแกนกลาง
|
launchcore = ส่งแกนกลาง
|
||||||
filename = ชื่อไฟล์:
|
filename = ชื่อไฟล์:
|
||||||
unlocked = เนื้อหาใหม่ปลดล็อค!
|
unlocked = เนื้อหาใหม่ปลดล็อก!
|
||||||
available = มีการวิจัยใหม่พร้อมปลดล็อก!
|
available = มีการวิจัยใหม่พร้อมปลดล็อก!
|
||||||
completed = [accent]วิจัยแล้ว
|
completed = [accent]วิจัยแล้ว
|
||||||
techtree = การวิจัย
|
techtree = ต้นไม้แห่งเทคโนโลยี
|
||||||
research.legacy = พบข้อมูลการวิจัยของเวอร์ชั่น [accent]5.0[]\nคุณต้องการ[accent]โหลดข้อมูล[]หรือ[accent]ทิ้งข้อมูลไป[]และเริ่มต้นวิจัยในแคมเปญใหม่ (แนะนำ)
|
research.legacy = พบข้อมูลการวิจัยของเวอร์ชั่น [accent]5.0[]\nคุณต้องการ[accent]โหลดข้อมูล[]หรือ[accent]ทิ้งข้อมูลไป[]และเริ่มต้นวิจัยในแคมเปญใหม่ (แนะนำ)
|
||||||
research.load = โหลด
|
research.load = โหลด
|
||||||
research.discard = ทอดทิ้ง
|
research.discard = ทอดทิ้ง
|
||||||
@@ -186,19 +187,19 @@ server.kicked.kick = คุณถูกเตะออกจากเซิร
|
|||||||
server.kicked.whitelist = คุณไม่ได้ถูกรับเชิญ\nคนที่ถูกรับเชิญเท่านั้นที่จะเข้าได้
|
server.kicked.whitelist = คุณไม่ได้ถูกรับเชิญ\nคนที่ถูกรับเชิญเท่านั้นที่จะเข้าได้
|
||||||
server.kicked.serverClose = เซิร์ฟเวอร์ถูกปิด
|
server.kicked.serverClose = เซิร์ฟเวอร์ถูกปิด
|
||||||
server.kicked.vote = คุณถูกโหวตเตะออก บัยบาย
|
server.kicked.vote = คุณถูกโหวตเตะออก บัยบาย
|
||||||
server.kicked.clientOutdated = ไคลเอนต์เก่า! กรุณาอัพเดตเกมของคุณ!
|
server.kicked.clientOutdated = ไคลเอนต์เก่า! กรุณาอัปเดตเกมของคุณ!
|
||||||
server.kicked.serverOutdated = เซิร์ฟเวอร์เก่า! โปรดถามเจ้าของเซิร์ฟเวอร์เพื่ออัพเดต!
|
server.kicked.serverOutdated = เซิร์ฟเวอร์เก่า! โปรดถามเจ้าของเซิร์ฟเวอร์เพื่ออัปเดต!
|
||||||
server.kicked.banned = คุณถูกแบนในเซิร์ฟเวอร์นี้
|
server.kicked.banned = คุณถูกแบนในเซิร์ฟเวอร์นี้
|
||||||
server.kicked.typeMismatch = เซิร์ฟเวอร์นี้ไม่เข้ากับประเภทบิลด์ของคุณ
|
server.kicked.typeMismatch = เซิร์ฟเวอร์นี้ไม่เข้ากับประเภทบิลด์ของคุณ
|
||||||
server.kicked.playerLimit = เซิร์ฟเวอร์เต็ม กรุณารอให้เซิร์ฟเวอร์ว่างก่อน
|
server.kicked.playerLimit = เซิร์ฟเวอร์เต็ม กรุณารอให้เซิร์ฟเวอร์ว่างก่อน
|
||||||
server.kicked.recentKick = คุณเพิ่งถูกเตะออกจากเซิร์ฟเวอร์นี้\nกรุณารอสักครู่เพื่อเข้าร่วมอีกครั้ง
|
server.kicked.recentKick = คุณเพิ่งถูกเตะออกจากเซิร์ฟเวอร์นี้\nกรุณารอสักครู่เพื่อเข้าร่วมอีกครั้ง
|
||||||
server.kicked.nameInUse = มีคนที่ใช้ชืชื่อนี้\nอยู่ในเซิฟเวอร์แล้ว
|
server.kicked.nameInUse = มีคนที่ใช้ชื่อนี้\nอยู่ในเซิร์ฟเวอร์แล้ว
|
||||||
server.kicked.nameEmpty = ชื่อของคุณไม่สามารถใช้ได้
|
server.kicked.nameEmpty = ชื่อของคุณไม่สามารถใช้ได้
|
||||||
server.kicked.idInUse = คุณเชื่อมต่อกับเซิร์ฟเวอร์นี้อยู่แล้ว เราไม่อนุญาตให้เชื่อมต่อสองบัญชีในเซิร์ฟเวอร์เดียวกัน
|
server.kicked.idInUse = คุณเชื่อมต่อกับเซิร์ฟเวอร์นี้อยู่แล้ว เราไม่อนุญาตให้เชื่อมต่อสองบัญชีในเซิร์ฟเวอร์เดียวกัน
|
||||||
server.kicked.customClient = เซิร์ฟเวอร์นี้ไม่รองรับเวอร์ชั่นที่ถูกปรับแต่ง กรุณาโหลดเวอร์ชั่นอย่างเป็นทางการของ Mindustry
|
server.kicked.customClient = เซิร์ฟเวอร์นี้ไม่รองรับเวอร์ชั่นที่ถูกปรับแต่ง กรุณาโหลดเวอร์ชั่นอย่างเป็นทางการของ Mindustry
|
||||||
server.kicked.gameover = จบเกม!
|
server.kicked.gameover = จบเกม!
|
||||||
server.kicked.serverRestarting = เซิร์ฟเวอร์กำลังเริ่มใหม่
|
server.kicked.serverRestarting = เซิร์ฟเวอร์กำลังเริ่มใหม่
|
||||||
server.versions = เวอร์ชั่นของคุณ:[accent] {0}[]\nเวอร์ชั่นของเซิฟเวอร์:[accent] {1}[]
|
server.versions = เวอร์ชั่นของคุณ:[accent] {0}[]\nเวอร์ชั่นของเซิร์ฟเวอร์:[accent] {1}[]
|
||||||
host.info = ปุ่ม[accent]โฮสต์[]นั้นโฮสต์เซิร์ฟเวอร์ที่พอร์ต [scarlet]6567[] \nทุกคนที่อยู่ใน [lightgray]Wi-Fi หรือเครือข่ายท้องถิ่น[]เดียวกันจะสามารถเห็นเซิร์ฟเวอร์ของคุณในรายชื่อของ\nเซิร์ฟเวอร์ได้\n\nถ้าคุณต้องการให้ผู้เล่นอื่นๆ สามารถเชื่อมต่อได้จากทุกที่โดยใช้ IP คุณจำเป็นจะต้องใช้การ[accent]การส่งต่อพอร์ต (Port Forwarding)[] \n\n[lightgray]โน๊ต: ถ้าผู้เล่นคนใดมีปัญหาในการเชื่อมต่อ LAN ของคุณ เช็คให้แน่ใจว่าคุณได้อนุญาตให้ Mindustry เข้าถึงเครือข่ายท้องถิ่นของคุณในการตั้งค่า Firewall จำไว้ว่าเครือข่ายสาธารณะบางครั้งอาจไม่อนุญาตการ\nค้นหาเซิร์ฟเวอร์
|
host.info = ปุ่ม[accent]โฮสต์[]นั้นโฮสต์เซิร์ฟเวอร์ที่พอร์ต [scarlet]6567[] \nทุกคนที่อยู่ใน [lightgray]Wi-Fi หรือเครือข่ายท้องถิ่น[]เดียวกันจะสามารถเห็นเซิร์ฟเวอร์ของคุณในรายชื่อของ\nเซิร์ฟเวอร์ได้\n\nถ้าคุณต้องการให้ผู้เล่นอื่นๆ สามารถเชื่อมต่อได้จากทุกที่โดยใช้ IP คุณจำเป็นจะต้องใช้การ[accent]การส่งต่อพอร์ต (Port Forwarding)[] \n\n[lightgray]โน๊ต: ถ้าผู้เล่นคนใดมีปัญหาในการเชื่อมต่อ LAN ของคุณ เช็คให้แน่ใจว่าคุณได้อนุญาตให้ Mindustry เข้าถึงเครือข่ายท้องถิ่นของคุณในการตั้งค่า Firewall จำไว้ว่าเครือข่ายสาธารณะบางครั้งอาจไม่อนุญาตการ\nค้นหาเซิร์ฟเวอร์
|
||||||
join.info = คุณสามารถใส่ [accent]IP ของเซิร์ฟเวอร์[]เพื่อที่จะเชื่อมต่อหรือค้นหาเซิร์ฟเวอร์ เซิร์ฟเวอร์ที่ใช้[accent]เครือข่ายท้องถิ่น[]จะสามารถเชื่อมโดยใช้\n LAN หรือ WAN ก็ได้\n\n[lightgray]ถ้าคุณอยากเชื่อมต่อกับใครบางคนโดยใช้ IP คุณต้องไปถามโฮสต์เอาว่า IP ของโฮสต์คืออะไร ซึ่งสามารถหาได้โดยการค้นหาในกูเกิ้ลว่า "ip ของฉัน" จากเครื่องของโฮสต์
|
join.info = คุณสามารถใส่ [accent]IP ของเซิร์ฟเวอร์[]เพื่อที่จะเชื่อมต่อหรือค้นหาเซิร์ฟเวอร์ เซิร์ฟเวอร์ที่ใช้[accent]เครือข่ายท้องถิ่น[]จะสามารถเชื่อมโดยใช้\n LAN หรือ WAN ก็ได้\n\n[lightgray]ถ้าคุณอยากเชื่อมต่อกับใครบางคนโดยใช้ IP คุณต้องไปถามโฮสต์เอาว่า IP ของโฮสต์คืออะไร ซึ่งสามารถหาได้โดยการค้นหาในกูเกิ้ลว่า "ip ของฉัน" จากเครื่องของโฮสต์
|
||||||
hostserver = โฮสต์เกมผู้เล่นหลายคน
|
hostserver = โฮสต์เกมผู้เล่นหลายคน
|
||||||
@@ -214,6 +215,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 = เซิร์ฟเวอร์ของชุมชน
|
||||||
|
|
||||||
@@ -255,14 +257,14 @@ disconnect.error = การเชื่อมต่อมีปัญหา
|
|||||||
disconnect.closed = การเชื่อมต่อถูกปิดแล้ว
|
disconnect.closed = การเชื่อมต่อถูกปิดแล้ว
|
||||||
disconnect.timeout = หมดเวลา
|
disconnect.timeout = หมดเวลา
|
||||||
disconnect.data = การโหลดข้อมูลของโลกผิดพลาด!
|
disconnect.data = การโหลดข้อมูลของโลกผิดพลาด!
|
||||||
cantconnect = ไม่สามารถเข้าร่วมเซิฟเวอร์ ([accent]{0}[])
|
cantconnect = ไม่สามารถเข้าร่วมเซิร์ฟเวอร์ ([accent]{0}[])
|
||||||
connecting = [accent]กำลังเชื่อมต่อ...
|
connecting = [accent]กำลังเชื่อมต่อ...
|
||||||
reconnecting = [accent]กำลังเชื่อมต่อใหม่...
|
reconnecting = [accent]กำลังเชื่อมต่อใหม่...
|
||||||
connecting.data = [accent]กำลังโหลดข้อมูลของโลก ...
|
connecting.data = [accent]กำลังโหลดข้อมูลของโลก ...
|
||||||
server.port = พอร์ต:
|
server.port = พอร์ต:
|
||||||
server.addressinuse = มีคนใช้ที่อยู่นี้แล้ว!
|
server.addressinuse = มีคนใช้ที่อยู่นี้แล้ว!
|
||||||
server.invalidport = เลขพอร์ตไม่ถูกต้อง!
|
server.invalidport = เลขพอร์ตไม่ถูกต้อง!
|
||||||
server.error = [crimson]การโฮสต์เซิฟเวอร์ผิดพลาด
|
server.error = [crimson]การโฮสต์เซิร์ฟเวอร์ผิดพลาด
|
||||||
save.new = เซฟใหม่
|
save.new = เซฟใหม่
|
||||||
save.overwrite = คุณแน่ใจหรือว่าจะเซฟทับ\nเซฟนี้?
|
save.overwrite = คุณแน่ใจหรือว่าจะเซฟทับ\nเซฟนี้?
|
||||||
overwrite = เขียนทับ
|
overwrite = เขียนทับ
|
||||||
@@ -340,14 +342,14 @@ loadimage = โหลดรูป
|
|||||||
saveimage = เซฟรูป
|
saveimage = เซฟรูป
|
||||||
unknown = ไม่ทราบ
|
unknown = ไม่ทราบ
|
||||||
custom = กำหนดเอง
|
custom = กำหนดเอง
|
||||||
builtin = Built-In
|
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 = แมพนี้ไม่มีแกนกลางของศัตรูสำหรับให้ผู้เล่นเกิด! กรุณาใส่แกนกลาง[scarlet]ที่ไม่ใช่สีส้ม[] ในตัวแก้ไข
|
||||||
map.nospawn.attack = แมพนี้ไม่มีแกนกลางของศัตรูสำหรับให้ผู้เล่นโจมตี! กรุณาใส่แกนกลาง[scarlet]สีแดง[] ในตัวแก้ไข
|
map.nospawn.attack = แมพนี้ไม่มีแกนกลางของศัตรูสำหรับให้ผู้เล่นโจมตี! กรุณาใส่แกนกลาง[scarlet]สีแดง[] ในตัวแก้ไข
|
||||||
map.invalid = โหลดแมพผิดพลาด: ไฟล์แมพเสียหายหรือไม่ถูกต้อง
|
map.invalid = โหลดแมพผิดพลาด: ไฟล์แมพเสียหายหรือไม่ถูกต้อง
|
||||||
workshop.update = อัพเดตไอเท็ม
|
workshop.update = อัปเดตไอเท็ม
|
||||||
workshop.error = ผิดพลาดในการนำเวิร์กช็อปมา รายละเอียดดังนี้: {0}
|
workshop.error = ผิดพลาดในการนำเวิร์กช็อปมา รายละเอียดดังนี้: {0}
|
||||||
map.publish.confirm = คุณแน่ใจหรือว่าจะเผยแพร่แมพนี้?\n\n[lightgray]คุณต้องแน่ใจก่อนว่าคุณเห็นด้วยกับ Workshop EULA, มิฉนั้นแมพจะไม่ปรากฏ!
|
map.publish.confirm = คุณแน่ใจหรือว่าจะเผยแพร่แมพนี้?\n\n[lightgray]คุณต้องแน่ใจก่อนว่าคุณเห็นด้วยกับ Workshop EULA, มิฉนั้นแมพจะไม่ปรากฏ!
|
||||||
workshop.menu = เลือกว่าจะทำอะไรกับไอเท็มนี้
|
workshop.menu = เลือกว่าจะทำอะไรกับไอเท็มนี้
|
||||||
@@ -357,7 +359,7 @@ eula = Steam EULA
|
|||||||
missing = ไอเท็มนี้ถูกลบหรือย้าย\n[lightgray]ยกเลิกการเชื่อมต่อของหน้ารายการเวิร์กช็อปแล้ว
|
missing = ไอเท็มนี้ถูกลบหรือย้าย\n[lightgray]ยกเลิกการเชื่อมต่อของหน้ารายการเวิร์กช็อปแล้ว
|
||||||
publishing = [accent]กำลังเผยแพร่...
|
publishing = [accent]กำลังเผยแพร่...
|
||||||
publish.confirm = คุณแน่ใจหรือว่าจะเผยแพร่สิ่งนี้?\n\n[lightgray]คุณต้องแน่ใจก่อนว่าคุณเห็นด้วยกับ Workshop EULA มิฉนั้นไอเท็มของคุณจะไม่ปรากฏ!
|
publish.confirm = คุณแน่ใจหรือว่าจะเผยแพร่สิ่งนี้?\n\n[lightgray]คุณต้องแน่ใจก่อนว่าคุณเห็นด้วยกับ Workshop EULA มิฉนั้นไอเท็มของคุณจะไม่ปรากฏ!
|
||||||
publish.error = การเผยแพร่ไอเท็มดังต่อไปนี้ผิดพลาด: {0}
|
publish.error = เกิดข้อผิดพลาดการเผยแพร่ไอเท็มดังต่อไปนี้: {0}
|
||||||
steam.error = ไม่สามารถเริ่ม Steam service ได้\nError: {0}
|
steam.error = ไม่สามารถเริ่ม Steam service ได้\nError: {0}
|
||||||
|
|
||||||
editor.brush = แปรง
|
editor.brush = แปรง
|
||||||
@@ -401,7 +403,7 @@ editor.default = [lightgray]<ค่าเริ่มต้น>
|
|||||||
details = รายละเอียด...
|
details = รายละเอียด...
|
||||||
edit = แก้ไข...
|
edit = แก้ไข...
|
||||||
editor.name = ชื่อ:
|
editor.name = ชื่อ:
|
||||||
editor.spawn = สปาวน์ยูนิต
|
editor.spawn = สร้างยูนิต
|
||||||
editor.removeunit = ลบยูนิต
|
editor.removeunit = ลบยูนิต
|
||||||
editor.teams = ทีม
|
editor.teams = ทีม
|
||||||
editor.errorload = โหลดไฟล์ผิดพลาด
|
editor.errorload = โหลดไฟล์ผิดพลาด
|
||||||
@@ -411,7 +413,7 @@ editor.errorlegacy = แมพนี้เก่าเกินไปและ
|
|||||||
editor.errornot = นี่ไม่ใช้ไฟล์แมพ
|
editor.errornot = นี่ไม่ใช้ไฟล์แมพ
|
||||||
editor.errorheader = ไฟล์แมพนี้เสียหรือไม่ถูกต้อง
|
editor.errorheader = ไฟล์แมพนี้เสียหรือไม่ถูกต้อง
|
||||||
editor.errorname = แมพไม่มีการกำหนดชื่อ คุณกำลังโหลดไฟล์เซฟอยู่หรือป่าว?
|
editor.errorname = แมพไม่มีการกำหนดชื่อ คุณกำลังโหลดไฟล์เซฟอยู่หรือป่าว?
|
||||||
editor.update = อัพเดต
|
editor.update = อัปเดต
|
||||||
editor.randomize = สุ่ม
|
editor.randomize = สุ่ม
|
||||||
editor.apply = ใช้
|
editor.apply = ใช้
|
||||||
editor.generate = การกำเนิด
|
editor.generate = การกำเนิด
|
||||||
@@ -420,8 +422,8 @@ editor.loadmap = โหลดแมพ
|
|||||||
editor.savemap = เซฟแมพ
|
editor.savemap = เซฟแมพ
|
||||||
editor.saved = เซฟเรียบร้อย!
|
editor.saved = เซฟเรียบร้อย!
|
||||||
editor.save.noname = แมพของคุณไม่มีชื่อ! สามารถตั้งชื่อได้ในเมนู 'ข้อมูลแมพ'
|
editor.save.noname = แมพของคุณไม่มีชื่อ! สามารถตั้งชื่อได้ในเมนู 'ข้อมูลแมพ'
|
||||||
editor.save.overwrite = แมพของคุณไปทับกับแมพ built-in! เปลี่ยนชื่อได้ในเมนู 'ข้อมูลแมพ'
|
editor.save.overwrite = แมพของคุณไปทับกับแมพติดตัว! เปลี่ยนชื่อได้ในเมนู 'ข้อมูลแมพ'
|
||||||
editor.import.exists = [scarlet]ไม่สามารถนำเข้าได้:[] มีแมพ built-in ที่ชื่อ '{0}' อยู่แล้ว!
|
editor.import.exists = [scarlet]ไม่สามารถนำเข้าได้:[] มีแมพติดตัวที่ชื่อ '{0}' อยู่แล้ว!
|
||||||
editor.import = นำเข้า...
|
editor.import = นำเข้า...
|
||||||
editor.importmap = นำเข้าแมพ
|
editor.importmap = นำเข้าแมพ
|
||||||
editor.importmap.description = นำเข้าแมพที่มีอยู่แล้ว
|
editor.importmap.description = นำเข้าแมพที่มีอยู่แล้ว
|
||||||
@@ -521,7 +523,7 @@ mapeditor = แก้ไขแมพ
|
|||||||
|
|
||||||
abandon = ละทิ้ง
|
abandon = ละทิ้ง
|
||||||
abandon.text = โซนนี้และทรัพยากรทั้งหมดจะถูกยืดไปเป็นของศัตรู
|
abandon.text = โซนนี้และทรัพยากรทั้งหมดจะถูกยืดไปเป็นของศัตรู
|
||||||
locked = ล็อค
|
locked = ล็อก
|
||||||
complete = [lightgray]ต้องมี:
|
complete = [lightgray]ต้องมี:
|
||||||
requirement.wave = ถึงคลื่นที่ {0} ใน {1}
|
requirement.wave = ถึงคลื่นที่ {0} ใน {1}
|
||||||
requirement.core = ทำลายแกนกลางของศัตรูใน {0}
|
requirement.core = ทำลายแกนกลางของศัตรูใน {0}
|
||||||
@@ -545,15 +547,15 @@ add = เพิ่ม...
|
|||||||
guardian = การ์เดียน
|
guardian = การ์เดียน
|
||||||
|
|
||||||
connectfail = [crimson]การเชื่อมต่อผิดพลาด:\n\n[accent]{0}
|
connectfail = [crimson]การเชื่อมต่อผิดพลาด:\n\n[accent]{0}
|
||||||
error.unreachable = เซิฟเวอร์ไม่สามารถเข้าถึงได้\nแน่ใจหรือว่าที่อยู่เขียนถูกต้อง?
|
error.unreachable = เซิร์ฟเวอร์ไม่สามารถเข้าถึงได้\nแน่ใจหรือว่าที่อยู่เขียนถูกต้อง?
|
||||||
error.invalidaddress = ที่อยู่ไม่ถูกต้อง
|
error.invalidaddress = ที่อยู่ไม่ถูกต้อง
|
||||||
error.timedout = Timed out!\nเช็คให้แน่ใจว่า port forwarding ของโฮสต์เปิดอยู่และที่อยู่นั้นถูกต้อง!
|
error.timedout = Timed out!\nเช็คให้แน่ใจว่า port forwarding ของโฮสต์เปิดอยู่และที่อยู่นั้นถูกต้อง!
|
||||||
error.mismatch = Packet error:\nอาจเกิดจากเวอร์ชั่นของ ไคลเอนต์/เซิร์ฟเวอร์ ไม่ตรงกัน\nเช็คให้แน่ใจว่าเซิฟเวอร์ใช้ Mindustry เวอร์ชั่นล่าสุด!
|
error.mismatch = Packet error:\nอาจเกิดจากเวอร์ชั่นของ ไคลเอนต์/เซิร์ฟเวอร์ ไม่ตรงกัน\nเช็คให้แน่ใจว่าเซิร์ฟเวอร์ใช้ Mindustry เวอร์ชั่นล่าสุด!
|
||||||
error.alreadyconnected = เชื่อมต่ออยู่แล้ว
|
error.alreadyconnected = เชื่อมต่ออยู่แล้ว
|
||||||
error.mapnotfound = ไม่พบไฟล์แมพ
|
error.mapnotfound = ไม่พบไฟล์แมพ
|
||||||
error.io = Network I/O error
|
error.io = Network I/O error
|
||||||
error.any = Error: เครือข่ายที่ไม่รู้จัก
|
error.any = Error: เครือข่ายที่ไม่รู้จัก
|
||||||
error.bloom = ไม่สามารถเริ่มต้น bloom ได้\nอุปกรณ์ของคุณอาจไม่รองรับ
|
error.bloom = ไม่สามารถเริ่มต้นบลูมได้\nอุปกรณ์ของคุณอาจไม่รองรับ
|
||||||
|
|
||||||
weather.rain.name = ฝน
|
weather.rain.name = ฝน
|
||||||
weather.snow.name = หิมะ
|
weather.snow.name = หิมะ
|
||||||
@@ -565,6 +567,7 @@ 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 = คลื่น:
|
||||||
@@ -577,7 +580,7 @@ sectors.rename = เปลี่ยนชื่อเซ็กเตอร์
|
|||||||
sectors.enemybase = [scarlet]ฐานทัพศัตรู
|
sectors.enemybase = [scarlet]ฐานทัพศัตรู
|
||||||
sectors.vulnerable = [scarlet]เสี่ยงภัย
|
sectors.vulnerable = [scarlet]เสี่ยงภัย
|
||||||
sectors.underattack = [scarlet]เซ็กเตอร์ถูกโจมตี! เสียหาย [accent]{0}%
|
sectors.underattack = [scarlet]เซ็กเตอร์ถูกโจมตี! เสียหาย [accent]{0}%
|
||||||
sectors.survives = [accent]จะอยู่รอดอีก {0} คลื่น
|
sectors.survives = [accent]จะอยู่รอดได้ {0} คลื่น
|
||||||
sectors.go = ไป
|
sectors.go = ไป
|
||||||
sector.curcapture = ยึดครองแล้ว
|
sector.curcapture = ยึดครองแล้ว
|
||||||
sector.curlost = เราเสียเซ็กเตอร์!
|
sector.curlost = เราเสียเซ็กเตอร์!
|
||||||
@@ -655,10 +658,10 @@ settings.resetKey = รีเซ็ต
|
|||||||
settings.controls = การควบคุม
|
settings.controls = การควบคุม
|
||||||
settings.game = เกม
|
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 = เคลียร์เซฟ
|
||||||
settings.clearresearch = เคลียร์การวิจัย
|
settings.clearresearch = เคลียร์การวิจัย
|
||||||
@@ -715,7 +718,7 @@ stat.speedincrease = เพิ่มความเร็ว
|
|||||||
stat.range = ระยะ
|
stat.range = ระยะ
|
||||||
stat.drilltier = แร่ที่ขุดได้
|
stat.drilltier = แร่ที่ขุดได้
|
||||||
stat.drillspeed = ความเร็วการขุดเฉลี่ย
|
stat.drillspeed = ความเร็วการขุดเฉลี่ย
|
||||||
stat.boosteffect = แอฟเฟ็คของบูสต์
|
stat.boosteffect = เอฟเฟกต์ของบูสต์
|
||||||
stat.maxunits = จำนวนยูนิตสูงสุด
|
stat.maxunits = จำนวนยูนิตสูงสุด
|
||||||
stat.armor = เกราะ
|
stat.armor = เกราะ
|
||||||
stat.health = พลังชีวิต
|
stat.health = พลังชีวิต
|
||||||
@@ -724,7 +727,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 = เวลาคูลดาวน์
|
||||||
@@ -747,7 +750,7 @@ stat.commandlimit = จำนวนยูนิตที่สั่งการ
|
|||||||
stat.abilities = ทักษะ
|
stat.abilities = ทักษะ
|
||||||
stat.canboost = สามารถบูสต์
|
stat.canboost = สามารถบูสต์
|
||||||
stat.flying = บินได้
|
stat.flying = บินได้
|
||||||
stat.ammouse = ใช้กระสุน
|
stat.ammouse = การใช้กระสุน
|
||||||
stat.damagemultiplier = พหุคูณดาเมจ
|
stat.damagemultiplier = พหุคูณดาเมจ
|
||||||
stat.healthmultiplier = พหุคูณพลังชีวิต
|
stat.healthmultiplier = พหุคูณพลังชีวิต
|
||||||
stat.speedmultiplier = พหุคูณความเร็ว
|
stat.speedmultiplier = พหุคูณความเร็ว
|
||||||
@@ -758,7 +761,7 @@ stat.healing = การรักษา
|
|||||||
|
|
||||||
ability.forcefield = โล่พลังงาน
|
ability.forcefield = โล่พลังงาน
|
||||||
ability.repairfield = สนามซ่อมแซม
|
ability.repairfield = สนามซ่อมแซม
|
||||||
ability.statusfield = สนามเอฟเฟกต์ {0}
|
ability.statusfield = {0} สนามเอฟเฟกต์
|
||||||
ability.unitspawn = โรงงาน{0}
|
ability.unitspawn = โรงงาน{0}
|
||||||
ability.shieldregenfield = สนามรักษาโล่
|
ability.shieldregenfield = สนามรักษาโล่
|
||||||
ability.movelightning = ปล่อยสายฟ้าเมื่อเคลื่อนที่
|
ability.movelightning = ปล่อยสายฟ้าเมื่อเคลื่อนที่
|
||||||
@@ -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 = [lightgray]ดาเมจต่อสิ่งก่อสร้าง [stat]{0}%[lightgray]
|
bullet.buildingdamage = [lightgray]ดาเมจต่อสิ่งก่อสร้าง [stat]{0}%[lightgray]
|
||||||
bullet.knockback = [stat]{0}[lightgray] ดันกลับ
|
bullet.knockback = [stat]{0}[lightgray] ดันกลับ
|
||||||
@@ -806,6 +809,7 @@ bullet.reload = [lightgray]ความเร็วการยิง: [stat]{0}
|
|||||||
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 = หน่วยของเหลว
|
||||||
@@ -822,7 +826,7 @@ unit.items = ไอเท็ม
|
|||||||
unit.thousands = k
|
unit.thousands = k
|
||||||
unit.millions = [] []ล้าน
|
unit.millions = [] []ล้าน
|
||||||
unit.billions = [] []พันล้าน
|
unit.billions = [] []พันล้าน
|
||||||
unit.pershot = [] []กระสุน/การยิง
|
unit.pershot = [] []ไอเท็ม/การยิง
|
||||||
category.purpose = วัตถุประสงค์
|
category.purpose = วัตถุประสงค์
|
||||||
category.general = ทั่วไป
|
category.general = ทั่วไป
|
||||||
category.power = พลังงาน
|
category.power = พลังงาน
|
||||||
@@ -831,20 +835,18 @@ category.items = ไอเท็ม
|
|||||||
category.crafting = การผลิต
|
category.crafting = การผลิต
|
||||||
category.function = ฟังค์ชั่น
|
category.function = ฟังค์ชั่น
|
||||||
category.optional = ทางเลือกการเพิ่มประสิทธิภาพ
|
category.optional = ทางเลือกการเพิ่มประสิทธิภาพ
|
||||||
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 = Antialias[lightgray] (จำเป็นต้องรีสตาร์ท)[]
|
|
||||||
setting.playerindicators.name = ตัวบอกผู้เล่น
|
setting.playerindicators.name = ตัวบอกผู้เล่น
|
||||||
setting.indicators.name = ตัวบอกศัตรู/พักพวก
|
setting.indicators.name = ตัวบอกศัตรู/พักพวก
|
||||||
setting.autotarget.name = เล็งเป้าอัตโนมัติ
|
setting.autotarget.name = เล็งเป้าอัตโนมัติ
|
||||||
@@ -853,7 +855,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 = ง่าย
|
||||||
@@ -862,16 +865,17 @@ setting.difficulty.hard = ยาก
|
|||||||
setting.difficulty.insane = ยากมาก
|
setting.difficulty.insane = ยากมาก
|
||||||
setting.difficulty.name = ระดับความยาก:
|
setting.difficulty.name = ระดับความยาก:
|
||||||
setting.screenshake.name = การสั่นของจอ
|
setting.screenshake.name = การสั่นของจอ
|
||||||
setting.effects.name = แสดงเอฟเฟ็ค
|
setting.effects.name = แสดงเอฟเฟ็กต์
|
||||||
setting.destroyedblocks.name = แสดงบล็อกที่ถูกทำลาย
|
setting.destroyedblocks.name = แสดงบล็อกที่ถูกทำลาย
|
||||||
setting.blockstatus.name = แสดงสเตตัสของบล็อก
|
setting.blockstatus.name = แสดงสถานะของบล็อก
|
||||||
setting.conveyorpathfinding.name = ตรวจสอบเส้นทางการวางอัจฉริยะ
|
setting.conveyorpathfinding.name = ตรวจสอบเส้นทางการวางอัจฉริยะ
|
||||||
setting.sensitivity.name = ความเร็วของตัวควบคุม
|
setting.sensitivity.name = ความเร็วของตัวควบคุม
|
||||||
setting.saveinterval.name = ระยะห่างระหว่างการเซฟ
|
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.description = อาจจะต้องรีสตาร์ทเพื่อใส่การเปลี่ยนแปลง
|
||||||
setting.fps.name = แสดง FPS และ Ping
|
setting.fps.name = แสดง FPS และ Ping
|
||||||
setting.smoothcamera.name = กล้องแบบลื่นไหล
|
setting.smoothcamera.name = กล้องแบบลื่นไหล
|
||||||
setting.vsync.name = VSync
|
setting.vsync.name = VSync
|
||||||
@@ -887,19 +891,19 @@ setting.sfxvol.name = ระดับเสียง SFX
|
|||||||
setting.mutesound.name = ปิดเสียง
|
setting.mutesound.name = ปิดเสียง
|
||||||
setting.crashreport.name = ส่งรายงานการแครชแบบไม่ระบุตัวตน
|
setting.crashreport.name = ส่งรายงานการแครชแบบไม่ระบุตัวตน
|
||||||
setting.savecreate.name = สร้างเซฟโดยอัตโนมัติ
|
setting.savecreate.name = สร้างเซฟโดยอัตโนมัติ
|
||||||
setting.publichost.name = การมองเห็นเซิฟเวอร์สาธารณะ
|
setting.publichost.name = การมองเห็นเซิร์ฟเวอร์สาธารณะ
|
||||||
setting.playerlimit.name = จำกัดผู้เล่น
|
setting.playerlimit.name = จำกัดผู้เล่น
|
||||||
setting.chatopacity.name = ความโปร่งแสงของแชท
|
setting.chatopacity.name = ความโปร่งแสงของแชท
|
||||||
setting.lasersopacity.name = ความโปร่งแสงของเลเซอร์พลังงาน
|
setting.lasersopacity.name = ความโปร่งแสงของเลเซอร์พลังงาน
|
||||||
setting.bridgeopacity.name = ความโปร่งแสงของสะพาน
|
setting.bridgeopacity.name = ความโปร่งแสงของสะพาน
|
||||||
setting.playerchat.name = แสดงบับเบิ้ลแชทของผู้เล่น
|
setting.playerchat.name = แสดงบับเบิ้ลแชทของผู้เล่น
|
||||||
setting.showweather.name = แสดงแกรฟฟิกสภาพอากาศ
|
setting.showweather.name = แสดงแกรฟฟิกสภาพอากาศ
|
||||||
public.confirm = คุณต้องการให้เกมของคุณเปิดเป็นสาธารณะหรือไม่?\n[accent]ทุกคนจะสามารถเข้าร่วมเกมของคุณได้\n[lightgray]คุณสามารถเปลี่ยนการตั้งค่านี้ได้ที่ ตั้งค่า->เกม->การมองเห็นเซิฟเวอร์สาธารณะ
|
public.confirm = คุณต้องการให้เกมของคุณเปิดเป็นสาธารณะหรือไม่?\n[accent]ทุกคนจะสามารถเข้าร่วมเกมของคุณได้\n[lightgray]คุณสามารถเปลี่ยนการตั้งค่านี้ได้ที่ ตั้งค่า->เกม->การมองเห็นเซิร์ฟเวอร์สาธารณะ
|
||||||
public.confirm.really = หากคุณอยากเล่นกับเล่นกับเพื่อน ใช้ [green]Invite Friend[] ดีกว่า แทนที่จะใช้ [scarlet]Public server[]!\nคุณแน่ใจนะว่าจะเปลี่ยนเกมคุณเป็น[scarlet]สาธารณะ[]?
|
public.confirm.really = หากคุณอยากเล่นกับเล่นกับเพื่อน ใช้[green]ชวนเพื่อน[]ดีกว่า แทนที่จะใช้[scarlet]เซิร์ฟเวอร์สาธารณะ[]!\nคุณแน่ใจนะว่าจะเปลี่ยนเกมคุณเป็น[scarlet]สาธารณะ[]?
|
||||||
public.beta = เกมเวอร์ชั่นเบต้าไม่สามารถเปิดเซิฟเวอร์สาธารณะได้
|
public.beta = เกมเวอร์ชั่นเบต้าไม่สามารถเปิดเซิร์ฟเวอร์สาธารณะได้
|
||||||
uiscale.reset = ขนาดของ UI มีการเปลี่ยนแปลง\nกด "โอเค" เพื่อยืนยันขนาด UI นี้\n[scarlet]เปลี่ยนกลับไปเป็นแบบเดิมและออกในอีก[accent] {0}[] วินาที...
|
uiscale.reset = อัตราขนาดของ UI ได้มีการเปลี่ยนแปลง\nกด "โอเค" เพื่อยืนยันขนาด UI นี้\n[scarlet]จะเปลี่ยนกลับไปเป็นแบบเดิมและออกในอีก[accent] {0}[] วินาที...
|
||||||
uiscale.cancel = ยกเลิกและออก
|
uiscale.cancel = ยกเลิกและออก
|
||||||
setting.bloom.name = Bloom
|
setting.bloom.name = บลูม
|
||||||
keybind.title = ตั้งค่าปุ่ม
|
keybind.title = ตั้งค่าปุ่ม
|
||||||
keybinds.mobile = [scarlet]การตั้งค่าปุ่มส่วนใหญ่ไม่สามารถใช้ในมือถือได้ เฉพาะการเคลื่อนไหวพื้นฐานเท่านั้นที่ใช้ได้
|
keybinds.mobile = [scarlet]การตั้งค่าปุ่มส่วนใหญ่ไม่สามารถใช้ในมือถือได้ เฉพาะการเคลื่อนไหวพื้นฐานเท่านั้นที่ใช้ได้
|
||||||
category.general.name = ทั่วไป
|
category.general.name = ทั่วไป
|
||||||
@@ -972,7 +976,7 @@ keybind.chat_history_prev.name = ประวัติแชทก่อนห
|
|||||||
keybind.chat_history_next.name = ประวัติแชทถัดไป
|
keybind.chat_history_next.name = ประวัติแชทถัดไป
|
||||||
keybind.chat_scroll.name = เลื่อนแชท
|
keybind.chat_scroll.name = เลื่อนแชท
|
||||||
keybind.chat_mode.name = เปลี่ยนโหมดแชท
|
keybind.chat_mode.name = เปลี่ยนโหมดแชท
|
||||||
keybind.drop_unit.name = ดรอปยูนิต
|
keybind.drop_unit.name = วางยูนิต
|
||||||
keybind.zoom_minimap.name = ซูมมินิแมพ
|
keybind.zoom_minimap.name = ซูมมินิแมพ
|
||||||
mode.help.title = คำอธิบายโหมด
|
mode.help.title = คำอธิบายโหมด
|
||||||
mode.survival.name = เอาชีวิตรอด
|
mode.survival.name = เอาชีวิตรอด
|
||||||
@@ -994,6 +998,7 @@ rules.wavetimer = นับถอยหลังการปล่อยคล
|
|||||||
rules.waves = คลื่น
|
rules.waves = คลื่น
|
||||||
rules.attack = โหมดการโจมตี
|
rules.attack = โหมดการโจมตี
|
||||||
rules.buildai = AI ก่อสร้าง
|
rules.buildai = AI ก่อสร้าง
|
||||||
|
rules.cleanupdeadteams = ลบล้างสิ่งก่อสร้างศัตรูที่พ่ายแพ้ (PvP)
|
||||||
rules.corecapture = ยืดแกนกลางเมื่อทำลาย
|
rules.corecapture = ยืดแกนกลางเมื่อทำลาย
|
||||||
rules.polygoncoreprotection = รัศมีปกป้องแกนกลางแบบหลายเหลี่ยม
|
rules.polygoncoreprotection = รัศมีปกป้องแกนกลางแบบหลายเหลี่ยม
|
||||||
rules.enemyCheat = AI (ทีมสีแดง) มีทรัพยากรไม่จำกัด
|
rules.enemyCheat = AI (ทีมสีแดง) มีทรัพยากรไม่จำกัด
|
||||||
@@ -1085,7 +1090,7 @@ unit.sei.name = เซย์
|
|||||||
unit.omura.name = โอมูร่า
|
unit.omura.name = โอมูร่า
|
||||||
unit.retusa.name = เรธูซ่า
|
unit.retusa.name = เรธูซ่า
|
||||||
unit.oxynoe.name = อ๊อกซิโนอ์
|
unit.oxynoe.name = อ๊อกซิโนอ์
|
||||||
unit.cyerce.name = ไซเยิส
|
unit.cyerce.name = เซียรส์
|
||||||
unit.aegires.name = เอเกียเรส
|
unit.aegires.name = เอเกียเรส
|
||||||
unit.navanax.name = นาวาแน็คซ์
|
unit.navanax.name = นาวาแน็คซ์
|
||||||
unit.alpha.name = อัลฟ่า
|
unit.alpha.name = อัลฟ่า
|
||||||
@@ -1247,7 +1252,7 @@ block.wave.name = คลื่นน้ำ
|
|||||||
block.tsunami.name = สึนามิ
|
block.tsunami.name = สึนามิ
|
||||||
block.swarmer.name = สวอร์มเมอร์
|
block.swarmer.name = สวอร์มเมอร์
|
||||||
block.salvo.name = ซัลโว
|
block.salvo.name = ซัลโว
|
||||||
block.ripple.name = ริปเปิล
|
block.ripple.name = ริปเปิ้ล
|
||||||
block.phase-conveyor.name = สายพานเฟส
|
block.phase-conveyor.name = สายพานเฟส
|
||||||
block.bridge-conveyor.name = สะพานไอเท็ม
|
block.bridge-conveyor.name = สะพานไอเท็ม
|
||||||
block.plastanium-compressor.name = เครื่องอัดพลาสตาเนี่ยม
|
block.plastanium-compressor.name = เครื่องอัดพลาสตาเนี่ยม
|
||||||
@@ -1268,7 +1273,7 @@ block.bridge-conduit.name = สะพานของเหลว
|
|||||||
block.rotary-pump.name = ปั๊มโรตารี่
|
block.rotary-pump.name = ปั๊มโรตารี่
|
||||||
block.thorium-reactor.name = เตาปฏิกรณ์ทอเรี่ยม
|
block.thorium-reactor.name = เตาปฏิกรณ์ทอเรี่ยม
|
||||||
block.mass-driver.name = เครื่องโอนถ่ายมวล
|
block.mass-driver.name = เครื่องโอนถ่ายมวล
|
||||||
block.blast-drill.name = เครื่องขุดระเบิดอากาศ
|
block.blast-drill.name = เครื่องขุดแอร์บลาสต์
|
||||||
block.thermal-pump.name = ปั๊มความร้อน
|
block.thermal-pump.name = ปั๊มความร้อน
|
||||||
block.thermal-generator.name = เครื่องกำเนิดไฟฟ้าจากความร้อน
|
block.thermal-generator.name = เครื่องกำเนิดไฟฟ้าจากความร้อน
|
||||||
block.alloy-smelter.name = เครื่องหลอมอัลลอย
|
block.alloy-smelter.name = เครื่องหลอมอัลลอย
|
||||||
@@ -1288,7 +1293,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 = โรงงานยูนิตพื้นดิน
|
||||||
@@ -1309,11 +1313,11 @@ 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 = ตัวประมวลผลขนาดเล็ก
|
||||||
@@ -1343,11 +1347,12 @@ hint.desktopPause = กด [accent][[Space][] เพื่อหยุดชั
|
|||||||
hint.placeDrill = เลือกเมนู \ue85e [accent]เครื่องขุด[] ในแท็บเมนูขวาล่าง แล้วเลือก \uf870 [accent]เครื่องขุด[] แล้วกดที่แร่ทองแดงเพื่อวาง
|
hint.placeDrill = เลือกเมนู \ue85e [accent]เครื่องขุด[] ในแท็บเมนูขวาล่าง แล้วเลือก \uf870 [accent]เครื่องขุด[] แล้วกดที่แร่ทองแดงเพื่อวาง
|
||||||
hint.placeDrill.mobile = เลือกเมนู \ue85e [accent]เครื่องขุด[] ในแท็บเมนูขวาล่าง แล้วเลือก \uf870 [accent]เครื่องขุด[] แล้วกดที่แร่ทองแดงเพื่อวาง\n\nกด \ue800 [accent]ติ้กถูก[] ที่ขวาล่างเพื่อยืนยัน
|
hint.placeDrill.mobile = เลือกเมนู \ue85e [accent]เครื่องขุด[] ในแท็บเมนูขวาล่าง แล้วเลือก \uf870 [accent]เครื่องขุด[] แล้วกดที่แร่ทองแดงเพื่อวาง\n\nกด \ue800 [accent]ติ้กถูก[] ที่ขวาล่างเพื่อยืนยัน
|
||||||
hint.placeConveyor = สายพานจะย้ายไอเท็มจากเครื่องขุดไปยังบล็อกอื่นๆ เลือก \uf896 [accent]สายพาน[] จากแท็บ \ue814 [accent]การเคลื่อนย้าย[]\n\nคลิ๊กแล้วลากเพื่อวางหลายๆ สายพาน\n[accent]เลื่อน[]เพื่อหมุน
|
hint.placeConveyor = สายพานจะย้ายไอเท็มจากเครื่องขุดไปยังบล็อกอื่นๆ เลือก \uf896 [accent]สายพาน[] จากแท็บ \ue814 [accent]การเคลื่อนย้าย[]\n\nคลิ๊กแล้วลากเพื่อวางหลายๆ สายพาน\n[accent]เลื่อน[]เพื่อหมุน
|
||||||
hint.placeConveyor.mobile = สายพานจะเคลื่อนย้ายไอเท็มจากที่ขุดไปยังบล็อกอื่นๆ เลือก \uf896 [accent]สายพาน[] จากแท็บ \ue814 [accent]การเคลื่อนย้าย[]\n\nเอานิ้วจิ้มลงไปสักแป็บนึงแล้วลากเพื่อวางหลายๆ อัน
|
hint.placeConveyor.mobile = สายพานจะเคลื่อนย้ายไอเท็มจากที่ขุดไปยังบล็อกอื่นๆ เลือก \uf896 [accent]สายพาน[] จากแท็บ \ue814 [accent]การเคลื่อนย้าย[]\n\nเอานิ้วจิ้มลงไปสักแป๊บนึงแล้วลากเพื่อวางหลายๆ อัน
|
||||||
hint.placeTurret = วาง \uf861 [accent]ป้อมปืน[] เพื่อป้องกันฐานทัพจากศัตรู\n\nป้อมปืนต้องมีกระสุน ในกรณีนี้ \uf838 ทองแดง\nใช้สายพานลากจากเครื่องขุดไปที่ป้อมปืนเพื่อเติมกระสุน
|
hint.placeTurret = วาง \uf861 [accent]ป้อมปืน[] เพื่อป้องกันฐานทัพจากศัตรู\n\nป้อมปืนต้องมีกระสุน ในกรณีนี้ \uf838 ทองแดง\nใช้สายพานลากจากเครื่องขุดไปที่ป้อมปืนเพื่อเติมกระสุน
|
||||||
hint.breaking = [accent]คลิ๊กขวา[] แล้วลากเพื่อทำลายบล็อก
|
hint.breaking = [accent]คลิ๊กขวา[] แล้วลากเพื่อทำลายบล็อก
|
||||||
hint.breaking.mobile = เปิดใช้ \ue817 [accent]ค้อน[] ตรงล่างขวาแล้วเลือกเพื่อทำลายบล็อก\n\nเอานิ้วจิ้มลงไปสักแป็บนึงแล้วลากเพื่อเลือกหลายๆ อัน
|
hint.breaking.mobile = เปิดใช้ \ue817 [accent]ค้อน[] ตรงล่างขวาแล้วเลือกเพื่อทำลายบล็อก\n\nเอานิ้วจิ้มลงไปสักแป๊บนึงแล้วลากเพื่อเลือกหลายๆ อัน
|
||||||
hint.blockInfo = ดูข้อมูลของบล็อกโดยการเลือกจาก[accent]เมนูการสร้าง[] แล้วกดที่รูป [accent][[?][] ตรงด้านขวา
|
hint.blockInfo = ดูข้อมูลของบล็อกโดยการเลือกจาก[accent]เมนูการสร้าง[] แล้วกดที่รูป [accent][[?][] ตรงด้านขวา
|
||||||
|
hint.derelict = สิ่งก่อสร้างที่ถูก[accent]ทิ้งร้าง[]คือเศษซากพังทลายของฐานเก่าแก่ที่ไม่สามารถใช้งานได้แล้ว\n\nสิ่งก่อสร้างพวกนี้สามารถ[accent]ทุบทิ้ง[]เพื่อเก็บเกี่ยวทรัพยากรที่อยู่ในนั้นได้
|
||||||
hint.research = ใช้ปุ่ม \ue875 [accent]วิจัย[] เพื่อวิจัยเทคโนโลยีใหม่ๆ
|
hint.research = ใช้ปุ่ม \ue875 [accent]วิจัย[] เพื่อวิจัยเทคโนโลยีใหม่ๆ
|
||||||
hint.research.mobile = ใช้ปุ่ม \ue875 [accent]วิจัย[] ใน \ue88c [accent]เมนู[] เพื่อวิจัยเทคโนโลยีใหม่ๆ
|
hint.research.mobile = ใช้ปุ่ม \ue875 [accent]วิจัย[] ใน \ue88c [accent]เมนู[] เพื่อวิจัยเทคโนโลยีใหม่ๆ
|
||||||
hint.unitControl = กด [accent][[L-Ctrl][] ค้างไว้แล้วกด[accent]คลิ๊ก[]เพื่อควบคุมยานพวกพ้องหรือป้อมปืน
|
hint.unitControl = กด [accent][[L-Ctrl][] ค้างไว้แล้วกด[accent]คลิ๊ก[]เพื่อควบคุมยานพวกพ้องหรือป้อมปืน
|
||||||
@@ -1361,12 +1366,12 @@ hint.boost = กด [accent][[L-Shift][] เพื่อบูสต์ข้า
|
|||||||
hint.command = กด [accent][[G][] เพื่อสั่งการยูนิตข้างๆ ของตัว[accent]ชนิดคล้ายกัน[]จัดเป็นรูปแบบล้อมรอบคุณ\n\nถ้าจะสั่งการยูนิตพื้นดิน คุณต้องควบคุมยูนิตประเภทเดียวกันอยู่ก่อน
|
hint.command = กด [accent][[G][] เพื่อสั่งการยูนิตข้างๆ ของตัว[accent]ชนิดคล้ายกัน[]จัดเป็นรูปแบบล้อมรอบคุณ\n\nถ้าจะสั่งการยูนิตพื้นดิน คุณต้องควบคุมยูนิตประเภทเดียวกันอยู่ก่อน
|
||||||
hint.command.mobile = [accent][[กดสองครั้ง][] ที่ตัวยูนิตของคุณเพื่อสั่งการยูนิตรอบข้างให้มารวมตัวกันเป็นวงล้อมรอบคุณ
|
hint.command.mobile = [accent][[กดสองครั้ง][] ที่ตัวยูนิตของคุณเพื่อสั่งการยูนิตรอบข้างให้มารวมตัวกันเป็นวงล้อมรอบคุณ
|
||||||
hint.payloadPickup = กด [accent][[[] เพื่อหยิบบล็อกเล็กๆ หรือยูนิต
|
hint.payloadPickup = กด [accent][[[] เพื่อหยิบบล็อกเล็กๆ หรือยูนิต
|
||||||
hint.payloadPickup.mobile = [accent]กดค้างไว้[] ที่บล็อกเล็กๆ หรือตัวยูนิตเพื่อหยิบขึ้นมา
|
hint.payloadPickup.mobile = [accent]กดค้างไว้[]ที่บล็อกเล็กๆ หรือตัวยูนิตเพื่อหยิบขึ้นมา
|
||||||
hint.payloadDrop = กด [accent]][] เพื่อปล่อยสิ่งที่บรรทุกอยู่
|
hint.payloadDrop = กด [accent]][] เพื่อปล่อยสิ่งที่บรรทุกอยู่
|
||||||
hint.payloadDrop.mobile = [accent]กดค้างไว้[]ที่พื้นที่โล่งๆ เพื่อปล่อยสิ่งที่บรรทุกอยู่
|
hint.payloadDrop.mobile = [accent]กดค้างไว้[]ที่พื้นที่โล่งๆ เพื่อปล่อยสิ่งที่บรรทุกอยู่
|
||||||
hint.waveFire = ป้อมปืน[accent]คลื่นน้ำ[]หากมีน้ำเป็นกระสุนจะช่วยดับไฟรอบข้างให้อัตโนมัติ
|
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.coreIncinerate = เมื่อแกนกลางมีจำนวนไอเท็มชนิดหนึ่งที่เต็ม ไอเท็มชนิดนั้นที่เข้ามาเพิ่มจะ[accent]ถูกเผา[]
|
hint.coreIncinerate = เมื่อแกนกลางมีจำนวนไอเท็มชนิดหนึ่งที่เต็ม ไอเท็มชนิดนั้นที่เข้ามาเพิ่มจะ[accent]ถูกเผา[]
|
||||||
@@ -1386,9 +1391,9 @@ item.titanium.description = ใช้อย่างแพร่หลายใ
|
|||||||
item.titanium.details = โลหะเบาซึ่งหายากตามธรรมชาติ เป็นโลหะที่แข็งแรงใช้ได้ จึงใช้กันอย่างแพร่หลายในการแปรรูปหรือสิ่งก่อสร้าง
|
item.titanium.details = โลหะเบาซึ่งหายากตามธรรมชาติ เป็นโลหะที่แข็งแรงใช้ได้ จึงใช้กันอย่างแพร่หลายในการแปรรูปหรือสิ่งก่อสร้าง
|
||||||
item.thorium.description = ใช้ในการเสริมเกราะของสิ่งก่อสร้างต่างๆ หรือนำไปเป็นเป็นเชื้อเพลิงนิวเคลียร์
|
item.thorium.description = ใช้ในการเสริมเกราะของสิ่งก่อสร้างต่างๆ หรือนำไปเป็นเป็นเชื้อเพลิงนิวเคลียร์
|
||||||
item.thorium.details = แร่ธาตุที่หาได้ยากมากในธรรมชาติ เป็นแร่ธาตุที่ทั้งแข็งแกร่งและหนาแน่น จึงใช้กันอย่างแพร่หลายในสิ่งก่อสร้างคงทน มีคุณสมบัติพิเศษคือกัมมันตภาพรังสี ทำให้แร่ธาตุนี้อาจเป็นภัยหากใช้ในทางที่ผิด
|
item.thorium.details = แร่ธาตุที่หาได้ยากมากในธรรมชาติ เป็นแร่ธาตุที่ทั้งแข็งแกร่งและหนาแน่น จึงใช้กันอย่างแพร่หลายในสิ่งก่อสร้างคงทน มีคุณสมบัติพิเศษคือกัมมันตภาพรังสี ทำให้แร่ธาตุนี้อาจเป็นภัยหากใช้ในทางที่ผิด
|
||||||
item.scrap.description = ใช้ในเตาหลอมแร่และเครื่องบดเพื่อเปลี่ยนเป็นวัสดุอื่นๆ
|
item.scrap.description = ใช้ในเตาหลอมแร่และเครื่องบดอัดเพื่อเปลี่ยนเป็นวัสดุอื่นๆ
|
||||||
item.scrap.details = เศษที่เหลือจากสิ่งก่อสร้างและยูนิตเก่า มีร่องรอยของโลหะหลายชนิดอยู่ เกิดจากฐานทัพโบราณในสมัยสงครามเก่าแก่ถูกทำลาย ทำให้วัสดุต่างๆ พังลงมารวมกับ
|
item.scrap.details = เศษที่เหลือจากสิ่งก่อสร้างและยูนิตเก่า มีร่องรอยของโลหะหลายชนิดอยู่ เกิดจากฐานทัพโบราณในสมัยสงครามเก่าแก่ถูกทำลาย ทำให้วัสดุต่างๆ พังลงมารวมกับ
|
||||||
item.silicon.description = ใช้ในแผงโซล่าเซลล์ อุปกรณ์อิเล็กทรอนิกที่ซับซ้อนหรือนำไปเป็นกระสุนติดตามตัวสำหรับป้อมปืน
|
item.silicon.description = ใช้ในแผงโซล่าเซลล์ อุปกรณ์อิเล็กทรอนิกที่ซับซ้อน\nหรือนำไปเป็นกระสุนติดตามตัวสำหรับป้อมปืน
|
||||||
item.silicon.details = วัสดุกึ่งตัวนำที่มีประโยชน์มาก ผลิตจากการเผาทรายและถ่านหินเข้าด้วยกัน ใช้ในสิ่งก่อสร้างแทบทุกชนิดตั้งแต่ต้นเกมยันปลายเกม จึงควรผลิตวัสดุนี้ให้เยอะที่สุด
|
item.silicon.details = วัสดุกึ่งตัวนำที่มีประโยชน์มาก ผลิตจากการเผาทรายและถ่านหินเข้าด้วยกัน ใช้ในสิ่งก่อสร้างแทบทุกชนิดตั้งแต่ต้นเกมยันปลายเกม จึงควรผลิตวัสดุนี้ให้เยอะที่สุด
|
||||||
item.plastanium.description = ใช้ในอากาศยานขั้นสูง เป็นฉนวนกันความร้อนหรือนำไปเป็นกระสุนกระจาย
|
item.plastanium.description = ใช้ในอากาศยานขั้นสูง เป็นฉนวนกันความร้อนหรือนำไปเป็นกระสุนกระจาย
|
||||||
item.plastanium.details = วัสดุที่เบาและดัดได้ ผลิตจากการอัดไทเทเนี่ยมและน้ำมันเข้าด้วยกัน
|
item.plastanium.details = วัสดุที่เบาและดัดได้ ผลิตจากการอัดไทเทเนี่ยมและน้ำมันเข้าด้วยกัน
|
||||||
@@ -1410,13 +1415,14 @@ liquid.oil.details = ของเหลวเฉื่อยพบได้ไ
|
|||||||
liquid.cryofluid.description = ใช้ในการหล่อเย็นเตาปฏิกร สิ่งก่อสร้างหรือโรงงานต่างๆ
|
liquid.cryofluid.description = ใช้ในการหล่อเย็นเตาปฏิกร สิ่งก่อสร้างหรือโรงงานต่างๆ
|
||||||
liquid.cryofluid.details = ของเหลวเฉื่อยและไม่กัดกร่อน ผลิตจากน้ำและไทเทเนี่ยม มีคุณสมบัติการถ่ายเทความร้อนสูง
|
liquid.cryofluid.details = ของเหลวเฉื่อยและไม่กัดกร่อน ผลิตจากน้ำและไทเทเนี่ยม มีคุณสมบัติการถ่ายเทความร้อนสูง
|
||||||
|
|
||||||
block.resupply-point.description = เติมกระสุนยูนิตรอบข้างด้วยกระสุนทองแดง ใช้ไม่ได้กับยูนิตที่ใช้พลังงานเป็นกระสุน
|
block.derelict = [lightgray] ถูกทิ้งร้าง
|
||||||
|
block.resupply-point.description = เติมกระสุนยูนิตรอบข้างด้วยกระสุนทองแดง ใช้กับยูนิตที่ใช้พลังงานเป็นกระสุนไม่ได้
|
||||||
block.armored-conveyor.description = เลื่อนไอเท็มไปข้างหน้า เร็วเท่าสายพานไทเทเนี่ยม แต่มีเกราะที่แข็งแรงกว่า ไม่รับไอเท็มจากด้านข้างยกเว้นเป็นสายพานชนิดเดียวกัน
|
block.armored-conveyor.description = เลื่อนไอเท็มไปข้างหน้า เร็วเท่าสายพานไทเทเนี่ยม แต่มีเกราะที่แข็งแรงกว่า ไม่รับไอเท็มจากด้านข้างยกเว้นเป็นสายพานชนิดเดียวกัน
|
||||||
block.illuminator.description = ตัวเปล่งแสงขนาดกะทัดรัด ส่องสว่างในที่มืดได้ดี\nแถมยังกำหนดสีของแสงได้ด้วย... เจ๋งใช่มั้ยล่ะ
|
block.illuminator.description = ตัวเปล่งแสงขนาดกะทัดรัด ส่องสว่างในที่มืดได้ดี\nแถมยังกำหนดสีของแสงได้ด้วย... เจ๋งใช่มั้ยล่ะ
|
||||||
block.message.description = เก็บข้อความ ใช้สื่อสารกับพันธมิตร
|
block.message.description = เก็บข้อความ ใช้สื่อสารกับพันธมิตร
|
||||||
block.graphite-press.description = อัดก้อนถ่านหินให้เป็นแผ่นกราไฟต์บริสุทธิ์
|
block.graphite-press.description = อัดก้อนถ่านหินให้เป็นแผ่นกราไฟต์บริสุทธิ์
|
||||||
block.multi-press.description = อัดก้อนถ่านหินให้เป็นแผ่นกราไฟต์บริสุทธิ์ ใช้น้ำและพลังงานในการแปรรูปถ่านหินให้เร็วและมีประสิทธิภาพมากขึ้น
|
block.multi-press.description = อัดก้อนถ่านหินให้เป็นแผ่นกราไฟต์บริสุทธิ์ ใช้น้ำและพลังงานในการแปรรูปถ่านหินให้เร็วและมีประสิทธิภาพมากขึ้น
|
||||||
block.silicon-smelter.description = ผลิตซิลิกอนจากทรายและถ่านหินบริสุทธิ์
|
block.silicon-smelter.description = ผลิตซิลิกอนจากการหลอมทรายและถ่านหินเข้าด้วยกัน
|
||||||
block.kiln.description = เผาทรายและตะกั่วเป็นกระจกเมต้า
|
block.kiln.description = เผาทรายและตะกั่วเป็นกระจกเมต้า
|
||||||
block.plastanium-compressor.description = บีบอัดน้ำมันและไทเทเนี่ยมเข้าด้วยกันเพื่อผลิตพลาสตาเนี่ยม
|
block.plastanium-compressor.description = บีบอัดน้ำมันและไทเทเนี่ยมเข้าด้วยกันเพื่อผลิตพลาสตาเนี่ยม
|
||||||
block.phase-weaver.description = สังเคราะห์ใยเฟสจากทรายและทอเรี่ยม ใช้พลังงานจำนวนมากในการทำงาน
|
block.phase-weaver.description = สังเคราะห์ใยเฟสจากทรายและทอเรี่ยม ใช้พลังงานจำนวนมากในการทำงาน
|
||||||
@@ -1524,22 +1530,22 @@ 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 = พ่นของเหลวสาดใส่ศัตรู จะดับไฟให้อัตโนมัติเมื่อใส่น้ำเข้าไป
|
||||||
block.lancer.description = ป้อมปืนเลเซอร์ต่อต้านพื้นดินขนาดกลาง ชาร์จและยิงลำแสงพลังงานอันทรงพลังใส่ศัตรู
|
block.lancer.description = ชาร์จแล้วยิงลำแสงพลังงานอันทรงพลังใส่ศัตรูพื้นดิน
|
||||||
block.arc.description = ป้อมปืนไฟฟ้าระยะใกล้ ยิงสายฟ้าใส่ศัตรูพื้นดิน จะทำดาเมจมหาศาลเมื่อศัตรูเปียกน้ำ
|
block.arc.description = ยิงสายฟ้าใส่ศัตรูพื้นดิน จะทำดาเมจมหาศาลเมื่อศัตรูเปียกน้ำ
|
||||||
block.swarmer.description = ป้อมยิงขีปนาวุธขนาดกลาง ยิงขีปนาวุธติดตามตัวใส่ศัตรูทั้งอากาศและพื้นดิน
|
block.swarmer.description = ยิงขีปนาวุธติดตามตัวใส่ศัตรูทั้งอากาศและพื้นดิน
|
||||||
block.salvo.description = ป้อมปืนขนาดกลาง ระดมยิงกระสุนหนักใส่ศัตรูอย่างรวดเร็ว
|
block.salvo.description = ป้อมปืนขนาดกลาง ระดมยิงกระสุนหนักใส่ศัตรูอย่างรวดเร็ว
|
||||||
block.fuse.description = ป้อมปืนระยะใกล้ขนาดใหญ่ ยิงลำแสงเจาะทะลุสามเส้นใส่ศัตรูที่อยู่ใกล้เคียง
|
block.fuse.description = ป้อมปืนระยะใกล้ขนาดใหญ่ ยิงลำแสงเจาะทะลุสามแฉกใส่ศัตรูที่อยู่ใกล้เคียง
|
||||||
block.ripple.description = ป้อมปืนใหญ่พลังงานสูง ยิงกระจุกของลูกระเบิดใส่ศัตรูพื้นดินจากระยะไกล
|
block.ripple.description = ป้อมปืนใหญ่ทรงพลัง ยิงลูกระเบิดเป็นกระจุกใส่ศัตรูพื้นดินจากระยะไกล
|
||||||
block.cyclone.description = ป้อมปืนต่อต้านทั้งอากาศยานและพื้นดิน ยิงกระสุนเป็นกระจุกระเบิดใส่ยูนิตศัตรูอย่างรวดเร็ว
|
block.cyclone.description = ป้อมปืนรวดเร็วดั่งพายุ ยิงก้อนสะเก็ดระเบิดใส่ยูนิตศัตรูอย่างรวดเร็ว
|
||||||
block.spectre.description = ปืนใหญ่คู่ขนาดยักษ์ ยิงกระสุนเจาะเกราะใส่ศัตรูทั้งบนอากาศและพื้นดิน
|
block.spectre.description = ปืนใหญ่คู่ขนาดยักษ์ ยิงกระสุนเจาะเกราะใส่ศัตรูทั้งบนอากาศและพื้นดิน
|
||||||
block.meltdown.description = ชาร์จแล้วยิงลำแสงเลเซอร์ใส่ศัตรูที่อยู่ใกล้เคียงอย่างต่อเนื่อง ต้องมีของเหลวมาหล่อเย็นป้อมปืนเพื่อทำงาน
|
block.meltdown.description = ชาร์จแล้วยิงลำแสงเลเซอร์ใส่ศัตรูที่อยู่ใกล้เคียงอย่างต่อเนื่อง ต้องมีของเหลวมาหล่อเย็นป้อมปืนเพื่อทำงาน
|
||||||
block.foreshadow.description = ป้อมปืนเรลกันขนาดมหึมา ยิงลำแสงพลังงานใส่เป้าหมายเดี่ยวขนาดใหญ่\nมีระยะการยิงไกลมาก จะเลือกยิงยูนิตที่มีพลังชีวิตมากที่สุดก่อน
|
block.foreshadow.description = ป้อมปืนเรลกันขนาดมหึมา ยิงลำแสงพลังงานใส่เป้าหมายเดี่ยวขนาดใหญ่\nมีระยะการยิงไกลมาก จะเลือกยิงยูนิตที่มีพลังชีวิตมากที่สุดก่อน
|
||||||
block.repair-point.description = ซ่อมแซมยูนิตที่อยู่ในรัศมีอย่างต่อเนื่อง
|
block.repair-point.description = ซ่อมแซมยูนิตที่อยู่ในรัศมีของมันอย่างต่อเนื่อง
|
||||||
block.segment.description = สร้างความเสียหายและทำลายกระสุนที่กำลังเข้ามา ไม่สามารถทำลายลำแสงเลเซอร์ได้
|
block.segment.description = สร้างความเสียหายและทำลายกระสุนที่กำลังเข้ามา ไม่สามารถทำลายลำแสงเลเซอร์ได้
|
||||||
block.parallax.description = ยิงลำแสงที่ดึงยานบินศัตรูเข้าหา สร้างความเสียหายแก่พวกมันระหว่างทาง
|
block.parallax.description = ยิงลำแสงที่ดึงยานบินศัตรูเข้าหา สร้างความเสียหายแก่พวกมันระหว่างทาง
|
||||||
block.tsunami.description = ยิงกระแสของเหลวอันทรงพลังใส่ศัตรู จะดับไฟให้อัตโนมัติเมื่อใส่น้ำเข้าไป
|
block.tsunami.description = ยิงกระแสของเหลวอันทรงพลังใส่ศัตรู จะดับไฟให้อัตโนมัติเมื่อใส่น้ำเข้าไป
|
||||||
block.silicon-crucible.description = หลอมซิลิกอนจากทรายและถ่าน ใช้ไพราไทต์เป็นแหล่งความร้อนเพิ่มเติม ทำงานเร็วกว่าถ้าตั้งอยู่ในพื้นที่ร้อน
|
block.silicon-crucible.description = หลอมซิลิกอนจากทรายและถ่านหิน ใช้ไพราไทต์เป็นแหล่งความร้อนเพิ่มเติม จะทำงานเร็วกว่าถ้าตั้งอยู่ในพื้นที่ร้อน
|
||||||
block.disassembler.description = แยกแร่หลอมออกเป็นแร่ธาตุปริมาณเล็กน้อยโดยมีประสิทธิภาพต่ำ สามารถผลิตทอเรี่ยมได้
|
block.disassembler.description = แยกแร่หลอมออกเป็นแร่ธาตุปริมาณเล็กน้อยโดยมีประสิทธิภาพต่ำ สามารถผลิตทอเรี่ยมได้
|
||||||
block.overdrive-dome.description = เร่งประสิทธิภาพสิ่งก่อสร้างรอบข้างอย่างมหาศาล ต้องมีใยเฟสกับซิลิกอนเพื่อทำงาน
|
block.overdrive-dome.description = เร่งประสิทธิภาพสิ่งก่อสร้างรอบข้างอย่างมหาศาล ต้องมีใยเฟสกับซิลิกอนเพื่อทำงาน
|
||||||
block.payload-conveyor.description = เคลื่อนย้ายสิ่งของบรรทุกหนัก อย่างเช่นยูนิต
|
block.payload-conveyor.description = เคลื่อนย้ายสิ่งของบรรทุกหนัก อย่างเช่นยูนิต
|
||||||
@@ -1561,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 = บล็อกขนส่งสิ่งบรรทุกทางไกล\nยิงสิ่งบรรทุกไปยังหอเคลื่อนย้ายสิ่งบรรทุกอีกเครื่องที่เชื่อมต่อไว้
|
||||||
|
|
||||||
unit.dagger.description = ยิงกระสุนธรรมดาใส่ศัตรูที่อยู่ใกล้เคียง
|
unit.dagger.description = ยิงกระสุนธรรมดาใส่ศัตรูที่อยู่ใกล้เคียง
|
||||||
unit.mace.description = ยิงเปลวไฟใส่ศัตรูที่อยู่ใกล้เคียง ทำให้ศัตรูถูกเผาไหม้
|
unit.mace.description = ยิงเปลวไฟใส่ศัตรูที่อยู่ใกล้เคียง ทำให้ศัตรูถูกเผาไหม้
|
||||||
@@ -1595,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 = ยิงเปลวไฟเผาไหม้ใส่ศัตรูที่อยู่ใกล้เคียงและซ่อมแซมสิ่งก่อสร้างของพวกพ้อง\nทำลายกระสุนที่กำลังเข้ามาด้วยปืนป้องกันจุด
|
||||||
|
unit.cyerce.description = ยิงขีปนาวุธพลาสม่าติดตามตัวเป็นกระจุกระเบิดใส่ศัตรู\nซ่อมแซมยูนิตพวกพ้องที่อยู่ใกล้เคียง
|
||||||
|
unit.aegires.description = ช็อตทุกสิ่งก่อสร้างและยูนิตศัตรูที่เข้ามาในสนามพลังงานของมัน\nซ่อมแซมสิ่งก่อสร้างและยูนิตพวกพ้อง
|
||||||
|
unit.navanax.description = ยิงลูกระเบิดคลื่นชีพจรแม่เหล็กขนาดใหญ่ สร้างความเสียหายอย่างหนักให้กับเครือข่ายพลังงานศัตรู\nและซ่อมแซมสิ่งก่อสร้างของพวกพ้อง\nหลอมละลายศัตรูที่อยู่ใกล้เคียงด้วยป้อมปืนเลเซอร์อัตโนมัติสี่ป้อม
|
||||||
|
|
||||||
lst.read = อ่านเลขจากเซลล์ความจำที่เชื่อมต่อไว้
|
lst.read = อ่านเลขจากเซลล์ความจำที่เชื่อมต่อไว้
|
||||||
lst.write = เขียนเลขไปยังเซลล์ความจำที่เชื่อมต่อไว้
|
lst.write = เขียนเลขไปยังเซลล์ความจำที่เชื่อมต่อไว้
|
||||||
|
|||||||
@@ -55,15 +55,24 @@ schematic.delete.confirm = Ви справді хочете видалити ц
|
|||||||
schematic.rename = Перейменувати схему
|
schematic.rename = Перейменувати схему
|
||||||
schematic.info = {0}x{1}, блоків: {2}
|
schematic.info = {0}x{1}, блоків: {2}
|
||||||
schematic.disabled = [scarlet]Схеми вимкнені[]\nВам не дозволяється використовувати схеми на цій [accent]мапі[] чи [accent]сервері.
|
schematic.disabled = [scarlet]Схеми вимкнені[]\nВам не дозволяється використовувати схеми на цій [accent]мапі[] чи [accent]сервері.
|
||||||
|
schematic.tags = Мітки:
|
||||||
|
schematic.edittags = Редагувати мітки
|
||||||
|
schematic.addtag = Додати мітку
|
||||||
|
schematic.texttag = Текстова мітка
|
||||||
|
schematic.icontag = Мітка із значком
|
||||||
|
schematic.renametag = Перейменувати мітку
|
||||||
|
schematic.tagdelconfirm = Видалити цю мітку повністю?
|
||||||
|
schematic.tagexists = Схожа мітка вже існує.
|
||||||
|
|
||||||
|
|
||||||
mod.featured.title = Переглядач модифікацій
|
mod.featured.title = Переглядач модифікацій
|
||||||
mods.browser = Переглядач модифікацій
|
mods.browser = Переглядач модифікацій
|
||||||
mods.browser.selected = Обрана модифікація
|
mods.browser.selected = Вибрана модифікація
|
||||||
mods.browser.add = Установити
|
mods.browser.add = Установити
|
||||||
mods.browser.reinstall = Перевстановити
|
mods.browser.reinstall = Перевстановити
|
||||||
mods.github.open = Відкрити
|
mods.github.open = Відкрити
|
||||||
mods.browser.sortdate = Сортувати за давністю
|
mods.browser.sortdate = Сортувати за давністю
|
||||||
mods.browser.sortstars = Сортувати за кількостю зірок
|
mods.browser.sortstars = Сортувати за популярністю
|
||||||
|
|
||||||
stats = Статистика
|
stats = Статистика
|
||||||
stat.wave = Хвиль відбито:[accent] {0}
|
stat.wave = Хвиль відбито:[accent] {0}
|
||||||
@@ -298,7 +307,6 @@ data.exported = Дані вивантажено.
|
|||||||
data.invalid = Це не дійсні ігрові дані.
|
data.invalid = Це не дійсні ігрові дані.
|
||||||
data.import.confirm = Вивантаження зовнішніх даних перезапише[scarlet] ВСІ[] ваші поточні ігрові дані.\n[accent]Це неможливо скасувати![]\n\nЯк тільки дані імпортуються, гра негайно закриється.
|
data.import.confirm = Вивантаження зовнішніх даних перезапише[scarlet] ВСІ[] ваші поточні ігрові дані.\n[accent]Це неможливо скасувати![]\n\nЯк тільки дані імпортуються, гра негайно закриється.
|
||||||
quit.confirm = Ви дійсно хочете вийти?
|
quit.confirm = Ви дійсно хочете вийти?
|
||||||
quit.confirm.tutorial = Ви впевнені, що знаєте, що робите?\nНавчання можна пройти наново[accent] Налаштування->Гра->Пройти навчання ще раз.[]
|
|
||||||
loading = [accent]Завантаження…
|
loading = [accent]Завантаження…
|
||||||
reloading = [accent]Перезавантаження модифікацій…
|
reloading = [accent]Перезавантаження модифікацій…
|
||||||
saving = [accent]Збереження…
|
saving = [accent]Збереження…
|
||||||
@@ -463,11 +471,13 @@ filter.option.circle-scale = Масштаб круга
|
|||||||
filter.option.octaves = Циклічність застосування
|
filter.option.octaves = Циклічність застосування
|
||||||
filter.option.falloff = Спад циклічності
|
filter.option.falloff = Спад циклічності
|
||||||
filter.option.angle = Кут
|
filter.option.angle = Кут
|
||||||
|
filter.option.rotate = Повернути
|
||||||
filter.option.amount = Кількість
|
filter.option.amount = Кількість
|
||||||
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 = Друга поверхня
|
filter.option.floor2 = Друга поверхня
|
||||||
@@ -483,7 +493,8 @@ load = Завантажити
|
|||||||
save = Зберегти
|
save = Зберегти
|
||||||
fps = FPS: {0}
|
fps = FPS: {0}
|
||||||
ping = Затримка: {0} мс
|
ping = Затримка: {0} мс
|
||||||
memory = Mem: {0}мб
|
tps = TPS: {0}
|
||||||
|
memory = Mem: {0} мб
|
||||||
memory2 = Mem:\n {0}мб +\n {1}мб
|
memory2 = Mem:\n {0}мб +\n {1}мб
|
||||||
language.restart = Перезапустіть свою гру, щоби налаштування мови набули чинності.
|
language.restart = Перезапустіть свою гру, щоби налаштування мови набули чинності.
|
||||||
settings = Налаштування
|
settings = Налаштування
|
||||||
@@ -513,7 +524,7 @@ launch.from = Запуск з [accent]{0}
|
|||||||
launch.destination = Пункт призначення: {0}
|
launch.destination = Пункт призначення: {0}
|
||||||
configure.invalid = Кількість має бути числом між 0 та {0}.
|
configure.invalid = Кількість має бути числом між 0 та {0}.
|
||||||
add = Додати…
|
add = Додати…
|
||||||
boss.health = Здоров’я Вартового
|
guardian = Вартовий
|
||||||
connectfail = [crimson]Помилка з’єднання:\n\n[accent]{0}
|
connectfail = [crimson]Помилка з’єднання:\n\n[accent]{0}
|
||||||
error.unreachable = Сервер не є доступним.\nЧи правильно написана адреса?
|
error.unreachable = Сервер не є доступним.\nЧи правильно написана адреса?
|
||||||
error.invalidaddress = Некоректна адреса.
|
error.invalidaddress = Некоректна адреса.
|
||||||
@@ -553,6 +564,7 @@ sector.missingresources = [scarlet]Недостатньо ресурсів у я
|
|||||||
sector.attacked = Сектор [accent]{0}[white] під атакою!
|
sector.attacked = Сектор [accent]{0}[white] під атакою!
|
||||||
sector.lost = Сектор [accent]{0}[white] втрачено!
|
sector.lost = Сектор [accent]{0}[white] втрачено!
|
||||||
sector.captured = Сектор [accent]{0}[white]захоплено!
|
sector.captured = Сектор [accent]{0}[white]захоплено!
|
||||||
|
sector.changeicon = Змінити значок
|
||||||
threat.low = низька
|
threat.low = низька
|
||||||
threat.medium = середня
|
threat.medium = середня
|
||||||
threat.high = висока
|
threat.high = висока
|
||||||
@@ -600,6 +612,7 @@ status.wet.name = Вологий
|
|||||||
status.muddy.name = Забризканий гряззю
|
status.muddy.name = Забризканий гряззю
|
||||||
status.melting.name = Плавиться
|
status.melting.name = Плавиться
|
||||||
status.sapped.name = Виснажений
|
status.sapped.name = Виснажений
|
||||||
|
status.electrified.name = Наелектризований
|
||||||
status.spore-slowed.name = Сповільнений спорами
|
status.spore-slowed.name = Сповільнений спорами
|
||||||
status.tarred.name = Покритий нафтою
|
status.tarred.name = Покритий нафтою
|
||||||
status.overclock.name = Прискорений
|
status.overclock.name = Прискорений
|
||||||
@@ -628,6 +641,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 = Інформація
|
||||||
@@ -636,6 +650,7 @@ error.crashtitle = Виникла помилка
|
|||||||
unit.nobuild = [scarlet]Ця одиниця не може будувати
|
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 = Вивід
|
||||||
@@ -665,6 +680,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 = Збільшення швидкості
|
||||||
@@ -713,11 +729,12 @@ stat.reactive = Реактивний
|
|||||||
|
|
||||||
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 = Блискавки під час руху
|
||||||
bar.drilltierreq = Потребується кращий бур
|
ability.energyfield = Енергетичне поле: [accent]{0}[] шкоди ~ [accent]{1}[] блоків / [accent]{2}[] цілей
|
||||||
|
bar.drilltierreq = Потрібен ліпший бур
|
||||||
bar.noresources = Бракує ресурсів
|
bar.noresources = Бракує ресурсів
|
||||||
bar.corereq = Необхідне основне ядро
|
bar.corereq = Необхідне основне ядро
|
||||||
bar.drillspeed = Швидкість буріння: {0} за с.
|
bar.drillspeed = Швидкість буріння: {0} за с.
|
||||||
@@ -738,6 +755,7 @@ bar.power = Енергія
|
|||||||
bar.progress = Хід будування
|
bar.progress = Хід будування
|
||||||
bar.input = Ввід
|
bar.input = Ввід
|
||||||
bar.output = Вивід
|
bar.output = Вивід
|
||||||
|
bar.strength = x[stat]{0}[lightgray] сила
|
||||||
units.processorcontrol = [lightgray]Керується процесором
|
units.processorcontrol = [lightgray]Керується процесором
|
||||||
bullet.damage = [stat]{0}[lightgray] шкода
|
bullet.damage = [stat]{0}[lightgray] шкода
|
||||||
bullet.splashdamage = [stat]{0}[lightgray] шкода по ділянці ~[stat] {1}[lightgray] плиток
|
bullet.splashdamage = [stat]{0}[lightgray] шкода по ділянці ~[stat] {1}[lightgray] плиток
|
||||||
@@ -755,6 +773,7 @@ bullet.reload = [stat]{0}[lightgray]x швидкість перезаряджа
|
|||||||
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 = одиниць рідини
|
||||||
@@ -939,6 +958,8 @@ rules.wavetimer = Таймер для хвиль
|
|||||||
rules.waves = Хвилі
|
rules.waves = Хвилі
|
||||||
rules.attack = Режим атаки
|
rules.attack = Режим атаки
|
||||||
rules.buildai = Будування ШІ
|
rules.buildai = Будування ШІ
|
||||||
|
rules.corecapture = Захоплення ядра після знищення
|
||||||
|
rules.polygoncoreprotection = Полігональний захист ядер
|
||||||
rules.enemyCheat = Нескінченні ресурси для червоної команди ШІ
|
rules.enemyCheat = Нескінченні ресурси для червоної команди ШІ
|
||||||
rules.blockhealthmultiplier = Множник здоров’я блоків
|
rules.blockhealthmultiplier = Множник здоров’я блоків
|
||||||
rules.blockdamagemultiplier = Множник шкоди блоків
|
rules.blockdamagemultiplier = Множник шкоди блоків
|
||||||
@@ -1022,6 +1043,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 = Гамма
|
||||||
@@ -1081,6 +1107,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 = Крижаний сніг
|
||||||
@@ -1098,7 +1125,8 @@ 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-5.name = Металева підлога 4
|
block.metal-floor-4.name = Металева підлога 4
|
||||||
|
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
|
||||||
block.dark-panel-2.name = Темна панель 2
|
block.dark-panel-2.name = Темна панель 2
|
||||||
@@ -1188,6 +1216,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-point.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 = Фазовий трубопровід
|
||||||
@@ -1230,6 +1259,12 @@ 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 = Duct
|
||||||
|
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 = Великий прискорювач
|
||||||
@@ -1246,8 +1281,8 @@ 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 = Зелена
|
||||||
@@ -1268,6 +1303,7 @@ hint.placeConveyor.mobile = Конвеєри переміщують предме
|
|||||||
hint.placeTurret = Розмістіть [accent]башти[], щоби захистити базу від ворогів.\n\nБашти потребують боєприпасів. У цьому випадку \uf838мідь.\nДля її подачі використовуйте конвеєри та бури.
|
hint.placeTurret = Розмістіть [accent]башти[], щоби захистити базу від ворогів.\n\nБашти потребують боєприпасів. У цьому випадку \uf838мідь.\nДля її подачі використовуйте конвеєри та бури.
|
||||||
hhint.breaking = Натисніть [accent]ПКМ[] і тягніть, щоби зруйнувати блоки.
|
hhint.breaking = Натисніть [accent]ПКМ[] і тягніть, щоби зруйнувати блоки.
|
||||||
hint.breaking.mobile = Активуйте [accent]молот[] внизу праворуч і торкніться блоків, щоби їх розібрати.\n\nУтримуйте палець протягом секунди і протягніть, щоби розібрати виділене.
|
hint.breaking.mobile = Активуйте [accent]молот[] внизу праворуч і торкніться блоків, щоби їх розібрати.\n\nУтримуйте палець протягом секунди і протягніть, щоби розібрати виділене.
|
||||||
|
hint.blockInfo = Подивіться інформацію про блок. Перейдіть до [accent]меню будівництва[] і натисніть на кнопку [accent][[?][] правпоруч
|
||||||
hint.research = Використовуйте кнопку [accent]Дослідження[] для дослідження нової технології.
|
hint.research = Використовуйте кнопку [accent]Дослідження[] для дослідження нової технології.
|
||||||
hint.research.mobile = Використовуйте [accent]Дослідження[] в [accent]меню[] для дослідження нової технології.
|
hint.research.mobile = Використовуйте [accent]Дослідження[] в [accent]меню[] для дослідження нової технології.
|
||||||
hint.unitControl = Утримуйте [accent][[лівий Ctrl][] і [accent]натисніть[] на одиницю чи башту, щоби контролювати її.
|
hint.unitControl = Утримуйте [accent][[лівий Ctrl][] і [accent]натисніть[] на одиницю чи башту, щоби контролювати її.
|
||||||
@@ -1300,7 +1336,7 @@ item.graphite.description = Використовується для боєпри
|
|||||||
item.sand.description = Використовується для виробництва інших удосконалених матеріалів.
|
item.sand.description = Використовується для виробництва інших удосконалених матеріалів.
|
||||||
item.coal.description = Використовується для виробництва палива і вдосконалених матеріалів.
|
item.coal.description = Використовується для виробництва палива і вдосконалених матеріалів.
|
||||||
item.coal.details = Виглядає скам’янілою рослинною речовиною, утвореною задовго до Сівби.
|
item.coal.details = Виглядає скам’янілою рослинною речовиною, утвореною задовго до Сівби.
|
||||||
item.titanium.description = Використовується в транспортуванні рідин, бурів та авіації.
|
item.titanium.description = Використовується в транспортуванні будівль, бурів та в заводах.
|
||||||
item.thorium.description = Використовується в міцних конструкціях і як ядерне паливо.
|
item.thorium.description = Використовується в міцних конструкціях і як ядерне паливо.
|
||||||
item.scrap.description = Використовується в Плавильнях і Подрібнювачах для перероблення в інші матеріали в інші матеріали.
|
item.scrap.description = Використовується в Плавильнях і Подрібнювачах для перероблення в інші матеріали в інші матеріали.
|
||||||
item.scrap.details = Залишки старих споруд та підрозділів.
|
item.scrap.details = Залишки старих споруд та підрозділів.
|
||||||
@@ -1507,6 +1543,8 @@ lst.sensor = Отримати дані з певної будівлі чи од
|
|||||||
lst.set = Установити значення змінної.
|
lst.set = Установити значення змінної.
|
||||||
lst.operation = Виконує операцію над 1-2 змінними.
|
lst.operation = Виконує операцію над 1-2 змінними.
|
||||||
lst.end = Перейти до верхньої частини стеку операцій.
|
lst.end = Перейти до верхньої частини стеку операцій.
|
||||||
|
lst.wait = Зачекати певну кількість секунд.
|
||||||
|
lst.lookup = Знайдіть тип елемента, рідини, одиниці чи блоку за ідентифікатором.\nМожна отримати доступ до загальної кількості кожного типу через \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 = Контролювати поточну прив’язану одиницю.
|
||||||
@@ -1518,7 +1556,7 @@ logic.nounitbuild = [red]Будування за допомогою процес
|
|||||||
lenum.type = Тип будівлі чи одиниці.\nНаприклад, для будь-якого маршрутизатора (англ. router), функція вертатиме [accent]@router[].\nНе є рядком.
|
lenum.type = Тип будівлі чи одиниці.\nНаприклад, для будь-якого маршрутизатора (англ. router), функція вертатиме [accent]@router[].\nНе є рядком.
|
||||||
lenum.shoot = Стріляти в зазначену позицію.
|
lenum.shoot = Стріляти в зазначену позицію.
|
||||||
lenum.shootp = Стріляти в одиницю чи будівлю із передбаченням швидкості.
|
lenum.shootp = Стріляти в одиницю чи будівлю із передбаченням швидкості.
|
||||||
lenum.configure = Конфігурація будівлі, як-от в сортувальника.
|
lenum.config = Конфігурація будівлі, як-от в сортувальника.
|
||||||
lenum.enabled = Чи блок увімкнено.
|
lenum.enabled = Чи блок увімкнено.
|
||||||
|
|
||||||
laccess.color = Колір освітлювача.
|
laccess.color = Колір освітлювача.
|
||||||
@@ -1526,6 +1564,7 @@ laccess.controller = Керувач одиницями. Якщо процесо
|
|||||||
laccess.dead = Чи є одиниця або будівля мертвою або недійсною.
|
laccess.dead = Чи є одиниця або будівля мертвою або недійсною.
|
||||||
laccess.controlled = Повертає \n[accent]@ctrlProcessor[] якщо одиниця контролюється процесором;\n[accent]@ctrlPlayer[] якщо одиниця чи будівля контролюєть гравцем\n[accent]@ctrlFormation[] якщо одиниця у загоні (формуванні)\nІнакше — 0.
|
laccess.controlled = Повертає \n[accent]@ctrlProcessor[] якщо одиниця контролюється процесором;\n[accent]@ctrlPlayer[] якщо одиниця чи будівля контролюєть гравцем\n[accent]@ctrlFormation[] якщо одиниця у загоні (формуванні)\nІнакше — 0.
|
||||||
laccess.commanded = [red]Застаріле. Буде видалено![]\nВикористовуйте натомість [accent]controlled[].
|
laccess.commanded = [red]Застаріле. Буде видалено![]\nВикористовуйте натомість [accent]controlled[].
|
||||||
|
laccess.progress = Прогрес дії, від 0 до 1.\nПовертає виробництво, перезавантаження башти або хід будівництва.
|
||||||
|
|
||||||
graphicstype.clear = Залити дисплей вказаним кольором.
|
graphicstype.clear = Залити дисплей вказаним кольором.
|
||||||
graphicstype.color = Установити колір для подальшої операції малювання.
|
graphicstype.color = Установити колір для подальшої операції малювання.
|
||||||
@@ -1560,6 +1599,9 @@ lenum.len = Довжина вектора.
|
|||||||
lenum.sin = Синус, у градусах.
|
lenum.sin = Синус, у градусах.
|
||||||
lenum.cos = Косинус, у градусах.
|
lenum.cos = Косинус, у градусах.
|
||||||
lenum.tan = Тангенс, у градусах.
|
lenum.tan = Тангенс, у градусах.
|
||||||
|
lenum.asin = Арксинус, у градусах.
|
||||||
|
lenum.acos = Арккосинус, у градусах.
|
||||||
|
lenum.atan = Арктангенс, у градусах.
|
||||||
#це не одруківка, пошукайте 'позначення діапазону'
|
#це не одруківка, пошукайте 'позначення діапазону'
|
||||||
lenum.rand = Випадкове десяткове число у діапазоні [0, значення).
|
lenum.rand = Випадкове десяткове число у діапазоні [0, значення).
|
||||||
lenum.log = Натуральний логарифм (ln).
|
lenum.log = Натуральний логарифм (ln).
|
||||||
|
|||||||
@@ -41,10 +41,13 @@ be.ignore = 忽略
|
|||||||
be.noupdates = 未发现更新。
|
be.noupdates = 未发现更新。
|
||||||
be.check = 检测更新
|
be.check = 检测更新
|
||||||
|
|
||||||
mod.featured.dialog.title = 模组浏览器 (尚未完成)
|
mods.browser = 模组浏览器
|
||||||
mods.browser.selected = 已选模组
|
mods.browser.selected = 已选模组
|
||||||
mods.browser.add=安装
|
mods.browser.add = 安装
|
||||||
mods.github.open=查看
|
mods.browser.reinstall = 重装
|
||||||
|
mods.github.open = 查看
|
||||||
|
mods.browser.sortdate = 按时间排序
|
||||||
|
mods.browser.sortstars = 按星标排序
|
||||||
|
|
||||||
schematic = 蓝图
|
schematic = 蓝图
|
||||||
schematic.add = 保存蓝图…
|
schematic.add = 保存蓝图…
|
||||||
@@ -64,6 +67,14 @@ schematic.delete.confirm = 确认删除蓝图?
|
|||||||
schematic.rename = 重命名蓝图
|
schematic.rename = 重命名蓝图
|
||||||
schematic.info = {0}x{1},{2} 个方块
|
schematic.info = {0}x{1},{2} 个方块
|
||||||
schematic.disabled = [scarlet]蓝图已禁用![]\n您不能在此[accent]地图[]或[accent]服务器[]上使用蓝图.
|
schematic.disabled = [scarlet]蓝图已禁用![]\n您不能在此[accent]地图[]或[accent]服务器[]上使用蓝图.
|
||||||
|
schematic.tags = 标签:
|
||||||
|
schematic.edittags = 编辑标签
|
||||||
|
schematic.addtag = 增加新标签
|
||||||
|
schematic.texttag = 文字标签
|
||||||
|
schematic.icontag = 图标标签
|
||||||
|
schematic.renametag = 重命名标签
|
||||||
|
schematic.tagdelconfirm = 确定要完全删除这个标签吗?
|
||||||
|
schematic.tagexists = 这个标签已经存在了。
|
||||||
|
|
||||||
stats = 统计资料
|
stats = 统计资料
|
||||||
stat.wave = 防守波数:[accent]{0}
|
stat.wave = 防守波数:[accent]{0}
|
||||||
@@ -90,6 +101,7 @@ customgame = 自定义游戏
|
|||||||
newgame = 新游戏
|
newgame = 新游戏
|
||||||
none = <无>
|
none = <无>
|
||||||
none.found = [lightgray]<未找到>
|
none.found = [lightgray]<未找到>
|
||||||
|
none.inmap = [lightgray]<无法在地图中找到>
|
||||||
minimap = 小地图
|
minimap = 小地图
|
||||||
position = 位置
|
position = 位置
|
||||||
close = 关闭
|
close = 关闭
|
||||||
@@ -110,26 +122,29 @@ committingchanges = 正在提交更改
|
|||||||
done = 已完成
|
done = 已完成
|
||||||
feature.unsupported = 您的设备不支持此功能。
|
feature.unsupported = 您的设备不支持此功能。
|
||||||
|
|
||||||
mods.alphainfo = 请注意,测试版本中的模组[scarlet]很容易存在缺陷[]。\n在 Mindustry 的 GitHub 或 Discord 上报告你发现的问题。
|
mods.initfailed = [red]⚠[] 前一次的mindustry启动失败,这可能是由存在异常的模组导致的。\n\n为了防止循环崩溃,[red]所有模组都被禁用了。[]\n\n如果想关闭这个功能,可以在[accent]设置->游戏->游戏启动崩溃时不禁用模组[]里关闭.
|
||||||
mods = 模组
|
mods = 模组
|
||||||
mods.none = [lightgray]没有找到模组!
|
mods.none = [lightgray]没有找到模组!
|
||||||
mods.guide = 模组制作教程
|
mods.guide = 模组制作教程
|
||||||
mods.report = 报告 Bug
|
mods.report = 报告 Bug
|
||||||
mods.openfolder = 打开模组文件夹
|
mods.openfolder = 打开模组文件夹
|
||||||
|
mods.viewcontent = 查看内容
|
||||||
mods.reload = 重载
|
mods.reload = 重载
|
||||||
mods.reloadexit = 游戏将退出以重载模组。
|
mods.reloadexit = 游戏将退出以重载模组。
|
||||||
|
mod.installed = [[已装载]
|
||||||
mod.display = [gray]模组:[orange] {0}
|
mod.display = [gray]模组:[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.delete.error = 无法删除模组。文件可能正在使用中。
|
||||||
mod.requiresversion = [scarlet]所需的游戏版本:[accent]{0}
|
mod.requiresversion = [scarlet]所需的最低游戏版本:[accent]{0}
|
||||||
mod.outdated = [scarlet]该模组可能不能在6.0上正确地运行(缺失 minGameVersion: 105)
|
mod.outdated = [scarlet]该模组可能不能在6.0上正确地运行(缺失 minGameVersion: 105)
|
||||||
mod.missingdependencies = [scarlet]缺少前置模组:{0}
|
mod.missingdependencies = [scarlet]缺少前置模组:{0}
|
||||||
mod.erroredcontent = [scarlet]内容错误
|
mod.erroredcontent = [scarlet]内容错误
|
||||||
mod.errors = 读取内容时发生错误.
|
mod.errors = 读取内容时发生错误.
|
||||||
mod.noerrorplay = [scarlet]你的模组发生了错误.[] 禁用相关模组或修复错误后才能进入游戏.
|
mod.noerrorplay = [scarlet]您的模组发生了错误.[] 禁用相关模组或修复错误后才能进入游戏.
|
||||||
mod.nowdisabled = [scarlet]“{0}”模组缺少依赖条件:[accent] {1}\n[lightgray]需要先下载上述模组。\n此模组现在将自动禁用。
|
mod.nowdisabled = [scarlet]“{0}”模组缺少依赖条件:[accent] {1}\n[lightgray]需要先下载上述模组。\n此模组现在将自动禁用。
|
||||||
mod.enable = 启用
|
mod.enable = 启用
|
||||||
mod.requiresrestart = 需要重启使模组生效。
|
mod.requiresrestart = 需要重启使模组生效。
|
||||||
@@ -165,19 +180,19 @@ researched = [lightgray]{0}己研究。
|
|||||||
research.progress = {0}% 完成度
|
research.progress = {0}% 完成度
|
||||||
players = {0} 位玩家在线
|
players = {0} 位玩家在线
|
||||||
players.single = {0} 位玩家在线
|
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 = 您被投票踢出了服务器。
|
||||||
server.kicked.clientOutdated = 客户端过旧,请更新你的游戏。
|
server.kicked.clientOutdated = 客户端过旧,请更新您的游戏。
|
||||||
server.kicked.serverOutdated = 服务器过旧,请联系服务器管理员升级服务器。
|
server.kicked.serverOutdated = 服务器过旧,请联系服务器管理员升级服务器。
|
||||||
server.kicked.banned = 您在这个服务器上被封禁了。
|
server.kicked.banned = 您在这个服务器上被封禁了。
|
||||||
server.kicked.typeMismatch = 此服务器与你的不稳定测试版不兼容。
|
server.kicked.typeMismatch = 此服务器与您的不稳定测试版不兼容。
|
||||||
server.kicked.playerLimit = 服务器已满,请等待一个空位。
|
server.kicked.playerLimit = 服务器已满,请等待一个空位。
|
||||||
server.kicked.recentKick = 你刚刚被踢出服务器。\n请稍后重新连接!
|
server.kicked.recentKick = 您刚刚被踢出服务器。\n请稍后重新连接!
|
||||||
server.kicked.nameInUse = 您的名字与服务器中的一个人重复了。
|
server.kicked.nameInUse = 您的名字与服务器中的一个人重复了。
|
||||||
server.kicked.nameEmpty = 无效的名字!
|
server.kicked.nameEmpty = 无效的名字!
|
||||||
server.kicked.idInUse = 您已经连接了这个服务器!不允许在一台设备上用两个客户端连接。
|
server.kicked.idInUse = 您已经连接了这个服务器!不允许在一台设备上用两个客户端连接。
|
||||||
@@ -214,6 +229,8 @@ 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 = 黑名单
|
server.bans = 黑名单
|
||||||
server.bans.none = 没有被封禁的玩家!
|
server.bans.none = 没有被封禁的玩家!
|
||||||
@@ -287,6 +304,7 @@ cancel = 取消
|
|||||||
openlink = 打开链接
|
openlink = 打开链接
|
||||||
copylink = 复制链接
|
copylink = 复制链接
|
||||||
back = 返回
|
back = 返回
|
||||||
|
max = 最大值
|
||||||
crash.export = 导出崩溃日志
|
crash.export = 导出崩溃日志
|
||||||
crash.none = 找不到崩溃日志。
|
crash.none = 找不到崩溃日志。
|
||||||
crash.exported = 崩溃日志已导出。
|
crash.exported = 崩溃日志已导出。
|
||||||
@@ -297,7 +315,6 @@ data.exported = 数据已导出。
|
|||||||
data.invalid = 非有效游戏数据。
|
data.invalid = 非有效游戏数据。
|
||||||
data.import.confirm = 导入外部游戏数据将覆盖本地[scarlet]全部[]的游戏数据。\n[accent]此操作无法撤销![]\n\n数据导入后将自动退出游戏。
|
data.import.confirm = 导入外部游戏数据将覆盖本地[scarlet]全部[]的游戏数据。\n[accent]此操作无法撤销![]\n\n数据导入后将自动退出游戏。
|
||||||
quit.confirm = 确定退出?
|
quit.confirm = 确定退出?
|
||||||
quit.confirm.tutorial = 确定要跳过教程?\n您可以通过[accent]设置->游戏->重玩教程[]来重玩教程。
|
|
||||||
loading = [accent]加载中…
|
loading = [accent]加载中…
|
||||||
reloading = [accent]重载模组中…
|
reloading = [accent]重载模组中…
|
||||||
saving = [accent]保存中…
|
saving = [accent]保存中…
|
||||||
@@ -306,6 +323,7 @@ cancelbuilding = [accent][[{0}][]来清除规划
|
|||||||
selectschematic = [accent][[{0}][]来选择复制
|
selectschematic = [accent][[{0}][]来选择复制
|
||||||
pausebuilding = [accent][[{0}][]来暂停建造
|
pausebuilding = [accent][[{0}][]来暂停建造
|
||||||
resumebuilding = [scarlet][[{0}][]来恢复建造
|
resumebuilding = [scarlet][[{0}][]来恢复建造
|
||||||
|
enablebuilding = [scarlet][[{0}][]来启用建造
|
||||||
showui = UI已隐藏\n按[accent][[{0}][]显示UI
|
showui = UI已隐藏\n按[accent][[{0}][]显示UI
|
||||||
wave = [accent]第{0}波
|
wave = [accent]第{0}波
|
||||||
wave.cap = [accent]波次 {0}/{1}
|
wave.cap = [accent]波次 {0}/{1}
|
||||||
@@ -324,7 +342,7 @@ saveimage = 保存图片
|
|||||||
unknown = 未知
|
unknown = 未知
|
||||||
custom = 自定义
|
custom = 自定义
|
||||||
builtin = 内置的
|
builtin = 内置的
|
||||||
map.delete.confirm = 您确定你想要删除这张地图吗?这个操作无法撤销!
|
map.delete.confirm = 您确定想要删除这张地图吗?这个操作无法撤销!
|
||||||
map.random = [accent]随机地图
|
map.random = [accent]随机地图
|
||||||
map.nospawn = 这个地图没有核心!请在编辑器中添加一个[royal]己方[]的核心。
|
map.nospawn = 这个地图没有核心!请在编辑器中添加一个[royal]己方[]的核心。
|
||||||
map.nospawn.pvp = 这个地图没有敌人的核心!请在编辑器中添加一个[royal]敌人[]的核心。
|
map.nospawn.pvp = 这个地图没有敌人的核心!请在编辑器中添加一个[royal]敌人[]的核心。
|
||||||
@@ -332,7 +350,7 @@ map.nospawn.attack = 这个地图没有敌人的核心!请在编辑中向地
|
|||||||
map.invalid = 地图载入错误:地图文件可能已经损坏。
|
map.invalid = 地图载入错误:地图文件可能已经损坏。
|
||||||
workshop.update = 更新地图
|
workshop.update = 更新地图
|
||||||
workshop.error = 获取创意工坊详细信息时出错:{0}
|
workshop.error = 获取创意工坊详细信息时出错:{0}
|
||||||
map.publish.confirm = 确定上传此地图?\n\n[lightgray]确定你同意 Steam 创意工坊的最终用户许可协议,否则你的地图将不会被展示!
|
map.publish.confirm = 确定上传此地图?\n\n[lightgray]确定您同意 Steam 创意工坊的最终用户许可协议,否则您的地图将不会被展示!
|
||||||
workshop.menu = 选择此项目的目的。
|
workshop.menu = 选择此项目的目的。
|
||||||
workshop.info = 项目信息
|
workshop.info = 项目信息
|
||||||
changelog = 更新日志(可选):
|
changelog = 更新日志(可选):
|
||||||
@@ -345,8 +363,8 @@ steam.error = 初始化 Steam 服务失败。\n错误:{0}
|
|||||||
|
|
||||||
editor.brush = 笔刷
|
editor.brush = 笔刷
|
||||||
editor.openin = 在编辑器中打开
|
editor.openin = 在编辑器中打开
|
||||||
editor.oregen = 矿石的生成
|
editor.oregen = 矿物的生成
|
||||||
editor.oregen.info = 矿石的生成:
|
editor.oregen.info = 矿物的生成:
|
||||||
editor.mapinfo = 地图信息
|
editor.mapinfo = 地图信息
|
||||||
editor.author = 作者:
|
editor.author = 作者:
|
||||||
editor.description = 描述:
|
editor.description = 描述:
|
||||||
@@ -361,7 +379,6 @@ editor.center = 居中
|
|||||||
workshop = 创意工坊
|
workshop = 创意工坊
|
||||||
waves.title = 波数
|
waves.title = 波数
|
||||||
waves.remove = 移除
|
waves.remove = 移除
|
||||||
waves.never = < 无限 >
|
|
||||||
waves.every = 每
|
waves.every = 每
|
||||||
waves.waves = 波
|
waves.waves = 波
|
||||||
waves.perspawn = 每次生成
|
waves.perspawn = 每次生成
|
||||||
@@ -436,30 +453,32 @@ toolmode.orthogonal = 正交线
|
|||||||
toolmode.orthogonal.description = 只绘制正交线。
|
toolmode.orthogonal.description = 只绘制正交线。
|
||||||
toolmode.square = 方形
|
toolmode.square = 方形
|
||||||
toolmode.square.description = 方形刷子
|
toolmode.square.description = 方形刷子
|
||||||
toolmode.eraseores = 清除矿石
|
toolmode.eraseores = 清除矿物
|
||||||
toolmode.eraseores.description = 只清除矿石。
|
toolmode.eraseores.description = 只清除矿物。
|
||||||
toolmode.fillteams = 填充团队
|
toolmode.fillteams = 填充队伍
|
||||||
toolmode.fillteams.description = 填充团队而不是方块。
|
toolmode.fillteams.description = 填充队伍而不是方块。
|
||||||
toolmode.drawteams = 绘制团队
|
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 = 敌人生成途径
|
filter.spawnpath = 敌人生成途径
|
||||||
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 = 巨大程度
|
||||||
@@ -468,13 +487,15 @@ filter.option.circle-scale = 圆规模
|
|||||||
filter.option.octaves = 递增
|
filter.option.octaves = 递增
|
||||||
filter.option.falloff = 递减
|
filter.option.falloff = 递减
|
||||||
filter.option.angle = 角度大小
|
filter.option.angle = 角度大小
|
||||||
|
filter.option.rotate = 旋转
|
||||||
filter.option.amount = 数量
|
filter.option.amount = 数量
|
||||||
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 = 二重地面
|
filter.option.floor2 = 二重地面
|
||||||
filter.option.threshold2 = 二重阈值
|
filter.option.threshold2 = 二重阈值
|
||||||
filter.option.radius = 半径大小
|
filter.option.radius = 半径大小
|
||||||
@@ -487,8 +508,9 @@ play = 开始游戏
|
|||||||
campaign = 战役模式
|
campaign = 战役模式
|
||||||
load = 载入游戏
|
load = 载入游戏
|
||||||
save = 保存
|
save = 保存
|
||||||
fps = 帧数:{0}
|
fps = FPS:{0}
|
||||||
ping = 延迟:{0}毫秒
|
ping = 延迟:{0}毫秒
|
||||||
|
tps = TPS: {0}
|
||||||
memory = 内存: {0}mb
|
memory = 内存: {0}mb
|
||||||
memory2 = 内存:\n {0}mb +\n {1}mb
|
memory2 = 内存:\n {0}mb +\n {1}mb
|
||||||
language.restart = 为了使语言设置生效请重启游戏。
|
language.restart = 为了使语言设置生效请重启游戏。
|
||||||
@@ -521,7 +543,7 @@ launch.from = 发射地: [accent]{0}
|
|||||||
launch.destination = 目的地: {0}
|
launch.destination = 目的地: {0}
|
||||||
configure.invalid = 数量必须是0到{0}之间的数字。
|
configure.invalid = 数量必须是0到{0}之间的数字。
|
||||||
add = 添加…
|
add = 添加…
|
||||||
boss.health = Boss 生命值
|
guardian = 守卫者
|
||||||
|
|
||||||
connectfail = [crimson]服务器连接失败:[accent]{0}
|
connectfail = [crimson]服务器连接失败:[accent]{0}
|
||||||
error.unreachable = 无法访问服务器。\n确定输对地址了吗?
|
error.unreachable = 无法访问服务器。\n确定输对地址了吗?
|
||||||
@@ -537,15 +559,16 @@ error.bloom = 未能初始化特效。\n您的设备可能不支持。
|
|||||||
weather.rain.name = 降雨
|
weather.rain.name = 降雨
|
||||||
weather.snow.name = 降雪
|
weather.snow.name = 降雪
|
||||||
weather.sandstorm.name = 沙尘暴
|
weather.sandstorm.name = 沙尘暴
|
||||||
weather.sporestorm.name = 孢子雾
|
weather.sporestorm.name = 孢子风暴
|
||||||
weather.fog.name = 雾
|
weather.fog.name = 雾
|
||||||
|
|
||||||
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 = 进攻波:
|
||||||
sectors.stored = 贮存:
|
sectors.stored = 贮存:
|
||||||
sectors.resume = 继续
|
sectors.resume = 继续
|
||||||
@@ -554,7 +577,7 @@ sectors.select = 选择
|
|||||||
sectors.nonelaunch = [lightgray]无 (太阳)
|
sectors.nonelaunch = [lightgray]无 (太阳)
|
||||||
sectors.rename = 重命名区块
|
sectors.rename = 重命名区块
|
||||||
sectors.enemybase = [scarlet]敌人基地
|
sectors.enemybase = [scarlet]敌人基地
|
||||||
sectors.vulnerable = [scarlet]脆弱的
|
sectors.vulnerable = [scarlet]易受攻击
|
||||||
sectors.underattack = [scarlet]遭到攻击![accent]{0}% 损毁度
|
sectors.underattack = [scarlet]遭到攻击![accent]{0}% 损毁度
|
||||||
sectors.survives = [accent]存活{0}波
|
sectors.survives = [accent]存活{0}波
|
||||||
sectors.go = 进入
|
sectors.go = 进入
|
||||||
@@ -565,12 +588,13 @@ 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 = 中度
|
||||||
threat.high = 高度
|
threat.high = 高度
|
||||||
threat.extreme = 极高
|
threat.extreme = 极高
|
||||||
threat.eradication = 扫荡
|
threat.eradication = 毁灭
|
||||||
|
|
||||||
planets = 行星
|
planets = 行星
|
||||||
|
|
||||||
@@ -605,12 +629,26 @@ sector.tarFields.description = 产油区边缘,位于山脉和沙漠之间。
|
|||||||
sector.desolateRift.description = 非常危险的区域。这儿的资源丰富但空间很小。敌人十分危险。尽快离开,不要被敌人的攻击间隔太长所愚弄。
|
sector.desolateRift.description = 非常危险的区域。这儿的资源丰富但空间很小。敌人十分危险。尽快离开,不要被敌人的攻击间隔太长所愚弄。
|
||||||
sector.nuclearComplex.description = 以前生产和加工钍的设施已变成废墟。\n[lightgray]研究钍及其多种用途。\n\n敌人在这里大量存在,不断消灭入侵者。
|
sector.nuclearComplex.description = 以前生产和加工钍的设施已变成废墟。\n[lightgray]研究钍及其多种用途。\n\n敌人在这里大量存在,不断消灭入侵者。
|
||||||
sector.fungalPass.description = 介于高山和低矮孢子丛生的土地之间的过渡地带。这里有一个小型的敌方侦察基地。\n侦察它。\n使用尖刀和爬行者单位来摧毁两个核心。
|
sector.fungalPass.description = 介于高山和低矮孢子丛生的土地之间的过渡地带。这里有一个小型的敌方侦察基地。\n侦察它。\n使用尖刀和爬行者单位来摧毁两个核心。
|
||||||
sector.biomassFacility.description = 孢子的发源地。这里有最初研究和生产孢子的设施。\n研究这里的科技,培养孢子来制造燃料和聚合物。\n\n[lightgray]设施损毁后,孢子散播了出去,原生生态系统无法抵挡这种外来物种。
|
sector.biomassFacility.description = 孢子的发源地。这里有最初研究和生产孢子的设施。\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制造海军单位,尽快消灭敌人,研究发射建筑。
|
||||||
|
|
||||||
|
status.burning.name = 燃烧
|
||||||
|
status.freezing.name = 冰冻
|
||||||
|
status.wet.name = 潮湿
|
||||||
|
status.muddy.name = 泥泞
|
||||||
|
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 = 静止
|
||||||
|
|
||||||
settings.language = 语言
|
settings.language = 语言
|
||||||
settings.data = 游戏数据
|
settings.data = 游戏数据
|
||||||
settings.reset = 恢复默认设置
|
settings.reset = 恢复默认设置
|
||||||
@@ -632,6 +670,7 @@ settings.clearcampaignsaves.confirm = 您确定要清除战役进度?
|
|||||||
paused = [accent]< 暂停 >
|
paused = [accent]< 暂停 >
|
||||||
clear = 清除
|
clear = 清除
|
||||||
banned = [scarlet]已禁止
|
banned = [scarlet]已禁止
|
||||||
|
unsupported.environment = [scarlet]不支持的环境
|
||||||
yes = 是
|
yes = 是
|
||||||
no = 否
|
no = 否
|
||||||
info.title = [accent]详情
|
info.title = [accent]详情
|
||||||
@@ -641,12 +680,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 +710,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 +720,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 +736,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 = 温度
|
||||||
@@ -703,9 +747,16 @@ stat.minetier = 采矿等级
|
|||||||
stat.payloadcapacity = 载货容量
|
stat.payloadcapacity = 载货容量
|
||||||
stat.commandlimit = 指挥上限
|
stat.commandlimit = 指挥上限
|
||||||
stat.abilities = 能力
|
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 = 修复场
|
||||||
@@ -713,6 +764,7 @@ ability.statusfield = 状态场
|
|||||||
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,11 +772,12 @@ bar.corereq = 缺失核心基座
|
|||||||
bar.drillspeed = 挖掘速度:{0}/秒
|
bar.drillspeed = 挖掘速度:{0}/秒
|
||||||
bar.pumpspeed = 泵压速度:{0}/秒
|
bar.pumpspeed = 泵压速度:{0}/秒
|
||||||
bar.efficiency = 效率:{0}%
|
bar.efficiency = 效率:{0}%
|
||||||
|
bar.boost = 超速:{0}%
|
||||||
bar.powerbalance = 能量:{0}/秒
|
bar.powerbalance = 能量:{0}/秒
|
||||||
bar.powerstored = 储能:{0}/{1}
|
bar.powerstored = 储能:{0}/{1}
|
||||||
bar.poweramount = 能量:{0}
|
bar.poweramount = 能量:{0}
|
||||||
bar.poweroutput = 能量输出:{0}
|
bar.poweroutput = 能量输出:{0}
|
||||||
bar.powerlines = 链接: {0}/{1}
|
bar.powerlines = 链接:{0}/{1}
|
||||||
bar.items = 物品:{0}
|
bar.items = 物品:{0}
|
||||||
bar.capacity = 容量:{0}
|
bar.capacity = 容量:{0}
|
||||||
bar.unitcap = {0} {1}/{2}
|
bar.unitcap = {0} {1}/{2}
|
||||||
@@ -734,29 +787,28 @@ 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]由处理器控制
|
||||||
|
|
||||||
bullet.damage = [stat]{0}[lightgray] 伤害
|
bullet.damage = [stat]{0}[lightgray] 伤害
|
||||||
bullet.splashdamage = [stat]{0}[lightgray] 范围伤害 ~[stat] {1}[lightgray] 格
|
bullet.splashdamage = [stat]{0}[lightgray] 范围伤害 ~[stat] {1}[lightgray] 格
|
||||||
bullet.incendiary = [stat] 燃烧
|
bullet.incendiary = [stat] 燃烧
|
||||||
bullet.sapping = [stat] 削弱
|
|
||||||
bullet.homing = [stat] 追踪
|
bullet.homing = [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 穿透
|
||||||
bullet.infinitepierce = [stat] 穿透
|
bullet.infinitepierce = [stat] 贯穿
|
||||||
bullet.healpercent = [stat]{0}[lightgray]% 修复
|
bullet.healpercent = [stat]{0}[lightgray]% 修复
|
||||||
bullet.freezing = [stat] 冰冻
|
|
||||||
bullet.tarred = [stat] 减速
|
|
||||||
bullet.multiplier = [stat]{0}[lightgray]x 装弹数量
|
bullet.multiplier = [stat]{0}[lightgray]x 装弹数量
|
||||||
bullet.reload = [stat]{0}[lightgray]x 装弹速度
|
bullet.reload = [stat]{0}[lightgray]x 装弹速度
|
||||||
|
|
||||||
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 = 液体
|
||||||
@@ -791,18 +843,20 @@ setting.logichints.name = 逻辑代码提示
|
|||||||
setting.flow.name = 显示资源传送速度[scarlet]
|
setting.flow.name = 显示资源传送速度[scarlet]
|
||||||
setting.backgroundpause.name = 在背景中暂停
|
setting.backgroundpause.name = 在背景中暂停
|
||||||
setting.buildautopause.name = 自动暂停建造
|
setting.buildautopause.name = 自动暂停建造
|
||||||
setting.animatedwater.name = 流动的水
|
setting.doubletapmine.name = 双击以采矿
|
||||||
setting.animatedshields.name = 动态画面
|
setting.modcrashdisable.name = 游戏启动崩溃时不禁用模组
|
||||||
setting.antialias.name = 抗锯齿
|
setting.animatedwater.name = 动态液体
|
||||||
setting.playerindicators.name = 玩家指示灯
|
setting.animatedshields.name = 动态力场
|
||||||
setting.indicators.name = 队友指示器
|
setting.playerindicators.name = 玩家指示器
|
||||||
|
setting.indicators.name = 敌军指示器
|
||||||
setting.autotarget.name = 自动射击
|
setting.autotarget.name = 自动射击
|
||||||
setting.keyboard.name = 鼠标+键盘操控
|
setting.keyboard.name = 鼠标+键盘操控
|
||||||
setting.touchscreen.name = 触屏操控
|
setting.touchscreen.name = 触屏操控
|
||||||
setting.fpscap.name = 最大FPS
|
setting.fpscap.name = 最大FPS
|
||||||
setting.fpscap.none = 无
|
setting.fpscap.none = 无
|
||||||
setting.fpscap.text = {0} FPS
|
setting.fpscap.text = {0} FPS
|
||||||
setting.uiscale.name = UI缩放比例[lightgray](需要重新启动)[]
|
setting.uiscale.name = UI缩放比例
|
||||||
|
setting.uiscale.description = 需要重新启动以应用更改。
|
||||||
setting.swapdiagonal.name = 总是斜线建造
|
setting.swapdiagonal.name = 总是斜线建造
|
||||||
setting.difficulty.training = 训练
|
setting.difficulty.training = 训练
|
||||||
setting.difficulty.easy = 简单
|
setting.difficulty.easy = 简单
|
||||||
@@ -820,7 +874,8 @@ 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.description = 可能需要重新启动以应用更改。
|
||||||
setting.fps.name = 显示 FPS 和网络延迟
|
setting.fps.name = 显示 FPS 和网络延迟
|
||||||
setting.smoothcamera.name = 镜头平滑
|
setting.smoothcamera.name = 镜头平滑
|
||||||
setting.vsync.name = 垂直同步
|
setting.vsync.name = 垂直同步
|
||||||
@@ -910,6 +965,7 @@ 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 = 控制台
|
||||||
@@ -936,21 +992,27 @@ mode.custom = 自定义模式
|
|||||||
|
|
||||||
rules.infiniteresources = 无限资源
|
rules.infiniteresources = 无限资源
|
||||||
rules.reactorexplosions = 反应堆爆炸
|
rules.reactorexplosions = 反应堆爆炸
|
||||||
rules.schematic = 启用蓝图
|
rules.coreincinerates = 核心自动焚烧溢出物资
|
||||||
|
rules.schematic = 允许使用蓝图
|
||||||
rules.wavetimer = 波次计时器
|
rules.wavetimer = 波次计时器
|
||||||
rules.waves = 波次
|
rules.waves = 波次
|
||||||
rules.attack = 攻击模式
|
rules.attack = 攻击模式
|
||||||
rules.buildai = AI建造
|
rules.buildai = 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.enemycorebuildradius = 敌对核心非建设区半径:[lightgray](格)
|
rules.unitcapvariable = 每个核心提供的单位上限
|
||||||
|
rules.unitcap = 基础单位上限
|
||||||
|
rules.enemycorebuildradius = 敌方核心禁造区半径:[lightgray](格)
|
||||||
rules.wavespacing = 波次间隔时间:[lightgray](秒)
|
rules.wavespacing = 波次间隔时间:[lightgray](秒)
|
||||||
rules.buildcostmultiplier = 建设花费倍数
|
rules.buildcostmultiplier = 建材倍率
|
||||||
rules.buildspeedmultiplier = 建设时间倍数
|
rules.buildspeedmultiplier = 建造速率
|
||||||
rules.deconstructrefundmultiplier = 拆除返还倍数
|
rules.deconstructrefundmultiplier = 拆除返还倍数
|
||||||
rules.waitForWaveToEnd = 等待敌人时间
|
rules.waitForWaveToEnd = 等待敌人时间
|
||||||
rules.dropzoneradius = 敌人出生点禁区大小:[lightgray](格)
|
rules.dropzoneradius = 敌人出生点禁区大小:[lightgray](格)
|
||||||
@@ -962,7 +1024,7 @@ rules.title.unit = 单位
|
|||||||
rules.title.experimental = 实验性
|
rules.title.experimental = 实验性
|
||||||
rules.title.environment = 环境性
|
rules.title.environment = 环境性
|
||||||
rules.lighting = 光照
|
rules.lighting = 光照
|
||||||
rules.enemyLights = 单位光照
|
rules.enemyLights = 敌方光照
|
||||||
rules.fire = 火焰
|
rules.fire = 火焰
|
||||||
rules.explosions = 建筑/单位爆炸伤害
|
rules.explosions = 建筑/单位爆炸伤害
|
||||||
rules.ambientlight = 环境光
|
rules.ambientlight = 环境光
|
||||||
@@ -973,8 +1035,9 @@ 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 = 铜
|
||||||
@@ -985,14 +1048,15 @@ item.titanium.name = 钛
|
|||||||
item.thorium.name = 钍
|
item.thorium.name = 钍
|
||||||
item.silicon.name = 硅
|
item.silicon.name = 硅
|
||||||
item.plastanium.name = 塑钢
|
item.plastanium.name = 塑钢
|
||||||
item.phase-fabric.name = 相位物
|
item.phase-fabric.name = 相织物
|
||||||
item.surge-alloy.name = 巨浪合金
|
item.surge-alloy.name = 巨浪合金
|
||||||
item.spore-pod.name = 孢子荚
|
item.spore-pod.name = 孢子荚
|
||||||
item.sand.name = 沙
|
item.sand.name = 沙
|
||||||
item.blast-compound.name = 爆炸混合物
|
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 = 石油
|
||||||
@@ -1024,6 +1088,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 = 伽马
|
||||||
@@ -1072,7 +1141,7 @@ block.core-nucleus.name = 终代核心
|
|||||||
block.deepwater.name = 深水
|
block.deepwater.name = 深水
|
||||||
block.water.name = 水
|
block.water.name = 水
|
||||||
block.tainted-water.name = 污水
|
block.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 = 石头
|
||||||
block.sand.name = 沙子
|
block.sand.name = 沙子
|
||||||
@@ -1081,11 +1150,12 @@ block.ice.name = 冰
|
|||||||
block.snow.name = 雪
|
block.snow.name = 雪
|
||||||
block.craters.name = 陨石坑
|
block.craters.name = 陨石坑
|
||||||
block.sand-water.name = 沙 水
|
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.dacite-wall.name = 英安岩墙
|
block.rhyolite.name = 流纹岩
|
||||||
block.dacite-boulder.name = 英安巨岩
|
block.dacite-wall.name = 安山岩墙
|
||||||
|
block.dacite-boulder.name = 安山巨岩
|
||||||
block.ice-snow.name = 冰雪地
|
block.ice-snow.name = 冰雪地
|
||||||
block.stone-wall.name = 石墙
|
block.stone-wall.name = 石墙
|
||||||
block.ice-wall.name = 冰墙
|
block.ice-wall.name = 冰墙
|
||||||
@@ -1101,7 +1171,8 @@ 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-5.name = 金属地板4
|
block.metal-floor-4.name = 金属地板4
|
||||||
|
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
|
||||||
block.dark-panel-2.name = 暗面板2
|
block.dark-panel-2.name = 暗面板2
|
||||||
@@ -1111,16 +1182,16 @@ block.dark-panel-5.name = 暗面板5
|
|||||||
block.dark-panel-6.name = 暗面板6
|
block.dark-panel-6.name = 暗面板6
|
||||||
block.dark-metal.name = 暗金属
|
block.dark-metal.name = 暗金属
|
||||||
block.basalt.name = 玄武岩
|
block.basalt.name = 玄武岩
|
||||||
block.hotrock.name = 热石头
|
block.hotrock.name = 灼热岩石
|
||||||
block.magmarock.name = 岩浆石头
|
block.magmarock.name = 熔融岩石
|
||||||
block.copper-wall.name = 铜墙
|
block.copper-wall.name = 铜墙
|
||||||
block.copper-wall-large.name = 大型铜墙
|
block.copper-wall-large.name = 大型铜墙
|
||||||
block.titanium-wall.name = 钛墙
|
block.titanium-wall.name = 钛墙
|
||||||
block.titanium-wall-large.name = 大型钛墙
|
block.titanium-wall-large.name = 大型钛墙
|
||||||
block.plastanium-wall.name = 塑钢墙
|
block.plastanium-wall.name = 塑钢墙
|
||||||
block.plastanium-wall-large.name = 大型塑钢墙
|
block.plastanium-wall-large.name = 大型塑钢墙
|
||||||
block.phase-wall.name = 相位物墙
|
block.phase-wall.name = 相织物墙
|
||||||
block.phase-wall-large.name = 大型相位物墙
|
block.phase-wall-large.name = 大型相织物墙
|
||||||
block.thorium-wall.name = 钍墙
|
block.thorium-wall.name = 钍墙
|
||||||
block.thorium-wall-large.name = 大型钍墙
|
block.thorium-wall-large.name = 大型钍墙
|
||||||
block.door.name = 门
|
block.door.name = 门
|
||||||
@@ -1144,7 +1215,7 @@ block.illuminator.name = 照明器
|
|||||||
block.overflow-gate.name = 溢流门
|
block.overflow-gate.name = 溢流门
|
||||||
block.underflow-gate.name = 反向溢流门
|
block.underflow-gate.name = 反向溢流门
|
||||||
block.silicon-smelter.name = 硅冶炼厂
|
block.silicon-smelter.name = 硅冶炼厂
|
||||||
block.phase-weaver.name = 相位物编织器
|
block.phase-weaver.name = 相织物编织器
|
||||||
block.pulverizer.name = 粉碎机
|
block.pulverizer.name = 粉碎机
|
||||||
block.cryofluid-mixer.name = 冷冻液混合器
|
block.cryofluid-mixer.name = 冷冻液混合器
|
||||||
block.melter.name = 熔炉
|
block.melter.name = 熔炉
|
||||||
@@ -1182,10 +1253,10 @@ block.tsunami.name = 海啸
|
|||||||
block.swarmer.name = 蜂群
|
block.swarmer.name = 蜂群
|
||||||
block.salvo.name = 齐射炮
|
block.salvo.name = 齐射炮
|
||||||
block.ripple.name = 浪涌
|
block.ripple.name = 浪涌
|
||||||
block.phase-conveyor.name = 相位物传送带桥
|
block.phase-conveyor.name = 相织物传送带桥
|
||||||
block.bridge-conveyor.name = 传送带桥
|
block.bridge-conveyor.name = 传送带桥
|
||||||
block.plastanium-compressor.name = 塑钢压缩机
|
block.plastanium-compressor.name = 塑钢压缩机
|
||||||
block.pyratite-mixer.name = 硫化物混合器
|
block.pyratite-mixer.name = 火石混合器
|
||||||
block.blast-mixer.name = 爆炸物混合器
|
block.blast-mixer.name = 爆炸物混合器
|
||||||
block.solar-panel.name = 太阳能板
|
block.solar-panel.name = 太阳能板
|
||||||
block.solar-panel-large.name = 大型太阳能板
|
block.solar-panel-large.name = 大型太阳能板
|
||||||
@@ -1193,7 +1264,7 @@ block.oil-extractor.name = 石油钻井
|
|||||||
block.repair-point.name = 维修点
|
block.repair-point.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 = 相织物导管桥
|
||||||
block.liquid-router.name = 液体路由器
|
block.liquid-router.name = 液体路由器
|
||||||
block.liquid-tank.name = 储液罐
|
block.liquid-tank.name = 储液罐
|
||||||
block.liquid-junction.name = 液体交叉器
|
block.liquid-junction.name = 液体交叉器
|
||||||
@@ -1233,14 +1304,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 = 微型处理器
|
||||||
@@ -1254,50 +1331,50 @@ 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.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]鼠标滚轮[]放大或缩小。
|
||||||
hint.mine = 移动到\uf8c4 铜矿附近并[accent]点按[]进行手动开采.
|
hint.mine = 移动到\uf8c4 铜矿附近并[accent]点按[]进行手动开采。
|
||||||
hint.desktopShoot = [accent][[鼠标左键][]射击.
|
hint.desktopShoot = [accent][[鼠标左键][]射击。
|
||||||
hint.depositItems = 要转移物品,请将其从飞船上拖到核心。
|
hint.depositItems = 要转移物品,请将其从飞船上拖到核心。
|
||||||
hint.respawn = 要于核心中重生,请按[accent][[V][].
|
hint.respawn = 要于核心中重生,请按[accent][[V][]。
|
||||||
hint.respawn.mobile = 您已切换控制单元/结构. 如果要重生飞船,请[accent]点击左上方的图标(您的单元/结构图标).[]
|
hint.respawn.mobile = 您已切换控制单元/建筑。如果要重生为飞船,请[accent]点击左上方的图标(您的单元/结构图标)。[]
|
||||||
hint.desktopPause = 按[accent][[Space][]暂停和取消暂停游戏.
|
hint.desktopPause = 按[accent][[Space][]暂停和取消暂停游戏。
|
||||||
hint.placeDrill = 选择右下角菜单中的\ue85e [accent]钻头[]分类,然后选择一个\uf870 [accent]钻头[]然后单击铜矿将其放置.
|
hint.placeDrill = 选择右下角菜单中的\ue85e [accent]钻头[]分类,然后选择一个\uf870 [accent]钻头[]然后单击铜矿将其放置。
|
||||||
hint.placeDrill.mobile = 选择右下角菜单中的\ue85e [accent]钻头[]分类,然后选择一个\uf870 [accent]钻头[],然后点击铜矿将其放置.\n\n点击右下角\ue800 [accent]复选标记[]以确认.
|
hint.placeDrill.mobile = 选择右下角菜单中的\ue85e [accent]钻头[]分类,然后选择一个\uf870 [accent]钻头[],然后点击铜矿将其放置。\n\n点击右下角\ue800 [accent]复选标记[]以确认。
|
||||||
hint.placeConveyor = 传送带将物品从钻头移到其他方块中。从\ue814 [accent]布局[]分类选择\uf896 [accent]传送带[].\n\n单击并拖动以放置多个传送带.\n[accent]滚动[]以旋转.
|
hint.placeConveyor = 传送带将物品从钻头移到其他方块中。从\ue814 [accent]布局[]分类选择\uf896 [accent]传送带[]。\n\n单击并拖动以放置多个传送带。\n[accent]滚动[]以旋转。
|
||||||
hint.placeConveyor.mobile = 传送带将物品从钻头移到其他块中。从\ue814 [accent]布局[]分类选择\uf896 [accent]传送带[].\n\n长按一秒钟,然后拖动以放置多个传送带.
|
hint.placeConveyor.mobile = 传送带将物品从钻头移到其他块中。从\ue814 [accent]布局[]分类选择\uf896 [accent]传送带[]。\n\n长按一秒钟,然后拖动以放置多个传送带。
|
||||||
hint.placeTurret = 放置\uf861 [accent]炮塔[]以抵御敌人,保卫你的核心.\n\n炮塔需要弹药-\uf838 铜.\n使用传送带和钻头为它们供弹。
|
hint.placeTurret = 放置\uf861 [accent]炮塔[]以抵御敌人,保卫你的核心。\n\n炮塔需要弹药-\uf838 铜。\n使用传送带和钻头为它们供弹。
|
||||||
hint.breaking = [accent]右击[]并拖动以拆除方块.
|
hint.breaking = [accent]右击[]并拖动以拆除方块。
|
||||||
hint.breaking.mobile = 点击在右下角的\ue817 [accent]锤子[]点击以拆除方块.\n\n按住手指一秒钟,然后拖动并选择.
|
hint.breaking.mobile = 点击在右下角的\ue817 [accent]锤子[]点击以拆除方块。\n\n按住手指一秒钟,然后拖动并选择。
|
||||||
hint.research = 点击\ue875 [accent]科技树[]按钮研究新技术.
|
hint.blockInfo = 在 [accent]建造菜单[]中选择一个建筑,然后点击右边的 [accent][[?][]按钮以查看这个方块的信息。
|
||||||
hint.research.mobile = 点击在\ue88c [accent]菜单[]中的\ue875 [accent]科技树[]按钮以研究新技术.
|
hint.research = 点击\ue875 [accent]科技树[]按钮研究新技术。
|
||||||
|
hint.research.mobile = 点击在\ue88c [accent]菜单[]中的\ue875 [accent]科技树[]按钮以研究新技术。
|
||||||
hint.unitControl = 按住[accent][[L-ctrl][]并[accent]点击[]友军单位或炮塔来进行控制。
|
hint.unitControl = 按住[accent][[L-ctrl][]并[accent]点击[]友军单位或炮塔来进行控制。
|
||||||
hint.unitControl.mobile = [accent][双击][]友军单位或炮塔来进行控制。
|
hint.unitControl.mobile = [accent][双击][]友军单位或炮塔来进行控制。
|
||||||
hint.launch = 一旦收集到足够的资源,您就可以通过从右下角的\ue827 [accent]地图[]选择附近的区域[accent]发射[]核心.
|
hint.launch = 一旦收集到足够的资源,您就可以通过从右下角的\ue827 [accent]地图[]选择附近的区域[accent]发射[]核心。
|
||||||
hint.launch.mobile = 一旦收集到足够的资源,您就可以通过在\ue88c [accent]菜单[]的\ue827 [accent]地图[]选择附近的区域[accent]发射[]核心.
|
hint.launch.mobile = 一旦收集到足够的资源,您就可以通过在\ue88c [accent]菜单[]的\ue827 [accent]地图[]选择附近的区域[accent]发射[]核心。
|
||||||
hint.schematicSelect = 按住[accent][[F][]并拖动以选择要复制和粘贴的块.\n\n[accent][鼠标中键][]复制单个块类型.
|
hint.schematicSelect = 按住[accent][[F][]并拖动以选择要复制和粘贴的块。\n\n[accent][鼠标中键][]复制单个块类型。
|
||||||
hint.conveyorPathfind = 按住[accent][[L-Ctrl][]拖动传送带并使其自动寻路.
|
hint.conveyorPathfind = 按住[accent][[L-Ctrl][]拖动传送带并使其自动寻路。
|
||||||
hint.conveyorPathfind.mobile = 启用\ue844 [accent]传送带自动寻路[]并拖动,传送带会自动生成路径.
|
hint.conveyorPathfind.mobile = 启用\ue844 [accent]传送带自动寻路[]并拖动,传送带会自动生成路径。
|
||||||
hint.boost = 按住[accent][[L-Shift][]用当前单位飞越障碍物.\n\n但只有少数地面单位有助推器.
|
hint.boost = 按住[accent][[L-Shift][]用当前单位飞越障碍物。\n\n但只有少数地面单位有助推器。
|
||||||
hint.command = 按住[accent][[G][]指挥附近的单位编队.
|
hint.command = 按住[accent][[G][]指挥附近的单位编队。
|
||||||
hint.command.mobile = [accent][[双击][]您的部队指挥附近的部队编队.
|
hint.command.mobile = [accent][[双击][]您的部队指挥附近的部队编队。
|
||||||
hint.payloadPickup = 按[accent][[[]捡起小方块或单位.
|
hint.payloadPickup = 按[accent][[[]捡起方块或单位。
|
||||||
hint.payloadPickup.mobile = [accent]长按一个小方块或一个单位来捡起来.
|
hint.payloadPickup.mobile = [accent]长按一个方块或一个单位来捡起来。
|
||||||
hint.payloadDrop = 按[accent]][]放下有效载荷.
|
hint.payloadDrop = 按[accent]][]放下捡起的方块或单位。
|
||||||
hint.payloadDrop.mobile = [accent]点住[]一个空的位置将有效载荷丢到那里.
|
hint.payloadDrop.mobile = [accent]点住[]一个空的位置将捡起的方块或单位丢到那里。
|
||||||
hint.waveFire = [accent]波浪[]炮塔加水弹药会自动扑灭附近的火.
|
hint.waveFire = [accent]波浪[]炮塔加水弹药会自动扑灭附近的火。
|
||||||
hint.generator = \uf879 [accent]燃烧发电机[]燃烧煤炭并将电力传输到相邻方块.\n\n用\uf87f [accent]能量节点[]可以扩展电力传输范围.
|
hint.generator = \uf879 [accent]燃烧发电机[]燃烧煤炭并将电力传输到相邻方块。\n\n用\uf87f [accent]能量节点[]可以扩展电力传输范围。
|
||||||
hint.guardian = [accent]Boss[]单位装甲厚重.[accent]铜[]和[accent]铅[]这类较弱的子弹对其[scarlet]作用不佳[].\n\n使用高级别炮塔或使用\uf835 [accent]石墨[]作为\uf861 双管炮及\uf859 齐射炮的弹药来消灭Boss.
|
hint.guardian = [accent]Boss[]单位装甲厚重。[accent]铜[]和[accent]铅[]这类较弱的子弹对其[scarlet]作用不佳[]。\n\n使用高级别炮塔或使用\uf835 [accent]石墨[]作为\uf861 双管炮及\uf859 齐射炮的弹药来消灭Boss。
|
||||||
hint.coreUpgrade = 核心可以通过[accent]在上面覆盖高等级核心[]进行升级。\n\n在[accent]初代核心[]上放置一个[accent]次代核心[]。确保周围没有障碍物。
|
hint.coreUpgrade = 核心可以通过[accent]在上面覆盖高等级核心[]进行升级。\n\n在[accent]初代核心[]上放置一个[accent]次代核心[]。确保周围没有障碍物。
|
||||||
hint.presetLaunch = 灰色的[accent]降落地区[],如[accent]冰冻森林[],可以从任何区域发射,不需要占领附近的区块。\n\n[accent]数字编号的区域[],如这个,是[accent]可选的[]。
|
hint.presetLaunch = 灰色的[accent]降落地区[],如[accent]冰冻森林[],可以从任何区域发射,不需要占领附近的区块。\n\n[accent]数字编号的区域[],如这个,是[accent]可选的[]。
|
||||||
hint.coreIncinerate = 核心存满一种物品后,再进入的同种物品会被[accent]摧毁[]。
|
hint.coreIncinerate = 核心存满一种物品后,再进入的同种物品会被[accent]摧毁[]。
|
||||||
hint.coopCampaign = 游玩[accent]合作战役[]时,当前地图生产的资源也会被送入[accent]你本地的区域[]。\n\n新科技也会同步解锁。
|
hint.coopCampaign = 游玩[accent]合作战役[]时,当前地图生产的资源也会被送入[accent]您本地的区域[]。\n\n新科技也会同步解锁。
|
||||||
|
|
||||||
item.copper.description = 用于所有类型的建筑和弹药。
|
item.copper.description = 用于所有类型的建筑和弹药。
|
||||||
item.copper.details = 铜。在塞普罗上的异常丰富的金属。不经加固,结构会较脆弱。
|
item.copper.details = 铜。在塞普罗上的异常丰富的金属。不经加固,结构会较脆弱。
|
||||||
@@ -1327,7 +1404,7 @@ liquid.oil.description = 用于先进材料生产和燃烧弹药。
|
|||||||
liquid.cryofluid.description = 用作反应堆、炮塔和工厂的冷却剂。
|
liquid.cryofluid.description = 用作反应堆、炮塔和工厂的冷却剂。
|
||||||
|
|
||||||
block.resupply-point.description = 为附近的部队提供铜弹药。与需要电池供电的设备不兼容。
|
block.resupply-point.description = 为附近的部队提供铜弹药。与需要电池供电的设备不兼容。
|
||||||
block.armored-conveyor.description = 向前方移动物品。不接受边上的输入。
|
block.armored-conveyor.description = 将物品向前输送。不接受两侧的非传送带输入。
|
||||||
block.illuminator.description = 释放光源。
|
block.illuminator.description = 释放光源。
|
||||||
block.message.description = 保存一条文字信息。用于队友之间进行交流。
|
block.message.description = 保存一条文字信息。用于队友之间进行交流。
|
||||||
block.graphite-press.description = 将煤炭压缩为石墨。
|
block.graphite-press.description = 将煤炭压缩为石墨。
|
||||||
@@ -1335,11 +1412,11 @@ block.multi-press.description = 将煤炭压缩为石墨。需要水进行冷却
|
|||||||
block.silicon-smelter.description = 将沙和煤炭精炼为硅。
|
block.silicon-smelter.description = 将沙和煤炭精炼为硅。
|
||||||
block.kiln.description = 将沙和铅熔炼为钢化玻璃。
|
block.kiln.description = 将沙和铅熔炼为钢化玻璃。
|
||||||
block.plastanium-compressor.description = 用石油和钛生产塑钢。
|
block.plastanium-compressor.description = 用石油和钛生产塑钢。
|
||||||
block.phase-weaver.description = 从钍和沙合成相位物。
|
block.phase-weaver.description = 用钍和沙合成相织物。
|
||||||
block.alloy-smelter.description = 将钛、铅、硅和铜熔合成巨浪合金。
|
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 = 将孢子荚压缩成石油。
|
||||||
@@ -1362,18 +1439,18 @@ block.thorium-wall.description = 保护己方结构,挡下敌方炮弹。
|
|||||||
block.thorium-wall-large.description = 保护己方结构,挡下敌方炮弹。
|
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 = 保护己方结构,挡下敌方炮弹。受攻击时定期释放电弧。
|
block.surge-wall.description = 保护己方结构,挡下敌方炮弹。受攻击时有几率释放电弧。
|
||||||
block.surge-wall-large.description = 保护己方结构,挡下敌方炮弹。受攻击时定期释放电弧。
|
block.surge-wall-large.description = 保护己方结构,挡下敌方炮弹。受攻击时有几率释放电弧。
|
||||||
block.door.description = 可以开关的墙。
|
block.door.description = 可以开关的墙。
|
||||||
block.door-large.description = 可以开关的墙。
|
block.door-large.description = 可以开关的墙。
|
||||||
block.mender.description = 定期修复附近的区块。\n可使用硅来提高范围和效率。
|
block.mender.description = 定期修复附近的区块。\n可使用硅来提高范围和效率。
|
||||||
block.mend-projector.description = 修复其附近的区块。\n可使用相位物来提高射程和效率。
|
block.mend-projector.description = 修复其附近的区块。\n可使用相织物来提高范围和效率。
|
||||||
block.overdrive-projector.description = 提高附近建筑物的速度。\n可使用相位物来提高射程和效率。
|
block.overdrive-projector.description = 提高附近建筑物的速度。\n可使用相织物来提高范围和效率。
|
||||||
block.force-projector.description = 在自身周围创建一个六角形力场,使里面的建筑物和单位免受伤害。\n持续承受高伤害会导致过热,可以使用冷却液降温。相位物可用于增加护盾大小。
|
block.force-projector.description = 在自身周围创建一个六角形力场,使里面的建筑物和单位免受伤害。\n持续承受高伤害会导致过热,可以使用冷却液降温。相织物可用于增加护盾大小和盾容。
|
||||||
block.shock-mine.description = 对踩到它的敌人释放电弧进行攻击。
|
block.shock-mine.description = 对踩到它的敌人释放电弧进行攻击。
|
||||||
block.conveyor.description = 将物品向前输送。
|
block.conveyor.description = 将物品向前输送。
|
||||||
block.titanium-conveyor.description = 将物品向前输送。快于初级传送带。
|
block.titanium-conveyor.description = 将物品向前输送。快于初级传送带。
|
||||||
block.plastanium-conveyor.description = 打包物品进行运输。\n在后方输入物品,在前方三个方向输出物品。需要多个装载和卸载点才能达到峰值载量。
|
block.plastanium-conveyor.description = 打包物品进行运输。\n在后方输入物品,在前方三个方向输出物品。需要多个装载和卸载点才能达到最大运载量。
|
||||||
block.junction.description = 两条交叉传送带的桥梁。
|
block.junction.description = 两条交叉传送带的桥梁。
|
||||||
block.bridge-conveyor.description = 跨越任意地形或建筑物运输物品。
|
block.bridge-conveyor.description = 跨越任意地形或建筑物运输物品。
|
||||||
block.phase-conveyor.description = 跨越任意地形或建筑物即时运输物品。比传送带桥范围更大,但需要电力。
|
block.phase-conveyor.description = 跨越任意地形或建筑物即时运输物品。比传送带桥范围更大,但需要电力。
|
||||||
@@ -1384,7 +1461,7 @@ 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 = 泵送液体,需要能量。
|
block.rotary-pump.description = 泵送液体,需要能量。
|
||||||
block.thermal-pump.description = 泵送液体。
|
block.thermal-pump.description = 泵送液体。
|
||||||
@@ -1405,7 +1482,7 @@ block.battery-large.description = 储存电网多余电力,并在电网供电
|
|||||||
block.combustion-generator.description = 燃烧煤等可燃材料发电。
|
block.combustion-generator.description = 燃烧煤等可燃材料发电。
|
||||||
block.thermal-generator.description = 放置在炽热的地形上能够发电。
|
block.thermal-generator.description = 放置在炽热的地形上能够发电。
|
||||||
block.steam-generator.description = 通过燃烧易燃材料并将水转化为蒸汽来发电。
|
block.steam-generator.description = 通过燃烧易燃材料并将水转化为蒸汽来发电。
|
||||||
block.differential-generator.description = 利用低温流体与燃烧的硫之间的温差产生大量能量。
|
block.differential-generator.description = 利用低温流体与燃烧的火石之间的温差产生大量能量。
|
||||||
block.rtg-generator.description = 利用放射物的衰变产生的热量以缓慢的速度产生能量。
|
block.rtg-generator.description = 利用放射物的衰变产生的热量以缓慢的速度产生能量。
|
||||||
block.solar-panel.description = 提供少量太阳能。
|
block.solar-panel.description = 提供少量太阳能。
|
||||||
block.solar-panel-large.description = 提供少量太阳能。比标准太阳能电池板更高效。
|
block.solar-panel-large.description = 提供少量太阳能。比标准太阳能电池板更高效。
|
||||||
@@ -1431,7 +1508,7 @@ 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 = 向敌人射出液体流。使用水作弹药时能够自动灭火。
|
||||||
block.lancer.description = 充能并向地面单位发射强力的的波束。
|
block.lancer.description = 充能并向地面单位发射强力的的波束。
|
||||||
@@ -1448,11 +1525,11 @@ block.repair-point.description = 持续修复其附近受损最严重的单位
|
|||||||
block.segment.description = 摧毁袭来的除激光以外的子弹或导弹。
|
block.segment.description = 摧毁袭来的除激光以外的子弹或导弹。
|
||||||
block.parallax.description = 通过牵引光束牵引空中目标,并在这个过程中对其造成伤害。
|
block.parallax.description = 通过牵引光束牵引空中目标,并在这个过程中对其造成伤害。
|
||||||
block.tsunami.description = 向敌人射出强力的液体流。使用水作弹药时能够自动灭火。
|
block.tsunami.description = 向敌人射出强力的液体流。使用水作弹药时能够自动灭火。
|
||||||
block.silicon-crucible.description = 从沙子和煤中提炼硅,用硫化物作为附加热源。在炙热地型上更高效。
|
block.silicon-crucible.description = 从沙子和煤中提炼硅,用火石作为附加热源。在炙热地型上更高效。
|
||||||
block.disassembler.description = 以低效率将矿渣分离成微量的外来矿物成分。能产生钍。
|
block.disassembler.description = 以低效率将矿渣分离成微量的外来矿物成分。能产生钍。
|
||||||
block.overdrive-dome.description = 提高附近建筑物的速度。需要相位物和硅来工作。
|
block.overdrive-dome.description = 提高附近建筑物的速度。需要相织物和硅来工作。
|
||||||
block.payload-conveyor.description = 移动大型有效载荷,例如从工厂生产的单位。
|
block.payload-conveyor.description = 移动大型载荷,例如从工厂生产的单位。
|
||||||
block.payload-router.description = 将输入的有效载荷向3个方向输出。
|
block.payload-router.description = 将输入的载荷向3个方向输出。
|
||||||
block.command-center.description = 使用多个不同的命令控制单位。
|
block.command-center.description = 使用多个不同的命令控制单位。
|
||||||
block.ground-factory.description = 产生陆军单位。输出的单位可以直接使用,也可以移入重构厂进行升级。
|
block.ground-factory.description = 产生陆军单位。输出的单位可以直接使用,也可以移入重构厂进行升级。
|
||||||
block.air-factory.description = 产生空军单位。输出的单位可以直接使用,也可以移入重构厂进行升级。
|
block.air-factory.description = 产生空军单位。输出的单位可以直接使用,也可以移入重构厂进行升级。
|
||||||
@@ -1469,41 +1546,48 @@ block.memory-cell.description = 存储处理器的信息。
|
|||||||
block.memory-bank.description = 存储处理器的信息。内存量更大。
|
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 = 发射激光弹攻击敌人并修复友方建筑。能够飞行。
|
||||||
unit.pulsar.description = 发射电弧来攻击敌人并修复盟军建筑。能够飞行。
|
unit.pulsar.description = 发射数条电弧攻击敌人并修复友方建筑。能够飞行。
|
||||||
unit.quasar.description = 发射穿透性激光束来攻击敌人并修复盟军建筑。能够飞行。拥有护盾。
|
unit.quasar.description = 发射穿透性激光束攻击敌人并修复友方建筑。能够飞行。拥有护盾。
|
||||||
unit.vela.description = 发射巨大的持续激光束攻击敌人,引起火灾并修复盟军建筑。能够飞行。
|
unit.vela.description = 发射巨型持续激光束攻击敌人,点燃敌人并修复友方建筑。能够飞行。
|
||||||
unit.corvus.description = 发射巨大的激光爆破束,摧毁敌人并修复盟军建筑。可以跨越大多数地形。
|
unit.corvus.description = 发射巨型爆破激光束攻击敌人并修复友方建筑。可以跨越大多数地形。
|
||||||
unit.crawler.description = 冲向敌人并自毁,造成大爆炸。
|
unit.crawler.description = 冲向敌人并自毁,造成大爆炸。
|
||||||
unit.atrax.description = 向地面目标发射削弱性的矿渣球体。可以跨越大多数地形。
|
unit.atrax.description = 向地面敌人发射削弱性矿渣球。可以跨越大多数地形。
|
||||||
unit.spiroct.description = 向敌人发射激光束,并在此过程中自我修复。可以跨越大多数地形。
|
unit.spiroct.description = 向敌人发射激光束,并在此过程中自我修复。可以跨越大多数地形。
|
||||||
unit.arkyid.description = 向敌人发射大量激光束,并在此过程中自我修复。可以跨越大多数地形。
|
unit.arkyid.description = 向敌人发射大型激光束,并在此过程中自我修复。可以跨越大多数地形。
|
||||||
unit.toxopid.description = 向敌人发射大型电能集束炮弹和穿透激光。可以跨越大多数地形。
|
unit.toxopid.description = 向敌人发射大型电能集束炮弹和穿透性激光。可以跨越大多数地形。
|
||||||
unit.flare.description = 攻击地面敌人。发射标准子弹。
|
unit.flare.description = 向附近所有地面敌人发射标准子弹。
|
||||||
unit.horizon.description = 攻击地面敌人。投下炸弹。
|
unit.horizon.description = 向地面敌人投下炸弹簇。
|
||||||
unit.zenith.description = 攻击附近所有敌人。发射导弹群。
|
unit.zenith.description = 向附近所有敌人发射导弹群。
|
||||||
unit.antumbra.description = 攻击附近所有敌人。发射密集的子弹。
|
unit.antumbra.description = 向附近所有敌人发射弹幕。
|
||||||
unit.eclipse.description = 攻击附近所有敌人。发射穿透性激光和分裂弹。
|
unit.eclipse.description = 向附近所有敌人发射两道穿透性激光和一连串子弹。
|
||||||
unit.mono.description = 自动开采铜和铅,并将其放入核心中。
|
unit.mono.description = 自动开采铜和铅,并将其放入核心中。
|
||||||
unit.poly.description = 自动重建受损结构,协助其他单位建造。
|
unit.poly.description = 自动重建被摧毁的建筑并协助其他单位建造。
|
||||||
unit.mega.description = 自动修复受损结构。能够携带方块和小型地面部队。
|
unit.mega.description = 自动修复受损结构。能够携带方块和小型地面部队。
|
||||||
unit.quad.description = 向地面目标投掷大型炸弹,修复盟军建筑并摧毁敌人。能够携带中型地面部队。
|
unit.quad.description = 向地面敌人投掷大型炸弹,修复友方建筑并攻击敌人。能够携带中型地面部队。
|
||||||
unit.oct.description = 用它的再生护盾保护附近的盟友。能够携带大多数地面部队。
|
unit.oct.description = 用它的再生护盾保护附近的友方单位。能够携带大多数地面部队。
|
||||||
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 = 向附近所有敌人发射远程穿透轨道炮。构造星辉单位。
|
||||||
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 = 发射电磁脉冲爆弹,破坏敌方电网并修复友方建筑。使用四门自动激光炮塔融化附近所有敌人。
|
||||||
|
|
||||||
lst.read = 从连接的内存读取数字
|
lst.read = 从连接的内存读取数字
|
||||||
lst.write = 写入数字到连接的内存
|
lst.write = 写入数字到连接的内存
|
||||||
@@ -1518,6 +1602,8 @@ lst.sensor = 从建筑或单位取得数据
|
|||||||
lst.set = 设置变量
|
lst.set = 设置变量
|
||||||
lst.operation = 操作一两个变量
|
lst.operation = 操作一两个变量
|
||||||
lst.end = 跳至指令栈顶\n(第一条语句)
|
lst.end = 跳至指令栈顶\n(第一条语句)
|
||||||
|
lst.wait = 等待指定的秒数。
|
||||||
|
lst.lookup = 通过ID寻找特定的物品/液体/单位/块的类型。\n查找每个类型的总数量可以使用:\n[accent]@unitCount[] / [accent]@itemCount[] / [accent]@liquidCount[] / [accent]@blockCount[]
|
||||||
lst.jump = 有条件地跳到另一语句
|
lst.jump = 有条件地跳到另一语句
|
||||||
lst.unitbind = 绑定下一个某型号单位\n并存到[accent]@unit[]
|
lst.unitbind = 绑定下一个某型号单位\n并存到[accent]@unit[]
|
||||||
lst.unitcontrol = 控制绑定的单位
|
lst.unitcontrol = 控制绑定的单位
|
||||||
@@ -1537,6 +1623,7 @@ laccess.controller = 单位控制者\n如果是处理器,返回处理器\n如
|
|||||||
laccess.dead = 单位或建筑是不是死了或无效了
|
laccess.dead = 单位或建筑是不是死了或无效了
|
||||||
laccess.controlled = 若单位控制者是处理器,返回[accent]@ctrlProcessor[]\n若单位/建筑由玩家控制,返回[accent]@ctrlPlayer[]\n若单位在编队中,返回[accent]@ctrlFormation[]\n其他的,返回0
|
laccess.controlled = 若单位控制者是处理器,返回[accent]@ctrlProcessor[]\n若单位/建筑由玩家控制,返回[accent]@ctrlPlayer[]\n若单位在编队中,返回[accent]@ctrlFormation[]\n其他的,返回0
|
||||||
laccess.commanded = [red]已弃用,将被移除![]\n应该使用[accent]controlled[]
|
laccess.commanded = [red]已弃用,将被移除![]\n应该使用[accent]controlled[]
|
||||||
|
laccess.progress = 动作进度, 范围0~1。\n返回方块生产、炮塔装填或建造的进度。
|
||||||
|
|
||||||
graphicstype.clear = 用指定颜色填满显示屏
|
graphicstype.clear = 用指定颜色填满显示屏
|
||||||
graphicstype.color = 设置后续画图操作的颜色
|
graphicstype.color = 设置后续画图操作的颜色
|
||||||
@@ -1568,9 +1655,16 @@ lenum.min = 取小的那个数
|
|||||||
lenum.max = 取大的那个数
|
lenum.max = 取大的那个数
|
||||||
lenum.angle = 方位角°
|
lenum.angle = 方位角°
|
||||||
lenum.len = 原点到该点距离
|
lenum.len = 原点到该点距离
|
||||||
|
|
||||||
lenum.sin = 正弦°(对边:斜边)
|
lenum.sin = 正弦°(对边:斜边)
|
||||||
lenum.cos = 余弦°(邻边:斜边)
|
lenum.cos = 余弦°(邻边:斜边)
|
||||||
lenum.tan = 正切°(对边:邻边)
|
lenum.tan = 正切°(对边:邻边)
|
||||||
|
|
||||||
|
lenum.asin = 反正弦
|
||||||
|
lenum.acos = 反余弦
|
||||||
|
lenum.atan = 反正切
|
||||||
|
|
||||||
|
#not a typo, look up 'range notation'
|
||||||
lenum.rand = [0, 值) 范围内随机数
|
lenum.rand = [0, 值) 范围内随机数
|
||||||
lenum.log = 自然对数(ln)
|
lenum.log = 自然对数(ln)
|
||||||
lenum.log10 = 10底对数
|
lenum.log10 = 10底对数
|
||||||
|
|||||||
@@ -352,3 +352,4 @@
|
|||||||
63354=payload-launch-pad|block-payload-launch-pad-ui
|
63354=payload-launch-pad|block-payload-launch-pad-ui
|
||||||
63353=silicon-arc-furnace|block-silicon-arc-furnace-ui
|
63353=silicon-arc-furnace|block-silicon-arc-furnace-ui
|
||||||
63352=metal-floor-4|block-metal-floor-4-ui
|
63352=metal-floor-4|block-metal-floor-4-ui
|
||||||
|
63351=invincible|status-invincible-ui
|
||||||
|
|||||||
@@ -107,6 +107,7 @@ importPackage(Packages.mindustry.maps.planet)
|
|||||||
importPackage(Packages.mindustry.net)
|
importPackage(Packages.mindustry.net)
|
||||||
importPackage(Packages.mindustry.service)
|
importPackage(Packages.mindustry.service)
|
||||||
importPackage(Packages.mindustry.type)
|
importPackage(Packages.mindustry.type)
|
||||||
|
importPackage(Packages.mindustry.type.ammo)
|
||||||
importPackage(Packages.mindustry.type.weapons)
|
importPackage(Packages.mindustry.type.weapons)
|
||||||
importPackage(Packages.mindustry.type.weather)
|
importPackage(Packages.mindustry.type.weather)
|
||||||
importPackage(Packages.mindustry.ui)
|
importPackage(Packages.mindustry.ui)
|
||||||
|
|||||||
BIN
core/assets/sounds/mineDeploy.ogg
Normal file
BIN
core/assets/sounds/plantBreak.ogg
Normal file
BIN
core/assets/sounds/rockBreak.ogg
Normal file
|
Before Width: | Height: | Size: 9.4 KiB After Width: | Height: | Size: 114 KiB |
@@ -55,7 +55,7 @@ public abstract class ClientLauncher extends ApplicationCore implements Platform
|
|||||||
Log.info("[GL] Max texture size: @", maxTextureSize);
|
Log.info("[GL] Max texture size: @", maxTextureSize);
|
||||||
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: @", System.getProperty("java.version"));
|
Log.info("[JAVA] Version: @", OS.javaVersion);
|
||||||
|
|
||||||
Time.setDeltaProvider(() -> {
|
Time.setDeltaProvider(() -> {
|
||||||
float result = Core.graphics.getDeltaTime() * 60f;
|
float result = Core.graphics.getDeltaTime() * 60f;
|
||||||
|
|||||||
@@ -24,10 +24,8 @@ import mindustry.logic.*;
|
|||||||
import mindustry.maps.Map;
|
import mindustry.maps.Map;
|
||||||
import mindustry.maps.*;
|
import mindustry.maps.*;
|
||||||
import mindustry.mod.*;
|
import mindustry.mod.*;
|
||||||
import mindustry.net.Net;
|
|
||||||
import mindustry.net.*;
|
import mindustry.net.*;
|
||||||
import mindustry.service.*;
|
import mindustry.service.*;
|
||||||
import mindustry.world.*;
|
|
||||||
|
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
import java.nio.charset.*;
|
import java.nio.charset.*;
|
||||||
@@ -105,16 +103,14 @@ public class Vars implements Loadable{
|
|||||||
public static final float invasionGracePeriod = 20;
|
public static final float invasionGracePeriod = 20;
|
||||||
/** min armor fraction damage; e.g. 0.05 = at least 5% damage */
|
/** min armor fraction damage; e.g. 0.05 = at least 5% damage */
|
||||||
public static final float minArmorDamage = 0.1f;
|
public static final float minArmorDamage = 0.1f;
|
||||||
/** launch animation duration */
|
/** land/launch animation duration */
|
||||||
public static final float launchDuration = 140f;
|
public static final float coreLandDuration = 160f;
|
||||||
/** size of tiles in units */
|
/** size of tiles in units */
|
||||||
public static final int tilesize = 8;
|
public static final int tilesize = 8;
|
||||||
/** size of one tile payload (^2) */
|
/** size of one tile payload (^2) */
|
||||||
public static final float tilePayload = tilesize * tilesize;
|
public static final float tilePayload = tilesize * tilesize;
|
||||||
/** icon sizes for UI */
|
/** icon sizes for UI */
|
||||||
public static final float iconXLarge = 8*6f, iconLarge = 8*5f, iconMed = 8*4f, iconSmall = 8*3f;
|
public static final float iconXLarge = 8*6f, iconLarge = 8*5f, iconMed = 8*4f, iconSmall = 8*3f;
|
||||||
/** tile used in certain situations, instead of null */
|
|
||||||
public static Tile emptyTile;
|
|
||||||
/** for map generator dialog */
|
/** for map generator dialog */
|
||||||
public static boolean updateEditorOnChange = false;
|
public static boolean updateEditorOnChange = false;
|
||||||
/** all choosable player colors in join/host dialog */
|
/** all choosable player colors in join/host dialog */
|
||||||
@@ -146,8 +142,8 @@ public class Vars implements Loadable{
|
|||||||
public static boolean clientLoaded = false;
|
public static boolean clientLoaded = false;
|
||||||
/** max GL texture size */
|
/** max GL texture size */
|
||||||
public static int maxTextureSize = 2048;
|
public static int maxTextureSize = 2048;
|
||||||
/** Whether to show the core landing animation. */
|
/** Whether to show sector info upon landing. */
|
||||||
public static boolean showLandAnimation = true;
|
public static boolean showSectorLandInfo = true;
|
||||||
/** Whether to check for memory use before taking screenshots. */
|
/** Whether to check for memory use before taking screenshots. */
|
||||||
public static boolean checkScreenshotMemory = true;
|
public static boolean checkScreenshotMemory = true;
|
||||||
/** Whether to prompt the user to confirm exiting. */
|
/** Whether to prompt the user to confirm exiting. */
|
||||||
@@ -278,7 +274,6 @@ public class Vars implements Loadable{
|
|||||||
schematicDirectory = dataDirectory.child("schematics/");
|
schematicDirectory = dataDirectory.child("schematics/");
|
||||||
bebuildDirectory = dataDirectory.child("be_builds/");
|
bebuildDirectory = dataDirectory.child("be_builds/");
|
||||||
emptyMap = new Map(new StringMap());
|
emptyMap = new Map(new StringMap());
|
||||||
emptyTile = null;
|
|
||||||
|
|
||||||
if(tree == null) tree = new FileTree();
|
if(tree == null) tree = new FileTree();
|
||||||
if(mods == null) mods = new Mods();
|
if(mods == null) mods = new Mods();
|
||||||
|
|||||||
@@ -48,6 +48,7 @@ public class BlockIndexer{
|
|||||||
private Seq<Building> breturnArray = new Seq<>(Building.class);
|
private Seq<Building> breturnArray = new Seq<>(Building.class);
|
||||||
|
|
||||||
public BlockIndexer(){
|
public BlockIndexer(){
|
||||||
|
clearFlags();
|
||||||
|
|
||||||
Events.on(TilePreChangeEvent.class, event -> {
|
Events.on(TilePreChangeEvent.class, event -> {
|
||||||
removeIndex(event.tile);
|
removeIndex(event.tile);
|
||||||
@@ -62,11 +63,7 @@ public class BlockIndexer{
|
|||||||
flagMap = new TileArray[Team.all.length][BlockFlag.all.length];
|
flagMap = new TileArray[Team.all.length][BlockFlag.all.length];
|
||||||
activeTeams = new Seq<>(Team.class);
|
activeTeams = new Seq<>(Team.class);
|
||||||
|
|
||||||
for(int i = 0; i < flagMap.length; i++){
|
clearFlags();
|
||||||
for(int j = 0; j < BlockFlag.all.length; j++){
|
|
||||||
flagMap[i][j] = new TileArray();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
allOres.clear();
|
allOres.clear();
|
||||||
ores = new IntSeq[content.items().size][][];
|
ores = new IntSeq[content.items().size][][];
|
||||||
@@ -106,7 +103,7 @@ public class BlockIndexer{
|
|||||||
|
|
||||||
public void removeIndex(Tile tile){
|
public void removeIndex(Tile tile){
|
||||||
var team = tile.team();
|
var team = tile.team();
|
||||||
if(team != Team.derelict && tile.isCenter()){
|
if(tile.build != null && tile.isCenter()){
|
||||||
var flags = tile.block().flags;
|
var flags = tile.block().flags;
|
||||||
var data = team.data();
|
var data = team.data();
|
||||||
|
|
||||||
@@ -160,6 +157,14 @@ public class BlockIndexer{
|
|||||||
return blocksPresent != null && blocksPresent[block.id];
|
return blocksPresent != null && blocksPresent[block.id];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void clearFlags(){
|
||||||
|
for(int i = 0; i < flagMap.length; i++){
|
||||||
|
for(int j = 0; j < BlockFlag.all.length; j++){
|
||||||
|
flagMap[i][j] = new TileArray();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private TileArray[] getFlagged(Team team){
|
private TileArray[] getFlagged(Team team){
|
||||||
return flagMap[team.id];
|
return flagMap[team.id];
|
||||||
}
|
}
|
||||||
@@ -206,13 +211,12 @@ 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){
|
||||||
returnBool = false;
|
breturnArray.clear();
|
||||||
|
|
||||||
if(team == null){
|
if(team == null){
|
||||||
allBuildings(wx, wy, range, b -> {
|
allBuildings(wx, wy, range, b -> {
|
||||||
if(pred.get(b)){
|
if(pred.get(b)){
|
||||||
returnBool = true;
|
breturnArray.add(b);
|
||||||
cons.get(b);
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}else{
|
}else{
|
||||||
@@ -220,13 +224,20 @@ public class BlockIndexer{
|
|||||||
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 -> {
|
||||||
if(b.within(wx, wy, range + b.hitSize() / 2f) && pred.get(b)){
|
if(b.within(wx, wy, range + b.hitSize() / 2f) && pred.get(b)){
|
||||||
returnBool = true;
|
breturnArray.add(b);
|
||||||
cons.get(b);
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
return returnBool;
|
int size = breturnArray.size;
|
||||||
|
var items = breturnArray.items;
|
||||||
|
for(int i = 0; i < size; i++){
|
||||||
|
cons.get(items[i]);
|
||||||
|
items[i] = null;
|
||||||
|
}
|
||||||
|
breturnArray.size = 0;
|
||||||
|
|
||||||
|
return size > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Get all enemy blocks with a flag. */
|
/** Get all enemy blocks with a flag. */
|
||||||
@@ -269,31 +280,50 @@ public class BlockIndexer{
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void allBuildings(float x, float y, float range, Cons<Building> cons){
|
public void allBuildings(float x, float y, float range, Cons<Building> cons){
|
||||||
|
breturnArray.clear();
|
||||||
for(int i = 0; i < activeTeams.size; i++){
|
for(int i = 0; i < activeTeams.size; i++){
|
||||||
Team team = activeTeams.items[i];
|
Team team = activeTeams.items[i];
|
||||||
var buildings = team.data().buildings;
|
var buildings = team.data().buildings;
|
||||||
if(buildings == null) continue;
|
if(buildings == null) continue;
|
||||||
buildings.intersect(x - range, y - range, range*2f, range*2f, b -> {
|
buildings.intersect(x - range, y - range, range*2f, range*2f, breturnArray);
|
||||||
if(b.within(x, y, range + b.hitSize()/2f)){
|
|
||||||
cons.get(b);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var items = breturnArray.items;
|
||||||
|
int size = breturnArray.size;
|
||||||
|
for(int i = 0; i < size; i++){
|
||||||
|
var b = items[i];
|
||||||
|
if(b.within(x, y, range + b.hitSize()/2f)){
|
||||||
|
cons.get(b);
|
||||||
|
}
|
||||||
|
items[i] = null;
|
||||||
|
}
|
||||||
|
breturnArray.size = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Building findEnemyTile(@Nullable Team team, float x, float y, float range, Boolf<Building> pred){
|
public Building findEnemyTile(Team team, float x, float y, float range, Boolf<Building> pred){
|
||||||
|
Building target = null;
|
||||||
|
float targetDist = 0;
|
||||||
|
|
||||||
for(int i = 0; i < activeTeams.size; i++){
|
for(int i = 0; i < activeTeams.size; i++){
|
||||||
Team enemy = activeTeams.items[i];
|
Team enemy = activeTeams.items[i];
|
||||||
|
if(enemy == team || (enemy == Team.derelict && !state.rules.coreCapture)) continue;
|
||||||
|
|
||||||
if(enemy == team || (team == Team.derelict && !state.rules.coreCapture)) continue;
|
Building candidate = indexer.findTile(enemy, x, y, range, pred, true);
|
||||||
|
if(candidate == null) continue;
|
||||||
|
|
||||||
Building entity = indexer.findTile(enemy, x, y, range, pred, true);
|
//if a block has the same priority, the closer one should be targeted
|
||||||
if(entity != null){
|
float dist = candidate.dst(x, y) - candidate.hitSize() / 2f;
|
||||||
return entity;
|
if(target == null ||
|
||||||
|
//if its closer and is at least equal priority
|
||||||
|
(dist < targetDist && candidate.block.priority.ordinal() >= target.block.priority.ordinal()) ||
|
||||||
|
// block has higher priority (so range doesnt matter)
|
||||||
|
(candidate.block.priority.ordinal() > target.block.priority.ordinal())){
|
||||||
|
target = candidate;
|
||||||
|
targetDist = dist;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return target;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Building findTile(Team team, float x, float y, float range, Boolf<Building> pred){
|
public Building findTile(Team team, float x, float y, float range, Boolf<Building> pred){
|
||||||
|
|||||||
@@ -180,6 +180,7 @@ public class WaveSpawner{
|
|||||||
private void spawnEffect(Unit unit){
|
private void spawnEffect(Unit unit){
|
||||||
unit.rotation = unit.angleTo(world.width()/2f * tilesize, world.height()/2f * tilesize);
|
unit.rotation = unit.angleTo(world.width()/2f * tilesize, world.height()/2f * tilesize);
|
||||||
unit.apply(StatusEffects.unmoving, 30f);
|
unit.apply(StatusEffects.unmoving, 30f);
|
||||||
|
unit.apply(StatusEffects.invincible, 60f);
|
||||||
unit.add();
|
unit.add();
|
||||||
|
|
||||||
Call.spawnEffect(unit.x, unit.y, unit.rotation, unit.type);
|
Call.spawnEffect(unit.x, unit.y, unit.rotation, unit.type);
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ public class BuilderAI extends AIController{
|
|||||||
@Nullable Unit following;
|
@Nullable Unit following;
|
||||||
@Nullable Teamc enemy;
|
@Nullable Teamc enemy;
|
||||||
float retreatTimer;
|
float retreatTimer;
|
||||||
|
@Nullable BlockPlan lastPlan;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void updateMovement(){
|
public void updateMovement(){
|
||||||
@@ -43,6 +44,7 @@ public class BuilderAI extends AIController{
|
|||||||
//set to follower's first build plan, whatever that is
|
//set to follower's first build plan, whatever that is
|
||||||
unit.plans.clear();
|
unit.plans.clear();
|
||||||
unit.plans.addFirst(following.buildPlan());
|
unit.plans.addFirst(following.buildPlan());
|
||||||
|
lastPlan = null;
|
||||||
}else if(unit.buildPlan() == null){
|
}else if(unit.buildPlan() == null){
|
||||||
//not following anyone or building
|
//not following anyone or building
|
||||||
if(timer.get(timerTarget4, 40)){
|
if(timer.get(timerTarget4, 40)){
|
||||||
@@ -78,10 +80,11 @@ public class BuilderAI extends AIController{
|
|||||||
}
|
}
|
||||||
|
|
||||||
boolean valid =
|
boolean valid =
|
||||||
(req.tile() != null && req.tile().build instanceof ConstructBuild cons && cons.current == req.block) ||
|
!(lastPlan != null && lastPlan.removed) &&
|
||||||
(req.breaking ?
|
((req.tile() != null && req.tile().build instanceof ConstructBuild cons && cons.current == req.block) ||
|
||||||
Build.validBreak(unit.team(), req.x, req.y) :
|
(req.breaking ?
|
||||||
Build.validPlace(req.block, unit.team(), req.x, req.y, req.rotation));
|
Build.validBreak(unit.team(), req.x, req.y) :
|
||||||
|
Build.validPlace(req.block, unit.team(), req.x, req.y, req.rotation)));
|
||||||
|
|
||||||
if(valid){
|
if(valid){
|
||||||
//move toward the request
|
//move toward the request
|
||||||
@@ -89,6 +92,7 @@ public class BuilderAI extends AIController{
|
|||||||
}else{
|
}else{
|
||||||
//discard invalid request
|
//discard invalid request
|
||||||
unit.plans.removeFirst();
|
unit.plans.removeFirst();
|
||||||
|
lastPlan = null;
|
||||||
}
|
}
|
||||||
}else{
|
}else{
|
||||||
|
|
||||||
@@ -127,6 +131,7 @@ public class BuilderAI extends AIController{
|
|||||||
if(world.tile(block.x, block.y) != null && world.tile(block.x, block.y).block().id == block.block){
|
if(world.tile(block.x, block.y) != null && world.tile(block.x, block.y).block().id == block.block){
|
||||||
blocks.removeFirst();
|
blocks.removeFirst();
|
||||||
}else if(Build.validPlace(content.block(block.block), unit.team(), block.x, block.y, block.rotation)){ //it's valid.
|
}else if(Build.validPlace(content.block(block.block), unit.team(), block.x, block.y, block.rotation)){ //it's valid.
|
||||||
|
lastPlan = block;
|
||||||
//add build request.
|
//add build request.
|
||||||
unit.addBuild(new BuildPlan(block.x, block.y, block.rotation, content.block(block.block), block.config));
|
unit.addBuild(new BuildPlan(block.x, block.y, block.rotation, content.block(block.block), block.config));
|
||||||
//shift build plan to tail so next unit builds something else.
|
//shift build plan to tail so next unit builds something else.
|
||||||
|
|||||||
@@ -6,10 +6,14 @@ import mindustry.entities.units.*;
|
|||||||
import mindustry.gen.*;
|
import mindustry.gen.*;
|
||||||
import mindustry.world.meta.*;
|
import mindustry.world.meta.*;
|
||||||
|
|
||||||
|
import static mindustry.Vars.*;
|
||||||
|
|
||||||
public class DefenderAI extends AIController{
|
public class DefenderAI extends AIController{
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void updateMovement(){
|
public void updateMovement(){
|
||||||
|
unloadPayloads();
|
||||||
|
|
||||||
if(target != null){
|
if(target != null){
|
||||||
moveTo(target, (target instanceof Sized s ? s.hitSize()/2f * 1.1f : 0f) + unit.hitSize/2f + 15f, 50f);
|
moveTo(target, (target instanceof Sized s ? s.hitSize()/2f * 1.1f : 0f) + unit.hitSize/2f + 15f, 50f);
|
||||||
unit.lookAt(target);
|
unit.lookAt(target);
|
||||||
@@ -23,6 +27,7 @@ public class DefenderAI extends AIController{
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected Teamc findTarget(float x, float y, float range, boolean air, boolean ground){
|
protected 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){
|
||||||
//Sort by max health and closer target.
|
//Sort by max health and closer target.
|
||||||
@@ -34,6 +39,14 @@ public class DefenderAI extends AIController{
|
|||||||
var block = targetFlag(unit.x, unit.y, BlockFlag.rally, false);
|
var block = targetFlag(unit.x, unit.y, BlockFlag.rally, false);
|
||||||
if(block != null) return block;
|
if(block != null) return block;
|
||||||
//return core if found
|
//return core if found
|
||||||
return unit.closestCore();
|
var core = unit.closestCore();
|
||||||
|
if(core != null) return core;
|
||||||
|
|
||||||
|
//for enemies, target the enemy core.
|
||||||
|
if(state.rules.waves && unit.team == state.rules.waveTeam){
|
||||||
|
return unit.closestEnemyCore();
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,6 +11,8 @@ public class FlyingAI extends AIController{
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void updateMovement(){
|
public void updateMovement(){
|
||||||
|
unloadPayloads();
|
||||||
|
|
||||||
if(target != null && unit.hasWeapons() && command() == UnitCommand.attack){
|
if(target != null && unit.hasWeapons() && command() == UnitCommand.attack){
|
||||||
if(!unit.type.circleTarget){
|
if(!unit.type.circleTarget){
|
||||||
moveTo(target, unit.type.range * 0.8f);
|
moveTo(target, unit.type.range * 0.8f);
|
||||||
@@ -31,16 +33,24 @@ public class FlyingAI extends AIController{
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected Teamc findTarget(float x, float y, float range, boolean air, boolean ground){
|
protected Teamc findTarget(float x, float y, float range, boolean air, boolean ground){
|
||||||
Teamc result = target(x, y, range, air, ground);
|
var result = findMainTarget(x, y, range, air, ground);
|
||||||
if(result != null) return result;
|
|
||||||
|
|
||||||
if(ground) result = targetFlag(x, y, BlockFlag.generator, true);
|
//if the main target is in range, use it, otherwise target whatever is closest
|
||||||
if(result != null) return result;
|
return checkTarget(result, x, y, range) ? target(x, y, range, air, ground) : result;
|
||||||
|
}
|
||||||
|
|
||||||
if(ground) result = targetFlag(x, y, BlockFlag.core, true);
|
@Override
|
||||||
if(result != null) return result;
|
protected Teamc findMainTarget(float x, float y, float range, boolean air, boolean ground){
|
||||||
|
for(var flag : unit.team.isAI() ? unit.type.targetFlags : unit.type.playerTargetFlags){
|
||||||
return null;
|
if(flag == null){
|
||||||
|
Teamc result = target(x, y, range, air, ground);
|
||||||
|
if(result != null) return result;
|
||||||
|
}else if(ground){
|
||||||
|
Teamc result = targetFlag(x, y, flag, true);
|
||||||
|
if(result != null) return result;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return targetFlag(x, y, BlockFlag.core, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void attack(float circleLength){
|
protected void attack(float circleLength){
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ public class LogicAI extends AIController{
|
|||||||
/** Minimum delay between item transfers. */
|
/** Minimum delay between item transfers. */
|
||||||
public static final float transferDelay = 60f * 1.5f;
|
public static final float transferDelay = 60f * 1.5f;
|
||||||
/** Time after which the unit resets its controlled and reverts to a normal unit. */
|
/** Time after which the unit resets its controlled and reverts to a normal unit. */
|
||||||
public static final float logicControlTimeout = 10f * 60f;
|
public static final float logicControlTimeout = 60f * 10f;
|
||||||
|
|
||||||
public LUnitControl control = LUnitControl.idle;
|
public LUnitControl control = LUnitControl.idle;
|
||||||
public float moveX, moveY, moveRad;
|
public float moveX, moveY, moveRad;
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ import static mindustry.Vars.*;
|
|||||||
|
|
||||||
/** Controls playback of multiple audio tracks.*/
|
/** Controls playback of multiple audio tracks.*/
|
||||||
public class SoundControl{
|
public class SoundControl{
|
||||||
protected static final float finTime = 120f, foutTime = 120f, musicInterval = 60 * 60 * 3f, musicChance = 0.6f, musicWaveChance = 0.46f;
|
protected static final float finTime = 120f, foutTime = 120f, musicInterval = 3f * Time.toMinutes, musicChance = 0.6f, musicWaveChance = 0.46f;
|
||||||
|
|
||||||
/** normal, ambient music, plays at any time */
|
/** normal, ambient music, plays at any time */
|
||||||
public Seq<Music> ambientMusic = Seq.with();
|
public Seq<Music> ambientMusic = Seq.with();
|
||||||
|
|||||||
@@ -235,7 +235,6 @@ public class Blocks implements ContentList{
|
|||||||
magmarock = new Floor("magmarock"){{
|
magmarock = new Floor("magmarock"){{
|
||||||
attributes.set(Attribute.heat, 0.75f);
|
attributes.set(Attribute.heat, 0.75f);
|
||||||
attributes.set(Attribute.water, -0.75f);
|
attributes.set(Attribute.water, -0.75f);
|
||||||
updateEffect = Fx.magmasmoke;
|
|
||||||
blendGroup = basalt;
|
blendGroup = basalt;
|
||||||
|
|
||||||
emitLight = true;
|
emitLight = true;
|
||||||
@@ -305,7 +304,7 @@ public class Blocks implements ContentList{
|
|||||||
|
|
||||||
shale = new Floor("shale"){{
|
shale = new Floor("shale"){{
|
||||||
variants = 3;
|
variants = 3;
|
||||||
attributes.set(Attribute.oil, 1f);
|
attributes.set(Attribute.oil, 1.6f);
|
||||||
}};
|
}};
|
||||||
|
|
||||||
stoneWall = new StaticWall("stone-wall"){{
|
stoneWall = new StaticWall("stone-wall"){{
|
||||||
@@ -369,6 +368,7 @@ public class Blocks implements ContentList{
|
|||||||
|
|
||||||
sporeCluster = new Prop("spore-cluster"){{
|
sporeCluster = new Prop("spore-cluster"){{
|
||||||
variants = 3;
|
variants = 3;
|
||||||
|
breakSound = Sounds.plantBreak;
|
||||||
}};
|
}};
|
||||||
|
|
||||||
boulder = new Prop("boulder"){{
|
boulder = new Prop("boulder"){{
|
||||||
@@ -426,6 +426,9 @@ public class Blocks implements ContentList{
|
|||||||
|
|
||||||
darkMetal = new StaticWall("dark-metal");
|
darkMetal = new StaticWall("dark-metal");
|
||||||
|
|
||||||
|
Seq.with(metalFloor, metalFloorDamaged, metalFloor2, metalFloor3, metalFloor4, metalFloor5, darkPanel1, darkPanel2, darkPanel3, darkPanel4, darkPanel5, darkPanel6)
|
||||||
|
.each(b -> b.asFloor().wall = darkMetal);
|
||||||
|
|
||||||
pebbles = new DoubleOverlayFloor("pebbles");
|
pebbles = new DoubleOverlayFloor("pebbles");
|
||||||
|
|
||||||
tendrils = new OverlayFloor("tendrils");
|
tendrils = new OverlayFloor("tendrils");
|
||||||
@@ -654,8 +657,8 @@ public class Blocks implements ContentList{
|
|||||||
craftTime = 35f;
|
craftTime = 35f;
|
||||||
size = 2;
|
size = 2;
|
||||||
|
|
||||||
consumes.power(1f);
|
consumes.power(1.1f);
|
||||||
consumes.liquid(Liquids.slag, 0.07f);
|
consumes.liquid(Liquids.slag, 4f / 60f);
|
||||||
}};
|
}};
|
||||||
|
|
||||||
disassembler = new Separator("disassembler"){{
|
disassembler = new Separator("disassembler"){{
|
||||||
@@ -709,7 +712,7 @@ public class Blocks implements ContentList{
|
|||||||
|
|
||||||
coalCentrifuge = new GenericCrafter("coal-centrifuge"){{
|
coalCentrifuge = new GenericCrafter("coal-centrifuge"){{
|
||||||
requirements(Category.crafting, with(Items.titanium, 20, Items.graphite, 40, Items.lead, 30));
|
requirements(Category.crafting, with(Items.titanium, 20, Items.graphite, 40, Items.lead, 30));
|
||||||
craftEffect = Fx.smeltsmoke;
|
craftEffect = Fx.coalSmeltsmoke;
|
||||||
outputItem = new ItemStack(Items.coal, 1);
|
outputItem = new ItemStack(Items.coal, 1);
|
||||||
craftTime = 30f;
|
craftTime = 30f;
|
||||||
size = 2;
|
size = 2;
|
||||||
@@ -961,15 +964,20 @@ public class Blocks implements ContentList{
|
|||||||
|
|
||||||
itemBridge = new BufferedItemBridge("bridge-conveyor"){{
|
itemBridge = new BufferedItemBridge("bridge-conveyor"){{
|
||||||
requirements(Category.distribution, with(Items.lead, 6, Items.copper, 6));
|
requirements(Category.distribution, with(Items.lead, 6, Items.copper, 6));
|
||||||
|
fadeIn = moveArrows = false;
|
||||||
range = 4;
|
range = 4;
|
||||||
speed = 74f;
|
speed = 74f;
|
||||||
|
arrowSpacing = 6f;
|
||||||
bufferCapacity = 14;
|
bufferCapacity = 14;
|
||||||
}};
|
}};
|
||||||
|
|
||||||
phaseConveyor = new ItemBridge("phase-conveyor"){{
|
phaseConveyor = new ItemBridge("phase-conveyor"){{
|
||||||
requirements(Category.distribution, with(Items.phaseFabric, 5, Items.silicon, 7, Items.lead, 10, Items.graphite, 10));
|
requirements(Category.distribution, with(Items.phaseFabric, 5, Items.silicon, 7, Items.lead, 10, Items.graphite, 10));
|
||||||
range = 12;
|
range = 12;
|
||||||
|
arrowPeriod = 0.9f;
|
||||||
|
arrowTimeScl = 2.75f;
|
||||||
hasPower = true;
|
hasPower = true;
|
||||||
|
pulse = true;
|
||||||
consumes.power(0.30f);
|
consumes.power(0.30f);
|
||||||
}};
|
}};
|
||||||
|
|
||||||
@@ -1012,7 +1020,6 @@ public class Blocks implements ContentList{
|
|||||||
reloadTime = 200f;
|
reloadTime = 200f;
|
||||||
range = 440f;
|
range = 440f;
|
||||||
consumes.power(1.75f);
|
consumes.power(1.75f);
|
||||||
bullet = new MassDriverBolt();
|
|
||||||
}};
|
}};
|
||||||
|
|
||||||
//special transport blocks
|
//special transport blocks
|
||||||
@@ -1093,8 +1100,10 @@ public class Blocks implements ContentList{
|
|||||||
requirements(Category.liquid, with(Items.graphite, 2, Items.metaglass, 2));
|
requirements(Category.liquid, with(Items.graphite, 2, Items.metaglass, 2));
|
||||||
}};
|
}};
|
||||||
|
|
||||||
bridgeConduit = new LiquidExtendingBridge("bridge-conduit"){{
|
bridgeConduit = new LiquidBridge("bridge-conduit"){{
|
||||||
requirements(Category.liquid, with(Items.graphite, 4, Items.metaglass, 8));
|
requirements(Category.liquid, with(Items.graphite, 4, Items.metaglass, 8));
|
||||||
|
fadeIn = moveArrows = false;
|
||||||
|
arrowSpacing = 6f;
|
||||||
range = 4;
|
range = 4;
|
||||||
hasPower = false;
|
hasPower = false;
|
||||||
}};
|
}};
|
||||||
@@ -1102,8 +1111,11 @@ public class Blocks implements ContentList{
|
|||||||
phaseConduit = new LiquidBridge("phase-conduit"){{
|
phaseConduit = new LiquidBridge("phase-conduit"){{
|
||||||
requirements(Category.liquid, with(Items.phaseFabric, 5, Items.silicon, 7, Items.metaglass, 20, Items.titanium, 10));
|
requirements(Category.liquid, with(Items.phaseFabric, 5, Items.silicon, 7, Items.metaglass, 20, Items.titanium, 10));
|
||||||
range = 12;
|
range = 12;
|
||||||
|
arrowPeriod = 0.9f;
|
||||||
|
arrowTimeScl = 2.75f;
|
||||||
hasPower = true;
|
hasPower = true;
|
||||||
canOverdrive = false;
|
canOverdrive = false;
|
||||||
|
pulse = true;
|
||||||
consumes.power(0.30f);
|
consumes.power(0.30f);
|
||||||
}};
|
}};
|
||||||
|
|
||||||
@@ -1159,6 +1171,7 @@ public class Blocks implements ContentList{
|
|||||||
requirements(Category.power, with(Items.copper, 40, Items.graphite, 35, Items.lead, 50, Items.silicon, 35, Items.metaglass, 40));
|
requirements(Category.power, with(Items.copper, 40, Items.graphite, 35, Items.lead, 50, Items.silicon, 35, Items.metaglass, 40));
|
||||||
powerProduction = 1.8f;
|
powerProduction = 1.8f;
|
||||||
generateEffect = Fx.redgeneratespark;
|
generateEffect = Fx.redgeneratespark;
|
||||||
|
effectChance = 0.011f;
|
||||||
size = 2;
|
size = 2;
|
||||||
floating = true;
|
floating = true;
|
||||||
ambientSound = Sounds.hum;
|
ambientSound = Sounds.hum;
|
||||||
@@ -1364,6 +1377,7 @@ public class Blocks implements ContentList{
|
|||||||
health = 3500;
|
health = 3500;
|
||||||
itemCapacity = 9000;
|
itemCapacity = 9000;
|
||||||
size = 4;
|
size = 4;
|
||||||
|
thrusterLength = 34/4f;
|
||||||
|
|
||||||
unitCapModifier = 16;
|
unitCapModifier = 16;
|
||||||
researchCostMultiplier = 0.07f;
|
researchCostMultiplier = 0.07f;
|
||||||
@@ -1376,6 +1390,7 @@ public class Blocks implements ContentList{
|
|||||||
health = 6000;
|
health = 6000;
|
||||||
itemCapacity = 13000;
|
itemCapacity = 13000;
|
||||||
size = 5;
|
size = 5;
|
||||||
|
thrusterLength = 40/4f;
|
||||||
|
|
||||||
unitCapModifier = 24;
|
unitCapModifier = 24;
|
||||||
researchCostMultiplier = 0.11f;
|
researchCostMultiplier = 0.11f;
|
||||||
@@ -1589,7 +1604,7 @@ public class Blocks implements ContentList{
|
|||||||
shots = 4;
|
shots = 4;
|
||||||
burstSpacing = 5;
|
burstSpacing = 5;
|
||||||
inaccuracy = 10f;
|
inaccuracy = 10f;
|
||||||
range = 215f;
|
range = 235f;
|
||||||
xRand = 6f;
|
xRand = 6f;
|
||||||
size = 2;
|
size = 2;
|
||||||
health = 300 * size * size;
|
health = 300 * size * size;
|
||||||
@@ -2000,17 +2015,6 @@ public class Blocks implements ContentList{
|
|||||||
acceptCoolant = true;
|
acceptCoolant = true;
|
||||||
}};
|
}};
|
||||||
|
|
||||||
resupplyPoint = new ResupplyPoint("resupply-point"){{
|
|
||||||
requirements(Category.units, BuildVisibility.ammoOnly, with(Items.lead, 20, Items.copper, 15, Items.silicon, 15));
|
|
||||||
|
|
||||||
size = 2;
|
|
||||||
range = 80f;
|
|
||||||
itemCapacity = 20;
|
|
||||||
ammoAmount = 5;
|
|
||||||
|
|
||||||
consumes.item(Items.copper, 1);
|
|
||||||
}};
|
|
||||||
|
|
||||||
//endregion
|
//endregion
|
||||||
//region payloads
|
//region payloads
|
||||||
|
|
||||||
@@ -2029,7 +2033,7 @@ public class Blocks implements ContentList{
|
|||||||
size = 5;
|
size = 5;
|
||||||
reloadTime = 140f;
|
reloadTime = 140f;
|
||||||
chargeTime = 100f;
|
chargeTime = 100f;
|
||||||
range = 500f;
|
range = 600f;
|
||||||
maxPayloadSize = 3.5f;
|
maxPayloadSize = 3.5f;
|
||||||
consumes.power(6f);
|
consumes.power(6f);
|
||||||
}};
|
}};
|
||||||
|
|||||||
@@ -184,6 +184,16 @@ public class Fx{
|
|||||||
Lines.square(e.x, e.y, tilesize / 2f * e.rotation + e.fin() * 3f);
|
Lines.square(e.x, e.y, tilesize / 2f * e.rotation + e.fin() * 3f);
|
||||||
}),
|
}),
|
||||||
|
|
||||||
|
coreLaunchConstruct = new Effect(35, e -> {
|
||||||
|
color(Pal.accent);
|
||||||
|
stroke(4f - e.fin() * 3f);
|
||||||
|
Lines.square(e.x, e.y, tilesize / 2f * e.rotation * 1.2f + e.fin() * 5f);
|
||||||
|
|
||||||
|
randLenVectors(e.id, 5 + (int)(e.rotation * 5), e.rotation * 3f + (tilesize * e.rotation) * e.finpow() * 1.5f, (x, y) -> {
|
||||||
|
Lines.lineAngle(e.x + x, e.y + y, Mathf.angle(x, y), 1f + e.fout() * (4f + e.rotation));
|
||||||
|
});
|
||||||
|
}),
|
||||||
|
|
||||||
tapBlock = new Effect(12, e -> {
|
tapBlock = new Effect(12, e -> {
|
||||||
color(Pal.accent);
|
color(Pal.accent);
|
||||||
stroke(3f - e.fin() * 2f);
|
stroke(3f - e.fin() * 2f);
|
||||||
@@ -1526,13 +1536,16 @@ public class Fx{
|
|||||||
});
|
});
|
||||||
}),
|
}),
|
||||||
|
|
||||||
redgeneratespark = new Effect(18, e -> {
|
redgeneratespark = new Effect(90, e -> {
|
||||||
randLenVectors(e.id, 5, e.fin() * 8f, (x, y) -> {
|
color(Pal.redSpark);
|
||||||
float len = e.fout() * 4f;
|
alpha(e.fslope());
|
||||||
color(Pal.redSpark, Color.gray, e.fin());
|
|
||||||
Fill.circle(e.x + x, e.y + y, len/2f);
|
rand.setSeed(e.id);
|
||||||
});
|
for(int i = 0; i < 2; i++){
|
||||||
}),
|
v.trns(rand.random(360f), rand.random(e.finpow() * 9f)).add(e.x, e.y);
|
||||||
|
Fill.circle(v.x, v.y, rand.random(1.4f, 2.4f));
|
||||||
|
}
|
||||||
|
}).layer(Layer.bullet - 1f),
|
||||||
|
|
||||||
generatespark = new Effect(18, e -> {
|
generatespark = new Effect(18, e -> {
|
||||||
randLenVectors(e.id, 5, e.fin() * 8f, (x, y) -> {
|
randLenVectors(e.id, 5, e.fin() * 8f, (x, y) -> {
|
||||||
@@ -1622,6 +1635,13 @@ public class Fx{
|
|||||||
});
|
});
|
||||||
}),
|
}),
|
||||||
|
|
||||||
|
coalSmeltsmoke = new Effect(40f, e -> {
|
||||||
|
randLenVectors(e.id, 0.2f + e.fin(), 4, 6.3f, (x, y, fin, out) -> {
|
||||||
|
color(Color.darkGray, Pal.coalBlack, e.finpowdown());
|
||||||
|
Fill.circle(e.x + x, e.y + y, out * 2f + 0.35f);
|
||||||
|
});
|
||||||
|
}),
|
||||||
|
|
||||||
formsmoke = new Effect(40, e -> {
|
formsmoke = new Effect(40, e -> {
|
||||||
randLenVectors(e.id, 6, 5f + e.fin() * 8f, (x, y) -> {
|
randLenVectors(e.id, 6, 5f + e.fin() * 8f, (x, y) -> {
|
||||||
color(Pal.plasticSmoke, Color.lightGray, e.fin());
|
color(Pal.plasticSmoke, Color.lightGray, e.fin());
|
||||||
@@ -1852,6 +1872,13 @@ public class Fx{
|
|||||||
Lines.poly(e.x, e.y, 6, e.rotation + e.fin());
|
Lines.poly(e.x, e.y, 6, e.rotation + e.fin());
|
||||||
}),
|
}),
|
||||||
|
|
||||||
|
coreLandDust = new Effect(100f, e -> {
|
||||||
|
color(e.color, e.fout(0.1f));
|
||||||
|
rand.setSeed(e.id);
|
||||||
|
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));
|
||||||
|
}).layer(Layer.block + 1f),
|
||||||
|
|
||||||
unitShieldBreak = new Effect(35, e -> {
|
unitShieldBreak = new Effect(35, e -> {
|
||||||
if(!(e.data instanceof Unitc)) return;
|
if(!(e.data instanceof Unitc)) return;
|
||||||
|
|
||||||
@@ -1945,8 +1972,5 @@ public class Fx{
|
|||||||
}
|
}
|
||||||
|
|
||||||
Lines.endLine();
|
Lines.endLine();
|
||||||
}).followParent(false),
|
}).followParent(false);
|
||||||
|
|
||||||
coreLand = new Effect(120f, e -> {
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package mindustry.content;
|
|||||||
|
|
||||||
import arc.graphics.*;
|
import arc.graphics.*;
|
||||||
import mindustry.ctype.*;
|
import mindustry.ctype.*;
|
||||||
|
import mindustry.graphics.*;
|
||||||
import mindustry.graphics.g3d.*;
|
import mindustry.graphics.g3d.*;
|
||||||
import mindustry.maps.planet.*;
|
import mindustry.maps.planet.*;
|
||||||
import mindustry.type.*;
|
import mindustry.type.*;
|
||||||
@@ -38,6 +39,7 @@ public class Planets implements ContentList{
|
|||||||
atmosphereRadOut = 0.3f;
|
atmosphereRadOut = 0.3f;
|
||||||
startSector = 15;
|
startSector = 15;
|
||||||
alwaysUnlocked = true;
|
alwaysUnlocked = true;
|
||||||
|
landCloudColor = Pal.spore.cpy().a(0.5f);
|
||||||
}};
|
}};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ import mindustry.graphics.*;
|
|||||||
import static mindustry.Vars.*;
|
import static mindustry.Vars.*;
|
||||||
|
|
||||||
public class StatusEffects implements ContentList{
|
public class StatusEffects implements ContentList{
|
||||||
public static StatusEffect none, burning, freezing, unmoving, slow, wet, muddy, melting, sapped, tarred, overdrive, overclock, shielded, shocked, blasted, corroded, boss, sporeSlowed, disarmed, electrified;
|
public static StatusEffect none, burning, freezing, unmoving, slow, wet, muddy, melting, sapped, tarred, overdrive, overclock, shielded, shocked, blasted, corroded, boss, sporeSlowed, disarmed, electrified, invincible;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void load(){
|
public void load(){
|
||||||
@@ -47,7 +47,6 @@ public class StatusEffects implements ContentList{
|
|||||||
|
|
||||||
affinity(blasted, ((unit, result, time) -> {
|
affinity(blasted, ((unit, result, time) -> {
|
||||||
unit.damagePierce(transitionDamage);
|
unit.damagePierce(transitionDamage);
|
||||||
result.set(freezing, time);
|
|
||||||
}));
|
}));
|
||||||
});
|
});
|
||||||
}};
|
}};
|
||||||
@@ -70,13 +69,12 @@ public class StatusEffects implements ContentList{
|
|||||||
transitionDamage = 14;
|
transitionDamage = 14;
|
||||||
|
|
||||||
init(() -> {
|
init(() -> {
|
||||||
affinity(shocked, ((unit, result, time) -> {
|
affinity(shocked, (unit, result, time) -> {
|
||||||
unit.damagePierce(transitionDamage);
|
unit.damagePierce(transitionDamage);
|
||||||
if(unit.team == state.rules.waveTeam){
|
if(unit.team == state.rules.waveTeam){
|
||||||
Events.fire(Trigger.shock);
|
Events.fire(Trigger.shock);
|
||||||
}
|
}
|
||||||
result.set(wet, time);
|
});
|
||||||
}));
|
|
||||||
opposite(burning, melting);
|
opposite(burning, melting);
|
||||||
});
|
});
|
||||||
}};
|
}};
|
||||||
@@ -98,11 +96,11 @@ public class StatusEffects implements ContentList{
|
|||||||
|
|
||||||
init(() -> {
|
init(() -> {
|
||||||
opposite(wet, freezing);
|
opposite(wet, freezing);
|
||||||
affinity(tarred, ((unit, result, time) -> {
|
affinity(tarred, (unit, result, time) -> {
|
||||||
unit.damagePierce(8f);
|
unit.damagePierce(8f);
|
||||||
Fx.burning.at(unit.x + Mathf.range(unit.bounds() / 2f), unit.y + Mathf.range(unit.bounds() / 2f));
|
Fx.burning.at(unit.x + Mathf.range(unit.bounds() / 2f), unit.y + Mathf.range(unit.bounds() / 2f));
|
||||||
result.set(melting, Math.min(time + result.time, 200f));
|
result.set(melting, Math.min(time + result.time, 200f));
|
||||||
}));
|
});
|
||||||
});
|
});
|
||||||
}};
|
}};
|
||||||
|
|
||||||
@@ -135,8 +133,8 @@ public class StatusEffects implements ContentList{
|
|||||||
effect = Fx.oily;
|
effect = Fx.oily;
|
||||||
|
|
||||||
init(() -> {
|
init(() -> {
|
||||||
affinity(melting, ((unit, result, time) -> result.set(melting, result.time + time)));
|
affinity(melting, (unit, result, time) -> result.set(melting, result.time + time));
|
||||||
affinity(burning, ((unit, result, time) -> result.set(burning, result.time + time)));
|
affinity(burning, (unit, result, time) -> result.set(burning, result.time + time));
|
||||||
});
|
});
|
||||||
}};
|
}};
|
||||||
|
|
||||||
@@ -190,5 +188,9 @@ public class StatusEffects implements ContentList{
|
|||||||
color = Color.valueOf("e9ead3");
|
color = Color.valueOf("e9ead3");
|
||||||
disarm = true;
|
disarm = true;
|
||||||
}};
|
}};
|
||||||
|
|
||||||
|
invincible = new StatusEffect("invincible"){{
|
||||||
|
healthMultiplier = Float.POSITIVE_INFINITY;
|
||||||
|
}};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ import mindustry.entities.effect.*;
|
|||||||
import mindustry.gen.*;
|
import mindustry.gen.*;
|
||||||
import mindustry.graphics.*;
|
import mindustry.graphics.*;
|
||||||
import mindustry.type.*;
|
import mindustry.type.*;
|
||||||
|
import mindustry.type.ammo.*;
|
||||||
import mindustry.type.weapons.*;
|
import mindustry.type.weapons.*;
|
||||||
import mindustry.world.meta.*;
|
import mindustry.world.meta.*;
|
||||||
|
|
||||||
@@ -52,8 +53,8 @@ public class UnitTypes implements ContentList{
|
|||||||
//air + payload, legacy
|
//air + payload, legacy
|
||||||
public static @EntityDef(value = {Unitc.class, Payloadc.class}, legacy = true) UnitType quad;
|
public static @EntityDef(value = {Unitc.class, Payloadc.class}, legacy = true) UnitType quad;
|
||||||
|
|
||||||
//air + payload + ammo distribution
|
//air + payload + legacy (different branch)
|
||||||
public static @EntityDef({Unitc.class, Payloadc.class, AmmoDistributec.class}) UnitType oct;
|
public static @EntityDef(value = {Unitc.class, Payloadc.class}, legacy = true) UnitType oct;
|
||||||
|
|
||||||
//air, legacy
|
//air, legacy
|
||||||
public static @EntityDef(value = {Unitc.class}, legacy = true) UnitType alpha, beta, gamma;
|
public static @EntityDef(value = {Unitc.class}, legacy = true) UnitType alpha, beta, gamma;
|
||||||
@@ -89,6 +90,7 @@ public class UnitTypes implements ContentList{
|
|||||||
hitSize = 10f;
|
hitSize = 10f;
|
||||||
health = 540;
|
health = 540;
|
||||||
armor = 4f;
|
armor = 4f;
|
||||||
|
ammoType = new ItemAmmoType(Items.coal);
|
||||||
|
|
||||||
immunities.add(StatusEffects.burning);
|
immunities.add(StatusEffects.burning);
|
||||||
|
|
||||||
@@ -123,6 +125,7 @@ public class UnitTypes implements ContentList{
|
|||||||
health = 900;
|
health = 900;
|
||||||
armor = 9f;
|
armor = 9f;
|
||||||
mechFrontSway = 0.55f;
|
mechFrontSway = 0.55f;
|
||||||
|
ammoType = new ItemAmmoType(Items.graphite);
|
||||||
|
|
||||||
weapons.add(new Weapon("artillery"){{
|
weapons.add(new Weapon("artillery"){{
|
||||||
top = false;
|
top = false;
|
||||||
@@ -156,6 +159,7 @@ public class UnitTypes implements ContentList{
|
|||||||
armor = 10f;
|
armor = 10f;
|
||||||
canDrown = false;
|
canDrown = false;
|
||||||
mechFrontSway = 1f;
|
mechFrontSway = 1f;
|
||||||
|
ammoType = new ItemAmmoType(Items.thorium);
|
||||||
|
|
||||||
mechStepParticles = true;
|
mechStepParticles = true;
|
||||||
mechStepShake = 0.15f;
|
mechStepShake = 0.15f;
|
||||||
@@ -220,6 +224,7 @@ public class UnitTypes implements ContentList{
|
|||||||
canDrown = false;
|
canDrown = false;
|
||||||
mechFrontSway = 1.9f;
|
mechFrontSway = 1.9f;
|
||||||
mechSideSway = 0.6f;
|
mechSideSway = 0.6f;
|
||||||
|
ammoType = new ItemAmmoType(Items.thorium);
|
||||||
|
|
||||||
weapons.add(
|
weapons.add(
|
||||||
new Weapon("reign-weapon"){{
|
new Weapon("reign-weapon"){{
|
||||||
@@ -282,7 +287,7 @@ public class UnitTypes implements ContentList{
|
|||||||
commandLimit = 8;
|
commandLimit = 8;
|
||||||
|
|
||||||
abilities.add(new RepairFieldAbility(10f, 60f * 4, 60f));
|
abilities.add(new RepairFieldAbility(10f, 60f * 4, 60f));
|
||||||
ammoType = AmmoTypes.power;
|
ammoType = new PowerAmmoType(1000);
|
||||||
|
|
||||||
weapons.add(new Weapon("heal-weapon"){{
|
weapons.add(new Weapon("heal-weapon"){{
|
||||||
top = false;
|
top = false;
|
||||||
@@ -319,7 +324,7 @@ public class UnitTypes implements ContentList{
|
|||||||
commandLimit = 9;
|
commandLimit = 9;
|
||||||
|
|
||||||
abilities.add(new ShieldRegenFieldAbility(20f, 40f, 60f * 5, 60f));
|
abilities.add(new ShieldRegenFieldAbility(20f, 40f, 60f * 5, 60f));
|
||||||
ammoType = AmmoTypes.power;
|
ammoType = new PowerAmmoType(1300);
|
||||||
|
|
||||||
weapons.add(new Weapon("heal-shotgun-weapon"){{
|
weapons.add(new Weapon("heal-shotgun-weapon"){{
|
||||||
top = false;
|
top = false;
|
||||||
@@ -372,7 +377,7 @@ public class UnitTypes implements ContentList{
|
|||||||
|
|
||||||
commandLimit = 10;
|
commandLimit = 10;
|
||||||
mechFrontSway = 0.55f;
|
mechFrontSway = 0.55f;
|
||||||
ammoType = AmmoTypes.power;
|
ammoType = new PowerAmmoType(1500);
|
||||||
|
|
||||||
speed = 0.4f;
|
speed = 0.4f;
|
||||||
hitSize = 13f;
|
hitSize = 13f;
|
||||||
@@ -415,16 +420,16 @@ public class UnitTypes implements ContentList{
|
|||||||
|
|
||||||
mechStepParticles = true;
|
mechStepParticles = true;
|
||||||
mechStepShake = 0.15f;
|
mechStepShake = 0.15f;
|
||||||
ammoType = AmmoTypes.powerHigh;
|
ammoType = new PowerAmmoType(2500);
|
||||||
|
|
||||||
speed = 0.39f;
|
speed = 0.4f;
|
||||||
boostMultiplier = 2.2f;
|
boostMultiplier = 2.2f;
|
||||||
engineOffset = 12f;
|
engineOffset = 12f;
|
||||||
engineSize = 6f;
|
engineSize = 6f;
|
||||||
lowAltitude = true;
|
lowAltitude = true;
|
||||||
riseSpeed = 0.02f;
|
riseSpeed = 0.02f;
|
||||||
|
|
||||||
health = 7500f;
|
health = 8000f;
|
||||||
armor = 9f;
|
armor = 9f;
|
||||||
canBoost = true;
|
canBoost = true;
|
||||||
landShake = 4f;
|
landShake = 4f;
|
||||||
@@ -449,8 +454,8 @@ public class UnitTypes implements ContentList{
|
|||||||
cooldownTime = 200f;
|
cooldownTime = 200f;
|
||||||
|
|
||||||
bullet = new ContinuousLaserBulletType(){{
|
bullet = new ContinuousLaserBulletType(){{
|
||||||
damage = 30f;
|
damage = 32f;
|
||||||
length = 175f;
|
length = 180f;
|
||||||
hitEffect = Fx.hitMeltHeal;
|
hitEffect = Fx.hitMeltHeal;
|
||||||
drawSize = 420f;
|
drawSize = 420f;
|
||||||
lifetime = 160f;
|
lifetime = 160f;
|
||||||
@@ -493,7 +498,7 @@ public class UnitTypes implements ContentList{
|
|||||||
hovering = true;
|
hovering = true;
|
||||||
visualElevation = 0.2f;
|
visualElevation = 0.2f;
|
||||||
allowLegStep = true;
|
allowLegStep = true;
|
||||||
ammoType = AmmoTypes.powerHigh;
|
ammoType = new PowerAmmoType(4000);
|
||||||
groundLayer = Layer.legUnit;
|
groundLayer = Layer.legUnit;
|
||||||
|
|
||||||
speed = 0.3f;
|
speed = 0.3f;
|
||||||
@@ -558,6 +563,7 @@ public class UnitTypes implements ContentList{
|
|||||||
health = 200;
|
health = 200;
|
||||||
mechSideSway = 0.25f;
|
mechSideSway = 0.25f;
|
||||||
range = 40f;
|
range = 40f;
|
||||||
|
ammoType = new ItemAmmoType(Items.coal);
|
||||||
|
|
||||||
weapons.add(new Weapon(){{
|
weapons.add(new Weapon(){{
|
||||||
reload = 24f;
|
reload = 24f;
|
||||||
@@ -595,6 +601,7 @@ public class UnitTypes implements ContentList{
|
|||||||
legMoveSpace = 1.4f;
|
legMoveSpace = 1.4f;
|
||||||
hovering = true;
|
hovering = true;
|
||||||
armor = 3f;
|
armor = 3f;
|
||||||
|
ammoType = new ItemAmmoType(Items.coal);
|
||||||
|
|
||||||
allowLegStep = true;
|
allowLegStep = true;
|
||||||
visualElevation = 0.2f;
|
visualElevation = 0.2f;
|
||||||
@@ -634,7 +641,7 @@ public class UnitTypes implements ContentList{
|
|||||||
legBaseOffset = 2f;
|
legBaseOffset = 2f;
|
||||||
hovering = true;
|
hovering = true;
|
||||||
armor = 5f;
|
armor = 5f;
|
||||||
ammoType = AmmoTypes.power;
|
ammoType = new PowerAmmoType(1000);
|
||||||
|
|
||||||
buildSpeed = 0.75f;
|
buildSpeed = 0.75f;
|
||||||
|
|
||||||
@@ -706,7 +713,7 @@ public class UnitTypes implements ContentList{
|
|||||||
legLengthScl = 0.96f;
|
legLengthScl = 0.96f;
|
||||||
rippleScale = 2f;
|
rippleScale = 2f;
|
||||||
legSpeed = 0.2f;
|
legSpeed = 0.2f;
|
||||||
ammoType = AmmoTypes.power;
|
ammoType = new PowerAmmoType(2000);
|
||||||
buildSpeed = 1f;
|
buildSpeed = 1f;
|
||||||
|
|
||||||
legSplashDamage = 32;
|
legSplashDamage = 32;
|
||||||
@@ -810,7 +817,7 @@ public class UnitTypes implements ContentList{
|
|||||||
legLengthScl = 0.93f;
|
legLengthScl = 0.93f;
|
||||||
rippleScale = 3f;
|
rippleScale = 3f;
|
||||||
legSpeed = 0.19f;
|
legSpeed = 0.19f;
|
||||||
ammoType = AmmoTypes.powerHigh;
|
ammoType = new ItemAmmoType(Items.graphite, 8);
|
||||||
buildSpeed = 1f;
|
buildSpeed = 1f;
|
||||||
|
|
||||||
legSplashDamage = 80;
|
legSplashDamage = 80;
|
||||||
@@ -928,6 +935,7 @@ public class UnitTypes implements ContentList{
|
|||||||
engineOffset = 5.5f;
|
engineOffset = 5.5f;
|
||||||
range = 140f;
|
range = 140f;
|
||||||
targetAir = false;
|
targetAir = false;
|
||||||
|
targetFlags = new BlockFlag[]{BlockFlag.generator, null};
|
||||||
commandLimit = 4;
|
commandLimit = 4;
|
||||||
circleTarget = true;
|
circleTarget = true;
|
||||||
hitSize = 7;
|
hitSize = 7;
|
||||||
@@ -961,9 +969,10 @@ public class UnitTypes implements ContentList{
|
|||||||
range = 140f;
|
range = 140f;
|
||||||
faceTarget = false;
|
faceTarget = false;
|
||||||
armor = 3f;
|
armor = 3f;
|
||||||
targetFlag = BlockFlag.factory;
|
targetFlags = new BlockFlag[]{BlockFlag.factory, null};
|
||||||
commandLimit = 5;
|
commandLimit = 5;
|
||||||
circleTarget = true;
|
circleTarget = true;
|
||||||
|
ammoType = new ItemAmmoType(Items.graphite);
|
||||||
|
|
||||||
weapons.add(new Weapon(){{
|
weapons.add(new Weapon(){{
|
||||||
minShootVelocity = 0.75f;
|
minShootVelocity = 0.75f;
|
||||||
@@ -999,8 +1008,10 @@ public class UnitTypes implements ContentList{
|
|||||||
lowAltitude = true;
|
lowAltitude = true;
|
||||||
armor = 5f;
|
armor = 5f;
|
||||||
|
|
||||||
|
targetFlags = new BlockFlag[]{BlockFlag.launchPad, BlockFlag.storage, BlockFlag.battery, null};
|
||||||
engineOffset = 12f;
|
engineOffset = 12f;
|
||||||
engineSize = 3f;
|
engineSize = 3f;
|
||||||
|
ammoType = new ItemAmmoType(Items.graphite);
|
||||||
|
|
||||||
weapons.add(new Weapon("zenith-missiles"){{
|
weapons.add(new Weapon("zenith-missiles"){{
|
||||||
reload = 40f;
|
reload = 40f;
|
||||||
@@ -1045,7 +1056,8 @@ public class UnitTypes implements ContentList{
|
|||||||
engineOffset = 21;
|
engineOffset = 21;
|
||||||
engineSize = 5.3f;
|
engineSize = 5.3f;
|
||||||
hitSize = 46f;
|
hitSize = 46f;
|
||||||
targetFlag = BlockFlag.battery;
|
targetFlags = new BlockFlag[]{BlockFlag.generator, BlockFlag.core, null};
|
||||||
|
ammoType = new ItemAmmoType(Items.thorium);
|
||||||
|
|
||||||
BulletType missiles = new MissileBulletType(2.7f, 14){{
|
BulletType missiles = new MissileBulletType(2.7f, 14){{
|
||||||
width = 8f;
|
width = 8f;
|
||||||
@@ -1120,7 +1132,8 @@ public class UnitTypes implements ContentList{
|
|||||||
hitSize = 58f;
|
hitSize = 58f;
|
||||||
destructibleWreck = false;
|
destructibleWreck = false;
|
||||||
armor = 13f;
|
armor = 13f;
|
||||||
targetFlag = BlockFlag.reactor;
|
targetFlags = new BlockFlag[]{BlockFlag.reactor, BlockFlag.core, null};
|
||||||
|
ammoType = new ItemAmmoType(Items.thorium);
|
||||||
|
|
||||||
BulletType fragBullet = new FlakBulletType(4f, 5){{
|
BulletType fragBullet = new FlakBulletType(4f, 5){{
|
||||||
shootEffect = Fx.shootBig;
|
shootEffect = Fx.shootBig;
|
||||||
@@ -1200,7 +1213,7 @@ public class UnitTypes implements ContentList{
|
|||||||
range = 50f;
|
range = 50f;
|
||||||
isCounted = false;
|
isCounted = false;
|
||||||
|
|
||||||
ammoType = AmmoTypes.powerLow;
|
ammoType = new PowerAmmoType(500);
|
||||||
|
|
||||||
mineTier = 1;
|
mineTier = 1;
|
||||||
mineSpeed = 2.5f;
|
mineSpeed = 2.5f;
|
||||||
@@ -1221,7 +1234,7 @@ public class UnitTypes implements ContentList{
|
|||||||
hitSize = 9f;
|
hitSize = 9f;
|
||||||
lowAltitude = true;
|
lowAltitude = true;
|
||||||
|
|
||||||
ammoType = AmmoTypes.power;
|
ammoType = new PowerAmmoType(900);
|
||||||
|
|
||||||
mineTier = 2;
|
mineTier = 2;
|
||||||
mineSpeed = 3.5f;
|
mineSpeed = 3.5f;
|
||||||
@@ -1281,7 +1294,7 @@ public class UnitTypes implements ContentList{
|
|||||||
buildSpeed = 2.6f;
|
buildSpeed = 2.6f;
|
||||||
isCounted = false;
|
isCounted = false;
|
||||||
|
|
||||||
ammoType = AmmoTypes.power;
|
ammoType = new PowerAmmoType(1100);
|
||||||
|
|
||||||
weapons.add(
|
weapons.add(
|
||||||
new Weapon("heal-weapon-mount"){{
|
new Weapon("heal-weapon-mount"){{
|
||||||
@@ -1333,9 +1346,9 @@ public class UnitTypes implements ContentList{
|
|||||||
buildBeamOffset = 23;
|
buildBeamOffset = 23;
|
||||||
range = 140f;
|
range = 140f;
|
||||||
targetAir = false;
|
targetAir = false;
|
||||||
targetFlag = BlockFlag.battery;
|
targetFlags = new BlockFlag[]{BlockFlag.battery, BlockFlag.factory, null};
|
||||||
|
|
||||||
ammoType = AmmoTypes.powerHigh;
|
ammoType = new PowerAmmoType(3000);
|
||||||
|
|
||||||
weapons.add(
|
weapons.add(
|
||||||
new Weapon(){{
|
new Weapon(){{
|
||||||
@@ -1405,9 +1418,7 @@ public class UnitTypes implements ContentList{
|
|||||||
commandLimit = 6;
|
commandLimit = 6;
|
||||||
lowAltitude = true;
|
lowAltitude = true;
|
||||||
buildBeamOffset = 43;
|
buildBeamOffset = 43;
|
||||||
|
ammoCapacity = 1;
|
||||||
ammoCapacity = 1300;
|
|
||||||
ammoResupplyAmount = 20;
|
|
||||||
|
|
||||||
abilities.add(new ForceFieldAbility(140f, 4f, 7000f, 60f * 8), new RepairFieldAbility(130f, 60f * 2, 140f));
|
abilities.add(new ForceFieldAbility(140f, 4f, 7000f, 60f * 8), new RepairFieldAbility(130f, 60f * 2, 140f));
|
||||||
}};
|
}};
|
||||||
@@ -1475,6 +1486,7 @@ public class UnitTypes implements ContentList{
|
|||||||
accel = 0.3f;
|
accel = 0.3f;
|
||||||
rotateSpeed = 2.6f;
|
rotateSpeed = 2.6f;
|
||||||
rotateShooting = false;
|
rotateShooting = false;
|
||||||
|
ammoType = new ItemAmmoType(Items.graphite);
|
||||||
|
|
||||||
trailLength = 20;
|
trailLength = 20;
|
||||||
trailX = 5.5f;
|
trailX = 5.5f;
|
||||||
@@ -1518,6 +1530,7 @@ public class UnitTypes implements ContentList{
|
|||||||
hitSize = 20f;
|
hitSize = 20f;
|
||||||
armor = 7f;
|
armor = 7f;
|
||||||
rotateShooting = false;
|
rotateShooting = false;
|
||||||
|
ammoType = new ItemAmmoType(Items.graphite);
|
||||||
|
|
||||||
trailLength = 22;
|
trailLength = 22;
|
||||||
trailX = 7f;
|
trailX = 7f;
|
||||||
@@ -1581,6 +1594,7 @@ public class UnitTypes implements ContentList{
|
|||||||
inaccuracy = 5f;
|
inaccuracy = 5f;
|
||||||
velocityRnd = 0.1f;
|
velocityRnd = 0.1f;
|
||||||
shootSound = Sounds.missile;
|
shootSound = Sounds.missile;
|
||||||
|
ammoType = new ItemAmmoType(Items.thorium);
|
||||||
|
|
||||||
ejectEffect = Fx.none;
|
ejectEffect = Fx.none;
|
||||||
bullet = new MissileBulletType(2.7f, 12){{
|
bullet = new MissileBulletType(2.7f, 12){{
|
||||||
@@ -1614,6 +1628,7 @@ public class UnitTypes implements ContentList{
|
|||||||
accel = 0.2f;
|
accel = 0.2f;
|
||||||
rotateSpeed = 1.3f;
|
rotateSpeed = 1.3f;
|
||||||
rotateShooting = false;
|
rotateShooting = false;
|
||||||
|
ammoType = new ItemAmmoType(Items.thorium);
|
||||||
|
|
||||||
trailLength = 50;
|
trailLength = 50;
|
||||||
trailX = 18f;
|
trailX = 18f;
|
||||||
@@ -1699,6 +1714,7 @@ public class UnitTypes implements ContentList{
|
|||||||
accel = 0.19f;
|
accel = 0.19f;
|
||||||
rotateSpeed = 0.9f;
|
rotateSpeed = 0.9f;
|
||||||
rotateShooting = false;
|
rotateShooting = false;
|
||||||
|
ammoType = new PowerAmmoType(4000);
|
||||||
|
|
||||||
float spawnTime = 60f * 15f;
|
float spawnTime = 60f * 15f;
|
||||||
|
|
||||||
@@ -1756,6 +1772,7 @@ public class UnitTypes implements ContentList{
|
|||||||
trailScl = 1.3f;
|
trailScl = 1.3f;
|
||||||
rotateShooting = false;
|
rotateShooting = false;
|
||||||
range = 100f;
|
range = 100f;
|
||||||
|
ammoType = new PowerAmmoType(900);
|
||||||
|
|
||||||
armor = 3f;
|
armor = 3f;
|
||||||
|
|
||||||
@@ -1780,6 +1797,7 @@ public class UnitTypes implements ContentList{
|
|||||||
shots = 3;
|
shots = 3;
|
||||||
shotDelay = 7f;
|
shotDelay = 7f;
|
||||||
x = y = shootX = shootY = 0f;
|
x = y = shootX = shootY = 0f;
|
||||||
|
shootSound = Sounds.mineDeploy;
|
||||||
|
|
||||||
bullet = new BasicBulletType(){{
|
bullet = new BasicBulletType(){{
|
||||||
sprite = "mine-bullet";
|
sprite = "mine-bullet";
|
||||||
@@ -1832,6 +1850,7 @@ public class UnitTypes implements ContentList{
|
|||||||
trailX = 5.5f;
|
trailX = 5.5f;
|
||||||
trailY = -4f;
|
trailY = -4f;
|
||||||
trailScl = 1.9f;
|
trailScl = 1.9f;
|
||||||
|
ammoType = new ItemAmmoType(Items.coal);
|
||||||
|
|
||||||
buildSpeed = 2f;
|
buildSpeed = 2f;
|
||||||
|
|
||||||
@@ -1900,6 +1919,7 @@ public class UnitTypes implements ContentList{
|
|||||||
hitSize = 20f;
|
hitSize = 20f;
|
||||||
armor = 6f;
|
armor = 6f;
|
||||||
rotateShooting = false;
|
rotateShooting = false;
|
||||||
|
ammoType = new ItemAmmoType(Items.graphite);
|
||||||
|
|
||||||
trailLength = 23;
|
trailLength = 23;
|
||||||
trailX = 9f;
|
trailX = 9f;
|
||||||
@@ -2035,6 +2055,8 @@ public class UnitTypes implements ContentList{
|
|||||||
accel = 0.2f;
|
accel = 0.2f;
|
||||||
rotateSpeed = 1.4f;
|
rotateSpeed = 1.4f;
|
||||||
rotateShooting = false;
|
rotateShooting = false;
|
||||||
|
ammoType = new PowerAmmoType(3500);
|
||||||
|
ammoCapacity = 40;
|
||||||
|
|
||||||
//clip size is massive due to energy field
|
//clip size is massive due to energy field
|
||||||
clipSize = 250f;
|
clipSize = 250f;
|
||||||
@@ -2078,6 +2100,7 @@ public class UnitTypes implements ContentList{
|
|||||||
accel = 0.2f;
|
accel = 0.2f;
|
||||||
rotateSpeed = 1.1f;
|
rotateSpeed = 1.1f;
|
||||||
rotateShooting = false;
|
rotateShooting = false;
|
||||||
|
ammoType = new PowerAmmoType(4500);
|
||||||
|
|
||||||
trailLength = 70;
|
trailLength = 70;
|
||||||
trailX = 23f;
|
trailX = 23f;
|
||||||
@@ -2150,6 +2173,8 @@ public class UnitTypes implements ContentList{
|
|||||||
shootY = 7f;
|
shootY = 7f;
|
||||||
recoil = 4f;
|
recoil = 4f;
|
||||||
cooldownTime = reload - 10f;
|
cooldownTime = reload - 10f;
|
||||||
|
//TODO better sound
|
||||||
|
shootSound = Sounds.laser;
|
||||||
|
|
||||||
bullet = new EmpBulletType(){{
|
bullet = new EmpBulletType(){{
|
||||||
float rad = 100f;
|
float rad = 100f;
|
||||||
@@ -2182,6 +2207,7 @@ public class UnitTypes implements ContentList{
|
|||||||
hitShake = 4f;
|
hitShake = 4f;
|
||||||
trailRotation = true;
|
trailRotation = true;
|
||||||
status = StatusEffects.electrified;
|
status = StatusEffects.electrified;
|
||||||
|
hitSound = Sounds.plasmaboom;
|
||||||
|
|
||||||
trailEffect = new Effect(16f, e -> {
|
trailEffect = new Effect(16f, e -> {
|
||||||
color(Pal.heal);
|
color(Pal.heal);
|
||||||
|
|||||||
@@ -34,7 +34,6 @@ public class ContentLoader{
|
|||||||
new StatusEffects(),
|
new StatusEffects(),
|
||||||
new Liquids(),
|
new Liquids(),
|
||||||
new Bullets(),
|
new Bullets(),
|
||||||
new AmmoTypes(),
|
|
||||||
new UnitTypes(),
|
new UnitTypes(),
|
||||||
new Blocks(),
|
new Blocks(),
|
||||||
new Loadouts(),
|
new Loadouts(),
|
||||||
|
|||||||
@@ -36,7 +36,6 @@ import java.text.*;
|
|||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
import static arc.Core.*;
|
import static arc.Core.*;
|
||||||
import static mindustry.Vars.net;
|
|
||||||
import static mindustry.Vars.*;
|
import static mindustry.Vars.*;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -195,14 +194,16 @@ public class Control implements ApplicationListener, Loadable{
|
|||||||
});
|
});
|
||||||
|
|
||||||
Events.run(Trigger.newGame, () -> {
|
Events.run(Trigger.newGame, () -> {
|
||||||
Building core = player.bestCore();
|
var core = player.bestCore();
|
||||||
|
|
||||||
if(core == null) return;
|
if(core == null) return;
|
||||||
|
|
||||||
camera.position.set(core);
|
camera.position.set(core);
|
||||||
player.set(core);
|
player.set(core);
|
||||||
|
|
||||||
if(showLandAnimation){
|
if(!settings.getBool("skipcoreanimation")){
|
||||||
|
//delay player respawn so animation can play.
|
||||||
|
player.deathTimer = -80f;
|
||||||
//TODO this sounds pretty bad due to conflict
|
//TODO this sounds pretty bad due to conflict
|
||||||
if(settings.getInt("musicvol") > 0){
|
if(settings.getInt("musicvol") > 0){
|
||||||
Musics.land.stop();
|
Musics.land.stop();
|
||||||
@@ -211,14 +212,14 @@ public class Control implements ApplicationListener, Loadable{
|
|||||||
}
|
}
|
||||||
|
|
||||||
app.post(() -> ui.hudfrag.showLand());
|
app.post(() -> ui.hudfrag.showLand());
|
||||||
renderer.zoomIn(Fx.coreLand.lifetime);
|
renderer.showLanding();
|
||||||
app.post(() -> Fx.coreLand.at(core.getX(), core.getY(), 0, core.block));
|
|
||||||
|
|
||||||
Time.run(Fx.coreLand.lifetime, () -> {
|
Time.run(coreLandDuration, () -> {
|
||||||
Fx.launch.at(core);
|
Fx.launch.at(core);
|
||||||
Effect.shake(5f, 5f, core);
|
Effect.shake(5f, 5f, core);
|
||||||
|
core.thrusterTime = 1f;
|
||||||
|
|
||||||
if(state.isCampaign()){
|
if(state.isCampaign() && Vars.showSectorLandInfo){
|
||||||
ui.announce("[accent]" + state.rules.sector.name() + "\n" +
|
ui.announce("[accent]" + state.rules.sector.name() + "\n" +
|
||||||
(state.rules.sector.info.resources.any() ? "[lightgray]" + bundle.get("sectors.resources") + "[white] " +
|
(state.rules.sector.info.resources.any() ? "[lightgray]" + bundle.get("sectors.resources") + "[white] " +
|
||||||
state.rules.sector.info.resources.toString(" ", u -> u.emoji()) : ""), 5);
|
state.rules.sector.info.resources.toString(" ", u -> u.emoji()) : ""), 5);
|
||||||
@@ -328,6 +329,7 @@ public class Control implements ApplicationListener, Loadable{
|
|||||||
slot.load();
|
slot.load();
|
||||||
slot.setAutosave(true);
|
slot.setAutosave(true);
|
||||||
state.rules.sector = sector;
|
state.rules.sector = sector;
|
||||||
|
state.rules.cloudColor = sector.planet.landCloudColor;
|
||||||
|
|
||||||
//if there is no base, simulate a new game and place the right loadout at the spawn position
|
//if there is no base, simulate a new game and place the right loadout at the spawn position
|
||||||
if(state.rules.defaultTeam.cores().isEmpty() || hadNoCore){
|
if(state.rules.defaultTeam.cores().isEmpty() || hadNoCore){
|
||||||
@@ -542,7 +544,12 @@ public class Control implements ApplicationListener, Loadable{
|
|||||||
core.items.each((i, a) -> i.unlock());
|
core.items.each((i, a) -> i.unlock());
|
||||||
}
|
}
|
||||||
|
|
||||||
if(Core.input.keyTap(Binding.pause) && !scene.hasDialog() && !scene.hasKeyboard() && !ui.restart.isShown() && (state.is(State.paused) || state.is(State.playing))){
|
//cannot launch while paused
|
||||||
|
if(state.is(State.paused) && renderer.isCutscene()){
|
||||||
|
state.set(State.playing);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(Core.input.keyTap(Binding.pause) && !renderer.isCutscene() && !scene.hasDialog() && !scene.hasKeyboard() && !ui.restart.isShown() && (state.is(State.paused) || state.is(State.playing))){
|
||||||
state.set(state.is(State.playing) ? State.paused : State.playing);
|
state.set(state.is(State.playing) ? State.paused : State.playing);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -49,6 +49,7 @@ public class Logic implements ApplicationListener{
|
|||||||
BlockPlan b = it.next();
|
BlockPlan b = it.next();
|
||||||
Block block = content.block(b.block);
|
Block block = content.block(b.block);
|
||||||
if(event.tile.block().bounds(event.tile.x, event.tile.y, Tmp.r1).overlaps(block.bounds(b.x, b.y, Tmp.r2))){
|
if(event.tile.block().bounds(event.tile.x, event.tile.y, Tmp.r1).overlaps(block.bounds(b.x, b.y, Tmp.r2))){
|
||||||
|
b.removed = true;
|
||||||
it.remove();
|
it.remove();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -128,25 +129,7 @@ public class Logic implements ApplicationListener{
|
|||||||
|
|
||||||
Events.on(SectorCaptureEvent.class, e -> {
|
Events.on(SectorCaptureEvent.class, e -> {
|
||||||
if(!net.client() && e.sector == state.getSector() && e.sector.isBeingPlayed()){
|
if(!net.client() && e.sector == state.getSector() && e.sector.isBeingPlayed()){
|
||||||
for(Tile tile : world.tiles){
|
state.rules.waveTeam.data().destroyToDerelict();
|
||||||
//convert all blocks to neutral, randomly killing them
|
|
||||||
if(tile.isCenter() && tile.build != null && tile.build.team == state.rules.waveTeam){
|
|
||||||
Building b = tile.build;
|
|
||||||
Call.setTeam(b, Team.derelict);
|
|
||||||
Time.run(Mathf.random(0f, 60f * 6f), () -> {
|
|
||||||
if(Mathf.chance(0.25)){
|
|
||||||
b.kill();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//kill all units
|
|
||||||
Groups.unit.each(u -> {
|
|
||||||
if(u.team == state.rules.waveTeam){
|
|
||||||
Time.run(Mathf.random(0f, 60f * 5f), u::kill);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -162,6 +145,12 @@ public class Logic implements ApplicationListener{
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
//listen to core changes; if all cores have been destroyed, set to derelict.
|
||||||
|
Events.on(CoreChangeEvent.class, e -> Core.app.post(() -> {
|
||||||
|
if(state.rules.cleanupDeadTeams && state.rules.pvp && !e.core.isAdded() && e.core.team != Team.derelict && e.core.team.cores().isEmpty()){
|
||||||
|
e.core.team.data().destroyToDerelict();
|
||||||
|
}
|
||||||
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Adds starting items, resets wave time, and sets state to playing. */
|
/** Adds starting items, resets wave time, and sets state to playing. */
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package mindustry.core;
|
package mindustry.core;
|
||||||
|
|
||||||
import arc.*;
|
import arc.*;
|
||||||
|
import arc.audio.*;
|
||||||
import arc.func.*;
|
import arc.func.*;
|
||||||
import arc.graphics.*;
|
import arc.graphics.*;
|
||||||
import arc.math.*;
|
import arc.math.*;
|
||||||
@@ -159,6 +160,20 @@ public class NetClient implements ApplicationListener{
|
|||||||
clientPacketReliable(type, contents);
|
clientPacketReliable(type, contents);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Remote(variants = Variant.both, unreliable = true)
|
||||||
|
public static void sound(Sound sound, float volume, float pitch, float pan){
|
||||||
|
if(sound == null) return;
|
||||||
|
|
||||||
|
sound.play(volume * Core.settings.getInt("sfxvol") / 100f, pitch, pan);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Remote(variants = Variant.both, unreliable = true)
|
||||||
|
public static void soundAt(Sound sound, float x, float y, float volume, float pitch){
|
||||||
|
if(sound == null) return;
|
||||||
|
|
||||||
|
sound.at(x, y, pitch, volume);
|
||||||
|
}
|
||||||
|
|
||||||
@Remote(variants = Variant.both, unreliable = true)
|
@Remote(variants = Variant.both, unreliable = true)
|
||||||
public static void effect(Effect effect, float x, float y, float rotation, Color color){
|
public static void effect(Effect effect, float x, float y, float rotation, Color color){
|
||||||
if(effect == null) return;
|
if(effect == null) return;
|
||||||
@@ -274,6 +289,7 @@ public class NetClient implements ApplicationListener{
|
|||||||
|
|
||||||
@Remote(called = Loc.client, variants = Variant.one)
|
@Remote(called = Loc.client, variants = Variant.one)
|
||||||
public static void connect(String ip, int port){
|
public static void connect(String ip, int port){
|
||||||
|
if(!steam && ip.startsWith("steam:")) return;
|
||||||
netClient.disconnectQuietly();
|
netClient.disconnectQuietly();
|
||||||
logic.reset();
|
logic.reset();
|
||||||
|
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import arc.graphics.Texture.*;
|
|||||||
import arc.graphics.g2d.*;
|
import arc.graphics.g2d.*;
|
||||||
import arc.graphics.gl.*;
|
import arc.graphics.gl.*;
|
||||||
import arc.math.*;
|
import arc.math.*;
|
||||||
|
import arc.math.geom.*;
|
||||||
import arc.scene.ui.layout.*;
|
import arc.scene.ui.layout.*;
|
||||||
import arc.struct.*;
|
import arc.struct.*;
|
||||||
import arc.util.*;
|
import arc.util.*;
|
||||||
@@ -17,6 +18,7 @@ import mindustry.game.EventType.*;
|
|||||||
import mindustry.gen.*;
|
import mindustry.gen.*;
|
||||||
import mindustry.graphics.*;
|
import mindustry.graphics.*;
|
||||||
import mindustry.graphics.g3d.*;
|
import mindustry.graphics.g3d.*;
|
||||||
|
import mindustry.world.blocks.storage.*;
|
||||||
import mindustry.world.blocks.storage.CoreBlock.*;
|
import mindustry.world.blocks.storage.CoreBlock.*;
|
||||||
|
|
||||||
import static arc.Core.*;
|
import static arc.Core.*;
|
||||||
@@ -26,6 +28,12 @@ public class Renderer implements ApplicationListener{
|
|||||||
/** These are global variables, for headless access. Cached. */
|
/** These are global variables, for headless access. Cached. */
|
||||||
public static float laserOpacity = 0.5f, bridgeOpacity = 0.75f;
|
public static float laserOpacity = 0.5f, bridgeOpacity = 0.75f;
|
||||||
|
|
||||||
|
private static final float cloudScaling = 1700f, cfinScl = -2f, cfinOffset = 0.3f, calphaFinOffset = 0.25f;
|
||||||
|
private static final float[] cloudAlphas = {0, 0.5f, 1f, 0.1f, 0, 0f};
|
||||||
|
private static final float cloudAlpha = 0.81f;
|
||||||
|
private static final float[] thrusterSizes = {0f, 0f, 0f, 0f, 0.3f, 1f, 1f, 1f, 1f, 1f, 1f, 1f, 1f, 0f};
|
||||||
|
private static final Interp landInterp = Interp.pow3;
|
||||||
|
|
||||||
public final BlockRenderer blocks = new BlockRenderer();
|
public final BlockRenderer blocks = new BlockRenderer();
|
||||||
public final MinimapRenderer minimap = new MinimapRenderer();
|
public final MinimapRenderer minimap = new MinimapRenderer();
|
||||||
public final OverlayRenderer overlays = new OverlayRenderer();
|
public final OverlayRenderer overlays = new OverlayRenderer();
|
||||||
@@ -36,15 +44,35 @@ public class Renderer implements ApplicationListener{
|
|||||||
public @Nullable Bloom bloom;
|
public @Nullable Bloom bloom;
|
||||||
public FrameBuffer effectBuffer = new FrameBuffer();
|
public FrameBuffer effectBuffer = new FrameBuffer();
|
||||||
public boolean animateShields, drawWeather = true, drawStatus;
|
public boolean animateShields, drawWeather = true, drawStatus;
|
||||||
|
public float weatherAlpha;
|
||||||
/** minZoom = zooming out, maxZoom = zooming in */
|
/** minZoom = zooming out, maxZoom = zooming in */
|
||||||
public float minZoom = 1.5f, maxZoom = 6f;
|
public float minZoom = 1.5f, maxZoom = 6f;
|
||||||
public Seq<EnvRenderer> envRenderers = new Seq<>();
|
public Seq<EnvRenderer> envRenderers = new Seq<>();
|
||||||
public TextureRegion[] bubbles = new TextureRegion[16], splashes = new TextureRegion[12];
|
public TextureRegion[] bubbles = new TextureRegion[16], splashes = new TextureRegion[12];
|
||||||
|
|
||||||
private @Nullable CoreBuild landCore;
|
private @Nullable CoreBuild landCore;
|
||||||
|
private @Nullable CoreBlock launchCoreType;
|
||||||
private Color clearColor = new Color(0f, 0f, 0f, 1f);
|
private Color clearColor = new Color(0f, 0f, 0f, 1f);
|
||||||
private float targetscale = Scl.scl(4), camerascale = targetscale, landscale, landTime, weatherAlpha, minZoomScl = Scl.scl(0.01f);
|
private float
|
||||||
private float shakeIntensity, shaketime;
|
//seed for cloud visuals, 0-1
|
||||||
|
cloudSeed = 0f,
|
||||||
|
//target camera scale that is lerp-ed to
|
||||||
|
targetscale = Scl.scl(4),
|
||||||
|
//current actual camera scale
|
||||||
|
camerascale = targetscale,
|
||||||
|
//minimum camera zoom value for landing/launching; constant TODO make larger?
|
||||||
|
minZoomScl = Scl.scl(0.02f),
|
||||||
|
//starts at coreLandDuration, ends at 0. if positive, core is landing.
|
||||||
|
landTime,
|
||||||
|
//timer for core landing particles
|
||||||
|
landPTimer,
|
||||||
|
//intensity for screen shake
|
||||||
|
shakeIntensity,
|
||||||
|
//current duration of screen shake
|
||||||
|
shakeTime;
|
||||||
|
//for landTime > 0: if true, core is currently *launching*, otherwise landing.
|
||||||
|
private boolean launching;
|
||||||
|
private Vec2 camShakeOffset = new Vec2();
|
||||||
|
|
||||||
public Renderer(){
|
public Renderer(){
|
||||||
camera = new Camera();
|
camera = new Camera();
|
||||||
@@ -53,7 +81,7 @@ public class Renderer implements ApplicationListener{
|
|||||||
|
|
||||||
public void shake(float intensity, float duration){
|
public void shake(float intensity, float duration){
|
||||||
shakeIntensity = Math.max(shakeIntensity, intensity);
|
shakeIntensity = Math.max(shakeIntensity, intensity);
|
||||||
shaketime = Math.max(shaketime, duration);
|
shakeTime = Math.max(shakeTime, duration);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addEnvRenderer(int mask, Runnable render){
|
public void addEnvRenderer(int mask, Runnable render){
|
||||||
@@ -95,12 +123,22 @@ public class Renderer implements ApplicationListener{
|
|||||||
drawStatus = Core.settings.getBool("blockstatus");
|
drawStatus = Core.settings.getBool("blockstatus");
|
||||||
|
|
||||||
if(landTime > 0){
|
if(landTime > 0){
|
||||||
|
if(!state.isPaused()){
|
||||||
|
updateLandParticles();
|
||||||
|
}
|
||||||
|
|
||||||
if(!state.isPaused()){
|
if(!state.isPaused()){
|
||||||
landTime -= Time.delta;
|
landTime -= Time.delta;
|
||||||
}
|
}
|
||||||
landscale = Interp.pow5In.apply(minZoomScl, Scl.scl(4f), 1f - landTime / Fx.coreLand.lifetime);
|
float fin = landTime / coreLandDuration;
|
||||||
camerascale = landscale;
|
if(!launching) fin = 1f - fin;
|
||||||
|
camerascale = landInterp.apply(minZoomScl, Scl.scl(4f), fin);
|
||||||
weatherAlpha = 0f;
|
weatherAlpha = 0f;
|
||||||
|
|
||||||
|
//snap camera to cutscene core regardless of player input
|
||||||
|
if(landCore != null){
|
||||||
|
camera.position.set(landCore);
|
||||||
|
}
|
||||||
}else{
|
}else{
|
||||||
weatherAlpha = Mathf.lerpDelta(weatherAlpha, 1f, 0.08f);
|
weatherAlpha = Mathf.lerpDelta(weatherAlpha, 1f, 0.08f);
|
||||||
}
|
}
|
||||||
@@ -112,25 +150,35 @@ public class Renderer implements ApplicationListener{
|
|||||||
landTime = 0f;
|
landTime = 0f;
|
||||||
graphics.clear(Color.black);
|
graphics.clear(Color.black);
|
||||||
}else{
|
}else{
|
||||||
updateShake(0.75f);
|
if(shakeTime > 0){
|
||||||
|
float intensity = shakeIntensity * (settings.getInt("screenshake", 4) / 4f) * 0.75f;
|
||||||
|
camShakeOffset.setToRandomDirection().scl(Mathf.random(intensity));
|
||||||
|
camera.position.add(camShakeOffset);
|
||||||
|
shakeIntensity -= 0.25f * Time.delta;
|
||||||
|
shakeTime -= Time.delta;
|
||||||
|
shakeIntensity = Mathf.clamp(shakeIntensity, 0f, 100f);
|
||||||
|
}else{
|
||||||
|
camShakeOffset.setZero();
|
||||||
|
shakeIntensity = 0f;
|
||||||
|
}
|
||||||
|
|
||||||
if(pixelator.enabled()){
|
if(pixelator.enabled()){
|
||||||
pixelator.drawPixelate();
|
pixelator.drawPixelate();
|
||||||
}else{
|
}else{
|
||||||
draw();
|
draw();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
camera.position.sub(camShakeOffset);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isLanding(){
|
/** @return whether a launch/land cutscene is playing. */
|
||||||
|
public boolean isCutscene(){
|
||||||
return landTime > 0;
|
return landTime > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
public float weatherAlpha(){
|
|
||||||
return weatherAlpha;
|
|
||||||
}
|
|
||||||
|
|
||||||
public float landScale(){
|
public float landScale(){
|
||||||
return landTime > 0 ? landscale : 1f;
|
return landTime > 0 ? camerascale : 1f;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -172,18 +220,6 @@ public class Renderer implements ApplicationListener{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void updateShake(float scale){
|
|
||||||
if(shaketime > 0){
|
|
||||||
float intensity = shakeIntensity * (settings.getInt("screenshake", 4) / 4f) * scale;
|
|
||||||
camera.position.add(Mathf.range(intensity), Mathf.range(intensity));
|
|
||||||
shakeIntensity -= 0.25f * Time.delta;
|
|
||||||
shaketime -= Time.delta;
|
|
||||||
shakeIntensity = Mathf.clamp(shakeIntensity, 0f, 100f);
|
|
||||||
}else{
|
|
||||||
shakeIntensity = 0f;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void draw(){
|
public void draw(){
|
||||||
Events.fire(Trigger.preDraw);
|
Events.fire(Trigger.preDraw);
|
||||||
|
|
||||||
@@ -275,48 +311,160 @@ public class Renderer implements ApplicationListener{
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void drawBackground(){
|
private void drawBackground(){
|
||||||
|
//nothing to draw currently
|
||||||
}
|
}
|
||||||
|
|
||||||
private void drawLanding(){
|
void updateLandParticles(){
|
||||||
CoreBuild entity = landCore == null ? player.bestCore() : landCore;
|
float time = launching ? coreLandDuration - landTime : landTime;
|
||||||
//var clouds = assets.get("sprites/clouds.png", Texture.class);
|
float tsize = Mathf.sample(thrusterSizes, (time + 35f) / coreLandDuration);
|
||||||
if(landTime > 0 && entity != null){
|
|
||||||
float fout = landTime / Fx.coreLand.lifetime;
|
|
||||||
|
|
||||||
//TODO clouds
|
landPTimer += tsize * Time.delta;
|
||||||
/*
|
if(landCore != null && landPTimer >= 1f){
|
||||||
float scaling = 10000f;
|
landCore.tile.getLinkedTiles(t -> {
|
||||||
float sscl = 1f + fout*1.5f;
|
if(Mathf.chance(0.4f)){
|
||||||
float offset = -0.38f;
|
Fx.coreLandDust.at(t.worldx(), t.worldy(), landCore.angleTo(t) + Mathf.range(30f), Tmp.c1.set(t.floor().mapColor).mul(1.5f + Mathf.range(0.15f)));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
Tmp.tr1.set(clouds);
|
landPTimer = 0f;
|
||||||
Tmp.tr1.set((camera.position.x - camera.width/2f * sscl) / scaling, (camera.position.y - camera.height/2f * sscl) / scaling, (camera.position.x + camera.width/2f * sscl) / scaling, (camera.position.y + camera.height/2f * sscl) / scaling);
|
}
|
||||||
Draw.alpha(Mathf.slope(Mathf.clamp(((1f - fout) + offset)/(1f + offset))));
|
}
|
||||||
Draw.mixcol(Pal.spore, 0.5f);
|
|
||||||
Draw.rect(Tmp.tr1, camera.position.x, camera.position.y, camera.width, camera.height);
|
|
||||||
Draw.reset();*/
|
|
||||||
|
|
||||||
TextureRegion reg = entity.block.fullIcon;
|
void drawLanding(){
|
||||||
|
CoreBuild build = landCore == null ? player.bestCore() : landCore;
|
||||||
|
var clouds = assets.get("sprites/clouds.png", Texture.class);
|
||||||
|
if(landTime > 0 && build != null){
|
||||||
|
float fout = landTime / coreLandDuration;
|
||||||
|
|
||||||
|
if(launching) fout = 1f - fout;
|
||||||
|
|
||||||
|
float fin = 1f - fout;
|
||||||
|
|
||||||
|
//draw core
|
||||||
|
var block = launching && launchCoreType != null ? launchCoreType : (CoreBlock)build.block;
|
||||||
|
TextureRegion reg = block.fullIcon;
|
||||||
float scl = Scl.scl(4f) / camerascale;
|
float scl = Scl.scl(4f) / camerascale;
|
||||||
float s = reg.width * Draw.scl * scl * 4f * fout;
|
float shake = 0f;
|
||||||
|
float s = reg.width * Draw.scl * scl * 3.6f * Interp.pow2Out.apply(fout);
|
||||||
|
float rotation = Interp.pow2In.apply(fout) * 135f, x = build.x + Mathf.range(shake), y = build.y + Mathf.range(shake);
|
||||||
|
float thrustOpen = 0.25f;
|
||||||
|
float thrusterFrame = fin >= thrustOpen ? 1f : fin / thrustOpen;
|
||||||
|
float thrusterSize = Mathf.sample(thrusterSizes, fin);
|
||||||
|
|
||||||
|
//when launching, thrusters stay out the entire time.
|
||||||
|
if(launching){
|
||||||
|
Interp i = Interp.pow2Out;
|
||||||
|
thrusterFrame = i.apply(Mathf.clamp(fout*13f));
|
||||||
|
thrusterSize = i.apply(Mathf.clamp(fout*9f));
|
||||||
|
}
|
||||||
|
|
||||||
Draw.color(Pal.lightTrail);
|
Draw.color(Pal.lightTrail);
|
||||||
Draw.rect("circle-shadow", entity.x, entity.y, s, s);
|
//TODO spikier heat
|
||||||
|
Draw.rect("circle-shadow", x, y, s, s);
|
||||||
|
|
||||||
Angles.randLenVectors(1, (1f- fout), 100, 1000f * scl * (1f-fout), (x, y, ffin, ffout) -> {
|
Draw.color(Pal.lightTrail);
|
||||||
Lines.stroke(scl * ffin);
|
|
||||||
Lines.lineAngle(entity.x + x, entity.y + y, Mathf.angle(x, y), (ffin * 20 + 1f) * scl);
|
float pfin = Interp.pow3Out.apply(fin), pf = Interp.pow2In.apply(fout);
|
||||||
|
|
||||||
|
//draw particles
|
||||||
|
Angles.randLenVectors(1, pfin, 100, 800f * scl * pfin, (ax, ay, ffin, ffout) -> {
|
||||||
|
Lines.stroke(scl * ffin * pf * 3f);
|
||||||
|
Lines.lineAngle(build.x + ax, build.y + ay, Mathf.angle(ax, ay), (ffin * 20 + 1f) * scl);
|
||||||
});
|
});
|
||||||
|
|
||||||
Draw.color();
|
Draw.color();
|
||||||
Draw.mixcol(Color.white, fout);
|
Draw.mixcol(Color.white, Interp.pow5In.apply(fout));
|
||||||
Draw.rect(reg, entity.x, entity.y, reg.width * Draw.scl * scl, reg.height * Draw.scl * scl, fout * 135f);
|
|
||||||
|
//accent tint indicating that the core was just constructed
|
||||||
|
if(launching){
|
||||||
|
float f = Mathf.clamp(1f - fout * 12f);
|
||||||
|
if(f > 0.001f){
|
||||||
|
Draw.mixcol(Pal.accent, f);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Draw.scl(scl);
|
||||||
|
|
||||||
|
Draw.alpha(1f);
|
||||||
|
|
||||||
|
//draw thruster flame
|
||||||
|
float strength = (1f + (block.size - 3)/2.5f) * scl * thrusterSize * (0.95f + Mathf.absin(2f, 0.1f));
|
||||||
|
float offset = (block.size - 3) * 3f * scl;
|
||||||
|
|
||||||
|
for(int i = 0; i < 4; i++){
|
||||||
|
Tmp.v1.trns(i * 90 + rotation, 1f);
|
||||||
|
|
||||||
|
Tmp.v1.setLength((block.size * tilesize/2f + 1f)*scl + strength*2f + offset);
|
||||||
|
Draw.color(build.team.color);
|
||||||
|
Fill.circle(Tmp.v1.x + x, Tmp.v1.y + y, 6f * strength);
|
||||||
|
|
||||||
|
Tmp.v1.setLength((block.size * tilesize/2f + 1f)*scl + strength*0.5f + offset);
|
||||||
|
Draw.color(Color.white);
|
||||||
|
Fill.circle(Tmp.v1.x + x, Tmp.v1.y + y, 3.5f * strength);
|
||||||
|
}
|
||||||
|
|
||||||
|
drawThrusters(block, x, y, rotation, thrusterFrame);
|
||||||
|
|
||||||
|
Drawf.spinSprite(block.region, x, y, rotation);
|
||||||
|
|
||||||
|
Draw.alpha(Interp.pow4In.apply(thrusterFrame));
|
||||||
|
drawThrusters(block, x, y, rotation, thrusterFrame);
|
||||||
|
Draw.alpha(1f);
|
||||||
|
|
||||||
|
Drawf.spinSprite(block.teamRegions[build.team.id], x, y, rotation);
|
||||||
|
|
||||||
|
Draw.scl();
|
||||||
|
|
||||||
Draw.reset();
|
Draw.reset();
|
||||||
|
|
||||||
|
//draw clouds
|
||||||
|
if(state.rules.cloudColor.a > 0.0001f){
|
||||||
|
float scaling = cloudScaling;
|
||||||
|
float sscl = Math.max(1f + Mathf.clamp(fin + cfinOffset)* cfinScl, 0f) * camerascale;
|
||||||
|
|
||||||
|
Tmp.tr1.set(clouds);
|
||||||
|
Tmp.tr1.set(
|
||||||
|
(camera.position.x - camera.width/2f * sscl) / scaling,
|
||||||
|
(camera.position.y - camera.height/2f * sscl) / scaling,
|
||||||
|
(camera.position.x + camera.width/2f * sscl) / scaling,
|
||||||
|
(camera.position.y + camera.height/2f * sscl) / scaling);
|
||||||
|
|
||||||
|
Tmp.tr1.scroll(10f * cloudSeed, 10f * cloudSeed);
|
||||||
|
|
||||||
|
Draw.alpha(Mathf.sample(cloudAlphas, fin + calphaFinOffset) * cloudAlpha);
|
||||||
|
Draw.mixcol(state.rules.cloudColor, state.rules.cloudColor.a);
|
||||||
|
Draw.rect(Tmp.tr1, camera.position.x, camera.position.y, camera.width, camera.height);
|
||||||
|
Draw.reset();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void drawThrusters(CoreBlock block, float x, float y, float rotation, float frame){
|
||||||
|
float length = block.thrusterLength * (frame - 1f) - 1f/4f;
|
||||||
|
float alpha = Draw.getColor().a;
|
||||||
|
|
||||||
|
//two passes for consistent lighting
|
||||||
|
for(int j = 0; j < 2; j++){
|
||||||
|
for(int i = 0; i < 4; i++){
|
||||||
|
var reg = i >= 2 ? block.thruster2 : block.thruster1;
|
||||||
|
float rot = (i * 90) + rotation % 90f;
|
||||||
|
Tmp.v1.trns(rot, length * Draw.xscl);
|
||||||
|
|
||||||
|
//second pass applies extra layer of shading
|
||||||
|
if(j == 1){
|
||||||
|
Tmp.v1.rotate(-90f);
|
||||||
|
Draw.alpha((rotation % 90f) / 90f * alpha);
|
||||||
|
rot -= 90f;
|
||||||
|
Draw.rect(reg, x + Tmp.v1.x, y + Tmp.v1.y, rot);
|
||||||
|
}else{
|
||||||
|
Draw.alpha(alpha);
|
||||||
|
Draw.rect(reg, x + Tmp.v1.x, y + Tmp.v1.y, rot);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Draw.alpha(1f);
|
||||||
|
}
|
||||||
|
|
||||||
public void scaleCamera(float amount){
|
public void scaleCamera(float amount){
|
||||||
targetscale *= (amount / 4) + 1;
|
targetscale *= (amount / 4) + 1;
|
||||||
clampScale();
|
clampScale();
|
||||||
@@ -347,9 +495,23 @@ public class Renderer implements ApplicationListener{
|
|||||||
clampScale();
|
clampScale();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void zoomIn(float duration){
|
public void showLanding(){
|
||||||
landscale = minZoomScl;
|
launching = false;
|
||||||
landTime = duration;
|
camerascale = minZoomScl;
|
||||||
|
landTime = coreLandDuration;
|
||||||
|
cloudSeed = Mathf.random(1f);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void showLaunch(CoreBlock coreType){
|
||||||
|
Vars.ui.hudfrag.showLaunch();
|
||||||
|
launchCoreType = coreType;
|
||||||
|
launching = true;
|
||||||
|
landCore = player.team().core();
|
||||||
|
cloudSeed = Mathf.random(1f);
|
||||||
|
landTime = coreLandDuration;
|
||||||
|
if(landCore != null){
|
||||||
|
Fx.coreLaunchConstruct.at(landCore.x, landCore.y, coreType.size);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void takeMapScreenshot(){
|
public void takeMapScreenshot(){
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ import static arc.scene.actions.Actions.*;
|
|||||||
import static mindustry.Vars.*;
|
import static mindustry.Vars.*;
|
||||||
|
|
||||||
public class UI implements ApplicationListener, Loadable{
|
public class UI implements ApplicationListener, Loadable{
|
||||||
private static String billions, millions, thousands;
|
public static String billions, millions, thousands;
|
||||||
|
|
||||||
public static PixmapPacker packer;
|
public static PixmapPacker packer;
|
||||||
|
|
||||||
|
|||||||
@@ -287,6 +287,7 @@ public class World{
|
|||||||
if(liquid != null) content.add(liquid);
|
if(liquid != null) content.add(liquid);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
state.rules.cloudColor = sector.planet.landCloudColor;
|
||||||
sector.info.resources = content.asArray();
|
sector.info.resources = content.asArray();
|
||||||
sector.info.resources.sort(Structs.comps(Structs.comparing(Content::getContentType), Structs.comparingInt(c -> c.id)));
|
sector.info.resources.sort(Structs.comps(Structs.comparing(Content::getContentType), Structs.comparingInt(c -> c.id)));
|
||||||
sector.saveInfo();
|
sector.saveInfo();
|
||||||
@@ -525,8 +526,7 @@ public class World{
|
|||||||
|
|
||||||
private class Context implements WorldContext{
|
private class Context implements WorldContext{
|
||||||
|
|
||||||
Context(){
|
Context(){}
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Tile tile(int index){
|
public Tile tile(int index){
|
||||||
@@ -579,7 +579,7 @@ public class World{
|
|||||||
|
|
||||||
for(GenerateFilter filter : filters){
|
for(GenerateFilter filter : filters){
|
||||||
filter.randomize();
|
filter.randomize();
|
||||||
input.begin(filter, width(), height(), (x, y) -> tiles.getn(x, y));
|
input.begin(width(), height(), (x, y) -> tiles.getn(x, y));
|
||||||
filter.apply(tiles, input);
|
filter.apply(tiles, input);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ public enum ContentType{
|
|||||||
typeid_UNUSED,
|
typeid_UNUSED,
|
||||||
error,
|
error,
|
||||||
planet,
|
planet,
|
||||||
ammo;
|
ammo_UNUSED;
|
||||||
|
|
||||||
public static final ContentType[] all = values();
|
public static final ContentType[] all = values();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -560,10 +560,12 @@ public class MapEditorDialog extends Dialog implements Disposable{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
t.top();
|
var label = new Label("@editor.brush");
|
||||||
t.add("@editor.brush");
|
label.setAlignment(Align.center);
|
||||||
|
label.touchable = Touchable.disabled;
|
||||||
|
|
||||||
|
t.top().stack(slider, label).width(size * 3f - 20).padTop(4f);
|
||||||
t.row();
|
t.row();
|
||||||
t.add(slider).width(size * 3f - 20).padTop(4f);
|
|
||||||
}).padTop(5).growX().top();
|
}).padTop(5).growX().top();
|
||||||
|
|
||||||
mid.row();
|
mid.row();
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ import mindustry.game.*;
|
|||||||
import mindustry.gen.*;
|
import mindustry.gen.*;
|
||||||
import mindustry.graphics.*;
|
import mindustry.graphics.*;
|
||||||
import mindustry.io.*;
|
import mindustry.io.*;
|
||||||
|
import mindustry.maps.*;
|
||||||
import mindustry.maps.filters.*;
|
import mindustry.maps.filters.*;
|
||||||
import mindustry.maps.filters.GenerateFilter.*;
|
import mindustry.maps.filters.GenerateFilter.*;
|
||||||
import mindustry.ui.*;
|
import mindustry.ui.*;
|
||||||
@@ -26,12 +27,6 @@ import static mindustry.Vars.*;
|
|||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public class MapGenerateDialog extends BaseDialog{
|
public class MapGenerateDialog extends BaseDialog{
|
||||||
final Prov<GenerateFilter>[] filterTypes = new Prov[]{
|
|
||||||
NoiseFilter::new, ScatterFilter::new, TerrainFilter::new, DistortFilter::new,
|
|
||||||
RiverNoiseFilter::new, OreFilter::new, OreMedianFilter::new, MedianFilter::new,
|
|
||||||
BlendFilter::new, MirrorFilter::new, ClearFilter::new, CoreSpawnFilter::new,
|
|
||||||
EnemySpawnFilter::new, SpawnPathFilter::new
|
|
||||||
};
|
|
||||||
final boolean applied;
|
final boolean applied;
|
||||||
|
|
||||||
Pixmap pixmap;
|
Pixmap pixmap;
|
||||||
@@ -158,7 +153,7 @@ public class MapGenerateDialog extends BaseDialog{
|
|||||||
long[] writeTiles = new long[editor.width() * editor.height()];
|
long[] writeTiles = new long[editor.width() * editor.height()];
|
||||||
|
|
||||||
for(GenerateFilter filter : filters){
|
for(GenerateFilter filter : filters){
|
||||||
input.begin(filter, editor.width(), editor.height(), editor::tile);
|
input.begin(editor.width(), editor.height(), editor::tile);
|
||||||
|
|
||||||
//write to buffer
|
//write to buffer
|
||||||
for(int x = 0; x < editor.width(); x++){
|
for(int x = 0; x < editor.width(); x++){
|
||||||
@@ -333,7 +328,7 @@ public class MapGenerateDialog extends BaseDialog{
|
|||||||
p.marginRight(14);
|
p.marginRight(14);
|
||||||
p.defaults().size(195f, 56f);
|
p.defaults().size(195f, 56f);
|
||||||
int i = 0;
|
int i = 0;
|
||||||
for(var gen : filterTypes){
|
for(var gen : Maps.allFilterTypes){
|
||||||
var filter = gen.get();
|
var filter = gen.get();
|
||||||
var icon = filter.icon();
|
var icon = filter.icon();
|
||||||
|
|
||||||
@@ -414,7 +409,7 @@ public class MapGenerateDialog extends BaseDialog{
|
|||||||
}
|
}
|
||||||
|
|
||||||
for(var filter : copy){
|
for(var filter : copy){
|
||||||
input.begin(filter, editor.width(), editor.height(), (x, y) -> unpack(buffer1[Mathf.clamp(x / scaling, 0, pixmap.width -1) + w* Mathf.clamp(y / scaling, 0, pixmap.height -1)]));
|
input.begin(editor.width(), editor.height(), (x, y) -> unpack(buffer1[Mathf.clamp(x / scaling, 0, pixmap.width -1) + w* Mathf.clamp(y / scaling, 0, pixmap.height -1)]));
|
||||||
|
|
||||||
//read from buffer1 and write to buffer2
|
//read from buffer1 and write to buffer2
|
||||||
pixmap.each((px, py) -> {
|
pixmap.each((px, py) -> {
|
||||||
|
|||||||
@@ -141,27 +141,23 @@ public class Effect{
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static void create(Effect effect, float x, float y, float rotation, Color color, Object data){
|
public static void create(Effect effect, float x, float y, float rotation, Color color, Object data){
|
||||||
if(headless || effect == Fx.none) return;
|
if(headless || effect == Fx.none || !Core.settings.getBool("effects")) return;
|
||||||
if(Core.settings.getBool("effects")){
|
|
||||||
Rect view = Core.camera.bounds(Tmp.r1);
|
|
||||||
Rect pos = Tmp.r2.setSize(effect.clip).setCenter(x, y);
|
|
||||||
|
|
||||||
if(view.overlaps(pos)){
|
if(Core.camera.bounds(Tmp.r1).overlaps(Tmp.r2.setCentered(x, y, effect.clip))){
|
||||||
if(!effect.initialized){
|
if(!effect.initialized){
|
||||||
effect.initialized = true;
|
effect.initialized = true;
|
||||||
effect.init();
|
effect.init();
|
||||||
}
|
|
||||||
|
|
||||||
EffectState entity = EffectState.create();
|
|
||||||
entity.effect = effect;
|
|
||||||
entity.rotation = rotation;
|
|
||||||
entity.data = data;
|
|
||||||
entity.lifetime = effect.lifetime;
|
|
||||||
entity.set(x, y);
|
|
||||||
entity.color.set(color);
|
|
||||||
if(effect.followParent && data instanceof Posc) entity.parent = ((Posc)data);
|
|
||||||
entity.add();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
EffectState entity = EffectState.create();
|
||||||
|
entity.effect = effect;
|
||||||
|
entity.rotation = rotation;
|
||||||
|
entity.data = data;
|
||||||
|
entity.lifetime = effect.lifetime;
|
||||||
|
entity.set(x, y);
|
||||||
|
entity.color.set(color);
|
||||||
|
if(effect.followParent && data instanceof Posc p) entity.parent = p;
|
||||||
|
entity.add();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -9,8 +9,8 @@ import mindustry.gen.*;
|
|||||||
* Class for predicting shoot angles based on velocities of targets.
|
* Class for predicting shoot angles based on velocities of targets.
|
||||||
*/
|
*/
|
||||||
public class Predict{
|
public class Predict{
|
||||||
private static Vec2 vec = new Vec2();
|
private static final Vec2 vec = new Vec2();
|
||||||
private static Vec2 vresult = new Vec2();
|
private static final Vec2 vresult = new Vec2();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Calculates of intercept of a stationary and moving target. Do not call from multiple threads!
|
* Calculates of intercept of a stationary and moving target. Do not call from multiple threads!
|
||||||
@@ -52,6 +52,10 @@ public class Predict{
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static Vec2 intercept(Position src, Position dst, float v){
|
public static Vec2 intercept(Position src, Position dst, float v){
|
||||||
|
return intercept(src, dst, 0, 0, v);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Vec2 intercept(Position src, Position dst, float offsetx, float offsety, float v){
|
||||||
float ddx = 0, ddy = 0;
|
float ddx = 0, ddy = 0;
|
||||||
if(dst instanceof Hitboxc h){
|
if(dst instanceof Hitboxc h){
|
||||||
ddx += h.deltaX();
|
ddx += h.deltaX();
|
||||||
@@ -61,7 +65,7 @@ public class Predict{
|
|||||||
ddx -= h.deltaX();
|
ddx -= h.deltaX();
|
||||||
ddy -= h.deltaY();
|
ddy -= h.deltaY();
|
||||||
}
|
}
|
||||||
return intercept(src.getX(), src.getY(), dst.getX(), dst.getY(), ddx, ddy, v);
|
return intercept(src.getX(), src.getY(), dst.getX() + offsetx, dst.getY() + offsety, ddx, ddy, v);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ public class Units{
|
|||||||
private static float cdist;
|
private static float cdist;
|
||||||
private static boolean boolResult;
|
private static boolean boolResult;
|
||||||
private static int intResult;
|
private static int intResult;
|
||||||
|
private static Building buildResult;
|
||||||
|
|
||||||
@Remote(called = Loc.server)
|
@Remote(called = Loc.server)
|
||||||
public static void unitCapDeath(Unit unit){
|
public static void unitCapDeath(Unit unit){
|
||||||
@@ -157,6 +158,26 @@ public class Units{
|
|||||||
return indexer.findEnemyTile(team, x, y, range, pred);
|
return indexer.findEnemyTile(team, x, y, range, pred);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** @return the closest building of the provided team that matches the predicate. */
|
||||||
|
public static @Nullable Building closestBuilding(Team team, float wx, float wy, float range, Boolf<Building> pred){
|
||||||
|
buildResult = null;
|
||||||
|
cdist = 0f;
|
||||||
|
|
||||||
|
var buildings = team.data().buildings;
|
||||||
|
if(buildings == null) return null;
|
||||||
|
buildings.intersect(wx - range, wy - range, range*2f, range*2f, b -> {
|
||||||
|
if(pred.get(b)){
|
||||||
|
float dst = b.dst(wx, wy) - b.hitSize()/2f;
|
||||||
|
if(dst <= range && (buildResult == null || dst <= cdist)){
|
||||||
|
cdist = dst;
|
||||||
|
buildResult = b;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
return buildResult;
|
||||||
|
}
|
||||||
|
|
||||||
/** Iterates through all buildings in a range. */
|
/** Iterates through all buildings in a range. */
|
||||||
public static void nearbyBuildings(float x, float y, float range, Cons<Building> cons){
|
public static void nearbyBuildings(float x, float y, float range, Cons<Building> cons){
|
||||||
indexer.allBuildings(x, y, range, cons);
|
indexer.allBuildings(x, y, range, cons);
|
||||||
@@ -184,7 +205,7 @@ public class Units{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Returns the closest target enemy. First, units are checked, then tile entities. */
|
/** Returns the closest target enemy. First, units are checked, then buildings. */
|
||||||
public static Teamc bestTarget(Team team, float x, float y, float range, Boolf<Unit> unitPred, Boolf<Building> tilePred, Sortf sort){
|
public static Teamc bestTarget(Team team, float x, float y, float range, Boolf<Unit> unitPred, Boolf<Building> tilePred, Sortf sort){
|
||||||
if(team == Team.derelict) return null;
|
if(team == Team.derelict) return null;
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package mindustry.entities.abilities;
|
package mindustry.entities.abilities;
|
||||||
|
|
||||||
import arc.*;
|
import arc.*;
|
||||||
|
import arc.audio.*;
|
||||||
import arc.graphics.*;
|
import arc.graphics.*;
|
||||||
import arc.graphics.g2d.*;
|
import arc.graphics.g2d.*;
|
||||||
import arc.math.*;
|
import arc.math.*;
|
||||||
@@ -13,12 +14,15 @@ import mindustry.gen.*;
|
|||||||
import mindustry.graphics.*;
|
import mindustry.graphics.*;
|
||||||
import mindustry.type.*;
|
import mindustry.type.*;
|
||||||
|
|
||||||
|
import static mindustry.Vars.*;
|
||||||
|
|
||||||
public class EnergyFieldAbility extends Ability{
|
public class EnergyFieldAbility extends Ability{
|
||||||
private static final Seq<Healthc> all = new Seq<>();
|
private static final Seq<Healthc> all = new Seq<>();
|
||||||
|
|
||||||
public float damage = 1, reload = 100, range = 60;
|
public float damage = 1, reload = 100, range = 60;
|
||||||
public Effect healEffect = Fx.heal, hitEffect = Fx.hitLaserBlast, damageEffect = Fx.chainLightning;
|
public Effect healEffect = Fx.heal, hitEffect = Fx.hitLaserBlast, damageEffect = Fx.chainLightning;
|
||||||
public StatusEffect status = StatusEffects.electrified;
|
public StatusEffect status = StatusEffects.electrified;
|
||||||
|
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 hitBuildings = true;
|
||||||
@@ -29,6 +33,7 @@ public class EnergyFieldAbility extends Ability{
|
|||||||
public float effectRadius = 5f, sectorRad = 0.14f, rotateSpeed = 0.5f;
|
public float effectRadius = 5f, sectorRad = 0.14f, rotateSpeed = 0.5f;
|
||||||
public int sectors = 5;
|
public int sectors = 5;
|
||||||
public Color color = Pal.heal;
|
public Color color = Pal.heal;
|
||||||
|
public boolean useAmmo = true;
|
||||||
|
|
||||||
protected float timer, curStroke;
|
protected float timer, curStroke;
|
||||||
protected boolean anyNearby = false;
|
protected boolean anyNearby = false;
|
||||||
@@ -86,8 +91,7 @@ public class EnergyFieldAbility extends Ability{
|
|||||||
|
|
||||||
curStroke = Mathf.lerpDelta(curStroke, anyNearby ? 1 : 0, 0.09f);
|
curStroke = Mathf.lerpDelta(curStroke, anyNearby ? 1 : 0, 0.09f);
|
||||||
|
|
||||||
if((timer += Time.delta) >= reload){
|
if((timer += Time.delta) >= reload && (!useAmmo || unit.ammo > 0 || !state.rules.unitAmmo)){
|
||||||
|
|
||||||
Tmp.v1.trns(unit.rotation - 90, x, y).add(unit.x, unit.y);
|
Tmp.v1.trns(unit.rotation - 90, x, y).add(unit.x, unit.y);
|
||||||
float rx = Tmp.v1.x, ry = Tmp.v1.y;
|
float rx = Tmp.v1.x, ry = Tmp.v1.y;
|
||||||
anyNearby = false;
|
anyNearby = false;
|
||||||
@@ -139,6 +143,14 @@ public class EnergyFieldAbility extends Ability{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(anyNearby){
|
||||||
|
shootSound.at(unit);
|
||||||
|
|
||||||
|
if(useAmmo && state.rules.unitAmmo){
|
||||||
|
unit.ammo --;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
timer = 0f;
|
timer = 0f;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -232,8 +232,8 @@ public class BulletType extends Content implements Cloneable{
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(entity instanceof Unit unit){
|
if(entity instanceof Unit unit){
|
||||||
Tmp.v3.set(unit).sub(b.x, b.y).nor().scl(knockback * 80f);
|
Tmp.v3.set(unit).sub(b).nor().scl(knockback * 80f);
|
||||||
if(impact) Tmp.v3.setAngle(b.rotation());
|
if(impact) Tmp.v3.setAngle(b.rotation() + (knockback < 0 ? 180f : 0f));
|
||||||
unit.impulse(Tmp.v3);
|
unit.impulse(Tmp.v3);
|
||||||
unit.apply(status, statusDuration);
|
unit.apply(status, statusDuration);
|
||||||
}
|
}
|
||||||
@@ -371,7 +371,7 @@ public class BulletType extends Content implements Cloneable{
|
|||||||
e -> e.checkTarget(collidesAir, collidesGround) && e.team != b.team,
|
e -> e.checkTarget(collidesAir, collidesGround) && e.team != b.team,
|
||||||
t -> collidesGround && (t.team != b.team || t.damaged()));
|
t -> collidesGround && (t.team != b.team || t.damaged()));
|
||||||
}else{
|
}else{
|
||||||
target = Units.closestTarget(b.team, b.x, b.y, homingRange, e -> e.checkTarget(collidesAir, collidesGround), t -> collidesGround);
|
target = Units.closestTarget(b.team, b.x, b.y, homingRange, e -> e.checkTarget(collidesAir, collidesGround) && !b.hasCollided(e.id), t -> collidesGround && !b.hasCollided(t.id));
|
||||||
}
|
}
|
||||||
|
|
||||||
if(target != null){
|
if(target != null){
|
||||||
|
|||||||
@@ -1,28 +0,0 @@
|
|||||||
package mindustry.entities.comp;
|
|
||||||
|
|
||||||
import arc.util.*;
|
|
||||||
import mindustry.annotations.Annotations.*;
|
|
||||||
import mindustry.game.*;
|
|
||||||
import mindustry.gen.*;
|
|
||||||
import mindustry.type.*;
|
|
||||||
import mindustry.world.blocks.units.*;
|
|
||||||
|
|
||||||
@Component
|
|
||||||
abstract class AmmoDistributeComp implements Unitc{
|
|
||||||
@Import float x, y;
|
|
||||||
@Import UnitType type;
|
|
||||||
@Import Team team;
|
|
||||||
@Import float ammo;
|
|
||||||
|
|
||||||
private transient float ammoCooldown;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void update(){
|
|
||||||
if(ammoCooldown > 0f) ammoCooldown -= Time.delta;
|
|
||||||
|
|
||||||
if(ammo > 0 && ammoCooldown <= 0f && ResupplyPoint.resupply(team, x, y, type.ammoResupplyRange, Math.min(type.ammoResupplyAmount, ammo), type.ammoType.color, u -> u != self())){
|
|
||||||
ammo -= Math.min(type.ammoResupplyAmount, ammo);
|
|
||||||
ammoCooldown = 5f;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -9,7 +9,7 @@ import static mindustry.Vars.*;
|
|||||||
|
|
||||||
@Component
|
@Component
|
||||||
abstract class BoundedComp implements Velc, Posc, Healthc, Flyingc{
|
abstract class BoundedComp implements Velc, Posc, Healthc, Flyingc{
|
||||||
static final float warpDst = 40f;
|
static final float warpDst = 30f;
|
||||||
|
|
||||||
@Import float x, y;
|
@Import float x, y;
|
||||||
|
|
||||||
|
|||||||
@@ -20,7 +20,6 @@ import mindustry.type.*;
|
|||||||
import mindustry.world.*;
|
import mindustry.world.*;
|
||||||
import mindustry.world.blocks.*;
|
import mindustry.world.blocks.*;
|
||||||
import mindustry.world.blocks.ConstructBlock.*;
|
import mindustry.world.blocks.ConstructBlock.*;
|
||||||
import mindustry.world.blocks.storage.CoreBlock.*;
|
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
@@ -97,7 +96,7 @@ abstract class BuilderComp implements Posc, Statusc, Teamc, Rotc{
|
|||||||
|
|
||||||
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));
|
boolean hasAll = infinite || current.isRotation(team) || !Structs.contains(current.block.requirements, i -> core != null && !core.items.has(i.item, Mathf.round(i.amount * state.rules.buildCostMultiplier)));
|
||||||
|
|
||||||
if(hasAll){
|
if(hasAll){
|
||||||
Call.beginPlace(self(), current.block, team, current.x, current.y, current.rotation);
|
Call.beginPlace(self(), current.block, team, current.x, current.y, current.rotation);
|
||||||
@@ -177,9 +176,9 @@ abstract class BuilderComp implements Posc, Statusc, Teamc, Rotc{
|
|||||||
/** @return whether this request should be skipped, in favor of the next one. */
|
/** @return whether this request should be skipped, in favor of the next one. */
|
||||||
boolean shouldSkip(BuildPlan request, @Nullable Building core){
|
boolean shouldSkip(BuildPlan request, @Nullable Building core){
|
||||||
//requests that you have at least *started* are considered
|
//requests that you have at least *started* are considered
|
||||||
if(state.rules.infiniteResources || team.rules().infiniteResources || request.breaking || core == null || request.isRotation(team)) return false;
|
if(state.rules.infiniteResources || team.rules().infiniteResources || request.breaking || core == null || request.isRotation(team) || (isBuilding() && !within(plans.last(), buildingRange))) return false;
|
||||||
|
|
||||||
return (request.stuck && !core.items.has(request.block.requirements)) || (Structs.contains(request.block.requirements, i -> !core.items.has(i.item) && Mathf.round(i.amount * state.rules.buildCostMultiplier) > 0) && !request.initialized);
|
return (request.stuck && !core.items.has(request.block.requirements)) || (Structs.contains(request.block.requirements, i -> !core.items.has(i.item, Math.min(i.amount, 15)) && Mathf.round(i.amount * state.rules.buildCostMultiplier) > 0) && !request.initialized);
|
||||||
}
|
}
|
||||||
|
|
||||||
void removeBuild(int x, int y, boolean breaking){
|
void removeBuild(int x, int y, boolean breaking){
|
||||||
|
|||||||
@@ -106,7 +106,6 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Buildingc, Timerc,
|
|||||||
|
|
||||||
/** Sets up all the necessary variables, but does not add this entity anywhere. */
|
/** Sets up all the necessary variables, but does not add this entity anywhere. */
|
||||||
public Building create(Block block, Team team){
|
public Building create(Block block, Team team){
|
||||||
this.tile = emptyTile;
|
|
||||||
this.block = block;
|
this.block = block;
|
||||||
this.team = team;
|
this.team = team;
|
||||||
|
|
||||||
@@ -1019,6 +1018,11 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Buildingc, Timerc,
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** @return the cap for item amount calculations, used when this block explodes. */
|
||||||
|
public int explosionItemCap(){
|
||||||
|
return block.itemCapacity;
|
||||||
|
}
|
||||||
|
|
||||||
/** Called when the block is destroyed. The tile is still intact at this stage. */
|
/** Called when the block is destroyed. The tile is still intact at this stage. */
|
||||||
public void onDestroyed(){
|
public void onDestroyed(){
|
||||||
float explosiveness = block.baseExplosiveness;
|
float explosiveness = block.baseExplosiveness;
|
||||||
@@ -1027,7 +1031,7 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Buildingc, Timerc,
|
|||||||
|
|
||||||
if(block.hasItems){
|
if(block.hasItems){
|
||||||
for(Item item : content.items()){
|
for(Item item : content.items()){
|
||||||
int amount = items.get(item);
|
int amount = Math.min(items.get(item), explosionItemCap());
|
||||||
explosiveness += item.explosiveness * amount;
|
explosiveness += item.explosiveness * amount;
|
||||||
flammability += item.flammability * amount;
|
flammability += item.flammability * amount;
|
||||||
power += item.charge * amount * 100f;
|
power += item.charge * amount * 100f;
|
||||||
@@ -1067,7 +1071,9 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Buildingc, Timerc,
|
|||||||
}
|
}
|
||||||
|
|
||||||
public String getDisplayName(){
|
public String getDisplayName(){
|
||||||
return block.localizedName;
|
return team == Team.derelict ?
|
||||||
|
block.localizedName + "\n" + Core.bundle.get("block.derelict"):
|
||||||
|
block.localizedName;
|
||||||
}
|
}
|
||||||
|
|
||||||
public TextureRegion getDisplayIcon(){
|
public TextureRegion getDisplayIcon(){
|
||||||
@@ -1096,7 +1102,7 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Buildingc, Timerc,
|
|||||||
table.row();
|
table.row();
|
||||||
table.table(this::displayConsumption).growX();
|
table.table(this::displayConsumption).growX();
|
||||||
|
|
||||||
boolean displayFlow = (block.category == Category.distribution || block.category == Category.liquid) && Core.settings.getBool("flow") && block.displayFlow;
|
boolean displayFlow = (block.category == Category.distribution || block.category == Category.liquid) && block.displayFlow;
|
||||||
|
|
||||||
if(displayFlow){
|
if(displayFlow){
|
||||||
String ps = " " + StatUnit.perSecond.localized();
|
String ps = " " + StatUnit.perSecond.localized();
|
||||||
@@ -1443,7 +1449,7 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Buildingc, Timerc,
|
|||||||
@Override
|
@Override
|
||||||
public void killed(){
|
public void killed(){
|
||||||
Events.fire(new BlockDestroyEvent(tile));
|
Events.fire(new BlockDestroyEvent(tile));
|
||||||
block.breakSound.at(tile);
|
block.destroySound.at(tile);
|
||||||
onDestroyed();
|
onDestroyed();
|
||||||
tile.remove();
|
tile.remove();
|
||||||
remove();
|
remove();
|
||||||
|
|||||||
@@ -80,6 +80,10 @@ abstract class BulletComp implements Timedc, Damagec, Hitboxc, Teamc, Posc, Draw
|
|||||||
remove();
|
remove();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean hasCollided(int id){
|
||||||
|
return collided.size != 0 && !collided.contains(id);
|
||||||
|
}
|
||||||
|
|
||||||
@Replace
|
@Replace
|
||||||
public float clipSize(){
|
public float clipSize(){
|
||||||
return type.drawSize;
|
return type.drawSize;
|
||||||
@@ -90,7 +94,7 @@ abstract class BulletComp implements Timedc, Damagec, Hitboxc, Teamc, Posc, Draw
|
|||||||
public boolean collides(Hitboxc other){
|
public boolean collides(Hitboxc other){
|
||||||
return type.collides && (other instanceof Teamc t && t.team() != team)
|
return type.collides && (other instanceof Teamc t && t.team() != team)
|
||||||
&& !(other instanceof Flyingc f && !f.checkTarget(type.collidesAir, type.collidesGround))
|
&& !(other instanceof Flyingc f && !f.checkTarget(type.collidesAir, type.collidesGround))
|
||||||
&& !(type.pierce && collided.contains(other.id())); //prevent multiple collisions
|
&& !(type.pierce && hasCollided(other.id())); //prevent multiple collisions
|
||||||
}
|
}
|
||||||
|
|
||||||
@MethodPriority(100)
|
@MethodPriority(100)
|
||||||
@@ -116,16 +120,16 @@ abstract class BulletComp implements Timedc, Damagec, Hitboxc, Teamc, Posc, Draw
|
|||||||
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) -> {
|
world.raycastEach(World.toTile(lastX()), World.toTile(lastY()), tileX(), tileY(), (x, y) -> {
|
||||||
|
|
||||||
Building tile = world.build(x, y);
|
Building build = world.build(x, y);
|
||||||
if(tile == null || !isAdded()) return false;
|
if(build == null || !isAdded()) return false;
|
||||||
|
|
||||||
if(tile.collide(self()) && type.testCollision(self(), tile) && !tile.dead() && (type.collidesTeam || tile.team != team) && !(type.pierceBuilding && collided.contains(tile.id))){
|
if(build.collide(self()) && type.testCollision(self(), build) && !build.dead() && (type.collidesTeam || build.team != team) && !(type.pierceBuilding && hasCollided(build.id))){
|
||||||
boolean remove = false;
|
boolean remove = false;
|
||||||
|
|
||||||
float health = tile.health;
|
float health = build.health;
|
||||||
|
|
||||||
if(tile.team != team){
|
if(build.team != team){
|
||||||
remove = tile.collision(self());
|
remove = build.collision(self());
|
||||||
}
|
}
|
||||||
|
|
||||||
if(remove || type.collidesTeam){
|
if(remove || type.collidesTeam){
|
||||||
@@ -133,11 +137,11 @@ abstract class BulletComp implements Timedc, Damagec, Hitboxc, Teamc, Posc, Draw
|
|||||||
hit = true;
|
hit = true;
|
||||||
remove();
|
remove();
|
||||||
}else{
|
}else{
|
||||||
collided.add(tile.id);
|
collided.add(build.id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
type.hitTile(self(), tile, health, true);
|
type.hitTile(self(), build, health, true);
|
||||||
|
|
||||||
return !type.pierceBuilding;
|
return !type.pierceBuilding;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package mindustry.entities.comp;
|
|||||||
|
|
||||||
import arc.math.*;
|
import arc.math.*;
|
||||||
import arc.math.geom.*;
|
import arc.math.geom.*;
|
||||||
|
import arc.util.*;
|
||||||
import mindustry.annotations.Annotations.*;
|
import mindustry.annotations.Annotations.*;
|
||||||
import mindustry.async.PhysicsProcess.*;
|
import mindustry.async.PhysicsProcess.*;
|
||||||
import mindustry.gen.*;
|
import mindustry.gen.*;
|
||||||
|
|||||||
@@ -154,7 +154,7 @@ abstract class StatusComp implements Posc, Flyingc{
|
|||||||
|
|
||||||
public void draw(){
|
public void draw(){
|
||||||
for(StatusEntry e : statuses){
|
for(StatusEntry e : statuses){
|
||||||
e.effect.draw(self());
|
e.effect.draw(self(), e.time);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -6,9 +6,11 @@ import arc.util.*;
|
|||||||
import mindustry.*;
|
import mindustry.*;
|
||||||
import mindustry.ai.*;
|
import mindustry.ai.*;
|
||||||
import mindustry.entities.*;
|
import mindustry.entities.*;
|
||||||
|
import mindustry.game.*;
|
||||||
import mindustry.gen.*;
|
import mindustry.gen.*;
|
||||||
import mindustry.type.*;
|
import mindustry.type.*;
|
||||||
import mindustry.world.*;
|
import mindustry.world.*;
|
||||||
|
import mindustry.world.blocks.payloads.*;
|
||||||
import mindustry.world.meta.*;
|
import mindustry.world.meta.*;
|
||||||
|
|
||||||
import static mindustry.Vars.*;
|
import static mindustry.Vars.*;
|
||||||
@@ -78,7 +80,6 @@ public class AIController implements UnitController{
|
|||||||
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){
|
protected void pathfind(int pathTarget){
|
||||||
int costType = unit.pathType();
|
int costType = unit.pathType();
|
||||||
|
|
||||||
@@ -96,7 +97,7 @@ public class AIController implements UnitController{
|
|||||||
boolean ret = retarget();
|
boolean ret = retarget();
|
||||||
|
|
||||||
if(ret){
|
if(ret){
|
||||||
target = findTarget(unit.x, unit.y, unit.range(), unit.type.targetAir, unit.type.targetGround);
|
target = findMainTarget(unit.x, unit.y, unit.range(), unit.type.targetAir, unit.type.targetGround);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(invalid(target)){
|
if(invalid(target)){
|
||||||
@@ -154,6 +155,7 @@ public class AIController implements UnitController{
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected Teamc targetFlag(float x, float y, BlockFlag flag, boolean enemy){
|
protected Teamc targetFlag(float x, float y, BlockFlag flag, boolean enemy){
|
||||||
|
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;
|
||||||
}
|
}
|
||||||
@@ -166,6 +168,10 @@ public class AIController implements UnitController{
|
|||||||
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){
|
||||||
|
return findTarget(x, y, range, air, ground);
|
||||||
|
}
|
||||||
|
|
||||||
protected Teamc findTarget(float x, float y, float range, boolean air, boolean ground){
|
protected 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);
|
||||||
}
|
}
|
||||||
@@ -178,6 +184,14 @@ public class AIController implements UnitController{
|
|||||||
return Geometry.findClosest(unit.x, unit.y, Vars.spawner.getSpawns());
|
return Geometry.findClosest(unit.x, unit.y, Vars.spawner.getSpawns());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected void unloadPayloads(){
|
||||||
|
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))){
|
||||||
|
pay.dropLastPayload();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
protected void circle(Position target, float circleLength){
|
protected void circle(Position target, float circleLength){
|
||||||
circle(target, circleLength, unit.speed());
|
circle(target, circleLength, unit.speed());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ public enum Gamemode{
|
|||||||
rules.waves = true;
|
rules.waves = true;
|
||||||
rules.waveTimer = true;
|
rules.waveTimer = true;
|
||||||
|
|
||||||
rules.waveSpacing = 60f * Time.toMinutes;
|
rules.waveSpacing = 2f * Time.toMinutes;
|
||||||
rules.teams.get(rules.waveTeam).infiniteResources = true;
|
rules.teams.get(rules.waveTeam).infiniteResources = true;
|
||||||
}, map -> map.teams.contains(state.rules.waveTeam.id)),
|
}, map -> map.teams.contains(state.rules.waveTeam.id)),
|
||||||
pvp(rules -> {
|
pvp(rules -> {
|
||||||
|
|||||||
@@ -70,6 +70,8 @@ public class Rules{
|
|||||||
public float enemyCoreBuildRadius = 400f;
|
public float enemyCoreBuildRadius = 400f;
|
||||||
/** If true, no-build zones are calculated based on the closest core. */
|
/** If true, no-build zones are calculated based on the closest core. */
|
||||||
public boolean polygonCoreProtection = false;
|
public boolean polygonCoreProtection = false;
|
||||||
|
/** If true, dead teams in PvP automatically have their blocks & units converted to derelict upon death. */
|
||||||
|
public boolean cleanupDeadTeams = true;
|
||||||
/** Radius around enemy wave drop zones.*/
|
/** Radius around enemy wave drop zones.*/
|
||||||
public float dropZoneRadius = 300f;
|
public float dropZoneRadius = 300f;
|
||||||
/** Time between waves in ticks. */
|
/** Time between waves in ticks. */
|
||||||
@@ -107,6 +109,8 @@ public class Rules{
|
|||||||
public Team defaultTeam = Team.sharded;
|
public Team defaultTeam = Team.sharded;
|
||||||
/** team of the enemy in waves/sectors. */
|
/** team of the enemy in waves/sectors. */
|
||||||
public Team waveTeam = Team.crux;
|
public Team waveTeam = Team.crux;
|
||||||
|
/** color of clouds that is displayed when the player is landing */
|
||||||
|
public Color cloudColor = new Color(0f, 0f, 0f, 0f);
|
||||||
/** name of the custom mode that this ruleset describes, or null. */
|
/** name of the custom mode that this ruleset describes, or null. */
|
||||||
public @Nullable String modeName;
|
public @Nullable String modeName;
|
||||||
/** Whether cores incinerate items when full, just like in the campaign. */
|
/** Whether cores incinerate items when full, just like in the campaign. */
|
||||||
|
|||||||
@@ -432,6 +432,11 @@ public class Schematics implements Loadable{
|
|||||||
if(seq.contains(t -> !t.block().alwaysReplace && !t.synthetic())){
|
if(seq.contains(t -> !t.block().alwaysReplace && !t.synthetic())){
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
for(var t : seq){
|
||||||
|
if(t.block() != Blocks.air){
|
||||||
|
t.remove();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
tile.setBlock(st.block, team, st.rotation);
|
tile.setBlock(st.block, team, st.rotation);
|
||||||
|
|||||||
@@ -55,7 +55,7 @@ public class SectorInfo{
|
|||||||
/** Waves this sector can survive if under attack. Based on wave in info. <0 means uncalculated. */
|
/** Waves this sector can survive if under attack. Based on wave in info. <0 means uncalculated. */
|
||||||
public int wavesSurvived = -1;
|
public int wavesSurvived = -1;
|
||||||
/** Time between waves. */
|
/** Time between waves. */
|
||||||
public float waveSpacing = 60 * 60 * 2;
|
public float waveSpacing = 2 * Time.toMinutes;
|
||||||
/** Damage dealt to sector. */
|
/** Damage dealt to sector. */
|
||||||
public float damage;
|
public float damage;
|
||||||
/** How many waves have passed while the player was away. */
|
/** How many waves have passed while the player was away. */
|
||||||
@@ -117,11 +117,6 @@ public class SectorInfo{
|
|||||||
export.get(item, ExportStat::new).counter += amount;
|
export.get(item, ExportStat::new).counter += amount;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Subtracts from export statistics. */
|
|
||||||
public void handleItemImport(Item item, int amount){
|
|
||||||
export.get(item, ExportStat::new).counter -= amount;
|
|
||||||
}
|
|
||||||
|
|
||||||
public float getExport(Item item){
|
public float getExport(Item item){
|
||||||
return export.get(item, ExportStat::new).mean;
|
return export.get(item, ExportStat::new).mean;
|
||||||
}
|
}
|
||||||
@@ -270,6 +265,25 @@ public class SectorInfo{
|
|||||||
return map;
|
return map;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** @return a newly allocated map with import statistics. Use sparingly. */
|
||||||
|
//TODO this can be a float map
|
||||||
|
public ObjectMap<Item, ExportStat> importStats(){
|
||||||
|
ObjectMap<Item, ExportStat> imports = new ObjectMap<>();
|
||||||
|
//for all sectors on all planets that have bases and export to this sector
|
||||||
|
for(Planet planet : content.planets()){
|
||||||
|
for(Sector sector : planet.sectors){
|
||||||
|
Sector dest = sector.info.getRealDestination();
|
||||||
|
if(sector.hasBase() && sector.info != this && dest != null && dest.info == this){
|
||||||
|
//add their exports to our imports
|
||||||
|
sector.info.export.each((item, stat) -> {
|
||||||
|
imports.get(item, ExportStat::new).mean += stat.mean;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return imports;
|
||||||
|
}
|
||||||
|
|
||||||
public static class ExportStat{
|
public static class ExportStat{
|
||||||
public transient float counter;
|
public transient float counter;
|
||||||
public transient WindowedMean means = new WindowedMean(valueWindow);
|
public transient WindowedMean means = new WindowedMean(valueWindow);
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package mindustry.game;
|
package mindustry.game;
|
||||||
|
|
||||||
|
import arc.struct.*;
|
||||||
import arc.util.*;
|
import arc.util.*;
|
||||||
import arc.util.serialization.*;
|
import arc.util.serialization.*;
|
||||||
import arc.util.serialization.Json.*;
|
import arc.util.serialization.Json.*;
|
||||||
@@ -39,12 +40,12 @@ public class SpawnGroup implements JsonSerializable{
|
|||||||
public float shieldScaling = 0f;
|
public float shieldScaling = 0f;
|
||||||
/** Amount of enemies spawned initially, with no scaling */
|
/** Amount of enemies spawned initially, with no scaling */
|
||||||
public int unitAmount = 1;
|
public int unitAmount = 1;
|
||||||
|
/** Seq of payloads that this unit will spawn with. */
|
||||||
|
public @Nullable Seq<UnitType> payloads;
|
||||||
/** Status effect applied to the spawned unit. Null to disable. */
|
/** Status effect applied to the spawned unit. Null to disable. */
|
||||||
@Nullable
|
public @Nullable StatusEffect effect;
|
||||||
public StatusEffect effect;
|
|
||||||
/** Items this unit spawns with. Null to disable. */
|
/** Items this unit spawns with. Null to disable. */
|
||||||
@Nullable
|
public @Nullable ItemStack items;
|
||||||
public ItemStack items;
|
|
||||||
|
|
||||||
public SpawnGroup(UnitType type){
|
public SpawnGroup(UnitType type){
|
||||||
this.type = type;
|
this.type = type;
|
||||||
@@ -85,6 +86,15 @@ public class SpawnGroup implements JsonSerializable{
|
|||||||
|
|
||||||
unit.shield = getShield(wave);
|
unit.shield = getShield(wave);
|
||||||
|
|
||||||
|
//load up spawn payloads
|
||||||
|
if(payloads != null && unit instanceof Payloadc pay){
|
||||||
|
for(var type : payloads){
|
||||||
|
if(type == null) continue;
|
||||||
|
Unit payload = type.create(unit.team);
|
||||||
|
pay.pickup(payload);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return unit;
|
return unit;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -101,6 +111,9 @@ public class SpawnGroup implements JsonSerializable{
|
|||||||
if(shieldScaling != 0) json.writeValue("shieldScaling", shieldScaling);
|
if(shieldScaling != 0) json.writeValue("shieldScaling", shieldScaling);
|
||||||
if(unitAmount != 1) json.writeValue("amount", unitAmount);
|
if(unitAmount != 1) json.writeValue("amount", unitAmount);
|
||||||
if(effect != null) json.writeValue("effect", effect.name);
|
if(effect != null) json.writeValue("effect", effect.name);
|
||||||
|
if(payloads != null && payloads.size > 0){
|
||||||
|
json.writeValue("payloads", payloads.map(u -> u.name).toArray(String.class));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -117,6 +130,9 @@ public class SpawnGroup implements JsonSerializable{
|
|||||||
shields = data.getFloat("shields", 0);
|
shields = data.getFloat("shields", 0);
|
||||||
shieldScaling = data.getFloat("shieldScaling", 0);
|
shieldScaling = data.getFloat("shieldScaling", 0);
|
||||||
unitAmount = data.getInt("amount", 1);
|
unitAmount = data.getInt("amount", 1);
|
||||||
|
if(data.has("payloads")){
|
||||||
|
payloads = Seq.with(json.readValue(String[].class, data.get("payloads"))).map(s -> content.getByName(ContentType.unit, s));
|
||||||
|
}
|
||||||
|
|
||||||
//old boss effect ID
|
//old boss effect ID
|
||||||
if(data.has("effect") && data.get("effect").isNumber() && data.getInt("effect", -1) == 8){
|
if(data.has("effect") && data.get("effect").isNumber() && data.getInt("effect", -1) == 8){
|
||||||
|
|||||||
@@ -96,6 +96,11 @@ public class Team implements Comparable<Team>{
|
|||||||
return state.teams.isActive(this);
|
return state.teams.isActive(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** @return whether this team is solely comprised of AI, with no players. */
|
||||||
|
public boolean isAI(){
|
||||||
|
return state.rules.waves && this == state.rules.waveTeam;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isEnemy(Team other){
|
public boolean isEnemy(Team other){
|
||||||
return this != other;
|
return this != other;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package mindustry.game;
|
package mindustry.game;
|
||||||
|
|
||||||
import arc.func.*;
|
import arc.func.*;
|
||||||
|
import arc.math.*;
|
||||||
import arc.math.geom.*;
|
import arc.math.geom.*;
|
||||||
import arc.struct.Queue;
|
import arc.struct.Queue;
|
||||||
import arc.struct.*;
|
import arc.struct.*;
|
||||||
@@ -260,6 +261,34 @@ public class Teams{
|
|||||||
this.ai = new BaseAI(this);
|
this.ai = new BaseAI(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Destroys this team's presence on the map, killing part of its buildings and converting everything to 'derelict'. */
|
||||||
|
public void destroyToDerelict(){
|
||||||
|
|
||||||
|
//grab all buildings from quadtree.
|
||||||
|
var builds = new Seq<Building>();
|
||||||
|
if(buildings != null){
|
||||||
|
buildings.getObjects(builds);
|
||||||
|
}
|
||||||
|
|
||||||
|
//convert all team tiles to neutral, randomly killing them
|
||||||
|
for(var b : builds){
|
||||||
|
//TODO this may cause a lot of packet spam, optimize?
|
||||||
|
Call.setTeam(b, Team.derelict);
|
||||||
|
|
||||||
|
if(Mathf.chance(0.25)){
|
||||||
|
Time.run(Mathf.random(0f, 60f * 6f), b::kill);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//kill all units randomly
|
||||||
|
units.each(u -> Time.run(Mathf.random(0f, 60f * 5f), () -> {
|
||||||
|
//ensure unit hasn't switched teams for whatever reason
|
||||||
|
if(u.team == team){
|
||||||
|
u.kill();
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
public Seq<Unit> unitCache(UnitType type){
|
public Seq<Unit> unitCache(UnitType type){
|
||||||
if(unitsByType == null || unitsByType.length <= type.id || unitsByType[type.id] == null) return null;
|
if(unitsByType == null || unitsByType.length <= type.id || unitsByType[type.id] == null) return null;
|
||||||
@@ -320,6 +349,7 @@ public class Teams{
|
|||||||
public static class BlockPlan{
|
public static class BlockPlan{
|
||||||
public final short x, y, rotation, block;
|
public final short x, y, rotation, block;
|
||||||
public final Object config;
|
public final Object config;
|
||||||
|
public boolean removed;
|
||||||
|
|
||||||
public BlockPlan(int x, int y, short rotation, short block, Object config){
|
public BlockPlan(int x, int y, short rotation, short block, Object config){
|
||||||
this.x = (short)x;
|
this.x = (short)x;
|
||||||
|
|||||||
@@ -41,6 +41,7 @@ public class Drawf{
|
|||||||
Draw.reset();
|
Draw.reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Sets Draw.z to the text layer, and returns the previous layer. */
|
||||||
public static float text(){
|
public static float text(){
|
||||||
float z = Draw.z();
|
float z = Draw.z();
|
||||||
if(renderer.pixelator.enabled()){
|
if(renderer.pixelator.enabled()){
|
||||||
@@ -203,20 +204,24 @@ public class Drawf{
|
|||||||
Draw.color();
|
Draw.color();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void laser(Team team, TextureRegion line, TextureRegion edge, float x, float y, float x2, float y2, float scale){
|
|
||||||
laser(team, line, edge, x, y, x2, y2, Mathf.angle(x2 - x, y2 - y), scale);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void laser(Team team, TextureRegion line, TextureRegion edge, float x, float y, float x2, float y2){
|
public static void laser(Team team, TextureRegion line, TextureRegion edge, float x, float y, float x2, float y2){
|
||||||
laser(team, line, edge, x, y, x2, y2, Mathf.angle(x2 - x, y2 - y), 1f);
|
laser(team, line, edge, edge, x, y, x2, y2, 1f);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void laser(Team team, TextureRegion line, TextureRegion edge, float x, float y, float x2, float y2, float rotation, float scale){
|
public static void laser(Team team, TextureRegion line, TextureRegion start, TextureRegion end, float x, float y, float x2, float y2){
|
||||||
float scl = 8f * scale * Draw.scl;
|
laser(team, line, start, end, x, y, x2, y2, 1f);
|
||||||
float vx = Mathf.cosDeg(rotation) * scl, vy = Mathf.sinDeg(rotation) * scl;
|
}
|
||||||
|
|
||||||
Draw.rect(edge, x, y, edge.width * scale * Draw.scl, edge.height * scale * Draw.scl, rotation + 180);
|
public static void laser(Team team, TextureRegion line, TextureRegion edge, float x, float y, float x2, float y2, float scale){
|
||||||
Draw.rect(edge, x2, y2, edge.width * scale * Draw.scl, edge.height * scale * Draw.scl, rotation);
|
laser(team, line, edge, edge, x, y, x2, y2, scale);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void laser(Team team, TextureRegion line, TextureRegion start, TextureRegion end, float x, float y, float x2, float y2, float scale){
|
||||||
|
float scl = 8f * scale * Draw.scl, rot = Mathf.angle(x2 - x, y2 - y);
|
||||||
|
float vx = Mathf.cosDeg(rot) * scl, vy = Mathf.sinDeg(rot) * scl;
|
||||||
|
|
||||||
|
Draw.rect(start, x, y, start.width * scale * Draw.scl, start.height * scale * Draw.scl, rot + 180);
|
||||||
|
Draw.rect(end, x2, y2, end.width * scale * Draw.scl, end.height * scale * Draw.scl, rot);
|
||||||
|
|
||||||
Lines.stroke(12f * scale);
|
Lines.stroke(12f * scale);
|
||||||
Lines.line(line, x + vx, y + vy, x2 - vx, y2 - vy, false);
|
Lines.line(line, x + vx, y + vy, x2 - vx, y2 - vy, false);
|
||||||
@@ -274,4 +279,13 @@ public class Drawf{
|
|||||||
|
|
||||||
Draw.reset();
|
Draw.reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Draws a sprite that should be light-wise correct, when rotated. Provided sprite must be symmetrical in shape. */
|
||||||
|
public static void spinSprite(TextureRegion region, float x, float y, float r){
|
||||||
|
r = Mathf.mod(r, 90f);
|
||||||
|
Draw.rect(region, x, y, r);
|
||||||
|
Draw.alpha(r / 90f);
|
||||||
|
Draw.rect(region, x, y, r - 90f);
|
||||||
|
Draw.alpha(1f);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -281,10 +281,13 @@ public class FloorRenderer{
|
|||||||
for(int tilex = cx * chunksize; tilex < (cx + 1) * chunksize && tilex < world.width(); tilex++){
|
for(int tilex = cx * chunksize; tilex < (cx + 1) * chunksize && tilex < world.width(); tilex++){
|
||||||
for(int tiley = cy * chunksize; tiley < (cy + 1) * chunksize && tiley < world.height(); tiley++){
|
for(int tiley = cy * chunksize; tiley < (cy + 1) * chunksize && tiley < world.height(); tiley++){
|
||||||
Tile tile = world.rawTile(tilex, tiley);
|
Tile tile = world.rawTile(tilex, tiley);
|
||||||
|
boolean wall = tile.block().cacheLayer != CacheLayer.normal;
|
||||||
|
|
||||||
if(tile.block().cacheLayer != CacheLayer.normal){
|
if(wall){
|
||||||
used.add(tile.block().cacheLayer);
|
used.add(tile.block().cacheLayer);
|
||||||
}else{
|
}
|
||||||
|
|
||||||
|
if(!wall || world.isAccessible(tilex, tiley)){
|
||||||
used.add(tile.floor().cacheLayer);
|
used.add(tile.floor().cacheLayer);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ public class Pal{
|
|||||||
public static Color
|
public static Color
|
||||||
|
|
||||||
thoriumPink = Color.valueOf("f9a3c7"),
|
thoriumPink = Color.valueOf("f9a3c7"),
|
||||||
|
coalBlack = Color.valueOf("272727"),
|
||||||
|
|
||||||
items = Color.valueOf("2ea756"),
|
items = Color.valueOf("2ea756"),
|
||||||
command = Color.valueOf("eab678"),
|
command = Color.valueOf("eab678"),
|
||||||
|
|||||||
@@ -204,7 +204,6 @@ public class DesktopInput extends InputHandler{
|
|||||||
panning = false;
|
panning = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
//TODO awful UI state checking code
|
|
||||||
if(((player.dead() || state.isPaused()) && !ui.chatfrag.shown()) && !scene.hasField() && !scene.hasDialog()){
|
if(((player.dead() || state.isPaused()) && !ui.chatfrag.shown()) && !scene.hasField() && !scene.hasDialog()){
|
||||||
if(input.keyDown(Binding.mouse_move)){
|
if(input.keyDown(Binding.mouse_move)){
|
||||||
panCam = true;
|
panCam = true;
|
||||||
@@ -237,7 +236,7 @@ public class DesktopInput extends InputHandler{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!player.dead() && !state.isPaused() && !scene.hasField()){
|
if(!player.dead() && !state.isPaused() && !scene.hasField() && !renderer.isCutscene()){
|
||||||
updateMovement(player.unit());
|
updateMovement(player.unit());
|
||||||
|
|
||||||
if(Core.input.keyTap(Binding.respawn)){
|
if(Core.input.keyTap(Binding.respawn)){
|
||||||
|
|||||||
@@ -145,6 +145,7 @@ public abstract class InputHandler implements InputProcessor, GestureListener{
|
|||||||
|
|
||||||
for(int pos : positions){
|
for(int pos : positions){
|
||||||
if(req.x == Point2.x(pos) && req.y == Point2.y(pos)){
|
if(req.x == Point2.x(pos) && req.y == Point2.y(pos)){
|
||||||
|
req.removed = true;
|
||||||
it.remove();
|
it.remove();
|
||||||
continue outer;
|
continue outer;
|
||||||
}
|
}
|
||||||
@@ -229,7 +230,7 @@ public abstract class InputHandler implements InputProcessor, GestureListener{
|
|||||||
|
|
||||||
Unit unit = player.unit();
|
Unit unit = player.unit();
|
||||||
|
|
||||||
if(build != null && build.team == unit.team
|
if(build != null && state.teams.canInteract(unit.team, build.team)
|
||||||
&& unit.within(build, tilesize * build.block.size * 1.2f + tilesize * 5f)){
|
&& unit.within(build, tilesize * build.block.size * 1.2f + tilesize * 5f)){
|
||||||
|
|
||||||
//pick up block's payload
|
//pick up block's payload
|
||||||
@@ -355,7 +356,7 @@ public abstract class InputHandler implements InputProcessor, GestureListener{
|
|||||||
Events.fire(new TapEvent(player, tile));
|
Events.fire(new TapEvent(player, tile));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Remote(targets = Loc.both, called = Loc.both, forward = true)
|
@Remote(targets = Loc.both, called = Loc.server, forward = true)
|
||||||
public static void buildingControlSelect(Player player, Building build){
|
public static void buildingControlSelect(Player player, Building build){
|
||||||
if(player == null || build == null || player.dead()) return;
|
if(player == null || build == null || player.dead()) return;
|
||||||
|
|
||||||
@@ -509,7 +510,7 @@ public abstract class InputHandler implements InputProcessor, GestureListener{
|
|||||||
}else{
|
}else{
|
||||||
Building build = world.buildWorld(pay.x(), pay.y());
|
Building build = world.buildWorld(pay.x(), pay.y());
|
||||||
|
|
||||||
if(build != null && build.team == unit.team){
|
if(build != null && state.teams.canInteract(unit.team, build.team)){
|
||||||
Call.requestBuildPayload(player, build);
|
Call.requestBuildPayload(player, build);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -893,6 +894,7 @@ public abstract class InputHandler implements InputProcessor, GestureListener{
|
|||||||
Block block = content.block(req.block);
|
Block block = content.block(req.block);
|
||||||
if(block.bounds(req.x, req.y, Tmp.r2).overlaps(Tmp.r1)){
|
if(block.bounds(req.x, req.y, Tmp.r2).overlaps(Tmp.r1)){
|
||||||
removed.add(Point2.pack(req.x, req.y));
|
removed.add(Point2.pack(req.x, req.y));
|
||||||
|
req.removed = true;
|
||||||
broken.remove();
|
broken.remove();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1025,7 +1027,7 @@ public abstract class InputHandler implements InputProcessor, GestureListener{
|
|||||||
return !Core.scene.hasMouse()
|
return !Core.scene.hasMouse()
|
||||||
&& tile.drop() != null
|
&& tile.drop() != null
|
||||||
&& player.unit().validMine(tile)
|
&& player.unit().validMine(tile)
|
||||||
&& !(tile.floor().playerUnmineable && tile.overlay().itemDrop == null)
|
&& !((!Core.settings.getBool("doubletapmine") && tile.floor().playerUnmineable) && tile.overlay().itemDrop == null)
|
||||||
&& player.unit().acceptsItem(tile.drop())
|
&& player.unit().acceptsItem(tile.drop())
|
||||||
&& tile.block() == Blocks.air;
|
&& tile.block() == Blocks.air;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -88,7 +88,7 @@ public class MobileInput extends InputHandler implements GestureListener{
|
|||||||
}else{
|
}else{
|
||||||
Building tile = world.buildWorld(x, y);
|
Building tile = world.buildWorld(x, y);
|
||||||
|
|
||||||
if((tile != null && player.team().isEnemy(tile.team) && tile.team != Team.derelict) || (tile != null && player.unit().type.canHeal && tile.team == player.team() && tile.damaged())){
|
if((tile != null && player.team().isEnemy(tile.team) && (tile.team != Team.derelict || state.rules.coreCapture)) || (tile != null && player.unit().type.canHeal && tile.team == player.team() && tile.damaged())){
|
||||||
player.unit().mineTile = null;
|
player.unit().mineTile = null;
|
||||||
target = tile;
|
target = tile;
|
||||||
}
|
}
|
||||||
@@ -681,7 +681,7 @@ public class MobileInput extends InputHandler implements GestureListener{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!player.dead() && !state.isPaused()){
|
if(!player.dead() && !state.isPaused() && !renderer.isCutscene()){
|
||||||
updateMovement(player.unit());
|
updateMovement(player.unit());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -822,7 +822,7 @@ public class MobileInput extends InputHandler implements GestureListener{
|
|||||||
shiftDeltaX %= tilesize;
|
shiftDeltaX %= tilesize;
|
||||||
shiftDeltaY %= tilesize;
|
shiftDeltaY %= tilesize;
|
||||||
}
|
}
|
||||||
}else if(!renderer.isLanding()){
|
}else{
|
||||||
//pan player
|
//pan player
|
||||||
Core.camera.position.x -= deltaX;
|
Core.camera.position.x -= deltaX;
|
||||||
Core.camera.position.y -= deltaY;
|
Core.camera.position.y -= deltaY;
|
||||||
@@ -938,7 +938,7 @@ public class MobileInput extends InputHandler implements GestureListener{
|
|||||||
}else if(target == null){
|
}else if(target == null){
|
||||||
player.shooting = false;
|
player.shooting = false;
|
||||||
if(Core.settings.getBool("autotarget") && !(player.unit() instanceof BlockUnitUnit u && u.tile() instanceof ControlBlock c && !c.shouldAutoTarget())){
|
if(Core.settings.getBool("autotarget") && !(player.unit() instanceof BlockUnitUnit u && u.tile() instanceof ControlBlock c && !c.shouldAutoTarget())){
|
||||||
target = Units.closestTarget(unit.team, unit.x, unit.y, range, u -> u.team != Team.derelict, u -> u.team != Team.derelict);
|
target = Units.closestTarget(unit.team, unit.x, unit.y, range, u -> u.checkTarget(type.targetAir, type.targetGround), u -> type.targetGround);
|
||||||
|
|
||||||
if(allowHealing && target == null){
|
if(allowHealing && target == null){
|
||||||
target = Geometry.findClosest(unit.x, unit.y, indexer.getDamaged(Team.sharded));
|
target = Geometry.findClosest(unit.x, unit.y, indexer.getDamaged(Team.sharded));
|
||||||
|
|||||||
@@ -1,11 +1,13 @@
|
|||||||
package mindustry.io;
|
package mindustry.io;
|
||||||
|
|
||||||
|
import arc.util.*;
|
||||||
import arc.util.serialization.*;
|
import arc.util.serialization.*;
|
||||||
import arc.util.serialization.Json.*;
|
import arc.util.serialization.Json.*;
|
||||||
import mindustry.*;
|
import mindustry.*;
|
||||||
import mindustry.content.*;
|
import mindustry.content.*;
|
||||||
import mindustry.ctype.*;
|
import mindustry.ctype.*;
|
||||||
import mindustry.game.*;
|
import mindustry.game.*;
|
||||||
|
import mindustry.maps.*;
|
||||||
import mindustry.type.*;
|
import mindustry.type.*;
|
||||||
import mindustry.world.*;
|
import mindustry.world.*;
|
||||||
import mindustry.world.meta.*;
|
import mindustry.world.meta.*;
|
||||||
@@ -215,6 +217,12 @@ public class JsonIO{
|
|||||||
return item != null ? item : liquid;
|
return item != null ? item : liquid;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
//use short names for all filter types
|
||||||
|
for(var filter : Maps.allFilterTypes){
|
||||||
|
var i = filter.get();
|
||||||
|
json.addClassTag(Strings.camelize(i.getClass().getSimpleName().replace("Filter", "")), i.getClass());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static class CustomJson extends Json{
|
static class CustomJson extends Json{
|
||||||
|
|||||||
@@ -69,7 +69,6 @@ public class SaveIO{
|
|||||||
getMeta(stream);
|
getMeta(stream);
|
||||||
return true;
|
return true;
|
||||||
}catch(Throwable e){
|
}catch(Throwable e){
|
||||||
Log.err(e);
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -363,7 +363,7 @@ public abstract class SaveVersion extends SaveFileReader{
|
|||||||
int amount = stream.readInt();
|
int amount = stream.readInt();
|
||||||
for(int j = 0; j < amount; j++){
|
for(int j = 0; j < amount; j++){
|
||||||
readChunk(stream, true, in -> {
|
readChunk(stream, true, in -> {
|
||||||
byte typeid = in.readByte();
|
int typeid = in.readUnsignedByte();
|
||||||
if(mapping[typeid] == null){
|
if(mapping[typeid] == null){
|
||||||
in.skipBytes(lastRegionLength - 1);
|
in.skipBytes(lastRegionLength - 1);
|
||||||
return;
|
return;
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package mindustry.io;
|
package mindustry.io;
|
||||||
|
|
||||||
|
import arc.audio.*;
|
||||||
import arc.graphics.*;
|
import arc.graphics.*;
|
||||||
import arc.math.geom.*;
|
import arc.math.geom.*;
|
||||||
import arc.struct.*;
|
import arc.struct.*;
|
||||||
@@ -501,6 +502,15 @@ public class TypeIO{
|
|||||||
return id == -1 ? null : content.item(id);
|
return id == -1 ? null : content.item(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//note that only the standard sound constants in Sounds are supported; modded sounds are not.
|
||||||
|
public static void writeSound(Writes write, Sound sound){
|
||||||
|
write.s(Sounds.getSoundId(sound));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Sound readSound(Reads read){
|
||||||
|
return Sounds.getSound(read.s());
|
||||||
|
}
|
||||||
|
|
||||||
public static void writeWeather(Writes write, Weather item){
|
public static void writeWeather(Writes write, Weather item){
|
||||||
write.s(item == null ? -1 : item.id);
|
write.s(item == null ? -1 : item.id);
|
||||||
}
|
}
|
||||||
@@ -633,7 +643,7 @@ public class TypeIO{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Representes a building that has not been resolved yet. */
|
/** Represents a building that has not been resolved yet. */
|
||||||
public static class BuildingBox{
|
public static class BuildingBox{
|
||||||
public int pos;
|
public int pos;
|
||||||
|
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ import arc.util.*;
|
|||||||
import mindustry.*;
|
import mindustry.*;
|
||||||
import mindustry.gen.*;
|
import mindustry.gen.*;
|
||||||
import mindustry.graphics.*;
|
import mindustry.graphics.*;
|
||||||
|
import mindustry.logic.LStatements.*;
|
||||||
import mindustry.ui.*;
|
import mindustry.ui.*;
|
||||||
|
|
||||||
public class LCanvas extends Table{
|
public class LCanvas extends Table{
|
||||||
@@ -395,11 +396,20 @@ public class LCanvas extends Table{
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void copy(){
|
public void copy(){
|
||||||
|
st.saveUI();
|
||||||
LStatement copy = st.copy();
|
LStatement copy = st.copy();
|
||||||
|
|
||||||
|
if(copy instanceof JumpStatement st && st.destIndex != -1){
|
||||||
|
int index = statements.getChildren().indexOf(this);
|
||||||
|
if(index != -1 && index < st.destIndex){
|
||||||
|
st.destIndex ++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if(copy != null){
|
if(copy != null){
|
||||||
StatementElem s = new StatementElem(copy);
|
StatementElem s = new StatementElem(copy);
|
||||||
|
|
||||||
statements.addChildAfter(StatementElem.this,s);
|
statements.addChildAfter(StatementElem.this, s);
|
||||||
statements.layout();
|
statements.layout();
|
||||||
copy.elem = s;
|
copy.elem = s;
|
||||||
copy.setupUI();
|
copy.setupUI();
|
||||||
|
|||||||
@@ -363,6 +363,9 @@ public class LExecutor{
|
|||||||
float x1 = World.unconv(exec.numf(p1)), y1 = World.unconv(exec.numf(p2)), d1 = World.unconv(exec.numf(p3));
|
float x1 = World.unconv(exec.numf(p1)), y1 = World.unconv(exec.numf(p2)), d1 = World.unconv(exec.numf(p3));
|
||||||
|
|
||||||
switch(type){
|
switch(type){
|
||||||
|
case idle -> {
|
||||||
|
ai.control = type;
|
||||||
|
}
|
||||||
case move, stop, approach -> {
|
case move, stop, approach -> {
|
||||||
ai.control = type;
|
ai.control = type;
|
||||||
ai.moveX = x1;
|
ai.moveX = x1;
|
||||||
|
|||||||
@@ -24,23 +24,30 @@ import mindustry.world.*;
|
|||||||
import mindustry.world.blocks.storage.*;
|
import mindustry.world.blocks.storage.*;
|
||||||
|
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
|
import java.util.concurrent.*;
|
||||||
|
|
||||||
import static mindustry.Vars.*;
|
import static mindustry.Vars.*;
|
||||||
|
|
||||||
public class Maps{
|
public class Maps{
|
||||||
|
/** All generation filter types. */
|
||||||
|
public static Prov<GenerateFilter>[] allFilterTypes = new Prov[]{
|
||||||
|
NoiseFilter::new, ScatterFilter::new, TerrainFilter::new, DistortFilter::new,
|
||||||
|
RiverNoiseFilter::new, OreFilter::new, OreMedianFilter::new, MedianFilter::new,
|
||||||
|
BlendFilter::new, MirrorFilter::new, ClearFilter::new, CoreSpawnFilter::new,
|
||||||
|
EnemySpawnFilter::new, SpawnPathFilter::new
|
||||||
|
};
|
||||||
|
|
||||||
/** List of all built-in maps. Filenames only. */
|
/** List of all built-in maps. Filenames only. */
|
||||||
private static String[] defaultMapNames = {"maze", "fortress", "labyrinth", "islands", "tendrils", "caldera", "wasteland", "shattered", "fork", "triad", "mudFlats", "moltenLake", "archipelago", "debrisField", "veins", "glacier", "passage"};
|
private static String[] defaultMapNames = {"maze", "fortress", "labyrinth", "islands", "tendrils", "caldera", "wasteland", "shattered", "fork", "triad", "mudFlats", "moltenLake", "archipelago", "debrisField", "veins", "glacier", "passage"};
|
||||||
/** Maps tagged as PvP */
|
/** Maps tagged as PvP */
|
||||||
static final String[] pvpMaps = {"veins", "glacier", "passage"};
|
private static String[] pvpMaps = {"veins", "glacier", "passage"};
|
||||||
|
|
||||||
/** All maps stored in an ordered array. */
|
/** All maps stored in an ordered array. */
|
||||||
private Seq<Map> maps = new Seq<>();
|
private Seq<Map> maps = new Seq<>();
|
||||||
/** Serializer for meta. */
|
|
||||||
private Json json = new Json();
|
|
||||||
|
|
||||||
private ShuffleMode shuffleMode = ShuffleMode.all;
|
private ShuffleMode shuffleMode = ShuffleMode.all;
|
||||||
private @Nullable MapProvider shuffler;
|
private @Nullable MapProvider shuffler;
|
||||||
|
|
||||||
private AsyncExecutor executor = new AsyncExecutor(2);
|
private ExecutorService executor = Threads.executor(3);
|
||||||
private ObjectSet<Map> previewList = new ObjectSet<>();
|
private ObjectSet<Map> previewList = new ObjectSet<>();
|
||||||
|
|
||||||
public ShuffleMode getShuffleMode(){
|
public ShuffleMode getShuffleMode(){
|
||||||
@@ -352,20 +359,20 @@ public class Maps{
|
|||||||
if(groups == null) return "[]";
|
if(groups == null) return "[]";
|
||||||
|
|
||||||
StringWriter buffer = new StringWriter();
|
StringWriter buffer = new StringWriter();
|
||||||
json.setWriter(new JsonWriter(buffer));
|
JsonIO.json.setWriter(new JsonWriter(buffer));
|
||||||
|
|
||||||
json.writeArrayStart();
|
JsonIO.json.writeArrayStart();
|
||||||
for(int i = 0; i < groups.size; i++){
|
for(int i = 0; i < groups.size; i++){
|
||||||
json.writeObjectStart(SpawnGroup.class, SpawnGroup.class);
|
JsonIO.json.writeObjectStart(SpawnGroup.class, SpawnGroup.class);
|
||||||
groups.get(i).write(json);
|
groups.get(i).write(JsonIO.json);
|
||||||
json.writeObjectEnd();
|
JsonIO.json.writeObjectEnd();
|
||||||
}
|
}
|
||||||
json.writeArrayEnd();
|
JsonIO.json.writeArrayEnd();
|
||||||
return buffer.toString();
|
return buffer.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
public Seq<SpawnGroup> readWaves(String str){
|
public Seq<SpawnGroup> readWaves(String str){
|
||||||
return str == null ? null : str.equals("[]") ? new Seq<>() : Seq.with(json.fromJson(SpawnGroup[].class, str));
|
return str == null ? null : str.equals("[]") ? new Seq<>() : Seq.with(JsonIO.json.fromJson(SpawnGroup[].class, str));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void loadPreviews(){
|
public void loadPreviews(){
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package mindustry.maps.filters;
|
|||||||
|
|
||||||
import arc.*;
|
import arc.*;
|
||||||
import arc.func.*;
|
import arc.func.*;
|
||||||
|
import arc.scene.*;
|
||||||
import arc.scene.event.*;
|
import arc.scene.event.*;
|
||||||
import arc.scene.style.*;
|
import arc.scene.style.*;
|
||||||
import arc.scene.ui.*;
|
import arc.scene.ui.*;
|
||||||
@@ -60,16 +61,19 @@ public abstract class FilterOption{
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void build(Table table){
|
public void build(Table table){
|
||||||
Label label;
|
Element base;
|
||||||
if(!display){
|
if(!display){
|
||||||
label = new Label("@filter.option." + name);
|
Label l = new Label("@filter.option." + name);
|
||||||
|
l.setWrap(true);
|
||||||
|
l.setStyle(Styles.outlineLabel);
|
||||||
|
base = l;
|
||||||
}else{
|
}else{
|
||||||
label = new Label(() -> Core.bundle.get("filter.option." + name) + ": " + Strings.autoFixed(getter.get(), 2));
|
Table t = new Table().marginLeft(11f).marginRight(11f);
|
||||||
|
base = t;
|
||||||
|
t.add("@filter.option." + name).growX().wrap().style(Styles.outlineLabel);
|
||||||
|
t.label(() -> Strings.autoFixed(getter.get(), 2)).style(Styles.outlineLabel).right().labelAlign(Align.right).padLeft(6);
|
||||||
}
|
}
|
||||||
label.setWrap(true);
|
base.touchable = Touchable.disabled;
|
||||||
label.setAlignment(Align.center);
|
|
||||||
label.touchable = Touchable.disabled;
|
|
||||||
label.setStyle(Styles.outlineLabel);
|
|
||||||
|
|
||||||
Slider slider = new Slider(min, max, step, false);
|
Slider slider = new Slider(min, max, step, false);
|
||||||
slider.moved(setter);
|
slider.moved(setter);
|
||||||
@@ -80,7 +84,7 @@ public abstract class FilterOption{
|
|||||||
slider.released(changed);
|
slider.released(changed);
|
||||||
}
|
}
|
||||||
|
|
||||||
table.stack(slider, label).colspan(2).pad(3).growX().row();
|
table.stack(slider, base).colspan(2).pad(3).growX().row();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -75,8 +75,7 @@ public abstract class GenerateFilter{
|
|||||||
|
|
||||||
/** localized display name */
|
/** localized display name */
|
||||||
public String name(){
|
public String name(){
|
||||||
var s = simpleName();
|
return Core.bundle.get("filter." + simpleName());
|
||||||
return Core.bundle.get("filter." + s);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public char icon(){
|
public char icon(){
|
||||||
@@ -100,14 +99,12 @@ public abstract class GenerateFilter{
|
|||||||
|
|
||||||
//utility generation functions
|
//utility generation functions
|
||||||
|
|
||||||
//TODO would be nice if these functions used the seed and ditched "in" completely; simplex should be stateless
|
|
||||||
|
|
||||||
protected float noise(GenerateInput in, float scl, float mag){
|
protected float noise(GenerateInput in, float scl, float mag){
|
||||||
return (float)Simplex.noise2d(seed, 1f, 0f, 1f / scl, in.x, in.y) * mag;
|
return Simplex.noise2d(seed, 1f, 0f, 1f / scl, in.x, in.y) * mag;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected float noise(GenerateInput in, float scl, float mag, float octaves, float persistence){
|
protected float noise(GenerateInput in, float scl, float mag, float octaves, float persistence){
|
||||||
return (float)Simplex.noise2d(seed, octaves, persistence, 1f / scl, in.x, in.y) * mag;
|
return Simplex.noise2d(seed, octaves, persistence, 1f / scl, in.x, in.y) * mag;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected float rnoise(float x, float y, float scl, float mag){
|
protected float rnoise(float x, float y, float scl, float mag){
|
||||||
@@ -141,7 +138,7 @@ public abstract class GenerateFilter{
|
|||||||
this.y = y;
|
this.y = y;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void begin(GenerateFilter filter, int width, int height, TileProvider buffer){
|
public void begin(int width, int height, TileProvider buffer){
|
||||||
this.buffer = buffer;
|
this.buffer = buffer;
|
||||||
this.width = width;
|
this.width = width;
|
||||||
this.height = height;
|
this.height = height;
|
||||||
|
|||||||
@@ -115,7 +115,7 @@ public abstract class PlanetGenerator extends BasicGenerator implements HexMeshe
|
|||||||
@Override
|
@Override
|
||||||
protected float noise(float x, float y, double octaves, double falloff, double scl, double mag){
|
protected float noise(float x, float y, double octaves, double falloff, double scl, double mag){
|
||||||
Vec3 v = sector.rect.project(x, y);
|
Vec3 v = sector.rect.project(x, y);
|
||||||
return (float)Simplex.noise3d(0, octaves, falloff, 1f / scl, v.x, v.y, v.z) * (float)mag;
|
return Simplex.noise3d(0, octaves, falloff, 1f / scl, v.x, v.y, v.z) * (float)mag;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @return the scaling factor for sector rects. */
|
/** @return the scaling factor for sector rects. */
|
||||||
|
|||||||
@@ -57,7 +57,7 @@ public class SerpuloPlanetGenerator extends PlanetGenerator{
|
|||||||
|
|
||||||
float rawHeight(Vec3 position){
|
float rawHeight(Vec3 position){
|
||||||
position = Tmp.v33.set(position).scl(scl);
|
position = Tmp.v33.set(position).scl(scl);
|
||||||
return (Mathf.pow((float)Simplex.noise3d(seed, 7, 0.5f, 1f/3f, position.x, position.y, position.z), 2.3f) + waterOffset) / (1f + waterOffset);
|
return (Mathf.pow(Simplex.noise3d(seed, 7, 0.5f, 1f/3f, position.x, position.y, position.z), 2.3f) + waterOffset) / (1f + waterOffset);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -127,12 +127,12 @@ public class SerpuloPlanetGenerator extends PlanetGenerator{
|
|||||||
position = Tmp.v33.set(position).scl(scl);
|
position = Tmp.v33.set(position).scl(scl);
|
||||||
float rad = scl;
|
float rad = scl;
|
||||||
float temp = Mathf.clamp(Math.abs(position.y * 2f) / (rad));
|
float temp = Mathf.clamp(Math.abs(position.y * 2f) / (rad));
|
||||||
float tnoise = (float)Simplex.noise3d(seed, 7, 0.56, 1f/3f, position.x, position.y + 999f, position.z);
|
float tnoise = Simplex.noise3d(seed, 7, 0.56, 1f/3f, position.x, position.y + 999f, position.z);
|
||||||
temp = Mathf.lerp(temp, tnoise, 0.5f);
|
temp = Mathf.lerp(temp, tnoise, 0.5f);
|
||||||
height *= 1.2f;
|
height *= 1.2f;
|
||||||
height = Mathf.clamp(height);
|
height = Mathf.clamp(height);
|
||||||
|
|
||||||
float tar = (float)Simplex.noise3d(seed, 4, 0.55f, 1f/2f, position.x, position.y + 999f, position.z) * 0.3f + Tmp.v31.dst(0, 0, 1f) * 0.2f;
|
float tar = Simplex.noise3d(seed, 4, 0.55f, 1f/2f, position.x, position.y + 999f, position.z) * 0.3f + Tmp.v31.dst(0, 0, 1f) * 0.2f;
|
||||||
|
|
||||||
Block res = arr[Mathf.clamp((int)(temp * arr.length), 0, arr[0].length - 1)][Mathf.clamp((int)(height * arr[0].length), 0, arr[0].length - 1)];
|
Block res = arr[Mathf.clamp((int)(temp * arr.length), 0, arr[0].length - 1)][Mathf.clamp((int)(height * arr[0].length), 0, arr[0].length - 1)];
|
||||||
if(tar > 0.5f){
|
if(tar > 0.5f){
|
||||||
@@ -145,7 +145,7 @@ public class SerpuloPlanetGenerator extends PlanetGenerator{
|
|||||||
@Override
|
@Override
|
||||||
protected float noise(float x, float y, double octaves, double falloff, double scl, double mag){
|
protected float noise(float x, float y, double octaves, double falloff, double scl, double mag){
|
||||||
Vec3 v = sector.rect.project(x, y).scl(5f);
|
Vec3 v = sector.rect.project(x, y).scl(5f);
|
||||||
return (float)Simplex.noise3d(seed, octaves, falloff, 1f / scl, v.x, v.y, v.z) * (float)mag;
|
return Simplex.noise3d(seed, octaves, falloff, 1f / scl, v.x, v.y, v.z) * (float)mag;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -162,12 +162,27 @@ public class SerpuloPlanetGenerator extends PlanetGenerator{
|
|||||||
connected.add(this);
|
connected.add(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void con(int x1, int y1, int x2, int y2){
|
||||||
|
float nscl = rand.random(100f, 140f) * 6f;
|
||||||
|
int stroke = rand.random(3, 9);
|
||||||
|
brush(pathfind(x1, y1, x2, y2, tile -> (tile.solid() ? 50f : 0f) + noise(tile.x, tile.y, 2, 0.4f, 1f / nscl) * 500, Astar.manhattan), stroke);
|
||||||
|
}
|
||||||
|
|
||||||
void connect(Room to){
|
void connect(Room to){
|
||||||
if(!connected.add(to)) return;
|
if(!connected.add(to)) return;
|
||||||
|
|
||||||
float nscl = rand.random(100f, 140f);
|
Vec2 midpoint = Tmp.v1.set(to.x, to.y).add(x, y).scl(0.5f);
|
||||||
int stroke = rand.random(3, 9);
|
rand.nextFloat();
|
||||||
brush(pathfind(x, y, to.x, to.y, tile -> (tile.solid() ? 5f : 0f) + noise(tile.x, tile.y, 2, 0.4, 1f / nscl) * 500, Astar.manhattan), stroke);
|
|
||||||
|
//add randomized offset to avoid straight lines
|
||||||
|
midpoint.add(Tmp.v2.setToRandomDirection(rand).scl(Tmp.v1.dst(x, y)));
|
||||||
|
|
||||||
|
midpoint.sub(width/2f, height/2f).limit(width / 2f / Mathf.sqrt3).add(width/2f, height/2f);
|
||||||
|
|
||||||
|
int mx = (int)midpoint.x, my = (int)midpoint.y;
|
||||||
|
|
||||||
|
con(x, y, mx, my);
|
||||||
|
con(mx, my, to.x, to.y);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -244,8 +259,6 @@ public class SerpuloPlanetGenerator extends PlanetGenerator{
|
|||||||
cells(1);
|
cells(1);
|
||||||
distort(10f, 6f);
|
distort(10f, 6f);
|
||||||
|
|
||||||
inverseFloodFill(tiles.getn(spawn.x, spawn.y));
|
|
||||||
|
|
||||||
Seq<Block> ores = Seq.with(Blocks.oreCopper, Blocks.oreLead);
|
Seq<Block> ores = Seq.with(Blocks.oreCopper, Blocks.oreLead);
|
||||||
float poles = Math.abs(sector.tile.v.y);
|
float poles = Math.abs(sector.tile.v.y);
|
||||||
float nmag = 0.5f;
|
float nmag = 0.5f;
|
||||||
@@ -296,6 +309,8 @@ public class SerpuloPlanetGenerator extends PlanetGenerator{
|
|||||||
|
|
||||||
median(2);
|
median(2);
|
||||||
|
|
||||||
|
inverseFloodFill(tiles.getn(spawn.x, spawn.y));
|
||||||
|
|
||||||
tech();
|
tech();
|
||||||
|
|
||||||
pass((x, y) -> {
|
pass((x, y) -> {
|
||||||
|
|||||||
@@ -52,9 +52,6 @@ public class ClassMap{
|
|||||||
classes.put("Research", mindustry.game.Objectives.Research.class);
|
classes.put("Research", mindustry.game.Objectives.Research.class);
|
||||||
classes.put("SectorComplete", mindustry.game.Objectives.SectorComplete.class);
|
classes.put("SectorComplete", mindustry.game.Objectives.SectorComplete.class);
|
||||||
classes.put("AmmoType", mindustry.type.AmmoType.class);
|
classes.put("AmmoType", mindustry.type.AmmoType.class);
|
||||||
classes.put("AmmoTypes", mindustry.type.AmmoTypes.class);
|
|
||||||
classes.put("ItemAmmoType", mindustry.type.AmmoTypes.ItemAmmoType.class);
|
|
||||||
classes.put("PowerAmmoType", mindustry.type.AmmoTypes.PowerAmmoType.class);
|
|
||||||
classes.put("Category", mindustry.type.Category.class);
|
classes.put("Category", mindustry.type.Category.class);
|
||||||
classes.put("ErrorContent", mindustry.type.ErrorContent.class);
|
classes.put("ErrorContent", mindustry.type.ErrorContent.class);
|
||||||
classes.put("Item", mindustry.type.Item.class);
|
classes.put("Item", mindustry.type.Item.class);
|
||||||
@@ -74,6 +71,8 @@ public class ClassMap{
|
|||||||
classes.put("Weapon", mindustry.type.Weapon.class);
|
classes.put("Weapon", mindustry.type.Weapon.class);
|
||||||
classes.put("Weather", mindustry.type.Weather.class);
|
classes.put("Weather", mindustry.type.Weather.class);
|
||||||
classes.put("WeatherEntry", mindustry.type.Weather.WeatherEntry.class);
|
classes.put("WeatherEntry", mindustry.type.Weather.WeatherEntry.class);
|
||||||
|
classes.put("ItemAmmoType", mindustry.type.ammo.ItemAmmoType.class);
|
||||||
|
classes.put("PowerAmmoType", mindustry.type.ammo.PowerAmmoType.class);
|
||||||
classes.put("PointDefenseWeapon", mindustry.type.weapons.PointDefenseWeapon.class);
|
classes.put("PointDefenseWeapon", mindustry.type.weapons.PointDefenseWeapon.class);
|
||||||
classes.put("RepairBeamWeapon", mindustry.type.weapons.RepairBeamWeapon.class);
|
classes.put("RepairBeamWeapon", mindustry.type.weapons.RepairBeamWeapon.class);
|
||||||
classes.put("HealBeamMount", mindustry.type.weapons.RepairBeamWeapon.HealBeamMount.class);
|
classes.put("HealBeamMount", mindustry.type.weapons.RepairBeamWeapon.HealBeamMount.class);
|
||||||
@@ -325,8 +324,6 @@ public class ClassMap{
|
|||||||
classes.put("ReconstructorBuild", mindustry.world.blocks.units.Reconstructor.ReconstructorBuild.class);
|
classes.put("ReconstructorBuild", mindustry.world.blocks.units.Reconstructor.ReconstructorBuild.class);
|
||||||
classes.put("RepairPoint", mindustry.world.blocks.units.RepairPoint.class);
|
classes.put("RepairPoint", mindustry.world.blocks.units.RepairPoint.class);
|
||||||
classes.put("RepairPointBuild", mindustry.world.blocks.units.RepairPoint.RepairPointBuild.class);
|
classes.put("RepairPointBuild", mindustry.world.blocks.units.RepairPoint.RepairPointBuild.class);
|
||||||
classes.put("ResupplyPoint", mindustry.world.blocks.units.ResupplyPoint.class);
|
|
||||||
classes.put("ResupplyPointBuild", mindustry.world.blocks.units.ResupplyPoint.ResupplyPointBuild.class);
|
|
||||||
classes.put("UnitBlock", mindustry.world.blocks.units.UnitBlock.class);
|
classes.put("UnitBlock", mindustry.world.blocks.units.UnitBlock.class);
|
||||||
classes.put("UnitBuild", mindustry.world.blocks.units.UnitBlock.UnitBuild.class);
|
classes.put("UnitBuild", mindustry.world.blocks.units.UnitBlock.UnitBuild.class);
|
||||||
classes.put("UnitFactory", mindustry.world.blocks.units.UnitFactory.class);
|
classes.put("UnitFactory", mindustry.world.blocks.units.UnitFactory.class);
|
||||||
|
|||||||
@@ -29,6 +29,7 @@ import mindustry.gen.*;
|
|||||||
import mindustry.graphics.*;
|
import mindustry.graphics.*;
|
||||||
import mindustry.mod.Mods.*;
|
import mindustry.mod.Mods.*;
|
||||||
import mindustry.type.*;
|
import mindustry.type.*;
|
||||||
|
import mindustry.type.ammo.*;
|
||||||
import mindustry.type.weather.*;
|
import mindustry.type.weather.*;
|
||||||
import mindustry.world.*;
|
import mindustry.world.*;
|
||||||
import mindustry.world.blocks.units.*;
|
import mindustry.world.blocks.units.*;
|
||||||
@@ -95,6 +96,19 @@ public class ContentParser{
|
|||||||
readFields(result, data);
|
readFields(result, data);
|
||||||
return result;
|
return result;
|
||||||
});
|
});
|
||||||
|
put(AmmoType.class, (type, data) -> {
|
||||||
|
//string -> item
|
||||||
|
//if liquid ammo support is added, this should scan for liquids as well
|
||||||
|
if(data.isString()) return find(ContentType.item, data.asString());
|
||||||
|
//number -> power
|
||||||
|
if(data.isNumber()) return new PowerAmmoType(data.asFloat());
|
||||||
|
|
||||||
|
var bc = resolve(data.getString("type", ""), ItemAmmoType.class);
|
||||||
|
data.remove("type");
|
||||||
|
AmmoType result = make(bc);
|
||||||
|
readFields(result, data);
|
||||||
|
return result;
|
||||||
|
});
|
||||||
put(DrawBlock.class, (type, data) -> {
|
put(DrawBlock.class, (type, data) -> {
|
||||||
if(data.isString()){
|
if(data.isString()){
|
||||||
//try to instantiate
|
//try to instantiate
|
||||||
@@ -746,7 +760,7 @@ public class ContentParser{
|
|||||||
/** Tries to resolve a class from the class type map. */
|
/** Tries to resolve a class from the class type map. */
|
||||||
<T> Class<T> resolve(String base, Class<T> def){
|
<T> Class<T> resolve(String base, Class<T> def){
|
||||||
//no base class specified
|
//no base class specified
|
||||||
if(base.isEmpty() && def != null) return def;
|
if((base == null || base.isEmpty()) && def != null) return def;
|
||||||
|
|
||||||
//return mapped class if found in the global map
|
//return mapped class if found in the global map
|
||||||
var out = ClassMap.classes.get(!base.isEmpty() && Character.isLowerCase(base.charAt(0)) ? Strings.capitalize(base) : base);
|
var out = ClassMap.classes.get(!base.isEmpty() && Character.isLowerCase(base.charAt(0)) ? Strings.capitalize(base) : base);
|
||||||
|
|||||||
@@ -626,7 +626,7 @@ public class Mods implements Loadable{
|
|||||||
try{
|
try{
|
||||||
//this binds the content but does not load it entirely
|
//this binds the content but does not load it entirely
|
||||||
Content loaded = parser.parse(l.mod, l.file.nameWithoutExtension(), l.file.readString("UTF-8"), l.file, l.type);
|
Content loaded = parser.parse(l.mod, l.file.nameWithoutExtension(), l.file.readString("UTF-8"), l.file, l.type);
|
||||||
Log.debug("[@] Loaded '@'.", l.mod.meta.name, (loaded instanceof UnlockableContent ? ((UnlockableContent)loaded).localizedName : loaded));
|
Log.debug("[@] Loaded '@'.", l.mod.meta.name, (loaded instanceof UnlockableContent u ? u.localizedName : loaded));
|
||||||
}catch(Throwable e){
|
}catch(Throwable e){
|
||||||
if(current != content.getLastAdded() && content.getLastAdded() != null){
|
if(current != content.getLastAdded() && content.getLastAdded() != null){
|
||||||
parser.markError(content.getLastAdded(), l.mod, l.file, e);
|
parser.markError(content.getLastAdded(), l.mod, l.file, e);
|
||||||
|
|||||||
@@ -29,18 +29,17 @@ public class CrashSender{
|
|||||||
report += "Report this at " + Vars.reportIssueURL + "\n\n";
|
report += "Report this at " + Vars.reportIssueURL + "\n\n";
|
||||||
}
|
}
|
||||||
return report
|
return report
|
||||||
+ "Version: " + Version.combined() + (Vars.headless ? " (Server)" : "") + "\n"
|
+ "Version: " + Version.combined() + (Vars.headless ? " (Server)" : "") + "\n"
|
||||||
+ "OS: " + System.getProperty("os.name") + " x" + (OS.is64Bit ? "64" : "32") + "\n"
|
+ "OS: " + OS.osName + " x" + (OS.osArchBits) + " (" + OS.osArch + ")\n"
|
||||||
+ "Java Version: " + System.getProperty("java.version") + "\n"
|
+ "Java Version: " + OS.javaVersion + "\n"
|
||||||
+ "Java Architecture: " + System.getProperty("sun.arch.data.model") + "\n"
|
+ (mods == null ? "<no mod init>" : mods.list().size + " Mods" + (mods.list().isEmpty() ? "" : ": " + mods.list().toString(", ", mod -> mod.name + ":" + mod.meta.version)))
|
||||||
+ (mods == null ? "<no mod init>" : mods.list().size + " Mods" + (mods.list().isEmpty() ? "" : ": " + mods.list().toString(", ", mod -> mod.name + ":" + mod.meta.version)))
|
+ "\n\n" + error;
|
||||||
+ "\n\n" + error;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void log(Throwable exception){
|
public static void log(Throwable exception){
|
||||||
try{
|
try{
|
||||||
Core.settings.getDataDirectory().child("crashes").child("crash_" + System.currentTimeMillis() + ".txt")
|
Core.settings.getDataDirectory().child("crashes").child("crash_" + System.currentTimeMillis() + ".txt")
|
||||||
.writeString(createReport(Strings.neatError(exception)));
|
.writeString(createReport(Strings.neatError(exception)));
|
||||||
}catch(Throwable ignored){
|
}catch(Throwable ignored){
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -60,7 +59,7 @@ public class CrashSender{
|
|||||||
}catch(Throwable ignored){}
|
}catch(Throwable ignored){}
|
||||||
|
|
||||||
//don't create crash logs for custom builds, as it's expected
|
//don't create crash logs for custom builds, as it's expected
|
||||||
if(Version.build == -1 || (System.getProperty("user.name").equals("anuke") && "release".equals(Version.modifier))){
|
if(Version.build == -1 || (OS.username.equals("anuke") && !"steam".equals(Version.modifier))){
|
||||||
ret();
|
ret();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -141,10 +140,10 @@ public class CrashSender{
|
|||||||
ex(() -> value.addChild("server", new JsonValue(fs)));
|
ex(() -> value.addChild("server", new JsonValue(fs)));
|
||||||
ex(() -> value.addChild("players", new JsonValue(Groups.player.size())));
|
ex(() -> value.addChild("players", new JsonValue(Groups.player.size())));
|
||||||
ex(() -> value.addChild("state", new JsonValue(Vars.state.getState().name())));
|
ex(() -> value.addChild("state", new JsonValue(Vars.state.getState().name())));
|
||||||
ex(() -> value.addChild("os", new JsonValue(System.getProperty("os.name") + "x" + (OS.is64Bit ? "64" : "32"))));
|
ex(() -> value.addChild("os", new JsonValue(OS.osName + " x" + OS.osArchBits + " " + OS.osVersion)));
|
||||||
ex(() -> value.addChild("trace", new JsonValue(parseException(exception))));
|
ex(() -> value.addChild("trace", new JsonValue(parseException(exception))));
|
||||||
ex(() -> value.addChild("javaVersion", new JsonValue(System.getProperty("java.version"))));
|
ex(() -> value.addChild("javaVersion", new JsonValue(OS.javaVersion)));
|
||||||
ex(() -> value.addChild("javaArch", new JsonValue(System.getProperty("sun.arch.data.model"))));
|
ex(() -> value.addChild("javaArch", new JsonValue(OS.osArchBits)));
|
||||||
|
|
||||||
Log.info("Sending crash report.");
|
Log.info("Sending crash report.");
|
||||||
|
|
||||||
|
|||||||
@@ -96,7 +96,7 @@ public class Net{
|
|||||||
String type = t.getClass().toString().toLowerCase();
|
String type = t.getClass().toString().toLowerCase();
|
||||||
boolean isError = false;
|
boolean isError = false;
|
||||||
|
|
||||||
if(e instanceof BufferUnderflowException || e instanceof BufferOverflowException){
|
if(e instanceof BufferUnderflowException || e instanceof BufferOverflowException || e.getCause() instanceof EOFException){
|
||||||
error = Core.bundle.get("error.io");
|
error = Core.bundle.get("error.io");
|
||||||
}else if(error.equals("mismatch") || e instanceof LZ4Exception || (e instanceof IndexOutOfBoundsException && e.getStackTrace()[0].getClassName().contains("java.nio"))){
|
}else if(error.equals("mismatch") || e instanceof LZ4Exception || (e instanceof IndexOutOfBoundsException && e.getStackTrace()[0].getClassName().contains("java.nio"))){
|
||||||
error = Core.bundle.get("error.mismatch");
|
error = Core.bundle.get("error.mismatch");
|
||||||
|
|||||||
@@ -1,28 +1,12 @@
|
|||||||
package mindustry.type;
|
package mindustry.type;
|
||||||
|
|
||||||
import arc.graphics.*;
|
import arc.graphics.*;
|
||||||
import mindustry.ctype.*;
|
|
||||||
import mindustry.gen.*;
|
import mindustry.gen.*;
|
||||||
import mindustry.graphics.*;
|
|
||||||
|
|
||||||
/** Type of ammo that a unit uses. */
|
/** Type of ammo that a unit uses. */
|
||||||
public class AmmoType extends Content{
|
public interface AmmoType{
|
||||||
public String icon = Iconc.itemCopper + "";
|
String icon();
|
||||||
public Color color = Pal.ammo;
|
Color color();
|
||||||
public Color barColor = Pal.ammo;
|
Color barColor();
|
||||||
|
void resupply(Unit unit);
|
||||||
public AmmoType(char icon, Color color){
|
|
||||||
this.icon = icon + "";
|
|
||||||
this.color = color;
|
|
||||||
}
|
|
||||||
|
|
||||||
public AmmoType(){
|
|
||||||
}
|
|
||||||
|
|
||||||
public void resupply(Unit unit){}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ContentType getContentType(){
|
|
||||||
return ContentType.ammo;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||