Merge remote-tracking branch 'origin/4.0' into 4.0
# Conflicts: # core/src/io/anuke/mindustry/Vars.java
1
.gitignore
vendored
@@ -2,6 +2,7 @@
|
||||
|
||||
/core/assets/mindustry-saves/
|
||||
/core/assets/mindustry-maps/
|
||||
/core/assets/bundles/output/
|
||||
/deploy/
|
||||
/desktop/packr-out/
|
||||
/desktop/packr-export/
|
||||
|
||||
@@ -5,13 +5,14 @@ jdk:
|
||||
|
||||
android:
|
||||
components:
|
||||
- android-26
|
||||
- android-27
|
||||
|
||||
# Additional components
|
||||
- extra-google-google_play_services
|
||||
- extra-google-m2repository
|
||||
- extra-android-m2repository
|
||||
- addon-google_apis-google-26
|
||||
- addon-google_apis-google-27
|
||||
- build-tools-27.0.3
|
||||
|
||||
script:
|
||||
- ./gradlew desktop:dist
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
<activity
|
||||
android:name="io.anuke.mindustry.AndroidLauncher"
|
||||
android:label="@string/app_name"
|
||||
android:screenOrientation="sensor"
|
||||
android:screenOrientation="user"
|
||||
android:configChanges="keyboard|keyboardHidden|orientation|screenSize">
|
||||
|
||||
<intent-filter>
|
||||
|
||||
@@ -49,237 +49,237 @@ import java.util.Locale;
|
||||
import static io.anuke.mindustry.Vars.*;
|
||||
|
||||
public class AndroidLauncher extends AndroidApplication{
|
||||
public static final int PERMISSION_REQUEST_CODE = 1;
|
||||
public static final int PERMISSION_REQUEST_CODE = 1;
|
||||
|
||||
boolean doubleScaleTablets = true;
|
||||
FileChooser chooser;
|
||||
boolean doubleScaleTablets = true;
|
||||
FileChooser chooser;
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState){
|
||||
super.onCreate(savedInstanceState);
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState){
|
||||
super.onCreate(savedInstanceState);
|
||||
|
||||
AndroidApplicationConfiguration config = new AndroidApplicationConfiguration();
|
||||
config.useImmersiveMode = true;
|
||||
AndroidApplicationConfiguration config = new AndroidApplicationConfiguration();
|
||||
config.useImmersiveMode = true;
|
||||
|
||||
Platform.instance = new Platform(){
|
||||
DateFormat format = SimpleDateFormat.getDateTimeInstance();
|
||||
Platform.instance = new Platform(){
|
||||
DateFormat format = SimpleDateFormat.getDateTimeInstance();
|
||||
|
||||
@Override
|
||||
public boolean hasDiscord() {
|
||||
return isPackageInstalled("com.discord");
|
||||
}
|
||||
@Override
|
||||
public boolean hasDiscord(){
|
||||
return isPackageInstalled("com.discord");
|
||||
}
|
||||
|
||||
@Override
|
||||
public String format(Date date){
|
||||
return format.format(date);
|
||||
}
|
||||
@Override
|
||||
public String format(Date date){
|
||||
return format.format(date);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String format(int number){
|
||||
return NumberFormat.getIntegerInstance().format(number);
|
||||
}
|
||||
@Override
|
||||
public String format(int number){
|
||||
return NumberFormat.getIntegerInstance().format(number);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addDialog(TextField field, int length){
|
||||
TextFieldDialogListener.add(field, 0, length);
|
||||
}
|
||||
@Override
|
||||
public void addDialog(TextField field, int length){
|
||||
TextFieldDialogListener.add(field, 0, length);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getLocaleName(Locale locale){
|
||||
return locale.getDisplayName(locale);
|
||||
}
|
||||
@Override
|
||||
public String getLocaleName(Locale locale){
|
||||
return locale.getDisplayName(locale);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void openDonations() {
|
||||
showDonations();
|
||||
}
|
||||
@Override
|
||||
public void openDonations(){
|
||||
showDonations();
|
||||
}
|
||||
|
||||
@Override
|
||||
public ThreadProvider getThreadProvider() {
|
||||
return new DefaultThreadImpl();
|
||||
}
|
||||
@Override
|
||||
public ThreadProvider getThreadProvider(){
|
||||
return new DefaultThreadImpl();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isDebug() {
|
||||
return false;
|
||||
}
|
||||
@Override
|
||||
public boolean isDebug(){
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getUUID() {
|
||||
try {
|
||||
String s = Secure.getString(getContext().getContentResolver(),
|
||||
Secure.ANDROID_ID);
|
||||
@Override
|
||||
public String getUUID(){
|
||||
try{
|
||||
String s = Secure.getString(getContext().getContentResolver(),
|
||||
Secure.ANDROID_ID);
|
||||
|
||||
int len = s.length();
|
||||
byte[] data = new byte[len / 2];
|
||||
for (int i = 0; i < len; i += 2) {
|
||||
data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4)
|
||||
+ Character.digit(s.charAt(i + 1), 16));
|
||||
}
|
||||
int len = s.length();
|
||||
byte[] data = new byte[len / 2];
|
||||
for(int i = 0; i < len; i += 2){
|
||||
data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4)
|
||||
+ Character.digit(s.charAt(i + 1), 16));
|
||||
}
|
||||
|
||||
String result = new String(Base64Coder.encode(data));
|
||||
String result = new String(Base64Coder.encode(data));
|
||||
|
||||
if(result.equals("AAAAAAAAAOA=")) throw new RuntimeException("Bad UUID.");
|
||||
if(result.equals("AAAAAAAAAOA=")) throw new RuntimeException("Bad UUID.");
|
||||
|
||||
return result;
|
||||
}catch (Exception e){
|
||||
return super.getUUID();
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}catch(Exception e){
|
||||
return super.getUUID();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void shareFile(FileHandle file){
|
||||
@Override
|
||||
public void shareFile(FileHandle file){
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void showFileChooser(String text, String content, Consumer<FileHandle> cons, boolean open, String filetype) {
|
||||
chooser = new FileChooser(text, file -> file.extension().equalsIgnoreCase(filetype), open, cons);
|
||||
@Override
|
||||
public void showFileChooser(String text, String content, Consumer<FileHandle> cons, boolean open, String filetype){
|
||||
chooser = new FileChooser(text, file -> file.extension().equalsIgnoreCase(filetype), open, cons);
|
||||
|
||||
if(Build.VERSION.SDK_INT < Build.VERSION_CODES.M || (checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED &&
|
||||
checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED)){
|
||||
chooser.show();
|
||||
chooser = null;
|
||||
}else {
|
||||
ArrayList<String> perms = new ArrayList<>();
|
||||
if(Build.VERSION.SDK_INT < Build.VERSION_CODES.M || (checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED &&
|
||||
checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED)){
|
||||
chooser.show();
|
||||
chooser = null;
|
||||
}else{
|
||||
ArrayList<String> perms = new ArrayList<>();
|
||||
|
||||
if (checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
|
||||
perms.add(Manifest.permission.WRITE_EXTERNAL_STORAGE);
|
||||
}
|
||||
if(checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED){
|
||||
perms.add(Manifest.permission.WRITE_EXTERNAL_STORAGE);
|
||||
}
|
||||
|
||||
if (checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
|
||||
perms.add(Manifest.permission.READ_EXTERNAL_STORAGE);
|
||||
}
|
||||
if(checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED){
|
||||
perms.add(Manifest.permission.READ_EXTERNAL_STORAGE);
|
||||
}
|
||||
|
||||
requestPermissions(perms.toArray(new String[perms.size()]), PERMISSION_REQUEST_CODE);
|
||||
}
|
||||
}
|
||||
requestPermissions(perms.toArray(new String[perms.size()]), PERMISSION_REQUEST_CODE);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void beginForceLandscape() {
|
||||
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
|
||||
}
|
||||
@Override
|
||||
public void beginForceLandscape(){
|
||||
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void endForceLandscape() {
|
||||
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
|
||||
}
|
||||
@Override
|
||||
public void endForceLandscape(){
|
||||
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canDonate(){
|
||||
return true;
|
||||
}
|
||||
};
|
||||
@Override
|
||||
public boolean canDonate(){
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
try {
|
||||
ProviderInstaller.installIfNeeded(this);
|
||||
} catch (GooglePlayServicesRepairableException e) {
|
||||
GoogleApiAvailability apiAvailability = GoogleApiAvailability.getInstance();
|
||||
apiAvailability.getErrorDialog(this, e.getConnectionStatusCode(), 0).show();
|
||||
} catch (GooglePlayServicesNotAvailableException e) {
|
||||
Log.e("SecurityException", "Google Play Services not available.");
|
||||
}
|
||||
try{
|
||||
ProviderInstaller.installIfNeeded(this);
|
||||
}catch(GooglePlayServicesRepairableException e){
|
||||
GoogleApiAvailability apiAvailability = GoogleApiAvailability.getInstance();
|
||||
apiAvailability.getErrorDialog(this, e.getConnectionStatusCode(), 0).show();
|
||||
}catch(GooglePlayServicesNotAvailableException e){
|
||||
Log.e("SecurityException", "Google Play Services not available.");
|
||||
}
|
||||
|
||||
if(doubleScaleTablets && isTablet(this.getContext())){
|
||||
Unit.dp.addition = 0.5f;
|
||||
}
|
||||
|
||||
config.hideStatusBar = true;
|
||||
if(doubleScaleTablets && isTablet(this.getContext())){
|
||||
Unit.dp.addition = 0.5f;
|
||||
}
|
||||
|
||||
config.hideStatusBar = true;
|
||||
|
||||
Net.setClientProvider(new KryoClient());
|
||||
Net.setServerProvider(new KryoServer());
|
||||
|
||||
initialize(new Mindustry(), config);
|
||||
|
||||
checkFiles(getIntent());
|
||||
}
|
||||
checkFiles(getIntent());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
|
||||
if(requestCode == PERMISSION_REQUEST_CODE){
|
||||
for(int i : grantResults){
|
||||
if(i != PackageManager.PERMISSION_GRANTED) return;
|
||||
}
|
||||
@Override
|
||||
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults){
|
||||
if(requestCode == PERMISSION_REQUEST_CODE){
|
||||
for(int i : grantResults){
|
||||
if(i != PackageManager.PERMISSION_GRANTED) return;
|
||||
}
|
||||
|
||||
if(chooser != null){
|
||||
chooser.show();
|
||||
}
|
||||
}
|
||||
}
|
||||
if(chooser != null){
|
||||
chooser.show();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void checkFiles(Intent intent){
|
||||
try {
|
||||
Uri uri = intent.getData();
|
||||
if (uri != null) {
|
||||
File myFile = null;
|
||||
String scheme = uri.getScheme();
|
||||
if (scheme.equals("file")) {
|
||||
String fileName = uri.getEncodedPath();
|
||||
myFile = new File(fileName);
|
||||
} else if (!scheme.equals("content")) {
|
||||
//error
|
||||
return;
|
||||
}
|
||||
private void checkFiles(Intent intent){
|
||||
try{
|
||||
Uri uri = intent.getData();
|
||||
if(uri != null){
|
||||
File myFile = null;
|
||||
String scheme = uri.getScheme();
|
||||
if(scheme.equals("file")){
|
||||
String fileName = uri.getEncodedPath();
|
||||
myFile = new File(fileName);
|
||||
}else if(!scheme.equals("content")){
|
||||
//error
|
||||
return;
|
||||
}
|
||||
|
||||
boolean save = uri.getPath().endsWith(saveExtension);
|
||||
boolean map = uri.getPath().endsWith(mapExtension);
|
||||
boolean save = uri.getPath().endsWith(saveExtension);
|
||||
boolean map = uri.getPath().endsWith(mapExtension);
|
||||
|
||||
InputStream inStream;
|
||||
if (myFile != null) inStream = new FileInputStream(myFile);
|
||||
else inStream = getContentResolver().openInputStream(uri);
|
||||
InputStream inStream;
|
||||
if(myFile != null) inStream = new FileInputStream(myFile);
|
||||
else inStream = getContentResolver().openInputStream(uri);
|
||||
|
||||
Gdx.app.postRunnable(() -> {
|
||||
Gdx.app.postRunnable(() -> {
|
||||
|
||||
if(save){ //open save
|
||||
System.out.println("Opening save.");
|
||||
FileHandle file = Gdx.files.local("temp-save." + saveExtension);
|
||||
file.write(inStream, false);
|
||||
if(save){ //open save
|
||||
System.out.println("Opening save.");
|
||||
FileHandle file = Gdx.files.local("temp-save." + saveExtension);
|
||||
file.write(inStream, false);
|
||||
|
||||
if(SaveIO.isSaveValid(file)){
|
||||
try{
|
||||
SaveSlot slot = control.getSaves().importSave(file);
|
||||
ui.load.runLoadSave(slot);
|
||||
}catch (IOException e){
|
||||
ui.showError(Bundles.format("text.save.import.fail", Strings.parseException(e, false)));
|
||||
}
|
||||
}else{
|
||||
ui.showError("$text.save.import.invalid");
|
||||
}
|
||||
if(SaveIO.isSaveValid(file)){
|
||||
try{
|
||||
SaveSlot slot = control.getSaves().importSave(file);
|
||||
ui.load.runLoadSave(slot);
|
||||
}catch(IOException e){
|
||||
ui.showError(Bundles.format("text.save.import.fail", Strings.parseException(e, false)));
|
||||
}
|
||||
}else{
|
||||
ui.showError("$text.save.import.invalid");
|
||||
}
|
||||
|
||||
}else if(map){ //open map
|
||||
Gdx.app.postRunnable(() -> {
|
||||
System.out.println("Opening map.");
|
||||
if (!ui.editor.isShown()) {
|
||||
ui.editor.show();
|
||||
}
|
||||
}else if(map){ //open map
|
||||
Gdx.app.postRunnable(() -> {
|
||||
System.out.println("Opening map.");
|
||||
if(!ui.editor.isShown()){
|
||||
ui.editor.show();
|
||||
}
|
||||
|
||||
ui.editor.beginEditMap(inStream);
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
ui.editor.beginEditMap(inStream);
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
}catch (IOException e){
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
private boolean isPackageInstalled(String packagename) {
|
||||
try {
|
||||
getPackageManager().getPackageInfo(packagename, 0);
|
||||
return true;
|
||||
} catch (Exception e) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
private boolean isTablet(Context context) {
|
||||
TelephonyManager manager = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE);
|
||||
return manager.getPhoneType() == TelephonyManager.PHONE_TYPE_NONE;
|
||||
}
|
||||
|
||||
private void showDonations(){
|
||||
Intent intent = new Intent(this, DonationsActivity.class);
|
||||
startActivity(intent);
|
||||
}
|
||||
}catch(IOException e){
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
private boolean isPackageInstalled(String packagename){
|
||||
try{
|
||||
getPackageManager().getPackageInfo(packagename, 0);
|
||||
return true;
|
||||
}catch(Exception e){
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
private boolean isTablet(Context context){
|
||||
TelephonyManager manager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
|
||||
return manager.getPhoneType() == TelephonyManager.PHONE_TYPE_NONE;
|
||||
}
|
||||
|
||||
private void showDonations(){
|
||||
Intent intent = new Intent(this, DonationsActivity.class);
|
||||
startActivity(intent);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,20 +11,20 @@ import android.widget.EditText;
|
||||
import com.badlogic.gdx.Gdx;
|
||||
|
||||
public class AndroidTextFieldDialog{
|
||||
private Activity activity;
|
||||
private EditText userInput;
|
||||
private AlertDialog.Builder builder;
|
||||
private TextPromptListener listener;
|
||||
private boolean isBuild;
|
||||
private Activity activity;
|
||||
private EditText userInput;
|
||||
private AlertDialog.Builder builder;
|
||||
private TextPromptListener listener;
|
||||
private boolean isBuild;
|
||||
|
||||
public AndroidTextFieldDialog() {
|
||||
this.activity = (Activity)Gdx.app;
|
||||
load();
|
||||
}
|
||||
public AndroidTextFieldDialog(){
|
||||
this.activity = (Activity) Gdx.app;
|
||||
load();
|
||||
}
|
||||
|
||||
public AndroidTextFieldDialog show() {
|
||||
public AndroidTextFieldDialog show(){
|
||||
|
||||
activity.runOnUiThread(() -> {
|
||||
activity.runOnUiThread(() -> {
|
||||
AlertDialog dialog = builder.create();
|
||||
|
||||
dialog.getWindow().setSoftInputMode(LayoutParams.SOFT_INPUT_STATE_VISIBLE);
|
||||
@@ -33,12 +33,12 @@ public class AndroidTextFieldDialog{
|
||||
|
||||
});
|
||||
|
||||
return this;
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
private AndroidTextFieldDialog load() {
|
||||
private AndroidTextFieldDialog load(){
|
||||
|
||||
activity.runOnUiThread(() -> {
|
||||
activity.runOnUiThread(() -> {
|
||||
|
||||
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(activity);
|
||||
LayoutInflater li = LayoutInflater.from(activity);
|
||||
@@ -55,64 +55,65 @@ public class AndroidTextFieldDialog{
|
||||
isBuild = true;
|
||||
});
|
||||
|
||||
// Wait till TextPrompt is built.
|
||||
while (!isBuild) {
|
||||
try {
|
||||
Thread.sleep(10);
|
||||
} catch (InterruptedException e) { }
|
||||
}
|
||||
// Wait till TextPrompt is built.
|
||||
while(!isBuild){
|
||||
try{
|
||||
Thread.sleep(10);
|
||||
}catch(InterruptedException e){
|
||||
}
|
||||
}
|
||||
|
||||
return this;
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
public int getResourceId(String pVariableName, String pVariableType) {
|
||||
try {
|
||||
return activity.getResources().getIdentifier(pVariableName, pVariableType, activity.getPackageName());
|
||||
} catch (Exception e) {
|
||||
Gdx.app.error("Android Dialogs", "Cannot find resouce with name: " + pVariableName
|
||||
+ " Did you copy the layouts to /res/layouts and /res/layouts_v14 ?");
|
||||
e.printStackTrace();
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
public int getResourceId(String pVariableName, String pVariableType){
|
||||
try{
|
||||
return activity.getResources().getIdentifier(pVariableName, pVariableType, activity.getPackageName());
|
||||
}catch(Exception e){
|
||||
Gdx.app.error("Android Dialogs", "Cannot find resouce with name: " + pVariableName
|
||||
+ " Did you copy the layouts to /res/layouts and /res/layouts_v14 ?");
|
||||
e.printStackTrace();
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
public AndroidTextFieldDialog setText(CharSequence value) {
|
||||
userInput.append(value);
|
||||
return this;
|
||||
}
|
||||
public AndroidTextFieldDialog setText(CharSequence value){
|
||||
userInput.append(value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public AndroidTextFieldDialog setCancelButtonLabel(CharSequence label) {
|
||||
builder.setNegativeButton(label, (dialog, id) -> dialog.cancel());
|
||||
return this;
|
||||
}
|
||||
public AndroidTextFieldDialog setCancelButtonLabel(CharSequence label){
|
||||
builder.setNegativeButton(label, (dialog, id) -> dialog.cancel());
|
||||
return this;
|
||||
}
|
||||
|
||||
public AndroidTextFieldDialog setConfirmButtonLabel(CharSequence label) {
|
||||
builder.setPositiveButton(label, (dialog, id) -> {
|
||||
if (listener != null && !userInput.getText().toString().isEmpty()) {
|
||||
public AndroidTextFieldDialog setConfirmButtonLabel(CharSequence label){
|
||||
builder.setPositiveButton(label, (dialog, id) -> {
|
||||
if(listener != null && !userInput.getText().toString().isEmpty()){
|
||||
listener.confirm(userInput.getText().toString());
|
||||
}
|
||||
|
||||
});
|
||||
return this;
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
public AndroidTextFieldDialog setTextPromptListener(TextPromptListener listener) {
|
||||
this.listener = listener;
|
||||
return this;
|
||||
}
|
||||
public AndroidTextFieldDialog setTextPromptListener(TextPromptListener listener){
|
||||
this.listener = listener;
|
||||
return this;
|
||||
}
|
||||
|
||||
public AndroidTextFieldDialog setInputType(int type) {
|
||||
userInput.setInputType(type);
|
||||
return this;
|
||||
}
|
||||
public AndroidTextFieldDialog setInputType(int type){
|
||||
userInput.setInputType(type);
|
||||
return this;
|
||||
}
|
||||
|
||||
public AndroidTextFieldDialog setMaxLength(int length) {
|
||||
userInput.setFilters(new InputFilter[] { new InputFilter.LengthFilter(length) });
|
||||
return this;
|
||||
}
|
||||
|
||||
public interface TextPromptListener{
|
||||
void confirm(String text);
|
||||
}
|
||||
public AndroidTextFieldDialog setMaxLength(int length){
|
||||
userInput.setFilters(new InputFilter[]{new InputFilter.LengthFilter(length)});
|
||||
return this;
|
||||
}
|
||||
|
||||
public interface TextPromptListener{
|
||||
void confirm(String text);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -8,12 +8,9 @@ import android.support.v4.app.FragmentManager;
|
||||
import android.support.v4.app.FragmentTransaction;
|
||||
import android.view.View;
|
||||
import android.widget.Button;
|
||||
|
||||
import org.sufficientlysecure.donations.DonationsFragment;
|
||||
|
||||
public class DonationsActivity extends FragmentActivity {
|
||||
DonationsFragment donationsFragment;
|
||||
|
||||
public class DonationsActivity extends FragmentActivity{
|
||||
/**
|
||||
* Google
|
||||
*/
|
||||
@@ -21,13 +18,14 @@ public class DonationsActivity extends FragmentActivity {
|
||||
private static final String[] GOOGLE_CATALOG = new String[]{
|
||||
"mindustry.donation.1", "mindustry.donation.2", "mindustry.donation.5",
|
||||
"mindustry.donation.10", "mindustry.donation.15",
|
||||
"mindustry.donation.25", "mindustry.donation.50" };
|
||||
"mindustry.donation.25", "mindustry.donation.50"};
|
||||
DonationsFragment donationsFragment;
|
||||
|
||||
/**
|
||||
* Called when the activity is first created.
|
||||
*/
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
public void onCreate(Bundle savedInstanceState){
|
||||
super.onCreate(savedInstanceState);
|
||||
|
||||
setTheme(R.style.GdxTheme);
|
||||
@@ -35,7 +33,7 @@ public class DonationsActivity extends FragmentActivity {
|
||||
setContentView(R.layout.donations_activity);
|
||||
|
||||
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
|
||||
if (BuildConfig.DONATIONS_GOOGLE) {
|
||||
if(BuildConfig.DONATIONS_GOOGLE){
|
||||
donationsFragment = DonationsFragment.newInstance(BuildConfig.DEBUG, true, GOOGLE_PUBKEY, GOOGLE_CATALOG,
|
||||
getResources().getStringArray(R.array.donation_google_catalog_values), false, null, null,
|
||||
null, false, null, null, false, null);
|
||||
@@ -48,9 +46,10 @@ public class DonationsActivity extends FragmentActivity {
|
||||
|
||||
public void onStart(){
|
||||
super.onStart();
|
||||
Button b = ((Button)findViewById(org.sufficientlysecure.donations.R.id.donations__google_android_market_donate_button));
|
||||
b.setOnClickListener(new View.OnClickListener() {
|
||||
@Override public void onClick(View view) {
|
||||
Button b = ((Button) findViewById(org.sufficientlysecure.donations.R.id.donations__google_android_market_donate_button));
|
||||
b.setOnClickListener(new View.OnClickListener(){
|
||||
@Override
|
||||
public void onClick(View view){
|
||||
donationsFragment.donateGoogleOnClick(donationsFragment.getView());
|
||||
b.setEnabled(false);
|
||||
}
|
||||
@@ -58,20 +57,19 @@ public class DonationsActivity extends FragmentActivity {
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Needed for Google Play In-app Billing. It uses startIntentSenderForResult(). The result is not propagated to
|
||||
* the Fragment like in startActivityForResult(). Thus we need to propagate manually to our Fragment.
|
||||
*/
|
||||
@Override
|
||||
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
|
||||
protected void onActivityResult(int requestCode, int resultCode, Intent data){
|
||||
super.onActivityResult(requestCode, resultCode, data);
|
||||
Button b = ((Button)findViewById(org.sufficientlysecure.donations.R.id.donations__google_android_market_donate_button));
|
||||
Button b = ((Button) findViewById(org.sufficientlysecure.donations.R.id.donations__google_android_market_donate_button));
|
||||
b.setEnabled(true);
|
||||
|
||||
FragmentManager fragmentManager = getSupportFragmentManager();
|
||||
Fragment fragment = fragmentManager.findFragmentByTag("donationsFragment");
|
||||
if (fragment != null) {
|
||||
if(fragment != null){
|
||||
fragment.onActivityResult(requestCode, resultCode, data);
|
||||
//TODO donation event, set settings?
|
||||
}
|
||||
|
||||
@@ -11,57 +11,57 @@ import io.anuke.ucore.scene.event.InputListener;
|
||||
import io.anuke.ucore.scene.ui.TextField;
|
||||
|
||||
public class TextFieldDialogListener extends ClickListener{
|
||||
private TextField field;
|
||||
private int type;
|
||||
private int max;
|
||||
private TextField field;
|
||||
private int type;
|
||||
private int max;
|
||||
|
||||
public static void add(TextField field, int type, int max){
|
||||
field.addListener(new TextFieldDialogListener(field, type, max));
|
||||
field.addListener(new InputListener(){
|
||||
public boolean touchDown (InputEvent event, float x, float y, int pointer, int button) {
|
||||
Gdx.input.setOnscreenKeyboardVisible(false);
|
||||
return false;
|
||||
}
|
||||
});
|
||||
}
|
||||
//type - 0 is text, 1 is numbers, 2 is decimals
|
||||
public TextFieldDialogListener(TextField field, int type, int max){
|
||||
this.field = field;
|
||||
this.type = type;
|
||||
this.max = max;
|
||||
}
|
||||
|
||||
public static void add(TextField field){
|
||||
add(field, 0, 16);
|
||||
}
|
||||
public static void add(TextField field, int type, int max){
|
||||
field.addListener(new TextFieldDialogListener(field, type, max));
|
||||
field.addListener(new InputListener(){
|
||||
public boolean touchDown(InputEvent event, float x, float y, int pointer, int button){
|
||||
Gdx.input.setOnscreenKeyboardVisible(false);
|
||||
return false;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
//type - 0 is text, 1 is numbers, 2 is decimals
|
||||
public TextFieldDialogListener(TextField field, int type, int max){
|
||||
this.field = field;
|
||||
this.type = type;
|
||||
this.max = max;
|
||||
}
|
||||
public static void add(TextField field){
|
||||
add(field, 0, 16);
|
||||
}
|
||||
|
||||
public void clicked(final InputEvent event, float x, float y){
|
||||
|
||||
if(Gdx.app.getType() == ApplicationType.Desktop) return;
|
||||
|
||||
AndroidTextFieldDialog dialog = new AndroidTextFieldDialog();
|
||||
public void clicked(final InputEvent event, float x, float y){
|
||||
|
||||
dialog.setTextPromptListener(text -> {
|
||||
if(Gdx.app.getType() == ApplicationType.Desktop) return;
|
||||
|
||||
AndroidTextFieldDialog dialog = new AndroidTextFieldDialog();
|
||||
|
||||
dialog.setTextPromptListener(text -> {
|
||||
field.clearText();
|
||||
field.appendText(text);
|
||||
field.fire(new ChangeListener.ChangeEvent());
|
||||
Gdx.graphics.requestRendering();
|
||||
});
|
||||
|
||||
if(type == 0){
|
||||
dialog.setInputType(InputType.TYPE_CLASS_TEXT);
|
||||
}else if(type == 1){
|
||||
dialog.setInputType(InputType.TYPE_CLASS_NUMBER);
|
||||
}else if(type == 2){
|
||||
dialog.setInputType(InputType.TYPE_NUMBER_FLAG_DECIMAL);
|
||||
}
|
||||
if(type == 0){
|
||||
dialog.setInputType(InputType.TYPE_CLASS_TEXT);
|
||||
}else if(type == 1){
|
||||
dialog.setInputType(InputType.TYPE_CLASS_NUMBER);
|
||||
}else if(type == 2){
|
||||
dialog.setInputType(InputType.TYPE_NUMBER_FLAG_DECIMAL);
|
||||
}
|
||||
|
||||
dialog.setConfirmButtonLabel("OK").setText(field.getText());
|
||||
dialog.setCancelButtonLabel("Cancel");
|
||||
dialog.setMaxLength(max);
|
||||
dialog.show();
|
||||
event.cancel();
|
||||
dialog.setConfirmButtonLabel("OK").setText(field.getText());
|
||||
dialog.setCancelButtonLabel("Cancel");
|
||||
dialog.setMaxLength(max);
|
||||
dialog.show();
|
||||
event.cancel();
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,70 +9,31 @@ import java.lang.annotation.Target;
|
||||
* Goal: To create a system to send events to the server from the client and vice versa, without creating a new packet type each time.<br>
|
||||
* These events may optionally also trigger on the caller client/server as well.<br>
|
||||
*/
|
||||
public class Annotations {
|
||||
public class Annotations{
|
||||
|
||||
/**Marks a method as invokable remotely across a server/client connection.*/
|
||||
@Target(ElementType.METHOD)
|
||||
@Retention(RetentionPolicy.CLASS)
|
||||
public @interface Remote {
|
||||
/**Specifies the locations from which this method can be invoked.*/
|
||||
Loc targets() default Loc.server;
|
||||
/**Specifies which methods are generated. Only affects server-to-client methods.*/
|
||||
Variant variants() default Variant.all;
|
||||
/**The local locations where this method is called locally, when invoked.*/
|
||||
Loc called() default Loc.none;
|
||||
/**Whether to forward this packet to all other clients upon recieval. Server only.*/
|
||||
boolean forward() default false;
|
||||
/**Whether the packet for this method is sent with UDP instead of TCP.
|
||||
* UDP is faster, but is prone to packet loss and duplication.*/
|
||||
boolean unreliable() default false;
|
||||
/**The simple class name where this method is placed.*/
|
||||
String in() default "Call";
|
||||
/**Priority of this event.*/
|
||||
PacketPriority priority() default PacketPriority.normal;
|
||||
}
|
||||
|
||||
/**Specifies that this method will be used to write classes of the type returned by {@link #value()}.<br>
|
||||
* This method must return void and have two parameters, the first being of type {@link java.nio.ByteBuffer} and the second
|
||||
* being the type returned by {@link #value()}.*/
|
||||
@Target(ElementType.METHOD)
|
||||
@Retention(RetentionPolicy.CLASS)
|
||||
public @interface WriteClass {
|
||||
Class<?> value();
|
||||
}
|
||||
|
||||
/**Specifies that this method will be used to read classes of the type returned by {@link #value()}. <br>
|
||||
* This method must return the type returned by {@link #value()},
|
||||
* and have one parameter, being of type {@link java.nio.ByteBuffer}.*/
|
||||
@Target(ElementType.METHOD)
|
||||
@Retention(RetentionPolicy.CLASS)
|
||||
public @interface ReadClass {
|
||||
Class<?> value();
|
||||
}
|
||||
|
||||
public enum PacketPriority {
|
||||
/**Gets put in a queue and processed if not connected.*/
|
||||
public enum PacketPriority{
|
||||
/** Gets put in a queue and processed if not connected. */
|
||||
normal,
|
||||
/**Gets handled immediately, regardless of connection status.*/
|
||||
/** Gets handled immediately, regardless of connection status. */
|
||||
high,
|
||||
/**Does not get handled unless client is connected.*/
|
||||
/** Does not get handled unless client is connected. */
|
||||
low
|
||||
}
|
||||
|
||||
/**A set of two booleans, one specifying server and one specifying client.*/
|
||||
public enum Loc {
|
||||
/**Method can only be invoked on the client from the server.*/
|
||||
/** A set of two booleans, one specifying server and one specifying client. */
|
||||
public enum Loc{
|
||||
/** Method can only be invoked on the client from the server. */
|
||||
server(true, false),
|
||||
/**Method can only be invoked on the server from the client.*/
|
||||
/** Method can only be invoked on the server from the client. */
|
||||
client(false, true),
|
||||
/**Method can be invoked from anywhere*/
|
||||
/** Method can be invoked from anywhere */
|
||||
both(true, true),
|
||||
/**Neither server no client.*/
|
||||
/** Neither server nor client. */
|
||||
none(false, false);
|
||||
|
||||
/**If true, this method can be invoked ON clients FROM servers.*/
|
||||
/** If true, this method can be invoked ON clients FROM servers. */
|
||||
public final boolean isServer;
|
||||
/**If true, this method can be invoked ON servers FROM clients.*/
|
||||
/** If true, this method can be invoked ON servers FROM clients. */
|
||||
public final boolean isClient;
|
||||
|
||||
Loc(boolean server, boolean client){
|
||||
@@ -81,12 +42,12 @@ public class Annotations {
|
||||
}
|
||||
}
|
||||
|
||||
public enum Variant {
|
||||
/**Method can only be invoked targeting one player.*/
|
||||
public enum Variant{
|
||||
/** Method can only be invoked targeting one player. */
|
||||
one(true, false),
|
||||
/**Method can only be invoked targeting all players.*/
|
||||
/** Method can only be invoked targeting all players. */
|
||||
all(false, true),
|
||||
/**Method targets both one player and all players.*/
|
||||
/** Method targets both one player and all players. */
|
||||
both(true, true);
|
||||
|
||||
public final boolean isOne, isAll;
|
||||
@@ -96,4 +57,55 @@ public class Annotations {
|
||||
this.isAll = isAll;
|
||||
}
|
||||
}
|
||||
|
||||
/** Marks a method as invokable remotely across a server/client connection. */
|
||||
@Target(ElementType.METHOD)
|
||||
@Retention(RetentionPolicy.CLASS)
|
||||
public @interface Remote{
|
||||
/** Specifies the locations from which this method can be invoked. */
|
||||
Loc targets() default Loc.server;
|
||||
|
||||
/** Specifies which methods are generated. Only affects server-to-client methods. */
|
||||
Variant variants() default Variant.all;
|
||||
|
||||
/** The local locations where this method is called locally, when invoked. */
|
||||
Loc called() default Loc.none;
|
||||
|
||||
/** Whether to forward this packet to all other clients upon recieval. Client only. */
|
||||
boolean forward() default false;
|
||||
|
||||
/**
|
||||
* Whether the packet for this method is sent with UDP instead of TCP.
|
||||
* UDP is faster, but is prone to packet loss and duplication.
|
||||
*/
|
||||
boolean unreliable() default false;
|
||||
|
||||
/** The simple class name where this method is placed. */
|
||||
String in() default "Call";
|
||||
|
||||
/** Priority of this event. */
|
||||
PacketPriority priority() default PacketPriority.normal;
|
||||
}
|
||||
|
||||
/**
|
||||
* Specifies that this method will be used to write classes of the type returned by {@link #value()}.<br>
|
||||
* This method must return void and have two parameters, the first being of type {@link java.nio.ByteBuffer} and the second
|
||||
* being the type returned by {@link #value()}.
|
||||
*/
|
||||
@Target(ElementType.METHOD)
|
||||
@Retention(RetentionPolicy.CLASS)
|
||||
public @interface WriteClass{
|
||||
Class<?> value();
|
||||
}
|
||||
|
||||
/**
|
||||
* Specifies that this method will be used to read classes of the type returned by {@link #value()}. <br>
|
||||
* This method must return the type returned by {@link #value()},
|
||||
* and have one parameter, being of type {@link java.nio.ByteBuffer}.
|
||||
*/
|
||||
@Target(ElementType.METHOD)
|
||||
@Retention(RetentionPolicy.CLASS)
|
||||
public @interface ReadClass{
|
||||
Class<?> value();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,14 +2,14 @@ package io.anuke.annotations;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
/**Represents a class witha list method entries to include in it.*/
|
||||
public class ClassEntry {
|
||||
/**All methods in this generated class.*/
|
||||
/** Represents a class witha list method entries to include in it. */
|
||||
public class ClassEntry{
|
||||
/** All methods in this generated class. */
|
||||
public final ArrayList<MethodEntry> methods = new ArrayList<>();
|
||||
/**Simple class name.*/
|
||||
/** Simple class name. */
|
||||
public final String name;
|
||||
|
||||
public ClassEntry(String name) {
|
||||
public ClassEntry(String name){
|
||||
this.name = name;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,12 +10,16 @@ import javax.tools.Diagnostic.Kind;
|
||||
import java.util.HashMap;
|
||||
import java.util.Set;
|
||||
|
||||
/**This class finds reader and writer methods annotated by the {@link io.anuke.annotations.Annotations.WriteClass}
|
||||
* and {@link io.anuke.annotations.Annotations.ReadClass} annotations.*/
|
||||
public class IOFinder {
|
||||
/**
|
||||
* This class finds reader and writer methods annotated by the {@link io.anuke.annotations.Annotations.WriteClass}
|
||||
* and {@link io.anuke.annotations.Annotations.ReadClass} annotations.
|
||||
*/
|
||||
public class IOFinder{
|
||||
|
||||
/**Finds all class serializers for all types and returns them. Logs errors when necessary.
|
||||
* Maps fully qualified class names to their serializers.*/
|
||||
/**
|
||||
* Finds all class serializers for all types and returns them. Logs errors when necessary.
|
||||
* Maps fully qualified class names to their serializers.
|
||||
*/
|
||||
public HashMap<String, ClassSerializer> findSerializers(RoundEnvironment env){
|
||||
HashMap<String, ClassSerializer> result = new HashMap<>();
|
||||
|
||||
@@ -51,33 +55,33 @@ public class IOFinder {
|
||||
}
|
||||
|
||||
private String getValue(WriteClass write){
|
||||
try {
|
||||
try{
|
||||
Class<?> type = write.value();
|
||||
return type.getName();
|
||||
}catch (MirroredTypeException e){
|
||||
}catch(MirroredTypeException e){
|
||||
return e.getTypeMirror().toString();
|
||||
}
|
||||
}
|
||||
|
||||
private String getValue(ReadClass read){
|
||||
try {
|
||||
try{
|
||||
Class<?> type = read.value();
|
||||
return type.getName();
|
||||
}catch (MirroredTypeException e){
|
||||
}catch(MirroredTypeException e){
|
||||
return e.getTypeMirror().toString();
|
||||
}
|
||||
}
|
||||
|
||||
/**Information about read/write methods for a specific class type.*/
|
||||
/** Information about read/write methods for a specific class type. */
|
||||
public static class ClassSerializer{
|
||||
/**Fully qualified method name of the reader.*/
|
||||
/** Fully qualified method name of the reader. */
|
||||
public final String readMethod;
|
||||
/**Fully qualified method name of the writer.*/
|
||||
/** Fully qualified method name of the writer. */
|
||||
public final String writeMethod;
|
||||
/**Fully qualified class type name.*/
|
||||
/** Fully qualified class type name. */
|
||||
public final String classType;
|
||||
|
||||
public ClassSerializer(String readMethod, String writeMethod, String classType) {
|
||||
public ClassSerializer(String readMethod, String writeMethod, String classType){
|
||||
this.readMethod = readMethod;
|
||||
this.writeMethod = writeMethod;
|
||||
this.classType = classType;
|
||||
|
||||
@@ -6,32 +6,34 @@ import io.anuke.annotations.Annotations.Variant;
|
||||
|
||||
import javax.lang.model.element.ExecutableElement;
|
||||
|
||||
/**Class that repesents a remote method to be constructed and put into a class.*/
|
||||
public class MethodEntry {
|
||||
/**Simple target class name.*/
|
||||
/** Class that repesents a remote method to be constructed and put into a class. */
|
||||
public class MethodEntry{
|
||||
/** Simple target class name. */
|
||||
public final String className;
|
||||
/**Fully qualified target method to call.*/
|
||||
/** Fully qualified target method to call. */
|
||||
public final String targetMethod;
|
||||
/**Whether this method can be called on a client/server.*/
|
||||
/** Whether this method can be called on a client/server. */
|
||||
public final Loc where;
|
||||
/**Whether an additional 'one' and 'all' method variant is generated. At least one of these must be true.
|
||||
* Only applicable to client (server-invoked) methods.*/
|
||||
/**
|
||||
* Whether an additional 'one' and 'all' method variant is generated. At least one of these must be true.
|
||||
* Only applicable to client (server-invoked) methods.
|
||||
*/
|
||||
public final Variant target;
|
||||
/**Whether this method is called locally as well as remotely.*/
|
||||
/** Whether this method is called locally as well as remotely. */
|
||||
public final Loc local;
|
||||
/**Whether this method is unreliable and uses UDP.*/
|
||||
/** Whether this method is unreliable and uses UDP. */
|
||||
public final boolean unreliable;
|
||||
/**Whether to forward this method call to all other clients when a client invokes it. Server only.*/
|
||||
/** Whether to forward this method call to all other clients when a client invokes it. Server only. */
|
||||
public final boolean forward;
|
||||
/**Unique method ID.*/
|
||||
/** Unique method ID. */
|
||||
public final int id;
|
||||
/**The element method associated with this entry.*/
|
||||
/** The element method associated with this entry. */
|
||||
public final ExecutableElement element;
|
||||
/**The assigned packet priority. Only used in clients.*/
|
||||
/** The assigned packet priority. Only used in clients. */
|
||||
public final PacketPriority priority;
|
||||
|
||||
public MethodEntry(String className, String targetMethod, Loc where, Variant target,
|
||||
Loc local, boolean unreliable, boolean forward, int id, ExecutableElement element, PacketPriority priority) {
|
||||
Loc local, boolean unreliable, boolean forward, int id, ExecutableElement element, PacketPriority priority){
|
||||
this.className = className;
|
||||
this.forward = forward;
|
||||
this.targetMethod = targetMethod;
|
||||
@@ -45,7 +47,7 @@ public class MethodEntry {
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
public int hashCode(){
|
||||
return targetMethod.hashCode();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,25 +18,25 @@ import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
|
||||
/**The annotation processor for generating remote method call code.*/
|
||||
/** The annotation processor for generating remote method call code. */
|
||||
@SupportedSourceVersion(SourceVersion.RELEASE_8)
|
||||
@SupportedAnnotationTypes({
|
||||
"io.anuke.annotations.Annotations.Remote",
|
||||
"io.anuke.annotations.Annotations.WriteClass",
|
||||
"io.anuke.annotations.Annotations.ReadClass",
|
||||
"io.anuke.annotations.Annotations.Remote",
|
||||
"io.anuke.annotations.Annotations.WriteClass",
|
||||
"io.anuke.annotations.Annotations.ReadClass",
|
||||
})
|
||||
public class RemoteMethodAnnotationProcessor extends AbstractProcessor {
|
||||
/**Maximum size of each event packet.*/
|
||||
public class RemoteMethodAnnotationProcessor extends AbstractProcessor{
|
||||
/** Maximum size of each event packet. */
|
||||
public static final int maxPacketSize = 4096;
|
||||
/**Name of the base package to put all the generated classes.*/
|
||||
/** Name of the base package to put all the generated classes. */
|
||||
private static final String packageName = "io.anuke.mindustry.gen";
|
||||
|
||||
/**Name of class that handles reading and invoking packets on the server.*/
|
||||
/** Name of class that handles reading and invoking packets on the server. */
|
||||
private static final String readServerName = "RemoteReadServer";
|
||||
/**Name of class that handles reading and invoking packets on the client.*/
|
||||
/** Name of class that handles reading and invoking packets on the client. */
|
||||
private static final String readClientName = "RemoteReadClient";
|
||||
|
||||
/**Processing round number.*/
|
||||
/** Processing round number. */
|
||||
private int round;
|
||||
|
||||
//class serializers
|
||||
@@ -51,7 +51,7 @@ public class RemoteMethodAnnotationProcessor extends AbstractProcessor {
|
||||
private ArrayList<ClassEntry> classes;
|
||||
|
||||
@Override
|
||||
public synchronized void init(ProcessingEnvironment processingEnv) {
|
||||
public synchronized void init(ProcessingEnvironment processingEnv){
|
||||
super.init(processingEnv);
|
||||
//put all relevant utils into utils class
|
||||
Utils.typeUtils = processingEnv.getTypeUtils();
|
||||
@@ -61,15 +61,15 @@ public class RemoteMethodAnnotationProcessor extends AbstractProcessor {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
|
||||
public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv){
|
||||
if(round > 1) return false; //only process 2 rounds
|
||||
|
||||
round ++;
|
||||
round++;
|
||||
|
||||
try {
|
||||
try{
|
||||
|
||||
//round 1: find all annotations, generate *writers*
|
||||
if(round == 1) {
|
||||
if(round == 1){
|
||||
//get serializers
|
||||
serializers = new IOFinder().findSerializers(roundEnv);
|
||||
|
||||
@@ -88,21 +88,21 @@ public class RemoteMethodAnnotationProcessor extends AbstractProcessor {
|
||||
orderedElements.sort(Comparator.comparing(Object::toString));
|
||||
|
||||
//create methods
|
||||
for (Element element : orderedElements) {
|
||||
for(Element element : orderedElements){
|
||||
Remote annotation = element.getAnnotation(Remote.class);
|
||||
|
||||
//check for static
|
||||
if (!element.getModifiers().contains(Modifier.STATIC) || !element.getModifiers().contains(Modifier.PUBLIC)) {
|
||||
if(!element.getModifiers().contains(Modifier.STATIC) || !element.getModifiers().contains(Modifier.PUBLIC)){
|
||||
Utils.messager.printMessage(Kind.ERROR, "All @Remote methods must be public and static: ", element);
|
||||
}
|
||||
|
||||
//can't generate none methods
|
||||
if (annotation.targets() == Loc.none) {
|
||||
if(annotation.targets() == Loc.none){
|
||||
Utils.messager.printMessage(Kind.ERROR, "A @Remote method's targets() cannot be equal to 'none':", element);
|
||||
}
|
||||
|
||||
//get and create class entry if needed
|
||||
if (!classMap.containsKey(annotation.in())) {
|
||||
if(!classMap.containsKey(annotation.in())){
|
||||
ClassEntry clas = new ClassEntry(annotation.in());
|
||||
classMap.put(annotation.in(), clas);
|
||||
classes.add(clas);
|
||||
@@ -127,7 +127,7 @@ public class RemoteMethodAnnotationProcessor extends AbstractProcessor {
|
||||
writegen.generateFor(classes, packageName);
|
||||
|
||||
return true;
|
||||
}else if(round == 2) { //round 2: generate all *readers*
|
||||
}else if(round == 2){ //round 2: generate all *readers*
|
||||
RemoteReadGenerator readgen = new RemoteReadGenerator(serializers);
|
||||
|
||||
//generate server readers
|
||||
@@ -147,7 +147,7 @@ public class RemoteMethodAnnotationProcessor extends AbstractProcessor {
|
||||
return true;
|
||||
}
|
||||
|
||||
}catch (Exception e){
|
||||
}catch(Exception e){
|
||||
e.printStackTrace();
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
|
||||
@@ -14,22 +14,25 @@ import java.nio.ByteBuffer;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
|
||||
/**Generates code for reading remote invoke packets on the client and server.*/
|
||||
public class RemoteReadGenerator {
|
||||
/** Generates code for reading remote invoke packets on the client and server. */
|
||||
public class RemoteReadGenerator{
|
||||
private final HashMap<String, ClassSerializer> serializers;
|
||||
|
||||
/**Creates a read generator that uses the supplied serializer setup.*/
|
||||
public RemoteReadGenerator(HashMap<String, ClassSerializer> serializers) {
|
||||
/** Creates a read generator that uses the supplied serializer setup. */
|
||||
public RemoteReadGenerator(HashMap<String, ClassSerializer> serializers){
|
||||
this.serializers = serializers;
|
||||
}
|
||||
|
||||
/**Generates a class for reading remote invoke packets.
|
||||
/**
|
||||
* Generates a class for reading remote invoke packets.
|
||||
*
|
||||
* @param entries List of methods to use/
|
||||
* @param className Simple target class name.
|
||||
* @param packageName Full target package name.
|
||||
* @param needsPlayer Whether this read method requires a reference to the player sender.*/
|
||||
* @param needsPlayer Whether this read method requires a reference to the player sender.
|
||||
*/
|
||||
public void generateFor(List<MethodEntry> entries, String className, String packageName, boolean needsPlayer)
|
||||
throws IllegalAccessException, InvocationTargetException, InstantiationException, NoSuchMethodException, IOException {
|
||||
throws IllegalAccessException, InvocationTargetException, InstantiationException, NoSuchMethodException, IOException{
|
||||
|
||||
TypeSpec.Builder classBuilder = TypeSpec.classBuilder(className).addModifiers(Modifier.PUBLIC);
|
||||
|
||||
@@ -69,10 +72,10 @@ public class RemoteReadGenerator {
|
||||
StringBuilder varResult = new StringBuilder();
|
||||
|
||||
//go through each parameter
|
||||
for(int i = 0; i < entry.element.getParameters().size(); i ++){
|
||||
for(int i = 0; i < entry.element.getParameters().size(); i++){
|
||||
VariableElement var = entry.element.getParameters().get(i);
|
||||
|
||||
if(!needsPlayer || i != 0) { //if client, skip first parameter since it's always of type player and doesn't need to be read
|
||||
if(!needsPlayer || i != 0){ //if client, skip first parameter since it's always of type player and doesn't need to be read
|
||||
//full type name of parameter
|
||||
String typeName = var.asType().toString();
|
||||
//name of parameter
|
||||
@@ -81,17 +84,17 @@ public class RemoteReadGenerator {
|
||||
String capName = typeName.equals("byte") ? "" : Character.toUpperCase(typeName.charAt(0)) + typeName.substring(1);
|
||||
|
||||
//write primitives automatically
|
||||
if (Utils.isPrimitive(typeName)) {
|
||||
if (typeName.equals("boolean")) {
|
||||
if(Utils.isPrimitive(typeName)){
|
||||
if(typeName.equals("boolean")){
|
||||
readBlock.addStatement("boolean " + varName + " = buffer.get() == 1");
|
||||
} else {
|
||||
}else{
|
||||
readBlock.addStatement(typeName + " " + varName + " = buffer.get" + capName + "()");
|
||||
}
|
||||
} else {
|
||||
}else{
|
||||
//else, try and find a serializer
|
||||
ClassSerializer ser = serializers.get(typeName);
|
||||
|
||||
if (ser == null) { //make sure a serializer exists!
|
||||
if(ser == null){ //make sure a serializer exists!
|
||||
Utils.messager.printMessage(Kind.ERROR, "No @ReadClass method to read class type: '" + typeName + "'", var);
|
||||
return;
|
||||
}
|
||||
@@ -121,7 +124,7 @@ public class RemoteReadGenerator {
|
||||
}
|
||||
|
||||
readBlock.nextControlFlow("catch (java.lang.Exception e)");
|
||||
readBlock.addStatement("throw new java.lang.RuntimeException(\"Failed to to read remote method '"+entry.element.getSimpleName() +"'!\", e)");
|
||||
readBlock.addStatement("throw new java.lang.RuntimeException(\"Failed to to read remote method '" + entry.element.getSimpleName() + "'!\", e)");
|
||||
readBlock.endControlFlow();
|
||||
}
|
||||
|
||||
|
||||
@@ -14,17 +14,17 @@ import java.nio.ByteBuffer;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
|
||||
/**Generates code for writing remote invoke packets on the client and server.*/
|
||||
public class RemoteWriteGenerator {
|
||||
/** Generates code for writing remote invoke packets on the client and server. */
|
||||
public class RemoteWriteGenerator{
|
||||
private final HashMap<String, ClassSerializer> serializers;
|
||||
|
||||
/**Creates a write generator that uses the supplied serializer setup.*/
|
||||
public RemoteWriteGenerator(HashMap<String, ClassSerializer> serializers) {
|
||||
/** Creates a write generator that uses the supplied serializer setup. */
|
||||
public RemoteWriteGenerator(HashMap<String, ClassSerializer> serializers){
|
||||
this.serializers = serializers;
|
||||
}
|
||||
|
||||
/**Generates all classes in this list.*/
|
||||
public void generateFor(List<ClassEntry> entries, String packageName) throws IOException {
|
||||
/** Generates all classes in this list. */
|
||||
public void generateFor(List<ClassEntry> entries, String packageName) throws IOException{
|
||||
|
||||
for(ClassEntry entry : entries){
|
||||
//create builder
|
||||
@@ -58,7 +58,7 @@ public class RemoteWriteGenerator {
|
||||
}
|
||||
}
|
||||
|
||||
/**Creates a specific variant for a method entry.*/
|
||||
/** Creates a specific variant for a method entry. */
|
||||
private void writeMethodVariant(TypeSpec.Builder classBuilder, MethodEntry methodEntry, boolean toAll, boolean forwarded){
|
||||
ExecutableElement elem = methodEntry.element;
|
||||
|
||||
@@ -99,7 +99,7 @@ public class RemoteWriteGenerator {
|
||||
if(!forwarded && methodEntry.local != Loc.none){
|
||||
//add in local checks
|
||||
if(methodEntry.local != Loc.both){
|
||||
method.beginControlFlow("if("+getCheckString(methodEntry.local) + " || !io.anuke.mindustry.net.Net.active())");
|
||||
method.beginControlFlow("if(" + getCheckString(methodEntry.local) + " || !io.anuke.mindustry.net.Net.active())");
|
||||
}
|
||||
|
||||
//concatenate parameters
|
||||
@@ -109,16 +109,16 @@ public class RemoteWriteGenerator {
|
||||
//special case: calling local-only methods uses the local player
|
||||
if(index == 0 && methodEntry.where == Loc.client){
|
||||
results.append("io.anuke.mindustry.Vars.players[0]");
|
||||
}else {
|
||||
}else{
|
||||
results.append(var.getSimpleName());
|
||||
}
|
||||
if(index != elem.getParameters().size() - 1) results.append(", ");
|
||||
index ++;
|
||||
index++;
|
||||
}
|
||||
|
||||
//add the statement to call it
|
||||
method.addStatement("$N." + elem.getSimpleName() + "(" + results.toString() + ")",
|
||||
((TypeElement)elem.getEnclosingElement()).getQualifiedName().toString());
|
||||
((TypeElement) elem.getEnclosingElement()).getQualifiedName().toString());
|
||||
|
||||
if(methodEntry.local != Loc.both){
|
||||
method.endControlFlow();
|
||||
@@ -126,10 +126,10 @@ public class RemoteWriteGenerator {
|
||||
}
|
||||
|
||||
//start control flow to check if it's actually client/server so no netcode is called
|
||||
method.beginControlFlow("if("+getCheckString(methodEntry.where)+")");
|
||||
method.beginControlFlow("if(" + getCheckString(methodEntry.where) + ")");
|
||||
|
||||
//add statement to create packet from pool
|
||||
method.addStatement("$1N packet = $2N.obtain($1N.class)", "io.anuke.mindustry.net.Packets.InvokePacket", "com.badlogic.gdx.utils.Pools");
|
||||
method.addStatement("$1N packet = $2N.obtain($1N.class)", "io.anuke.mindustry.net.Packets.InvokePacket", "io.anuke.ucore.util.Pooling");
|
||||
//assign buffer
|
||||
method.addStatement("packet.writeBuffer = TEMP_BUFFER");
|
||||
//assign priority
|
||||
@@ -139,7 +139,7 @@ public class RemoteWriteGenerator {
|
||||
//rewind buffer
|
||||
method.addStatement("TEMP_BUFFER.position(0)");
|
||||
|
||||
for(int i = 0; i < elem.getParameters().size(); i ++){
|
||||
for(int i = 0; i < elem.getParameters().size(); i++){
|
||||
//first argument is skipped as it is always the player caller
|
||||
if((!methodEntry.where.isServer/* || methodEntry.mode == Loc.both*/) && i == 0){
|
||||
continue;
|
||||
@@ -164,7 +164,7 @@ public class RemoteWriteGenerator {
|
||||
method.beginControlFlow("if(io.anuke.mindustry.net.Net.server())");
|
||||
}
|
||||
|
||||
if(Utils.isPrimitive(typeName)) { //check if it's a primitive, and if so write it
|
||||
if(Utils.isPrimitive(typeName)){ //check if it's a primitive, and if so write it
|
||||
if(typeName.equals("boolean")){ //booleans are special
|
||||
method.addStatement("TEMP_BUFFER.put(" + varName + " ? (byte)1 : 0)");
|
||||
}else{
|
||||
@@ -181,7 +181,7 @@ public class RemoteWriteGenerator {
|
||||
}
|
||||
|
||||
//add statement for writing it
|
||||
method.addStatement(ser.writeMethod + "(TEMP_BUFFER, " + varName +")");
|
||||
method.addStatement(ser.writeMethod + "(TEMP_BUFFER, " + varName + ")");
|
||||
}
|
||||
|
||||
if(writePlayerSkipCheck){ //write end check
|
||||
@@ -197,7 +197,7 @@ public class RemoteWriteGenerator {
|
||||
if(forwarded){ //forward packet
|
||||
if(!methodEntry.local.isClient){ //if the client doesn't get it called locally, forward it back after validation
|
||||
sendString = "send(";
|
||||
}else {
|
||||
}else{
|
||||
sendString = "sendExcept(exceptSenderID, ";
|
||||
}
|
||||
}else if(toAll){ //send to all players / to server
|
||||
@@ -207,8 +207,8 @@ public class RemoteWriteGenerator {
|
||||
}
|
||||
|
||||
//send the actual packet
|
||||
method.addStatement("io.anuke.mindustry.net.Net." + sendString + "packet, "+
|
||||
(methodEntry.unreliable ? "io.anuke.mindustry.net.Net.SendMode.udp" : "io.anuke.mindustry.net.Net.SendMode.tcp")+")");
|
||||
method.addStatement("io.anuke.mindustry.net.Net." + sendString + "packet, " +
|
||||
(methodEntry.unreliable ? "io.anuke.mindustry.net.Net.SendMode.udp" : "io.anuke.mindustry.net.Net.SendMode.tcp") + ")");
|
||||
|
||||
|
||||
//end check for server/client
|
||||
@@ -220,7 +220,7 @@ public class RemoteWriteGenerator {
|
||||
|
||||
private String getCheckString(Loc loc){
|
||||
return loc.isClient && loc.isServer ? "io.anuke.mindustry.net.Net.server() || io.anuke.mindustry.net.Net.client()" :
|
||||
loc.isClient ? "io.anuke.mindustry.net.Net.client()" :
|
||||
loc.isServer ? "io.anuke.mindustry.net.Net.server()" : "false";
|
||||
loc.isClient ? "io.anuke.mindustry.net.Net.client()" :
|
||||
loc.isServer ? "io.anuke.mindustry.net.Net.server()" : "false";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,14 +7,14 @@ import javax.lang.model.element.TypeElement;
|
||||
import javax.lang.model.util.Elements;
|
||||
import javax.lang.model.util.Types;
|
||||
|
||||
public class Utils {
|
||||
public class Utils{
|
||||
public static Types typeUtils;
|
||||
public static Elements elementUtils;
|
||||
public static Filer filer;
|
||||
public static Messager messager;
|
||||
|
||||
public static String getMethodName(Element element){
|
||||
return ((TypeElement)element.getEnclosingElement()).getQualifiedName().toString() + "." + element.getSimpleName();
|
||||
return ((TypeElement) element.getEnclosingElement()).getQualifiedName().toString() + "." + element.getSimpleName();
|
||||
}
|
||||
|
||||
public static boolean isPrimitive(String type){
|
||||
|
||||
@@ -9,7 +9,7 @@ buildscript {
|
||||
dependencies {
|
||||
classpath 'com.mobidevelop.robovm:robovm-gradle-plugin:2.3.0'
|
||||
classpath 'de.richsource.gradle.plugins:gwt-gradle-plugin:0.6'
|
||||
classpath 'com.android.tools.build:gradle:3.1.0'
|
||||
classpath 'com.android.tools.build:gradle:3.1.3'
|
||||
classpath "com.badlogicgames.gdx:gdx-tools:1.9.8"
|
||||
}
|
||||
}
|
||||
@@ -27,7 +27,7 @@ allprojects {
|
||||
gdxVersion = '1.9.8'
|
||||
roboVMVersion = '2.3.0'
|
||||
aiVersion = '1.8.1'
|
||||
uCoreVersion = '2241e5402e'
|
||||
uCoreVersion = 'c502931313'
|
||||
|
||||
getVersionString = {
|
||||
String buildVersion = getBuildVersion()
|
||||
|
||||
|
Before Width: | Height: | Size: 296 B After Width: | Height: | Size: 296 B |
BIN
core/assets-raw/sprites/blocks/liquid/conduit-bottom-0.png
Normal file
|
After Width: | Height: | Size: 213 B |
BIN
core/assets-raw/sprites/blocks/liquid/conduit-bottom-1.png
Normal file
|
After Width: | Height: | Size: 225 B |
BIN
core/assets-raw/sprites/blocks/liquid/conduit-bottom-2.png
Normal file
|
After Width: | Height: | Size: 216 B |
BIN
core/assets-raw/sprites/blocks/liquid/conduit-bottom-3.png
Normal file
|
After Width: | Height: | Size: 224 B |
BIN
core/assets-raw/sprites/blocks/liquid/conduit-bottom-4.png
Normal file
|
After Width: | Height: | Size: 224 B |
BIN
core/assets-raw/sprites/blocks/liquid/conduit-bottom-5.png
Normal file
|
After Width: | Height: | Size: 225 B |
BIN
core/assets-raw/sprites/blocks/liquid/conduit-bottom-6.png
Normal file
|
After Width: | Height: | Size: 199 B |
|
Before Width: | Height: | Size: 199 B After Width: | Height: | Size: 217 B |
BIN
core/assets-raw/sprites/blocks/liquid/conduit-top-0.png
Normal file
|
After Width: | Height: | Size: 209 B |
BIN
core/assets-raw/sprites/blocks/liquid/conduit-top-1.png
Normal file
|
After Width: | Height: | Size: 243 B |
BIN
core/assets-raw/sprites/blocks/liquid/conduit-top-2.png
Normal file
|
After Width: | Height: | Size: 252 B |
BIN
core/assets-raw/sprites/blocks/liquid/conduit-top-3.png
Normal file
|
After Width: | Height: | Size: 262 B |
BIN
core/assets-raw/sprites/blocks/liquid/conduit-top-4.png
Normal file
|
After Width: | Height: | Size: 251 B |
BIN
core/assets-raw/sprites/blocks/liquid/conduit-top-5.png
Normal file
|
After Width: | Height: | Size: 242 B |
BIN
core/assets-raw/sprites/blocks/liquid/conduit-top-6.png
Normal file
|
After Width: | Height: | Size: 239 B |
|
Before Width: | Height: | Size: 191 B |
|
Before Width: | Height: | Size: 219 B |
|
Before Width: | Height: | Size: 267 B After Width: | Height: | Size: 267 B |
BIN
core/assets-raw/sprites/blocks/liquid/pulse-conduit-top-1.png
Normal file
|
After Width: | Height: | Size: 287 B |
BIN
core/assets-raw/sprites/blocks/liquid/pulse-conduit-top-2.png
Normal file
|
After Width: | Height: | Size: 282 B |
BIN
core/assets-raw/sprites/blocks/liquid/pulse-conduit-top-3.png
Normal file
|
After Width: | Height: | Size: 289 B |
BIN
core/assets-raw/sprites/blocks/liquid/pulse-conduit-top-4.png
Normal file
|
After Width: | Height: | Size: 284 B |
BIN
core/assets-raw/sprites/blocks/liquid/pulse-conduit-top-5.png
Normal file
|
After Width: | Height: | Size: 289 B |
BIN
core/assets-raw/sprites/blocks/liquid/pulse-conduit-top-6.png
Normal file
|
After Width: | Height: | Size: 270 B |
BIN
core/assets-raw/sprites/ui/icons/icon-item.png
Normal file
|
After Width: | Height: | Size: 189 B |
BIN
core/assets-raw/sprites/ui/icons/icon-missing.png
Normal file
|
After Width: | Height: | Size: 191 B |
@@ -55,13 +55,7 @@ text.about.button=About
|
||||
text.name=Name:
|
||||
text.unlocked=New Block Unlocked!
|
||||
text.unlocked.plural=New Blocks Unlocked!
|
||||
text.server.rollback=Rollback
|
||||
text.server.rollback.numberfield=Rollback Amount:
|
||||
text.blocks.editlogs=Edit Logs
|
||||
text.block.editlogsnotfound=[red]There are no edit logs for this location.
|
||||
text.public=Public
|
||||
text.players={0} players online
|
||||
text.server.player.host={0} (host)
|
||||
text.players.single={0} player online
|
||||
text.server.mismatch=Packet error: possible client/server version mismatch.\nMake sure you and the host have the\nlatest version of Mindustry!
|
||||
text.server.closing=[accent]Closing server...
|
||||
@@ -118,7 +112,6 @@ text.confirmban=Are you sure you want to ban this player?
|
||||
text.confirmunban=Are you sure you want to unban this player?
|
||||
text.confirmadmin=Are you sure you want to make this player an admin?
|
||||
text.confirmunadmin=Are you sure you want to remove admin status from this player?
|
||||
text.joingame.byip=Join by IP...
|
||||
text.joingame.title=Join Game
|
||||
text.joingame.ip=IP:
|
||||
text.disconnect=Disconnected.
|
||||
@@ -130,8 +123,7 @@ text.server.port=Port:
|
||||
text.server.addressinuse=Address already in use!
|
||||
text.server.invalidport=Invalid port number!
|
||||
text.server.error=[crimson]Error hosting server: [orange]{0}
|
||||
text.tutorial.back=< Prev
|
||||
text.tutorial.next=Next >
|
||||
text.save.old=This save is for an older version of the game, and can no longer be used.\n\n[LIGHT_GRAY]Save backwards compatibility will be implemented in the full 4.0 release.
|
||||
text.save.new=New Save
|
||||
text.save.overwrite=Are you sure you want to overwrite\nthis save slot?
|
||||
text.overwrite=Overwrite
|
||||
@@ -141,7 +133,7 @@ text.savefail=Failed to save game!
|
||||
text.save.delete.confirm=Are you sure you want to delete this save?
|
||||
text.save.delete=Delete
|
||||
text.save.export=Export Save
|
||||
text.save.import.invalid=[orange]This save is invalid!\n\nNote that[scarlet]importing saves with custom maps[orange]\nfrom other devices does not work!
|
||||
text.save.import.invalid=[orange]This save is invalid!
|
||||
text.save.import.fail=[crimson]Failed to import save: [orange]{0}
|
||||
text.save.export.fail=[crimson]Failed to export save: [orange]{0}
|
||||
text.save.import=Import Save
|
||||
@@ -226,21 +218,13 @@ text.editor.exportimage.description=Export a map image file
|
||||
text.editor.loadimage=Import Terrain
|
||||
text.editor.saveimage=Export Terrain
|
||||
text.editor.unsaved=[scarlet]You have unsaved changes![]\nAre you sure you want to exit?
|
||||
text.editor.brushsize=Brush size: {0}
|
||||
text.editor.noplayerspawn=This map has no player spawnpoint!
|
||||
text.editor.manyplayerspawns=Maps cannot have more than one\nplayer spawnpoint!
|
||||
text.editor.manyenemyspawns=Cannot have more than\n{0} enemy spawnpoints!
|
||||
text.editor.resizemap=Resize Map
|
||||
text.editor.resizebig=[scarlet]Warning!\n[]Maps larger than 256 units may be laggy and unstable.
|
||||
text.editor.mapname=Map Name:
|
||||
text.editor.overwrite=[accent]Warning!\nThis overwrites an existing map.
|
||||
text.editor.overwrite.confirm=[scarlet]Warning![] A map with this name already exists. Are you sure you want to overwrite it?
|
||||
text.editor.selectmap=Select a map to load:
|
||||
text.width=Width:
|
||||
text.height=Height:
|
||||
text.randomize=Randomize
|
||||
text.apply=Apply
|
||||
text.update=Update
|
||||
text.menu=Menu
|
||||
text.play=Play
|
||||
text.load=Load
|
||||
@@ -269,7 +253,6 @@ text.yes=Yes
|
||||
text.no=No
|
||||
text.info.title=[accent]Info
|
||||
text.error.title=[crimson]An error has occured
|
||||
text.error.crashmessage=[SCARLET]An unexpected error has occured, which would have caused a crash.\n[]Please report the exact circumstances under which this error occured to the developer: \n[ORANGE]anukendev@gmail.com[]
|
||||
text.error.crashtitle=An error has occured
|
||||
text.blocks.blockinfo=Block Info
|
||||
text.blocks.powercapacity=Power Capacity
|
||||
@@ -297,6 +280,10 @@ text.blocks.drilltier=Drillables
|
||||
text.blocks.drillspeed=Base Drill Speed
|
||||
text.blocks.liquidoutput=Liquid Output
|
||||
text.blocks.liquiduse=Liquid Use
|
||||
text.blocks.coolant=Coolant
|
||||
text.blocks.coolantuse=Coolant Use
|
||||
text.blocks.inputliquidfuel=Fuel Liquid
|
||||
text.blocks.liquidfueluse=Liquid Fuel Use
|
||||
text.blocks.explosive=Highly explosive!
|
||||
text.blocks.health=Health
|
||||
text.blocks.inaccuracy=Inaccuracy
|
||||
@@ -332,7 +319,6 @@ setting.difficulty.insane=insane
|
||||
setting.difficulty.purge=purge
|
||||
setting.difficulty.name=Difficulty:
|
||||
setting.screenshake.name=Screen Shake
|
||||
setting.smoothcam.name=Smooth Camera
|
||||
setting.indicators.name=Enemy Indicators
|
||||
setting.effects.name=Display Effects
|
||||
setting.sensitivity.name=Controller Sensitivity
|
||||
@@ -343,10 +329,8 @@ setting.multithread.name=Multithreading
|
||||
setting.fps.name=Show FPS
|
||||
setting.vsync.name=VSync
|
||||
setting.lasers.name=Show Power Lasers
|
||||
setting.previewopacity.name=Placing Preview Opacity
|
||||
setting.healthbars.name=Show Entity Health bars
|
||||
setting.minimap.name=Show Minimap
|
||||
setting.pixelate.name=Pixelate Screen
|
||||
setting.musicvol.name=Music Volume
|
||||
setting.mutemusic.name=Mute Music
|
||||
setting.sfxvol.name=SFX Volume
|
||||
@@ -454,15 +438,15 @@ block.conveyor.name=Conveyor
|
||||
block.titanium-conveyor.name=Titanium Conveyor
|
||||
block.junction.name=Junction
|
||||
block.splitter.name=Splitter
|
||||
block.splitter.description=Outputs items into two opposite directions immediately after they are recieved.
|
||||
block.splitter.description=Outputs items into three different directions once they are recieved.
|
||||
block.router.name=Router
|
||||
block.router.description=Splits items into all 4 directions. Can store items as a buffer.
|
||||
block.multiplexer.name=Multiplexer
|
||||
block.multiplexer.description=A router that can split items into 8 directions.
|
||||
block.distributor.name=Distributor
|
||||
block.distributor.description=A splitter that can split items into 8 directions.
|
||||
block.sorter.name=Sorter
|
||||
block.sorter.description=Sorts items. If an item matches the selection, it is allowed to pass. Otherwise, the item is outputted to the left and right.
|
||||
block.overflowgate.name=Overflow Gate
|
||||
block.overflowgate.description=A combination splitter and router that only outputs to the left and right if the front path is blocked.
|
||||
block.overflow-gate.name=Overflow Gate
|
||||
block.overflow-gate.description=A combination splitter and router that only outputs to the left and right if the front path is blocked.
|
||||
block.bridgeconveyor.name=Bridge Conveyor
|
||||
block.bridgeconveyor.description=A conveyor that can go over other blocks, for up to two total blocks.
|
||||
block.smelter.name=Smelter
|
||||
@@ -512,7 +496,6 @@ block.swarmer.name=Swarmer
|
||||
block.salvo.name=Salvo
|
||||
block.ripple.name=Ripple
|
||||
block.phase-conveyor.name=Phase Conveyor
|
||||
block.overflow-gate.name=Overflow Gate
|
||||
block.bridge-conveyor.name=Bridge Conveyor
|
||||
block.plastanium-compressor.name=Plastanium Compressor
|
||||
block.pyratite-mixer.name=Pyratite Mixer
|
||||
|
||||
@@ -1,479 +1,495 @@
|
||||
text.about = Erstellt von [ROYAL] Anuken. [] \nUrsprünglich ein Eintrag im [orange] GDL [] MM Jam.\n\nCredits: \n- SFX gemacht mit [yellow] bfxr [] - Musik gemacht von [green] RoccoW [] / gefunden auf [lime] FreeMusicArchive.org [] \n\nBesonderer Dank geht an: \n- [coral] MitchellFJN []: Umfangreicher Spieletest und Feedback \n- [sky] Luxray5474 []: Wiki-Arbeit, Code-Beiträge \n- Alle Beta-Tester auf itch.io und Google Play\n
|
||||
text.discord = Trete dem Mindustry Discord bei!
|
||||
text.gameover = Der Kern wurde zerstört.
|
||||
text.highscore = [YELLOW] Neuer Highscore!
|
||||
text.lasted = Du hast bis zur folgenden Welle überlebt
|
||||
text.level.highscore = High Score: [accent] {0}
|
||||
text.level.delete.title = Löschen bestätigen
|
||||
text.level.delete = Bist du sicher, dass du die Karte \"[orange] {0}\" löschen möchtest?
|
||||
text.level.select = Level Auswahl
|
||||
text.level.mode = Spielmodus:
|
||||
text.savegame = Spiel speichern
|
||||
text.loadgame = Spiel laden
|
||||
text.joingame = Spiel beitreten
|
||||
text.quit = Verlassen
|
||||
text.about.button = Info
|
||||
text.name = Name:
|
||||
text.public = Öffentlich
|
||||
text.players = {0} Spieler online
|
||||
text.players.single = {0} Spieler online
|
||||
text.server.mismatch = Paketfehler: Mögliche Client / Server-Version stimmt nicht überein. Stell sicher, dass du und der Host die neueste Version von Mindustry haben!
|
||||
.server.closing = [accent] Server wird geschlossen...
|
||||
text.server.kicked.kick = Du wurdest vom Server gekickt!
|
||||
text.server.kicked.invalidPassword = Falsches Passwort.
|
||||
text.server.connected = {0} ist beigetreten
|
||||
text.server.disconnected = {0} hat die Verbindung getrennt.
|
||||
text.nohost = Server kann nicht auf einer benutzerdefinierten Karte gehostet werden!
|
||||
text.hostserver = Server hosten
|
||||
text.host = Host
|
||||
text.hosting = [accent] Server wird geöffnet...
|
||||
text.hosts.refresh = Aktualisieren
|
||||
text.hosts.discovering = Suche nach LAN-Spielen
|
||||
text.server.refreshing = Server wird aktualisiert
|
||||
text.hosts.none = [lightgray] Keine LAN Spiele gefunden!
|
||||
text.host.invalid = [scarlet] Kann keine Verbindung zum Host herstellen.
|
||||
text.server.add = Server hinzufügen
|
||||
text.server.delete = Bist du dir sicher das du diesen Server löschen möchtest?
|
||||
text.server.hostname = Host: {0}
|
||||
text.server.edit = Server bearbeiten
|
||||
text.joingame.byip = Über IP beitreten ...
|
||||
text.joingame.title = Spiel beitreten
|
||||
text.joingame.ip = IP:
|
||||
text.disconnect = Verbindung unterbrochen.
|
||||
text.connecting = [accent] Verbindet...
|
||||
text.connecting.data = [accent] Weltdaten werden geladen...
|
||||
text.connectfail = [crimson] Verbindung zum Server konnte nicht hergestellt werden: [orange]{0}
|
||||
text.server.port = Port:
|
||||
text.server.invalidport = Falscher Port!
|
||||
text.server.error = [crimson] Fehler beim Hosten des Servers: [orange] {0}
|
||||
text.tutorial.back = < Zurück
|
||||
text.tutorial.next = Weiter >
|
||||
text.save.new = Neuer Spielstand
|
||||
text.save.overwrite = Möchten du diesen Spielstand wirklich überschreiben?
|
||||
text.overwrite = Überschreiben
|
||||
text.save.none = Keine Spielstände gefunden!
|
||||
text.saveload = [accent] Speichern ...
|
||||
text.savefail = Fehler beim Speichern des Spiels!
|
||||
text.save.delete.confirm = Möchtest du diesen Spielstand wirklich löschen?
|
||||
text.save.delete = Löschen
|
||||
text.save.export = Spielstand exportieren
|
||||
text.save.import.invalid = [orange] Dieser Spielstand ist ungültig!
|
||||
text.save.import.fail = [crimson] Spielstand konnte nicht importiert werden: [orange] {0}
|
||||
text.save.export.fail = [crimson] Spielstand konnte nicht exportiert werden: [orange] {0}
|
||||
text.save.import = Spielstand importieren
|
||||
text.save.newslot = Name speichern:
|
||||
text.save.rename = Umbenennen
|
||||
text.save.rename.text = Neuer Name
|
||||
text.selectslot = Wähle einen Spielstand
|
||||
text.slot = [accent] Platz {0}
|
||||
text.save.corrupted = [orange] Datei beschädigt oder ungültig!
|
||||
text.empty = <leer>
|
||||
text.on = An
|
||||
text.off = Aus
|
||||
text.save.autosave = Automatisches Speichern: {0}
|
||||
text.save.map = Karte: {0}
|
||||
text.save.wave = Welle: {0}
|
||||
text.save.date = Zuletzt gespeichert: {0}
|
||||
text.confirm = Bestätigen
|
||||
text.delete = Löschen
|
||||
text.ok = OK
|
||||
text.open = Öffnen
|
||||
text.cancel = Abbruch
|
||||
text.openlink = Link öffnen
|
||||
text.back = Zurück
|
||||
text.quit.confirm = Willst du wirklich aufhören?
|
||||
text.loading = [accent] Wird geladen ...
|
||||
text.wave = [orange] Welle {0}
|
||||
text.wave.waiting = Welle in {0}
|
||||
text.waiting = Warten...
|
||||
text.enemies = {0} Feinde
|
||||
text.enemies.single = {0} Feind
|
||||
text.loadimage = Bild laden
|
||||
text.saveimage = Bild speichern
|
||||
text.editor.badsize = [orange]Ungültige Bildabmessungen! [] Gültige Kartenabmessungen: {0}
|
||||
text.editor.errorimageload = Fehler beim Laden des Bildes: [orange] {0}
|
||||
text.editor.errorimagesave = Fehler beim Speichern des Bildes: [orange] {0}
|
||||
text.editor.generate = Generieren
|
||||
text.editor.resize = Grösse\nanpassen
|
||||
text.editor.loadmap = Karte\nladen
|
||||
text.editor.savemap = Karte\nspeichern
|
||||
text.editor.loadimage = Bild\nladen
|
||||
text.editor.saveimage = Bild\nspeichern
|
||||
text.editor.unsaved = [crimson] Du hast Änderungen nicht gespeichert [] Möchtest du wirklich aufhören?
|
||||
text.editor.brushsize = Pinselgrösse: {0}
|
||||
text.editor.noplayerspawn = Diese Karte hat keinen Spielerspawnpunkt!
|
||||
text.editor.manyplayerspawns = Maps können nicht mehr als einen Spawnpunkt des Spielers haben!
|
||||
text.editor.manyenemyspawns = Kann nicht mehr als {0} feindliche Spawnpunkte haben!
|
||||
text.editor.resizemap = Grösse der Karte ändern
|
||||
text.editor.resizebig = [crimson] Warnung! [] Karten, die grösser als 256 Einheiten sind, können ruckeln und instabil sein.
|
||||
text.editor.mapname = Map Name
|
||||
text.editor.overwrite = [accent] Warnung! Dies überschreibt eine vorhandene Map.
|
||||
text.editor.failoverwrite = [crimson] Die Standardkarte kann nicht überschrieben werden!
|
||||
text.editor.selectmap = Wähle eine Map zum Laden:
|
||||
text.width = Breite:
|
||||
text.height = Höhe:
|
||||
text.randomize = Zufällig
|
||||
text.apply = Anwenden
|
||||
text.update = Aktualisieren
|
||||
text.menu = Menü
|
||||
text.play = Spielen
|
||||
text.load = Laden
|
||||
text.save = Speichern
|
||||
text.settings = Einstellungen
|
||||
text.tutorial = Tutorial
|
||||
text.editor = Bearbeiter
|
||||
text.mapeditor = Karten Bearbeiter
|
||||
text.donate = Spenden
|
||||
text.settings.reset = Auf Standard zurücksetzen
|
||||
text.settings.controls = Steuerung
|
||||
text.settings.game = Spiel
|
||||
text.settings.sound = Audio
|
||||
text.settings.graphics = Grafiken
|
||||
text.upgrades = Verbesserungen
|
||||
text.purchased = [LIME] Erstellt!
|
||||
text.weapons = Waffen
|
||||
text.paused = Pausiert
|
||||
text.respawn = Respawn in
|
||||
text.error.title = [crimson] Ein Fehler ist aufgetreten
|
||||
text.error.crashmessage = [SCARLET] Es ist ein unerwarteter Fehler aufgetreten, der einen Absturz verursacht hätte. [] Bitte geben Sie die genauen Umstände an, unter denen dieser Fehler passiert ist, für den Entwickler: [ORANGE] anukendev@gmail.com []
|
||||
text.error.crashtitle = EIn Fehler ist aufgetreten!
|
||||
text.mode.break = Zerstörungsmodus: {0}
|
||||
text.mode.place = Platzierungsmodus: {0}
|
||||
placemode.hold.name = Zeile
|
||||
placemode.areadelete.name = Gebiet
|
||||
placemode.touchdelete.name = berühren
|
||||
placemode.holddelete.name = halten
|
||||
placemode.none.name = keine
|
||||
placemode.touch.name = berühren
|
||||
placemode.cursor.name = Mauszeiger
|
||||
text.blocks.extrainfo = [accent] Extra Blockinfo:
|
||||
text.blocks.blockinfo = Blockinfo:
|
||||
text.blocks.powercapacity = Energiekapazität
|
||||
text.blocks.powershot = Energie / Schuss
|
||||
text.blocks.powersecond = Energie / Sekunde
|
||||
text.blocks.powerdraindamage = Energieabnahme / Schaden
|
||||
text.blocks.shieldradius = Schildradius
|
||||
text.blocks.itemspeedsecond = Gegenstands Geschwindigkeit / Sekunde
|
||||
text.blocks.range = Reichweite
|
||||
text.blocks.size = Grösse
|
||||
text.blocks.powerliquid = Energie / Flüssigkeit
|
||||
text.blocks.maxliquidsecond = Max Flüssigkeit / Sekunde
|
||||
text.blocks.liquidcapacity = Flüssigkeitskapazität
|
||||
text.blocks.liquidsecond = Flüssigkeit / Sekunde
|
||||
text.blocks.damageshot = Schaden / Schuss
|
||||
text.blocks.ammocapacity = Munitionskapazität
|
||||
text.blocks.ammo = Munition
|
||||
text.blocks.ammoitem = Munition / Gegenstand
|
||||
text.blocks.maxitemssecond = Max Gegenstände / Sekunde
|
||||
text.blocks.powerrange = Energiereichweite
|
||||
text.blocks.lasertilerange = Laser Reichweite
|
||||
text.blocks.capacity = Kapazität
|
||||
text.blocks.itemcapacity = Gegenstand Kapazität
|
||||
text.blocks.maxpowergenerationsecond = Max Energieerzeugung / Sekunde
|
||||
text.blocks.powergenerationsecond = Energieerzeugung / Sekunde
|
||||
text.blocks.generationsecondsitem = Generation Sekunden / Gegenstand
|
||||
text.blocks.input = Eingabe
|
||||
text.blocks.inputliquid = Flüssigkeiten Eingabe
|
||||
text.blocks.inputitem = Eingabe Gegenstand
|
||||
text.blocks.output = Ausgabe
|
||||
text.blocks.secondsitem = Sekunden / Item
|
||||
text.blocks.maxpowertransfersecond = Max Energieübertragung / Sekunde
|
||||
text.blocks.explosive = Hochexplosiv!
|
||||
text.blocks.repairssecond = Reparaturen / Sekunde
|
||||
text.blocks.health = Lebenspunkte
|
||||
text.blocks.inaccuracy = Ungenauigkeit
|
||||
text.blocks.shots = Schüsse
|
||||
text.blocks.shotssecond = Schüsse / Sekunde
|
||||
text.blocks.fuel = Treibstoff
|
||||
text.blocks.fuelduration = Treibstoffdauer
|
||||
text.blocks.maxoutputsecond = Max Ausgabe / Sekunde
|
||||
text.blocks.inputcapacity = Eingabekapazität
|
||||
text.blocks.outputcapacity = Ausgabekapazität
|
||||
text.blocks.poweritem = Energie / Gegenstand
|
||||
text.placemode = Platzierungsmodus
|
||||
text.breakmode = Zerstörungsmodus
|
||||
text.health = Lebenspunkte
|
||||
setting.difficulty.easy = Leicht
|
||||
setting.difficulty.normal = Normal
|
||||
setting.difficulty.hard = Schwer
|
||||
setting.difficulty.insane = Unmöglich
|
||||
setting.difficulty.purge = Auslöschung
|
||||
setting.difficulty.name = Schwierigkeit
|
||||
setting.screenshake.name = Bildschirm wackeln
|
||||
setting.smoothcam.name = Glatte Kamera
|
||||
setting.indicators.name = Feind Indikatoren
|
||||
setting.effects.name = Effekte anzeigen
|
||||
setting.sensitivity.name = Kontroller Empfindlichkeit
|
||||
setting.saveinterval.name = Autosave Häufigkeit
|
||||
setting.seconds = {0} Sekunden
|
||||
setting.fps.name = Zeige FPS
|
||||
setting.vsync.name = VSync
|
||||
setting.lasers.name = Zeige Energielaser
|
||||
setting.healthbars.name = Zeige Objekt Lebensbalken
|
||||
setting.pixelate.name = Pixel Bildschirm
|
||||
setting.musicvol.name = Musiklautstärke
|
||||
setting.mutemusic.name = Musik stummschalten
|
||||
setting.sfxvol.name = Audioeffekte Lautstärke
|
||||
setting.mutesound.name = Audioeffekte stummschalten
|
||||
map.maze.name = Labyrinth
|
||||
map.fortress.name = Festung
|
||||
map.sinkhole.name = Sinkloch
|
||||
map.caves.name = Höhlen
|
||||
map.volcano.name = Vulkan
|
||||
map.caldera.name = Lavakessel
|
||||
map.scorch.name = Flammen
|
||||
map.desert.name = Wüste
|
||||
map.island.name = Insel
|
||||
map.grassland.name = Grasland
|
||||
map.tundra.name = Kältesteppe
|
||||
map.spiral.name = Spirale
|
||||
map.tutorial.name = Tutorial
|
||||
tutorial.intro.text = [gelb] Willkommen zum Tutorial [] Um zu beginnen, drücke 'weiter'.
|
||||
tutorial.moveDesktop.text = Verwende zum Verschieben die Tasten [orange] [[WASD] []. Halte [orange] Shift [] gedrückt, um zu erhöhen. Halte [orange] CTRL/STRG [] gedrückt, während du das [orange] Scrollrad [] zum Vergrössern oder Verkleinern verwendest.
|
||||
tutorial.shoot.text = Ziele mit der Maus, halte die [orange] linke Maustaste [] gedrückt, um zu schiessen. Versuche es mit dem [gelben] Ziel [].
|
||||
tutorial.moveAndroid.text = Um die Ansicht zu verschieben, ziehe einen Finger über den Bildschirm. Drücke und ziehe, um zu vergrössern oder zu verkleinern.
|
||||
tutorial.placeSelect.text = Versuche, ein [gelbes] Förderband [] aus dem Blockmenü unten rechts auszuwählen.
|
||||
tutorial.placeConveyorDesktop.text = Verwende das [orange] [[scrollwheel] [], um das Förderband nach vorne zu bewegen [orange] vorwärts [], und platziere es dann an der [gelben] markierten Stelle [] mit [orange] [[linke Maustaste] [].
|
||||
tutorial.placeConveyorAndroid.text = Verwende die [orange] [[rotieren-Taste] [], um das Förderband nach vorne [orange] zu drehen [], ziehe es mit einem Finger in Position und platziere es dann an der [gelben] markierten Stelle [] mit der [Orange] [[Häkchen][].
|
||||
tutorial.placeConveyorAndroidInfo.text = Alternativ kannst du das Fadenkreuzsymbol unten links drücken, um zum [orange] [[touch mode] [] zu wechseln, und Blöcke durch Tippen auf den Bildschirm platzieren. Im Touch-Modus können Blöcke mit dem Pfeil unten links gedreht werden. Drücke [gelb] neben [], um es auszuprobieren.
|
||||
tutorial.placeDrill.text = Wähle nun einen [gelben] Steinbohrer [] an der markierten Stelle aus und platziere ihn.
|
||||
tutorial.blockInfo.text = Wenn du mehr über einen Block erfahren möchtest, tippe oben rechts auf das [orange] Fragezeichen [], um dessen Beschreibung zu lesen.
|
||||
tutorial.deselectDesktop.text = Du kannst einen Block mit [Orange] [[Rechte Maustaste] [] abwählen.
|
||||
tutorial.deselectAndroid.text = Du kannst einen Block abwählen, indem du die [orange] X [] -Taste drücken.
|
||||
tutorial.drillPlaced.text = Der Bohrer erzeugt nun [gelben] Stein, [] gib den Stein nun auf das Förderband aus und bewege ihn dann in den [gelben] Kern [].
|
||||
tutorial.drillInfo.text = Verschiedene Erze benötigen unterschiedliche Bohrer. Stein erfordert Steinbohrer, Eisen erfordert Eisenbohrer usw.
|
||||
tutorial.drillPlaced2.text = Wenn du Gegenstände in den Kern verschiebst, steckst du sie in dein [gelbes] Inventar [] oben links. Das Platzieren von Blöcken verwendet Gegenstände aus deinem Inventar.
|
||||
tutorial.moreDrills.text = Du kannst so viele Bohrer und Förderer miteinander verbinden wie du lust hast.
|
||||
tutorial.deleteBlock.text = Du kannst Blöcke löschen, indem du mit der [orange] rechte Maustaste [] auf dem Block klickst, den du löschen möchtest. Versuche, dieses Förderband zu löschen.
|
||||
tutorial.deleteBlockAndroid.text = Du kannst Blöcke löschen, indem du [orange] das Fadenkreuz [] im [orange] Pausenmodusmenü [] links unten auswählst und auf einen Block tippst. Versuche, dieses Fliessband zu löschen.
|
||||
tutorial.placeTurret.text = Wähle nun einen [gelben] Turm [] an der [gelben] markierten Stelle [] und platziere ihn.
|
||||
tutorial.placedTurretAmmo.text = Dieser Turm nimmt nun [gelbe] Munition [] vom Förderband an. Du kannst sehen, wie viel Munition es hat, indem du darüber schweben und den [grünen] grünen Balken [] prüfen.
|
||||
tutorial.turretExplanation.text = Geschütze schiessen automatisch auf den nächsten Feind in Reichweite, solange sie genug Munition haben.
|
||||
tutorial.waves.text = Jede [yellow] 60 [] Sekunden wird eine Welle von [coral] Feinden [] an einem bestimmten Orten erscheinen und versuchen, den Kern zu zerstören.
|
||||
tutorial.coreDestruction.text = Dein Ziel ist es, den Kern [yellow] zu verteidigen. Wenn der Kern zerstört wird, verlierst du [coral] das Spiel [].
|
||||
tutorial.pausingDesktop.text = Wenn du jemals eine Pause machen möchtest, drücke die [orange] Pause-Taste [] oben links oder [orange]space[], um das Spiel anzuhalten. Du kannst auch Blöcke immer noch auswählen und platzieren, während du das Spiel pausiert ist, aber Sie können sich nicht bewegen oder schiessen.
|
||||
tutorial.pausingAndroid.text = Wenn du jemals eine Pause machen willst, drück einfach die [orange] Pause-Taste [] oben links, um das Spiel anzuhalten. Sie können immer noch Sachen auswählen und Blöcke während der Pause platzieren.
|
||||
tutorial.purchaseWeapons.text = Du kannst neue [yellow] Waffen [] für deinen Mech kaufen, indem du das Verbesserungs-Menü unten links öffnest.
|
||||
tutorial.switchWeapons.text = Schalte Waffen, indem du entweder auf das Symbol unten links klickst oder Nummern verwendest [orange] [[1-9] [].
|
||||
tutorial.spawnWave.text = Hier kommt die erste Welle. Zerstöre sie.
|
||||
tutorial.pumpDesc.text = In späteren Wellen müsst du möglicherweise [yellow] Pumpen [] verwenden, um Flüssigkeiten für Generatoren oder Extraktoren zu verteilen.
|
||||
tutorial.pumpPlace.text = Pumpen arbeiten ähnlich wie Bohrer, ausser dass sie anstelle von Gegenständen Flüssigkeiten produzieren. Versuch mal, eine Pumpe auf das [yellow] gekennzeichnete Öl [] zu setzen.
|
||||
tutorial.conduitUse.text = Stellen Sie nun eine [orange] Leitungsrohr [] von der Pumpe weg.
|
||||
tutorial.conduitUse2.text = Und noch ein paar mehr ...
|
||||
tutorial.conduitUse3.text = Und noch ein paar mehr ...
|
||||
tutorial.generator.text = Stellen Sie nun einen [orange] Verbrennungsgenerator [] Block am Ende des Leitungsrohres auf.
|
||||
tutorial.generatorExplain.text = Dieser Generator erzeugt nun [yellow] Energie [] aus dem Öl.
|
||||
tutorial.lasers.text = Die Energie wird mit [yellow] Energielasern [] verteilt. Drehe und platziere einen hier.
|
||||
tutorial.laserExplain.text = Der Generator wird nun Energie in den Laserblock bewegen. Ein [yellow] undurchsichtiger [] Strahl bedeutet, dass er gerade Leistung überträgt, und ein [yellow] transparenter [] Strahl bedeutet, dass dies nicht der Fall ist.
|
||||
tutorial.laserMore.text = Du kannst überprüfen, wie viel Energie ein Block hat, indem du darüber schweben und den [yellow] gelben Balken [] oben prüfen.
|
||||
tutorial.healingTurret.text = Dieser Laser kann verwendet werden, um einen [lime] -Reparaturgeschütz [] anzutreiben. Platziere einen hier.
|
||||
tutorial.healingTurretExplain.text = Solange er Kraft hat, repariert dieser Turm in der Nähe Blöcke. [] Wenn du spielst, stelle sicher, dass du so schnell wie möglich einen in deiner Basis bekommst!
|
||||
tutorial.smeltery.text = Viele Blöcke benötigen [orange] Stahl [], um eine [orange] Schmelzer [] herzustellen. Platziere einen hier.
|
||||
tutorial.smelterySetup.text = Diese Schmelzer wird nun [orange] Stahl [] aus dem Eingangs-Eisen produzieren, wobei Kohle als Brennstoff verwendet wird.
|
||||
tutorial.end.text = Und damit ist das Tutorial abgeschlossen! Viel Glück!
|
||||
keybind.move_x.name = bewege_x
|
||||
keybind.move_y.name = bewege_y
|
||||
keybind.select.name = wählen
|
||||
keybind.break.name = Unterbrechung
|
||||
keybind.shoot.name = Schiess
|
||||
keybind.zoom_hold.name = zoomen_halten
|
||||
keybind.zoom.name = zoomen
|
||||
keybind.menu.name = Menü
|
||||
keybind.pause.name = Pause
|
||||
keybind.dash.name = Bindestrich
|
||||
keybind.rotate_alt.name = drehen_alt
|
||||
keybind.rotate.name = Drehen
|
||||
keybind.weapon_1.name = Waffe_1
|
||||
keybind.weapon_2.name = Waffe_2
|
||||
keybind.weapon_3.name = Waffe_3
|
||||
keybind.weapon_4.name = Waffe_4
|
||||
keybind.weapon_5.name = Waffe_5
|
||||
keybind.weapon_6.name = Waffe_6
|
||||
mode.waves.name = Wellen
|
||||
mode.sandbox.name = Sandkasten
|
||||
mode.freebuild.name = Freier Bau
|
||||
upgrade.standard.name = Standard
|
||||
upgrade.standard.description = Der Standardmech.
|
||||
upgrade.blaster.name = Blaster
|
||||
upgrade.blaster.description = Schiesst eine langsame, schwache Kugel.
|
||||
upgrade.triblaster.name = Dreifach-Blaster
|
||||
upgrade.triblaster.description = Schiesst 3 Kugeln in einer Ausbreitung.
|
||||
upgrade.clustergun.name = Klumpen-Waffe
|
||||
upgrade.clustergun.description = Schiesst eine ungenaue Verbreitung von explosiven Granaten.
|
||||
upgrade.beam.name = Strahlkanone
|
||||
upgrade.beam.description = Schiesst einen weitreichenden durchdringenden Laserstrahl.
|
||||
upgrade.vulcan.name = Vulkan
|
||||
upgrade.vulcan.description = Schiesst eine Flut von schnellen Kugeln.
|
||||
upgrade.shockgun.name = Schock-Waffe
|
||||
upgrade.shockgun.description = Erschiesst eine verheerende Explosion von geladenen Granatsplittern.
|
||||
item.stone.name = Stein
|
||||
item.iron.name = Eisen
|
||||
item.coal.name = Kohle
|
||||
item.steel.name = Stahl
|
||||
item.titanium.name = Titan
|
||||
item.dirium.name = Dirium
|
||||
item.thorium.name = Uran
|
||||
item.sand.name = Sand
|
||||
liquid.water.name = Wasser
|
||||
liquid.plasma.name = Plasma
|
||||
liquid.lava.name = Lava
|
||||
liquid.oil.name = Öl
|
||||
block.weaponfactory.name = Waffenfabrik
|
||||
block.air.name = Luft
|
||||
block.blockpart.name = Blockteil
|
||||
block.deepwater.name = tiefes Wasser
|
||||
block.water.name = Wasser
|
||||
block.lava.name = Lava
|
||||
block.oil.name = Öl
|
||||
block.stone.name = Stein
|
||||
block.blackstone.name = schwarzer Stein
|
||||
block.iron.name = Eisen
|
||||
block.coal.name = Kohle
|
||||
block.titanium.name = Titan
|
||||
block.thorium.name = Uran
|
||||
block.dirt.name = Erde
|
||||
block.sand.name = Sand
|
||||
block.ice.name = Eis
|
||||
block.snow.name = Schnee
|
||||
block.grass.name = Gras
|
||||
block.sandblock.name = Sandstein
|
||||
block.snowblock.name = Schneeblock
|
||||
block.stoneblock.name = Steinblock
|
||||
block.blackstoneblock.name = Schwarzer Stein
|
||||
block.grassblock.name = Grasblock
|
||||
block.mossblock.name = Moosblock
|
||||
block.shrub.name = Busch
|
||||
block.rock.name = Felsen
|
||||
block.icerock.name = Eisfelsen
|
||||
block.blackrock.name = Schwarzer Felsen
|
||||
block.dirtblock.name = Erdblock
|
||||
block.stonewall.name = Steinwand
|
||||
block.stonewall.fulldescription = Ein billiger Verteidigungsblock. Nützlich zum Schutz des Kerns und der Geschütztürme in den ersten Wellen.
|
||||
block.ironwall.name = Eisenwand
|
||||
block.ironwall.fulldescription = Ein grundlegender Verteidigungsblock. Bietet Schutz vor Feinden.
|
||||
block.steelwall.name = Stahlwand
|
||||
block.steelwall.fulldescription = Ein Standard-Verteidigungsblock. Bietet angemessen Schutz vor Feinden.
|
||||
block.titaniumwall.name = Titanwand
|
||||
block.titaniumwall.fulldescription = Eine starke Abwehrblockade. Bietet Schutz vor Feinden.
|
||||
block.duriumwall.name = Diriumwand
|
||||
block.duriumwall.fulldescription = Eine sehr starke Abwehrblockade. Bietet guten Schutz vor Feinden.
|
||||
block.compositewall.name = Verbundende Wand
|
||||
block.steelwall-large.name = grosse Stahlwand
|
||||
block.steelwall-large.fulldescription = Ein Standard-Verteidigungsblock. Mehrere Blöcke gross.
|
||||
block.titaniumwall-large.name = grosse Titanwand
|
||||
block.titaniumwall-large.fulldescription = Eine starke Abwehrblockade. Mehrere Blöcke gross.
|
||||
block.duriumwall-large.name = grosse Diriumwand
|
||||
block.duriumwall-large.fulldescription = Eine sehr starke Abwehrblockade. Mehrere Blöcke gross.
|
||||
block.titaniumshieldwall.name = geschützte Wand
|
||||
block.titaniumshieldwall.fulldescription = Ein starker Abwehrblock mit einem extra eingebauten Schild. Benötigt Energie. Verwendet Energie, um feindliche Kugeln zu absorbieren. Es wird empfohlen, Verstärker zu verwenden, um diesem Block Energie zuzuführen.
|
||||
block.repairturret.name = Reparaturgeschütz
|
||||
block.repairturret.fulldescription = Repariert beschädigte Blöcke in der Nähe in einem langsamen Tempo. Nutzt geringe Mengen an Energie.
|
||||
block.megarepairturret.name = Reparaturgeschütz II
|
||||
block.megarepairturret.fulldescription = Repariert in der Nähe beschädigte Blöcke in Reichweite zu einem vernünftigen Preis. Verwendet Energie.
|
||||
block.shieldgenerator.name = Schildgenerator
|
||||
block.shieldgenerator.fulldescription = Ein fortgeschrittener Verteidigungsblock. Schützt alle Blöcke in einem Radius vor Angriffen. Bei keinem Betrieb langsamer Strom verbrauch, verliert bei Kugelkontakt jedoch schnell Energie.
|
||||
block.door.name = Tür
|
||||
block.door.fulldescription = Ein Block, der durch Antippen geöffnet und geschlossen werden kann.
|
||||
block.door-large.name = grosse Tür
|
||||
block.door-large.fulldescription = Ein Block der mehrere Felder gross ist und der durch Antippen geöffnet und geschlossen werden kann.
|
||||
block.conduit.name = Leitungsrohr
|
||||
block.conduit.fulldescription = Grundlegender Flüssigkeitstransportblock. Funktioniert wie ein Förderband, aber mit Flüssigkeiten. Am besten mit Pumpen oder anderen Leitungen verwenden. Kann als Brücke für Gegner und Spieler verwendet werden.
|
||||
block.pulseconduit.name = Pulsleitungsrohr
|
||||
block.pulseconduit.fulldescription = Fortschrittlicher Flüssigkeitstransportblock. Transportiert Flüssigkeiten schneller und speichert mehr als normale Leitungsrohre.
|
||||
block.liquidrouter.name = flüssigkeiten verteiler
|
||||
block.liquidrouter.fulldescription = Funktioniert ähnlich wie ein Router. Akzeptiert Flüssigkeit von einer Seite und gibt sie auf die anderen Seiten aus. Nützlich zum Aufspalten von Flüssigkeit aus eines einzelnen Leitungsrohres in mehrere andere Leitungensrohre.
|
||||
block.conveyor.name = Förderband
|
||||
block.conveyor.fulldescription = Grundelement Transport Block. Bewegt Gegenstände nach vorne und legt sie automatisch in Türmen oder ähnliches. Drehbar. Kann als Brücke für Gegner und Spieler verwendet werden.
|
||||
block.steelconveyor.name = Stahlförderband
|
||||
block.steelconveyor.fulldescription = Erweiterter Transportblock Bewegt Gegenstände schneller als Standardförderer.
|
||||
block.poweredconveyor.name = Impulsförderband
|
||||
block.poweredconveyor.fulldescription = Der ultimative Transportblock für Gegenstände. Bewegt Gegenstände noch schneller als Stahlförderer.
|
||||
block.router.name = Verteiler
|
||||
block.router.fulldescription = Akzeptiert Objekte aus einer Richtung und gibt sie in 3 andere Richtungen aus. Kann auch eine bestimmte Anzahl von Gegenständen speichern. Geeignet zum Aufteilen der Materialien von einem Bohrer in mehrere Geschütze.
|
||||
block.junction.name = Kreuzung
|
||||
block.junction.fulldescription = Fungiert als Brücke für zwei kreuzende Förderbänder. Nützlich in Situationen mit zwei verschiedenen Förderbänder, die unterschiedliche Materialien zu verschiedenen Orten transportieren.
|
||||
block.conveyortunnel.name = Förderbandtunnel
|
||||
block.conveyortunnel.fulldescription = Transportiert Artikel unter Blöcken. Verwendung für einen Tunnel, der in den zu untertunnelnden Block führt, und einen auf der anderen Seite. Stellen Sie sicher, dass beide Tunnel in entgegengesetzte Richtungen weisen, das heisst das die Tunnel voneinander weggucken.
|
||||
block.liquidjunction.name = flüssigkeite Kreuzung
|
||||
block.liquidjunction.fulldescription = Funktioniert als Brücke für zwei kreuzende Leitungsrohre. Nützlich in Situationen mit zwei verschiedenen Leitungen, die unterschiedliche Flüssigkeiten zu verschiedenen Orten transportieren.
|
||||
block.liquiditemjunction.name = Flüssigkeit-Gegenstand-Kreuzung
|
||||
block.liquiditemjunction.fulldescription = Fungiert als Brücke zum Überqueren von Leitungsrohre und Förderbändern.
|
||||
block.powerbooster.name = Energieverstärker
|
||||
block.powerbooster.fulldescription = Verteilt die Energie an alle Blöcke innerhalb seines Radius.
|
||||
block.powerlaser.name = Energielaser
|
||||
block.powerlaser.fulldescription = Erzeugt einen Laser, der die Kraft auf den Block davor überträgt. Erzeugt selbst keine Energie. Am besten mit Generatoren oder anderen Lasern verwendet.
|
||||
block.powerlaserrouter.name = Laser Verteiler
|
||||
block.powerlaserrouter.fulldescription = Laser, der die Kraft in drei Richtungen gleichzeitig verteilt. Nützlich in Situationen, in denen mehrere Blöcke von einem Generator mit Strom versorgt werden müssen.
|
||||
block.powerlasercorner.name = Laser-Ecke
|
||||
block.powerlasercorner.fulldescription = Laser, der die Kraft in zwei Richtungen gleichzeitig verteilt. Nützlich in Situationen, in denen mehrere Blöcke von einem Generator mit Strom versorgt werden müssen und ein Router ungenau ist.
|
||||
block.teleporter.name = Teleporter
|
||||
block.teleporter.fulldescription = Erweiterter Transportblock Teleporter geben Gegenstände in andere Teleporter derselben Farbe ein. Tut nichts, wenn keine Teleporter derselben Farbe existieren. Wenn mehrere Teleporter mit derselben Farbe existieren, wird eine zufällige ausgewählt. Verwendet Energie. Tippen, um die Farbe zu ändern.
|
||||
block.sorter.name = Sortierer
|
||||
block.sorter.fulldescription = Sortiert den Gegenstand nach Materialart. Das zu akzeptierende Material wird durch die Farbe im Block angezeigt. Alle Artikel, die dem Sortiermaterial entsprechen, werden vorwärts ausgegeben, alles andere wird nach links und rechts ausgegeben.
|
||||
block.core.name = Kern
|
||||
block.pump.name = Pumpe
|
||||
block.pump.fulldescription = Pumpen Flüssigkeiten aus einem Quellblock - meist Wasser, Lava oder Öl. Gibt Flüssigkeit in benachbarte Leitungsrohre aus.
|
||||
block.fluxpump.name = flux Pumpe
|
||||
block.fluxpump.fulldescription = Eine erweiterte Version der Pumpe. Speichert mehr Flüssigkeit und pumpt Flüssigkeit schneller.
|
||||
block.smelter.name = Schmelzer
|
||||
block.smelter.fulldescription = Der essentielle Bastelblock. Wenn 1x Eisen und 1x Kohle eingegeben wird, wird 1x Stahl ausgegeben.
|
||||
block.crucible.name = Tiegel
|
||||
block.crucible.fulldescription = Ein fortgeschrittener Handwerksblock. Braucht Kohle um zu funktionieren. Wenn 1x Titan und 1x Stahl eingegeben wird, wird 1x Dirium ausgegeben.
|
||||
block.coalpurifier.name = Kohle-Extraktor
|
||||
block.coalpurifier.fulldescription = Ein einfacher Extraktorblock. Gibt Kohle aus, wenn der Block mit grossen Mengen Wasser und Stein gefüllt wird.
|
||||
block.titaniumpurifier.name = Titan-Extraktor
|
||||
block.titaniumpurifier.fulldescription = Ein Standard-Extraktorblock. Gibt Titan aus wenn er mit grossen Mengen Wasser und Eisen gefüllt wird.
|
||||
block.oilrefinery.name = Ölraffinerie
|
||||
block.oilrefinery.fulldescription = Veredelt grosse Mengen Öl zu Kohle. Nützlich für die Betankung von Blöcken die Kohle benutzen wie z.b. Waffentürme, wenn Kohleadern knapp sind.
|
||||
block.stoneformer.name = Steinformer
|
||||
block.stoneformer.fulldescription = Verfestigt flüssige Lava zu Stein. Nützlich für die Herstellung von grossen Mengen von Stein für Kohle-Extraktor.
|
||||
block.lavasmelter.name = Lava-Schmelzer
|
||||
block.lavasmelter.fulldescription = Verwendet Lava, um Eisen zu Stahl schmelzen. Eine Alternative zum Schmelzer. Nützlich in Situationen, in denen Kohle knapp ist.
|
||||
block.stonedrill.name = Steinbohrer
|
||||
block.stonedrill.fulldescription = Der wesentliche Bohrer. Wenn er auf Steinplatten gelegt wird, gibt er Steine mit einer langsamen Geschwindigkeit auf endlosen Zeit aus.
|
||||
block.irondrill.name = Eisenbohrer
|
||||
block.irondrill.fulldescription = Eine grundlegender Bohrer. Wenn es auf Eisenerz gelegt wird, gibt er Eisen auf endloser Zeit langsam aus.
|
||||
block.coaldrill.name = Kohlenbohrer
|
||||
block.coaldrill.fulldescription = Eine grundlegender Bohrer. Wenn es auf Kohleerz platziert wird, gibt er für endloser Zeit langsam Kohle aus.
|
||||
block.thoriumdrill.name = Uran-Bohrer
|
||||
block.thoriumdrill.fulldescription = Ein fortgeschrittener Bohrer. Wenn es auf Uranerz platziert wird, gibt er Uran mit einer langsamen Geschwindigkeit auf endloser Zeit ab.
|
||||
block.titaniumdrill.name = Titan-Bohrer
|
||||
block.titaniumdrill.fulldescription = Ein fortgeschrittener Bohrer. Wenn es auf Titanerz platziert wird, gibt er Titan langsam aus für undendlich langer Zeit
|
||||
block.omnidrill.name = Omni-Bohrer
|
||||
block.omnidrill.fulldescription = Der ultimative Bohrer. Baut in schnellem Tempo jegliches Erz ab.
|
||||
block.coalgenerator.name = Kohle-Generator
|
||||
block.coalgenerator.fulldescription = Der wesentliche Generator. Erzeugt Energie aus Kohle. Gibt Energie als Laser an seine 4 Seiten aus.
|
||||
block.thermalgenerator.name = thermischer Generator
|
||||
block.thermalgenerator.fulldescription = Erzeugt Energie aus Lava. Gibt Energie als Laser an seine 4 Seiten aus.
|
||||
block.combustiongenerator.name = Verbrennungsgenerator
|
||||
block.combustiongenerator.fulldescription = Erzeugt Energie aus Öl. Gibt Energie als Laser an seine 4 Seiten aus.
|
||||
block.rtgenerator.name = RTG-Generator
|
||||
block.rtgenerator.fulldescription = Erzeugt geringe Mengen an Energie aus dem radioaktiven Zerfall von Uran. Gibt Energie als Laser an seine 4 Seiten aus.
|
||||
block.nuclearreactor.name = Kernreaktor
|
||||
block.nuclearreactor.fulldescription = Eine erweiterte Version des RTG-Generators und der ultimative Energie Generator. Erzeugt Strom aus Uran. Erfordert konstante Wasserkühlung. Sehr heiss; explodiert heftig, wenn zu wenig Kühlmittel zugeführt wird.
|
||||
block.turret.name = Geschütz
|
||||
block.turret.fulldescription = Ein einfacher, billiger Turm. Verwendet Stein für Munition. Hat etwas mehr Reichweite als das Doppelgeschütz.
|
||||
block.doubleturret.name = Doppelgeschütz
|
||||
block.doubleturret.fulldescription = Eine etwas stärkere Version des Geschützes. Verwendet Stein für Munition. Hat deutlich mehr Schaden, hat aber eine geringere Reichweite. Schiesst zwei Kugeln.
|
||||
block.machineturret.name = Gatling Geschütz
|
||||
block.machineturret.fulldescription = Ein Standard-Allround-Turm. Verwendet Eisen für Munition. Hat eine schnelle Feuerrate mit gutem Schaden.
|
||||
block.shotgunturret.name = Splittergeschütz
|
||||
block.shotgunturret.fulldescription = Ein Standard-Turm. Verwendet Eisen für Munition. Schiesst 7 Kugeln auf einmal. Geringere Reichweite, aber höhere Schadensleistung als das Gatling Geschütz
|
||||
block.flameturret.name = Flammenwerfer
|
||||
block.flameturret.fulldescription = Fortschrittlicher Nahbereichswaffe. Verwendet Kohle für Munition. Hat eine sehr geringe Reichweite, aber sehr hohen Schaden. Gut für Nahkampf. Empfohlen für den Einsatz hinter Mauern.
|
||||
block.sniperturret.name = Schienenkanone
|
||||
block.sniperturret.fulldescription = Fortschrittliches Reichweitengeschütz. Verwendet Stahl für Munition. Sehr hoher Schaden, aber niedrige Feuerrate. Teuer zu verwenden, kann aber aufgrund seiner Reichweite weit entfernt von den feindlichen Linien platziert werden.
|
||||
block.mortarturret.name = Flakgeschütz
|
||||
block.mortarturret.fulldescription = Fortschrittlicher Flächen-Schaden Turm. Verwendet Kohle für Munition. Sehr langsame Feuerrate und Geschosse, aber sehr hoher Einzelziel- und Flächenschaden. Nützlich gegen grosse Mengen von Feinden.
|
||||
block.laserturret.name = Laserturm
|
||||
block.laserturret.fulldescription = Fortschrittlicher Einzelziel-Turm. Verwendet Strom. Guter Allround-Revolver für mittlere Reichweiten. Nur Einzelziel. Verfehlt nie.
|
||||
block.waveturret.name = Teslakanone
|
||||
block.waveturret.fulldescription = Erweiterter Mehrfach-Ziele-Turm. Verwendet Strom. Mittlere Reichweite. Verfehlt nie. Im Durchschnitt zu wenig Schaden, aber kann mehrere Feinde gleichzeitig mit Kettenblitz treffen.
|
||||
block.plasmaturret.name = Plasmageschütz
|
||||
block.plasmaturret.fulldescription = Hochentwickelte Version des Flammenwerfers. Verwendet Kohle als Munition. Sehr hoher Schaden, niedriger bis mittlerer Reichweite.
|
||||
block.chainturret.name = Kettengeschütz
|
||||
block.chainturret.fulldescription = Die ultimative Schnellfeuer Waffe. Verwendet Uran als Munition. Schiesst grosse Kugeln mit hoher Feuerrate. Mittlere Reichweite. Mehrere Felder gross. Hält extrem viel aus.
|
||||
block.titancannon.name = Titan Kanone
|
||||
block.titancannon.fulldescription = Die ultimative Langstrecken Kanone. Verwendet Uran als Munition. Schiesst grosse Flächen-Schadenden-Granaten mit einer mittleren Feuerrate ab. Lange Reichweite. Ist mehrere Felder gross. Hält extrem viel aus.
|
||||
block.playerspawn.name = Spielerspawn
|
||||
block.enemyspawn.name = Gegnerspawn
|
||||
text.about=Erstellt von [ROYAL] Anuken. [] \nUrsprünglich ein Eintrag im [orange] GDL [] MM Jam.\n\nCredits: \n- SFX gemacht mit [yellow] bfxr [] - Musik gemacht von [green] RoccoW [] / gefunden auf [lime] FreeMusicArchive.org [] \n\nBesonderer Dank geht an: \n- [coral] MitchellFJN []: Umfangreicher Spieletest und Feedback \n- [sky] Luxray5474 []: Wiki-Arbeit, Code-Beiträge \n- Alle Beta-Tester auf itch.io und Google Play\n
|
||||
text.discord=Trete dem Mindustry Discord bei!
|
||||
text.gameover=Der Kern wurde zerstört.
|
||||
text.highscore=[YELLOW] Neuer Highscore!
|
||||
text.lasted=Du hast bis zur folgenden Welle überlebt
|
||||
text.level.highscore=High Score: [accent] {0}
|
||||
text.level.delete.title=Löschen bestätigen
|
||||
text.level.select=Level Auswahl
|
||||
text.level.mode=Spielmodus:
|
||||
text.savegame=Spiel speichern
|
||||
text.loadgame=Spiel laden
|
||||
text.joingame=Spiel beitreten
|
||||
text.quit=Verlassen
|
||||
text.about.button=Info
|
||||
text.name=Name:
|
||||
text.players={0} Spieler online
|
||||
text.players.single={0} Spieler online
|
||||
text.server.mismatch=Paketfehler: Mögliche Client / Server-Version stimmt nicht überein. Stell sicher, dass du und der Host die neueste Version von Mindustry haben!
|
||||
text.server.kicked.kick=Du wurdest vom Server gekickt!
|
||||
text.server.kicked.invalidPassword=Falsches Passwort.
|
||||
text.server.connected={0} ist beigetreten
|
||||
text.server.disconnected={0} hat die Verbindung getrennt.
|
||||
text.nohost=Server kann nicht auf einer benutzerdefinierten Karte gehostet werden!
|
||||
text.hostserver=Server hosten
|
||||
text.host=Host
|
||||
text.hosting=[accent] Server wird geöffnet...
|
||||
text.hosts.refresh=Aktualisieren
|
||||
text.hosts.discovering=Suche nach LAN-Spielen
|
||||
text.server.refreshing=Server wird aktualisiert
|
||||
text.hosts.none=[lightgray] Keine LAN Spiele gefunden!
|
||||
text.host.invalid=[scarlet] Kann keine Verbindung zum Host herstellen.
|
||||
text.server.add=Server hinzufügen
|
||||
text.server.delete=Bist du dir sicher das du diesen Server löschen möchtest?
|
||||
text.server.hostname=Host: {0}
|
||||
text.server.edit=Server bearbeiten
|
||||
text.joingame.title=Spiel beitreten
|
||||
text.joingame.ip=IP:
|
||||
text.disconnect=Verbindung unterbrochen.
|
||||
text.connecting=[accent] Verbindet...
|
||||
text.connecting.data=[accent] Weltdaten werden geladen...
|
||||
text.connectfail=[crimson] Verbindung zum Server konnte nicht hergestellt werden: [orange]{0}
|
||||
text.server.port=Port:
|
||||
text.server.invalidport=Falscher Port!
|
||||
text.server.error=[crimson] Fehler beim Hosten des Servers: [orange] {0}
|
||||
text.save.new=Neuer Spielstand
|
||||
text.save.overwrite=Möchten du diesen Spielstand wirklich überschreiben?
|
||||
text.overwrite=Überschreiben
|
||||
text.save.none=Keine Spielstände gefunden!
|
||||
text.saveload=[accent] Speichern ...
|
||||
text.savefail=Fehler beim Speichern des Spiels!
|
||||
text.save.delete.confirm=Möchtest du diesen Spielstand wirklich löschen?
|
||||
text.save.delete=Löschen
|
||||
text.save.export=Spielstand exportieren
|
||||
text.save.import.invalid=[orange] Dieser Spielstand ist ungültig!
|
||||
text.save.import.fail=[crimson] Spielstand konnte nicht importiert werden: [orange] {0}
|
||||
text.save.export.fail=[crimson] Spielstand konnte nicht exportiert werden: [orange] {0}
|
||||
text.save.import=Spielstand importieren
|
||||
text.save.newslot=Name speichern:
|
||||
text.save.rename=Umbenennen
|
||||
text.save.rename.text=Neuer Name
|
||||
text.selectslot=Wähle einen Spielstand
|
||||
text.slot=[accent] Platz {0}
|
||||
text.save.corrupted=[orange] Datei beschädigt oder ungültig!
|
||||
text.empty=<leer>
|
||||
text.on=An
|
||||
text.off=Aus
|
||||
text.save.autosave=Automatisches Speichern: {0}
|
||||
text.save.map=Karte: {0}
|
||||
text.save.wave=Welle: {0}
|
||||
text.save.date=Zuletzt gespeichert: {0}
|
||||
text.confirm=Bestätigen
|
||||
text.delete=Löschen
|
||||
text.ok=OK
|
||||
text.open=Öffnen
|
||||
text.cancel=Abbruch
|
||||
text.openlink=Link öffnen
|
||||
text.back=Zurück
|
||||
text.quit.confirm=Willst du wirklich aufhören?
|
||||
text.loading=[accent] Wird geladen ...
|
||||
text.wave=[orange] Welle {0}
|
||||
text.wave.waiting=Welle in {0}
|
||||
text.waiting=Warten...
|
||||
text.enemies={0} Feinde
|
||||
text.enemies.single={0} Feind
|
||||
text.loadimage=Bild laden
|
||||
text.saveimage=Bild speichern
|
||||
text.editor.badsize=[orange]Ungültige Bildabmessungen! [] Gültige Kartenabmessungen: {0}
|
||||
text.editor.errorimageload=Fehler beim Laden des Bildes: [orange] {0}
|
||||
text.editor.errorimagesave=Fehler beim Speichern des Bildes: [orange] {0}
|
||||
text.editor.generate=Generieren
|
||||
text.editor.resize=Grösse\nanpassen
|
||||
text.editor.loadmap=Karte\nladen
|
||||
text.editor.savemap=Karte\nspeichern
|
||||
text.editor.loadimage=Bild\nladen
|
||||
text.editor.saveimage=Bild\nspeichern
|
||||
text.editor.unsaved=[crimson] Du hast Änderungen nicht gespeichert [] Möchtest du wirklich aufhören?
|
||||
text.editor.resizemap=Grösse der Karte ändern
|
||||
text.editor.mapname=Map Name
|
||||
text.editor.overwrite=[accent] Warnung! Dies überschreibt eine vorhandene Map.
|
||||
text.editor.selectmap=Wähle eine Map zum Laden:
|
||||
text.width=Breite:
|
||||
text.height=Höhe:
|
||||
text.menu=Menü
|
||||
text.play=Spielen
|
||||
text.load=Laden
|
||||
text.save=Speichern
|
||||
text.settings=Einstellungen
|
||||
text.tutorial=Tutorial
|
||||
text.editor=Bearbeiter
|
||||
text.mapeditor=Karten Bearbeiter
|
||||
text.donate=Spenden
|
||||
text.settings.reset=Auf Standard zurücksetzen
|
||||
text.settings.controls=Steuerung
|
||||
text.settings.game=Spiel
|
||||
text.settings.sound=Audio
|
||||
text.settings.graphics=Grafiken
|
||||
text.upgrades=Verbesserungen
|
||||
text.purchased=[LIME] Erstellt!
|
||||
text.weapons=Waffen
|
||||
text.paused=Pausiert
|
||||
text.error.title=[crimson] Ein Fehler ist aufgetreten
|
||||
text.error.crashtitle=EIn Fehler ist aufgetreten!
|
||||
text.blocks.blockinfo=Blockinfo:
|
||||
text.blocks.powercapacity=Energiekapazität
|
||||
text.blocks.powershot=Energie / Schuss
|
||||
text.blocks.size=Grösse
|
||||
text.blocks.liquidcapacity=Flüssigkeitskapazität
|
||||
text.blocks.maxitemssecond=Max Gegenstände / Sekunde
|
||||
text.blocks.powerrange=Energiereichweite
|
||||
text.blocks.itemcapacity=Gegenstand Kapazität
|
||||
text.blocks.inputliquid=Flüssigkeiten Eingabe
|
||||
text.blocks.inputitem=Eingabe Gegenstand
|
||||
text.blocks.explosive=Hochexplosiv!
|
||||
text.blocks.health=Lebenspunkte
|
||||
text.blocks.inaccuracy=Ungenauigkeit
|
||||
text.blocks.shots=Schüsse
|
||||
text.blocks.inputcapacity=Eingabekapazität
|
||||
text.blocks.outputcapacity=Ausgabekapazität
|
||||
setting.difficulty.easy=Leicht
|
||||
setting.difficulty.normal=Normal
|
||||
setting.difficulty.hard=Schwer
|
||||
setting.difficulty.insane=Unmöglich
|
||||
setting.difficulty.purge=Auslöschung
|
||||
setting.difficulty.name=Schwierigkeit
|
||||
setting.screenshake.name=Bildschirm wackeln
|
||||
setting.indicators.name=Feind Indikatoren
|
||||
setting.effects.name=Effekte anzeigen
|
||||
setting.sensitivity.name=Kontroller Empfindlichkeit
|
||||
setting.saveinterval.name=Autosave Häufigkeit
|
||||
setting.seconds={0} Sekunden
|
||||
setting.fps.name=Zeige FPS
|
||||
setting.vsync.name=VSync
|
||||
setting.lasers.name=Zeige Energielaser
|
||||
setting.healthbars.name=Zeige Objekt Lebensbalken
|
||||
setting.musicvol.name=Musiklautstärke
|
||||
setting.mutemusic.name=Musik stummschalten
|
||||
setting.sfxvol.name=Audioeffekte Lautstärke
|
||||
setting.mutesound.name=Audioeffekte stummschalten
|
||||
map.maze.name=Labyrinth
|
||||
map.fortress.name=Festung
|
||||
map.sinkhole.name=Sinkloch
|
||||
map.caves.name=Höhlen
|
||||
map.volcano.name=Vulkan
|
||||
map.caldera.name=Lavakessel
|
||||
map.scorch.name=Flammen
|
||||
map.desert.name=Wüste
|
||||
map.island.name=Insel
|
||||
map.grassland.name=Grasland
|
||||
map.tundra.name=Kältesteppe
|
||||
map.spiral.name=Spirale
|
||||
map.tutorial.name=Tutorial
|
||||
keybind.move_x.name=bewege_x
|
||||
keybind.move_y.name=bewege_y
|
||||
keybind.select.name=wählen
|
||||
keybind.break.name=Unterbrechung
|
||||
keybind.shoot.name=Schiess
|
||||
keybind.zoom_hold.name=zoomen_halten
|
||||
keybind.zoom.name=zoomen
|
||||
keybind.menu.name=Menü
|
||||
keybind.pause.name=Pause
|
||||
keybind.dash.name=Bindestrich
|
||||
keybind.rotate_alt.name=drehen_alt
|
||||
keybind.rotate.name=Drehen
|
||||
mode.waves.name=Wellen
|
||||
mode.sandbox.name=Sandkasten
|
||||
mode.freebuild.name=Freier Bau
|
||||
item.stone.name=Stein
|
||||
item.coal.name=Kohle
|
||||
item.titanium.name=Titan
|
||||
item.thorium.name=Uran
|
||||
item.sand.name=Sand
|
||||
liquid.water.name=Wasser
|
||||
liquid.lava.name=Lava
|
||||
liquid.oil.name=Öl
|
||||
block.door.name=Tür
|
||||
block.door-large.name=grosse Tür
|
||||
block.conduit.name=Leitungsrohr
|
||||
block.pulseconduit.name=Pulsleitungsrohr
|
||||
block.liquidrouter.name=flüssigkeiten verteiler
|
||||
block.conveyor.name=Förderband
|
||||
block.router.name=Verteiler
|
||||
block.junction.name=Kreuzung
|
||||
block.liquidjunction.name=flüssigkeite Kreuzung
|
||||
block.sorter.name=Sortierer
|
||||
block.smelter.name=Schmelzer
|
||||
text.credits=Credits
|
||||
text.link.discord.description=the official Mindustry discord chatroom
|
||||
text.link.github.description=Game source code
|
||||
text.link.dev-builds.description=Unstable development builds
|
||||
text.link.trello.description=Official trello board for planned features
|
||||
text.link.itch.io.description=itch.io page with PC downloads and web version
|
||||
text.link.google-play.description=Google Play store listing
|
||||
text.link.wiki.description=official Mindustry wiki
|
||||
text.linkfail=Failed to open link!\nThe URL has been copied to your cliboard.
|
||||
text.editor.web=The web version does not support the editor!\nDownload the game to use it.
|
||||
text.web.unsupported=The web version does not support this feature! Download the game to use it.
|
||||
text.multiplayer.web=This version of the game does not support multiplayer!\nTo play multiplayer from your browser, use the "multiplayer web version" link at the itch.io page.
|
||||
text.host.web=The web version does not support hosting games! Download the game to use this feature.
|
||||
text.map.delete=Are you sure you want to delete the map "[orange]{0}[]"?
|
||||
text.construction.title=Block Construction Guide
|
||||
text.construction=You've just selected [accent]block construction mode[].\n\nTo begin placing, simply tap a valid location near your ship.\nOnce you have selected some blocks, press the checkbox to confirm, and your ship will begin constructing them.\n\n- [accent]Remove blocks[] from your selection by tapping them.\n- [accent]Shift the selection[] by holding and dragging any block in the selection.\n- [accent]Place blocks in a line[] by tapping and holding an empty spot, then dragging in a direction.\n- [accent]Cancel construction or selection[] by pressing the X at the bottom left.
|
||||
text.deconstruction.title=Block Deconstruction Guide
|
||||
text.deconstruction=You've just selected [accent]block deconstruction mode[].\n\nTo begin breaking, simply tap a block near your ship.\nOnce you have selected some blocks, press the checkbox to confirm, and your ship will begin de-constructing them.\n\n- [accent]Remove blocks[] from your selection by tapping them.\n- [accent]Remove blocks in an area[] by tapping and holding an empty spot, then dragging in a direction.\n- [accent]Cancel deconstruction or selection[] by pressing the X at the bottom left.
|
||||
text.showagain=Don't show again next session
|
||||
text.unlocks=Unlocks
|
||||
text.addplayers=Add/Remove Players
|
||||
text.newgame=New Game
|
||||
text.maps=Maps
|
||||
text.maps.none=[LIGHT_GRAY]No maps found!
|
||||
text.unlocked=New Block Unlocked!
|
||||
text.unlocked.plural=New Blocks Unlocked!
|
||||
text.server.closing=[accent]Closing server...
|
||||
text.server.kicked.fastShoot=You are shooting too quickly.
|
||||
text.server.kicked.clientOutdated=Outdated client! Update your game!
|
||||
text.server.kicked.serverOutdated=Outdated server! Ask the host to update!
|
||||
text.server.kicked.banned=You are banned on this server.
|
||||
text.server.kicked.recentKick=You have been kicked recently.\nWait before connecting again.
|
||||
text.server.kicked.nameInUse=There is someone with that name\nalready on this server.
|
||||
text.server.kicked.nameEmpty=Your name must contain at least one character or number.
|
||||
text.server.kicked.idInUse=You are already on this server! Connecting with two accounts is not permitted.
|
||||
text.server.kicked.customClient=This server does not support custom builds. Download an official version.
|
||||
text.host.info=The [accent]host[] button hosts a server on ports [scarlet]6567[] and [scarlet]6568.[]\nAnybody on the same [LIGHT_GRAY]wifi or local network[] should be able to see your server in their server list.\n\nIf you want people to be able to connect from anywhere by IP, [accent]port forwarding[] is required.\n\n[LIGHT_GRAY]Note: If someone is experiencing trouble connecting to your LAN game, make sure you have allowed Mindustry access to your local network in your firewall settings.
|
||||
text.join.info=Here, you can enter a [accent]server IP[] to connect to, or discover [accent]local network[] servers to connect to.\nBoth LAN and WAN multiplayer is supported.\n\n[LIGHT_GRAY]Note: There is no automatic global server list; if you want to connect to someone by IP, you would need to ask the host for their IP.
|
||||
text.server.friendlyfire=Friendly Fire
|
||||
text.trace=Trace Player
|
||||
text.trace.playername=Player name: [accent]{0}
|
||||
text.trace.ip=IP: [accent]{0}
|
||||
text.trace.id=Unique ID: [accent]{0}
|
||||
text.trace.android=Android Client: [accent]{0}
|
||||
text.trace.modclient=Custom Client: [accent]{0}
|
||||
text.trace.totalblocksbroken=Total blocks broken: [accent]{0}
|
||||
text.trace.structureblocksbroken=Structure blocks broken: [accent]{0}
|
||||
text.trace.lastblockbroken=Last block broken: [accent]{0}
|
||||
text.trace.totalblocksplaced=Total blocks placed: [accent]{0}
|
||||
text.trace.lastblockplaced=Last block placed: [accent]{0}
|
||||
text.invalidid=Invalid client ID! Submit a bug report.
|
||||
text.server.bans=Bans
|
||||
text.server.bans.none=No banned players found!
|
||||
text.server.admins=Admins
|
||||
text.server.admins.none=No admins found!
|
||||
text.server.outdated=[crimson]Outdated Server![]
|
||||
text.server.outdated.client=[crimson]Outdated Client![]
|
||||
text.server.version=[lightgray]Version: {0}
|
||||
text.server.custombuild=[yellow]Custom Build
|
||||
text.confirmban=Are you sure you want to ban this player?
|
||||
text.confirmunban=Are you sure you want to unban this player?
|
||||
text.confirmadmin=Are you sure you want to make this player an admin?
|
||||
text.confirmunadmin=Are you sure you want to remove admin status from this player?
|
||||
text.disconnect.data=Failed to load world data!
|
||||
text.server.addressinuse=Address already in use!
|
||||
text.save.difficulty=Difficulty: {0}
|
||||
text.copylink=Copy Link
|
||||
text.changelog.title=Changelog
|
||||
text.changelog.loading=Getting changelog...
|
||||
text.changelog.error.android=[orange]Note that the changelog sometimes does not work on Android 4.4 and below!\nThis is due to an internal Android bug.
|
||||
text.changelog.error.ios=[orange]The changelog is currently not supported in iOS.
|
||||
text.changelog.error=[scarlet]Error getting changelog!\nCheck your internet connection.
|
||||
text.changelog.current=[yellow][[Current version]
|
||||
text.changelog.latest=[orange][[Latest version]
|
||||
text.saving=[accent]Saving...
|
||||
text.unknown=Unknown
|
||||
text.custom=Custom
|
||||
text.builtin=Built-In
|
||||
text.map.delete.confirm=Are you sure you want to delete this map? This action cannot be undone!
|
||||
text.map.random=[accent]Random Map
|
||||
text.map.nospawn=This map does not have any cores for the player to spawn in! Add a [ROYAL]blue[] core to this map in the editor.
|
||||
text.editor.slope=\\
|
||||
text.editor.openin=Open In Editor
|
||||
text.editor.oregen=Ore Generation
|
||||
text.editor.oregen.info=Ore Generation:
|
||||
text.editor.mapinfo=Map Info
|
||||
text.editor.author=Author:
|
||||
text.editor.description=Description:
|
||||
text.editor.name=Name:
|
||||
text.editor.teams=Teams
|
||||
text.editor.elevation=Elevation
|
||||
text.editor.saved=Saved!
|
||||
text.editor.save.noname=Your map does not have a name! Set one in the 'map info' menu.
|
||||
text.editor.save.overwrite=Your map overwrites a built-in map! Pick a different name in the 'map info' menu.
|
||||
text.editor.import.exists=[scarlet]Unable to import:[] a built-in map named '{0}' already exists!
|
||||
text.editor.import=Import...
|
||||
text.editor.importmap=Import Map
|
||||
text.editor.importmap.description=Import an already existing map
|
||||
text.editor.importfile=Import File
|
||||
text.editor.importfile.description=Import an external map file
|
||||
text.editor.importimage=Import Terrain Image
|
||||
text.editor.importimage.description=Import an external map image file
|
||||
text.editor.export=Export...
|
||||
text.editor.exportfile=Export File
|
||||
text.editor.exportfile.description=Export a map file
|
||||
text.editor.exportimage=Export Terrain Image
|
||||
text.editor.exportimage.description=Export a map image file
|
||||
text.editor.overwrite.confirm=[scarlet]Warning![] A map with this name already exists. Are you sure you want to overwrite it?
|
||||
text.fps=FPS: {0}
|
||||
text.tps=TPS: {0}
|
||||
text.ping=Ping: {0}ms
|
||||
text.language.restart=Please restart your game for the language settings to take effect.
|
||||
text.settings.language=Language
|
||||
text.settings.rebind=Rebind
|
||||
text.yes=Yes
|
||||
text.no=No
|
||||
text.info.title=[accent]Info
|
||||
text.blocks.targetsair=Targets Air
|
||||
text.blocks.itemspeed=Units Moved
|
||||
text.blocks.shootrange=Range
|
||||
text.blocks.poweruse=Power Use
|
||||
text.blocks.inputitemcapacity=Input Item Capacity
|
||||
text.blocks.outputitemcapacity=Input Item Capacity
|
||||
text.blocks.maxpowergeneration=Max Power Generation
|
||||
text.blocks.powertransferspeed=Power Transfer
|
||||
text.blocks.craftspeed=Production Speed
|
||||
text.blocks.inputliquidaux=Aux Liquid
|
||||
text.blocks.inputitems=Input Items
|
||||
text.blocks.outputitem=Output Item
|
||||
text.blocks.drilltier=Drillables
|
||||
text.blocks.drillspeed=Base Drill Speed
|
||||
text.blocks.liquidoutput=Liquid Output
|
||||
text.blocks.liquiduse=Liquid Use
|
||||
text.blocks.coolant=Coolant
|
||||
text.blocks.coolantuse=Coolant Use
|
||||
text.blocks.inputliquidfuel=Fuel Liquid
|
||||
text.blocks.liquidfueluse=Liquid Fuel Use
|
||||
text.blocks.reload=Reload
|
||||
text.blocks.inputfuel=Fuel
|
||||
text.blocks.fuelburntime=Fuel Burn Time
|
||||
text.unit.blocks=blocks
|
||||
text.unit.powersecond=power units/second
|
||||
text.unit.liquidsecond=liquid units/second
|
||||
text.unit.itemssecond=items/second
|
||||
text.unit.pixelssecond=pixels/second
|
||||
text.unit.liquidunits=liquid units
|
||||
text.unit.powerunits=power units
|
||||
text.unit.degrees=degrees
|
||||
text.unit.seconds=seconds
|
||||
text.unit.none=
|
||||
text.unit.items=items
|
||||
text.category.general=General
|
||||
text.category.power=Power
|
||||
text.category.liquids=Liquids
|
||||
text.category.items=Items
|
||||
text.category.crafting=Crafting
|
||||
text.category.shooting=Shooting
|
||||
setting.fullscreen.name=Fullscreen
|
||||
setting.multithread.name=Multithreading
|
||||
setting.minimap.name=Show Minimap
|
||||
text.keybind.title=Rebind Keys
|
||||
keybind.block_info.name=block_info
|
||||
keybind.chat.name=chat
|
||||
keybind.player_list.name=player_list
|
||||
keybind.console.name=console
|
||||
mode.text.help.title=Description of modes
|
||||
mode.waves.description=the normal mode. limited resources and automatic incoming waves.
|
||||
mode.sandbox.description=infinite resources and no timer for waves.
|
||||
mode.freebuild.description=limited resources and no timer for waves.
|
||||
content.item.name=Items
|
||||
content.liquid.name=Liquids
|
||||
content.unit-type.name=Units
|
||||
content.recipe.name=Blocks
|
||||
item.stone.description=A common raw material. Used for separating and refining into other materials, or melting into lava.
|
||||
item.tungsten.name=Tungsten
|
||||
item.tungsten.description=A common, but very useful structure material. Used in drills and heat-resistant blocks such as generators and smelteries.
|
||||
item.lead.name=Lead
|
||||
item.lead.description=A basic starter material. Used extensively in electronics and liquid transportation blocks.
|
||||
item.coal.description=A common and readily available fuel.
|
||||
item.carbide.name=Carbide
|
||||
item.carbide.description=A tough alloy made with tungsten and carbon. Used in advanced transportation blocks and high-tier drills.
|
||||
item.titanium.description=A rare super-light metal used extensively in liquid transportation, drills and aircraft.
|
||||
item.thorium.description=A dense, radioactive metal used as structural support and nuclear fuel.
|
||||
item.silicon.name=Silicon
|
||||
item.silcion.description=An extremely useful semiconductor, with applications in solar panels and many complex electronics.
|
||||
item.plastanium.name=Plastanium
|
||||
item.plastanium.description=A light, ductile material used in advanced aircraft and fragmentation ammunition.
|
||||
item.phase-matter.name=Phase Matter
|
||||
item.surge-alloy.name=Surge Alloy
|
||||
item.biomatter.name=Biomatter
|
||||
item.biomatter.description=A clump of organic mush; used for conversion into oil or as a basic fuel.
|
||||
item.sand.description=A common material that is used extensively in smelting, both in alloying and as a flux.
|
||||
item.blast-compound.name=Blast Compound
|
||||
item.blast-compound.description=A volatile compound used in bombs and explosives. While it can burned as fuel, this is not advised.
|
||||
item.pyratite.name=Pyratite
|
||||
item.pyratite.description=An extremely flammable substance used in incendiary weapons.
|
||||
liquid.cryofluid.name=Cryofluid
|
||||
text.item.explosiveness=[LIGHT_GRAY]Explosiveness: {0}
|
||||
text.item.flammability=[LIGHT_GRAY]Flammability: {0}
|
||||
text.item.radioactivity=[LIGHT_GRAY]Radioactivity: {0}
|
||||
text.item.fluxiness=[LIGHT_GRAY]Flux Power: {0}
|
||||
text.item.hardness=[LIGHT_GRAY]Hardness: {0}
|
||||
text.liquid.heatcapacity=[LIGHT_GRAY]Heat Capacity: {0}
|
||||
text.liquid.viscosity=[LIGHT_GRAY]Viscosity: {0}
|
||||
text.liquid.temperature=[LIGHT_GRAY]Temperature: {0}
|
||||
block.tungsten-wall.name=Tungsten Wall
|
||||
block.tungsten-wall-large.name=Large Tungsten Wall
|
||||
block.carbide-wall.name=Carbide Wall
|
||||
block.carbide-wall-large.name=Large Carbide Wall
|
||||
block.thorium-wall.name=Thorium Wall
|
||||
block.thorium-wall-large.name=Large Thorium Wall
|
||||
block.duo.name=Duo
|
||||
block.scorch.name=Scorch
|
||||
block.hail.name=Hail
|
||||
block.lancer.name=Lancer
|
||||
block.titanium-conveyor.name=Titanium Conveyor
|
||||
block.splitter.name=Splitter
|
||||
block.splitter.description=Outputs items into two opposite directions immediately after they are recieved.
|
||||
block.router.description=Splits items into all 4 directions. Can store items as a buffer.
|
||||
block.distributor.name=Distributor
|
||||
block.distributor.description=A splitter that can split items into 8 directions.
|
||||
block.sorter.description=Sorts items. If an item matches the selection, it is allowed to pass. Otherwise, the item is outputted to the left and right.
|
||||
block.overflow-gate.name=Overflow Gate
|
||||
block.overflow-gate.description=A combination splitter and router that only outputs to the left and right if the front path is blocked.
|
||||
block.bridgeconveyor.name=Bridge Conveyor
|
||||
block.bridgeconveyor.description=A conveyor that can go over other blocks, for up to two total blocks.
|
||||
block.arc-smelter.name=Arc Smelter
|
||||
block.silicon-smelter.name=Silicon Smelter
|
||||
block.phase-weaver.name=Phase Weaver
|
||||
block.pulverizer.name=Pulverizer
|
||||
block.cryofluidmixer.name=Cryofluid Mixer
|
||||
block.melter.name=Melter
|
||||
block.incinerator.name=Incinerator
|
||||
block.biomattercompressor.name=Biomatter Compressor
|
||||
block.separator.name=Separator
|
||||
block.centrifuge.name=Centrifuge
|
||||
block.power-node.name=Power Node
|
||||
block.power-node-large.name=Large Power Node
|
||||
block.battery.name=Battery
|
||||
block.battery-large.name=Large Battery
|
||||
block.combustion-generator.name=Combustion Generator
|
||||
block.turbine-generator.name=Turbine Generator
|
||||
block.tungsten-drill.name=Tungsten Drill
|
||||
block.carbide-drill.name=Carbide Drill
|
||||
block.laser-drill.name=Laser Drill
|
||||
block.water-extractor.name=Water Extractor
|
||||
block.cultivator.name=Cultivator
|
||||
block.dart-ship-factory.name=Dart Ship Factory
|
||||
block.delta-mech-factory.name=Delta Mech Factory
|
||||
block.dronefactory.name=Drone Factory
|
||||
block.repairpoint.name=Repair Point
|
||||
block.resupplypoint.name=Resupply Point
|
||||
block.liquidtank.name=Liquid Tank
|
||||
block.bridgeconduit.name=Bridge Conduit
|
||||
block.mechanical-pump.name=Mechanical Pump
|
||||
block.itemsource.name=Item Source
|
||||
block.itemvoid.name=Item Void
|
||||
block.liquidsource.name=Liquid Source
|
||||
block.powervoid.name=Power Void
|
||||
block.powerinfinite.name=Power Infinite
|
||||
block.unloader.name=Unloader
|
||||
block.sortedunloader.name=Sorted Unloader
|
||||
block.vault.name=Vault
|
||||
block.wave.name=Wave
|
||||
block.swarmer.name=Swarmer
|
||||
block.salvo.name=Salvo
|
||||
block.ripple.name=Ripple
|
||||
block.phase-conveyor.name=Phase Conveyor
|
||||
block.bridge-conveyor.name=Bridge Conveyor
|
||||
block.plastanium-compressor.name=Plastanium Compressor
|
||||
block.pyratite-mixer.name=Pyratite Mixer
|
||||
block.blast-mixer.name=Blast Mixer
|
||||
block.solidifer.name=Solidifer
|
||||
block.solar-panel.name=Solar Panel
|
||||
block.solar-panel-large.name=Large Solar Panel
|
||||
block.oil-extractor.name=Oil Extractor
|
||||
block.javelin-ship-factory.name=Javelin Ship factory
|
||||
block.drone-factory.name=Drone Factory
|
||||
block.fabricator-factory.name=Fabricator Factory
|
||||
block.repair-point.name=Repair Point
|
||||
block.resupply-point.name=Resupply Point
|
||||
block.pulse-conduit.name=Pulse Conduit
|
||||
block.phase-conduit.name=Phase Conduit
|
||||
block.liquid-router.name=Liquid Router
|
||||
block.liquid-tank.name=Liquid Tank
|
||||
block.liquid-junction.name=Liquid Junction
|
||||
block.bridge-conduit.name=Bridge Conduit
|
||||
block.rotary-pump.name=Rotary Pump
|
||||
block.nuclear-reactor.name=Nuclear Reactor
|
||||
text.save.old=This save is for an older version of the game, and can no longer be used.\n\n[LIGHT_GRAY]Save backwards compatibility will be implemented in the full 4.0 release.
|
||||
|
||||
@@ -1,491 +1,495 @@
|
||||
text.about = Dibuat oleh [ROYAL]Anuken.[]\nAwalnya masuk di [orange]GDL[] MM Jam.\n\nKredit:\n- SFX dibuat dengan [YELLOW]bfxr[]\n- Musik dibuat oleh [GREEN]RoccoW[] / ditemukan di [lime]FreeMusicArchive.org[]\n\nTerima kasih khusus kepada:\n- [coral]MitchellFJN[]: playtesting dan umpan balik yang luas\n- [sky]Luxray5474[]: pekerjaan wiki, kontribusi kode\n- Semua penguji beta di itch.io dan Google Play\n
|
||||
text.discord = Bergabunglah dengan Discord Mindustry!
|
||||
text.gameover = Intinya hancur.
|
||||
text.highscore = [YELLOW]Rekor baru!
|
||||
text.lasted = Anda bertahan sampai gelombang
|
||||
text.level.highscore = Skor Tinggi: [accent]{0}
|
||||
text.level.delete.title = Konfirmasi Hapus
|
||||
text.level.delete = Yakin ingin menghapus peta \"[orange]{0}\"?
|
||||
text.level.select = Pilih Level
|
||||
text.level.mode = Modus permainan:
|
||||
text.savegame = Simpan Permainan
|
||||
text.loadgame = Lanjutkan
|
||||
text.joingame = Bermain Bersama
|
||||
text.quit = Keluar
|
||||
text.about.button = Tentang
|
||||
text.name = Nama:
|
||||
text.public = Publik
|
||||
text.players = {0} pemain online
|
||||
text.server.player.host = {0} (host)
|
||||
text.players.single = {0} pemain online
|
||||
text.server.mismatch = Kesalahan paket: kemungkinan versi client / server tidak sesuai.\nPastikan Anda dan host memiliki versi terbaru Mindustry!
|
||||
text.server.closing = [accent]Menutup server...
|
||||
text.server.kicked.kick = Anda telah dikeluarkan dari server!
|
||||
text.server.kicked.invalidPassword = Kata sandi salah!
|
||||
text.server.kicked.clientOutdated = Client versi lama! Update game Anda!
|
||||
text.server.kicked.serverOutdated = Server versi lama! Tanyakan host untuk mengupdate!
|
||||
text.server.connected = {0} telah bergabung.
|
||||
text.server.disconnected = {0} telah terputus.
|
||||
text.nohost = Tidak dapat meng-host server pada peta khusus!
|
||||
text.hostserver = Host Server
|
||||
text.host = Host
|
||||
text.hosting = [accent]Membuka server...
|
||||
text.hosts.refresh = Segarkan
|
||||
text.hosts.discovering = Mencari game LAN
|
||||
text.server.refreshing = Menyegarkan server
|
||||
text.hosts.none = [lightgray]Tidak ada game LAN yang ditemukan!
|
||||
text.host.invalid = [scarlet]Tidak dapat terhubung ke host.
|
||||
text.server.friendlyfire = Tembak Sesama
|
||||
text.server.add = Tambahkan Server
|
||||
text.server.delete = Yakin ingin menghapus server ini?
|
||||
text.server.hostname = Host: {0}
|
||||
text.server.edit = Sunting Server
|
||||
text.joingame.byip = Bergabung dengan IP...
|
||||
text.joingame.title = Bermain Bersama
|
||||
text.joingame.ip = IP:
|
||||
text.disconnect = Sambungan terputus.
|
||||
text.connecting = [accent]Menghubungkan...
|
||||
text.connecting.data = [accent]Memuat data level...
|
||||
text.connectfail = [crimson]Gagal terhubung ke server: [orange]{0}
|
||||
text.server.port = Port:
|
||||
text.server.addressinuse = Alamat sudah di pakai!
|
||||
text.server.invalidport = Nomor port salah!
|
||||
text.server.error = [crimson]Kesalahan server hosting: [orange]{0}
|
||||
text.tutorial.back = < Sebelumnya
|
||||
text.tutorial.next = Berikutnya >
|
||||
text.save.new = Simpan Baru
|
||||
text.save.overwrite = Yakin ingin mengganti slot simpan ini?
|
||||
text.overwrite = Ganti
|
||||
text.save.none = Tidak ada simpanan ditemukan!
|
||||
text.saveload = [accent]Menyimpan...
|
||||
text.savefail = Gagal menyimpan game!
|
||||
text.save.delete.confirm = Yakin ingin menghapus save ini?
|
||||
text.save.delete = Hapus
|
||||
text.save.export = Ekspor Simpanan
|
||||
text.save.import.invalid = [orange]Simpanan ini tidak valid!
|
||||
text.save.import.fail = [crimson]Gagal mengimpor: [orange]{0}
|
||||
text.save.export.fail = [crimson]Gagal mengekspor save: [orange]{0}
|
||||
text.save.import = Impor Simpanan
|
||||
text.save.newslot = Nama simpanan:
|
||||
text.save.rename = Ganti nama
|
||||
text.save.rename.text = Nama baru:
|
||||
text.selectslot = Pilih simpanan.
|
||||
text.slot = [accent]Slot{0}
|
||||
text.save.corrupted = [orange]Simpanan rusak atau tidak valid!
|
||||
text.empty = <kosong>
|
||||
text.on = Hidup
|
||||
text.off = Mati
|
||||
text.save.autosave = Simpan otomatis: {0}
|
||||
text.save.map = Peta: {0}
|
||||
text.save.wave = Gelombang {0}
|
||||
text.save.date = Terakhir Disimpan: {0}
|
||||
text.confirm = Konfirmasi
|
||||
text.delete = Hapus
|
||||
text.ok = OK
|
||||
text.open = Buka
|
||||
text.cancel = Batal
|
||||
text.openlink = Buka tautan
|
||||
text.back = Kembali
|
||||
text.quit.confirm = Anda yakin ingin berhenti?
|
||||
text.loading = [accent]Memuat...
|
||||
text.wave = [orange]Gelombang {0}
|
||||
text.wave.waiting = Gelombang dimulai {0}
|
||||
text.waiting = Menunggu...
|
||||
text.enemies = {0} musuh
|
||||
text.enemies.single = {0} Musuh
|
||||
text.loadimage = Buka Gambar
|
||||
text.saveimage = Simpan Gambar
|
||||
text.oregen = Generator Bijih
|
||||
text.editor.badsize = [orange]Dimensi gambar tidak valid![]\nDimensi peta yang valid: {0}
|
||||
text.editor.errorimageload = Kesalahan saat memuat file gambar:\n[orange]{0}
|
||||
text.editor.errorimagesave = Kesalahan saat menyimpan file gambar:\n[orange]{0}
|
||||
text.editor.generate = Hasilkan
|
||||
text.editor.resize = Ubah ukuran
|
||||
text.editor.loadmap = Buka Peta
|
||||
text.editor.savemap = Simpan Peta
|
||||
text.editor.loadimage = Buka Gambar
|
||||
text.editor.saveimage = Simpan Gambar
|
||||
text.editor.unsaved = [scarlet]Anda memiliki perubahan yang belum disimpan![]\nYakin ingin keluar?
|
||||
text.editor.brushsize = Ukuran sikat: {0}
|
||||
text.editor.noplayerspawn = Peta ini tidak memiliki spawnpoint pemain!
|
||||
text.editor.manyplayerspawns = Peta tidak bisa memiliki lebih dari satu\nspawnpoint pemain!
|
||||
text.editor.manyenemyspawns = Tidak dapat memiliki lebih dari\n{0} spawnpoint musuh!
|
||||
text.editor.resizemap = Ubah ukuran peta
|
||||
text.editor.resizebig = [scarlet]Peringatan!\n[]Peta yang lebih besar dari 256 unit mungkin nge-lag dan tidak stabil.
|
||||
text.editor.mapname = Nama Peta:
|
||||
text.editor.overwrite = [accent]Peringatan!\nIni akan mengganti peta yang ada.
|
||||
text.editor.failoverwrite = [crimson]Tidak dapat mengganti peta default!
|
||||
text.editor.selectmap = Pilih peta yang akan dimuat:
|
||||
text.width = Lebar:
|
||||
text.height = Tinggi:
|
||||
text.randomize = Acak
|
||||
text.apply = Terapkan
|
||||
text.update = Perbarui
|
||||
text.menu = Menu
|
||||
text.play = Main
|
||||
text.load = Buka
|
||||
text.save = Simpan
|
||||
text.language.restart = Silakan mulai ulang permainan Anda agar pengaturan bahasa mulai berlaku.
|
||||
text.settings.language = Bahasa
|
||||
text.settings = Pengaturan
|
||||
text.tutorial = Tutorial
|
||||
text.editor = Pengedit
|
||||
text.mapeditor = Pengedit Peta
|
||||
text.donate = Sumbangkan
|
||||
text.settings.reset = Atur ulang ke Default
|
||||
text.settings.controls = Kontrol
|
||||
text.settings.game = Permainan
|
||||
text.settings.sound = Suara
|
||||
text.settings.graphics = Grafis
|
||||
text.upgrades = Perbaruan
|
||||
text.purchased = [LIME]Dibuat!
|
||||
text.weapons = Senjata
|
||||
text.paused = Jeda
|
||||
text.respawn = Respawning dalam
|
||||
text.info.title = [accent]Info
|
||||
text.error.title = [crimson]Telah terjadi kesalahan
|
||||
text.error.crashmessage = [SCARLET]Kesalahan tak terduga telah terjadi, yang menyebabkan kerusakan.\n[]Tolong laporkan keadaan yang tepat dimana kesalahan ini terjadi pada pengembang:\n[ORANGE] anukendev@gmail.com[]
|
||||
text.error.crashtitle = Telah terjadi kesalahan
|
||||
text.mode.break = Mode penghancur: {0}
|
||||
text.mode.place = Mode penaruh: {0}
|
||||
placemode.hold.name = garis
|
||||
placemode.areadelete.name = area
|
||||
placemode.touchdelete.name = sentuh
|
||||
placemode.holddelete.name = tahan
|
||||
placemode.none.name = tidak ada
|
||||
placemode.touch.name = sentuh
|
||||
placemode.cursor.name = kursor
|
||||
text.blocks.extrainfo = [accent]info tambahan blok:
|
||||
text.blocks.blockinfo = Info Blok
|
||||
text.blocks.powercapacity = Kapasitas Tenaga
|
||||
text.blocks.powershot = Tenaga/tembakan
|
||||
text.blocks.powersecond = Tenaga/detik
|
||||
text.blocks.powerdraindamage = Tenaga Dipakai/damage
|
||||
text.blocks.shieldradius = Radius Perisai
|
||||
text.blocks.itemspeedsecond = Kecepatan Barang/detik
|
||||
text.blocks.range = Jangkauan
|
||||
text.blocks.size = Ukuran
|
||||
text.blocks.powerliquid = Tenaga/Cairan
|
||||
text.blocks.maxliquidsecond = Batas cairan/detik
|
||||
text.blocks.liquidcapacity = Kapasitas cairan
|
||||
text.blocks.liquidsecond = Cairan/detik
|
||||
text.blocks.damageshot = Damage/tembakan
|
||||
text.blocks.ammocapacity = Kapasitas Amunisi
|
||||
text.blocks.ammo = Amunisi
|
||||
text.blocks.ammoitem = Amunisi/barang
|
||||
text.blocks.maxitemssecond = Batas barang/detik
|
||||
text.blocks.powerrange = Jangkauan tenaga
|
||||
text.blocks.lasertilerange = Kotak jangkauan laser
|
||||
text.blocks.capacity = Kapasitas
|
||||
text.blocks.itemcapacity = Kapasitas Barang
|
||||
text.blocks.maxpowergenerationsecond = Batas Penghasil Tenaga/detik
|
||||
text.blocks.powergenerationsecond = Penghasil Tenaga/detik
|
||||
text.blocks.generationsecondsitem = Waktu Penghasil (detik)/barang
|
||||
text.blocks.input = Masukan
|
||||
text.blocks.inputliquid = Cairan yang Masuk
|
||||
text.blocks.inputitem = Barang yang Masuk
|
||||
text.blocks.output = Keluar
|
||||
text.blocks.secondsitem = Detik/barang
|
||||
text.blocks.maxpowertransfersecond = Batas transfer tenaga/detik
|
||||
text.blocks.explosive = Mudah meledak!
|
||||
text.blocks.repairssecond = Perbaikan/detik
|
||||
text.blocks.health = Darah
|
||||
text.blocks.inaccuracy = Ketidaktelitian
|
||||
text.blocks.shots = Tembakan
|
||||
text.blocks.shotssecond = Tembakan/detik
|
||||
text.blocks.fuel = Bahan Bakar
|
||||
text.blocks.fuelduration = Durasi Bahan Bakar
|
||||
text.blocks.maxoutputsecond = Batas keluar/detik
|
||||
text.blocks.inputcapacity = Kapasitas masuk
|
||||
text.blocks.outputcapacity = Kapasitas keluar
|
||||
text.blocks.poweritem = Tenaga/barang
|
||||
text.placemode = Mode Penempatan
|
||||
text.breakmode = Mode Penghancur
|
||||
text.health = darah
|
||||
setting.difficulty.easy = mudah
|
||||
setting.difficulty.normal = normal
|
||||
setting.difficulty.hard = sulit
|
||||
setting.difficulty.insane = sangat susah
|
||||
setting.difficulty.purge = paling susah
|
||||
setting.difficulty.name = Kesulitan:
|
||||
setting.screenshake.name = Layar Bergoyang
|
||||
setting.smoothcam.name = Kamera Halus
|
||||
setting.indicators.name = Indikator Musuh
|
||||
setting.effects.name = Efek Tampilan
|
||||
setting.sensitivity.name = Sensitivitas Pengendali
|
||||
setting.saveinterval.name = Waktu Simpan Otomatis
|
||||
setting.seconds = {0} Detik
|
||||
setting.fullscreen.name = Layar Penuh
|
||||
setting.fps.name = Tunjukkan FPS
|
||||
setting.vsync.name = VSync
|
||||
setting.lasers.name = Tampilkan Laser Tenaga
|
||||
setting.healthbars.name = Tampilkan Bar Darah Entitas
|
||||
setting.pixelate.name = Layar Pixel
|
||||
setting.musicvol.name = Volume Musik
|
||||
setting.mutemusic.name = Bisukan Musik
|
||||
setting.sfxvol.name = Volume Suara
|
||||
setting.mutesound.name = Bisukan Suara
|
||||
map.maze.name = labirin
|
||||
map.fortress.name = benteng
|
||||
map.sinkhole.name = lubang pembuangan
|
||||
map.caves.name = gua
|
||||
map.volcano.name = gunung berapi
|
||||
map.caldera.name = kaldera
|
||||
map.scorch.name = penghangusan
|
||||
map.desert.name = gurun
|
||||
map.island.name = pulau
|
||||
map.grassland.name = padang rumput
|
||||
map.tundra.name = tundra
|
||||
map.spiral.name = spiral
|
||||
map.tutorial.name = tutorial
|
||||
tutorial.intro.text = [yellow]Selamat datang di tutorial.[] Untuk memulai, tekan 'berikutnya'.
|
||||
tutorial.moveDesktop.text = Untuk bergerak, gunakan tombol [orange][[WASD][]. Tahan tombol [orange]shift[] untuk mempercepat. Tahan [orange]CTRL[] saat menggunakan [orange]scrollwheel[] untuk memperbesar atau memperkecil tampilan.
|
||||
tutorial.shoot.text = Gunakan mouse anda untuk mengarahkan, tahan [orange]tombol kiri mouse[] untuk menembak. Cobalah menembaki [yellow]target[].
|
||||
tutorial.moveAndroid.text = Untuk menggeser tampilan, seret satu jari ke layar. Jepit dan seret untuk memperbesar atau memperkecil tampilan.
|
||||
tutorial.placeSelect.text = Coba pilih [yellow]konveyor[] dari menu blok di kanan bawah.
|
||||
tutorial.placeConveyorDesktop.text = Gunakan [orange][[scrollwheel][] untuk memutar konveyor menghadap [orange]ke depan[], lalu letakkan di [yellow]lokasi yang ditandai[] menggunakan [orange][[tombol kiri mouse]][].
|
||||
tutorial.placeConveyorAndroid.text = Gunakan [orange][[tombol putar]][] untuk memutar konveyor menghadap [orange]ke depan[], seret ke posisi dengan satu jari, lalu letakkan di [yellow]lokasi yang ditandai[] dengan menggunakan [orange][[tanda centang][].
|
||||
tutorial.placeConveyorAndroidInfo.text = Sebagai alternatif, Anda dapat menekan ikon crosshair di kiri bawah untuk beralih ke [orange][[mode sentuh]][], dan letakkan blok dengan mengetuk layar. Dalam mode sentuh, blok bisa diputar dengan panah di kiri bawah. Tekan [yellow]berikutnya[] untuk mencobanya.
|
||||
tutorial.placeDrill.text = Sekarang, pilih dan tempatkan [yellow]pertambangan battu[] di lokasi yang ditandai.
|
||||
tutorial.blockInfo.text = Jika Anda ingin mempelajari lebih lanjut tentang blok, Anda dapat menekan [orange]tanda tanya[] di bagian kanan atas untuk membaca deskripsinya.
|
||||
tutorial.deselectDesktop.text = Anda bisa membatalkan pemilihan blok menggunakan [orange][[tombol mouse kanan][].
|
||||
tutorial.deselectAndroid.text = Anda dapat membatalkan pemilihan blok dengan menekan tombol [orange]X (silang)[].
|
||||
tutorial.drillPlaced.text = Pertambangannya sekarang akan menghasilkan [yellow]batu[] yang dikeluarkan ke konveyor, lalu memindahkannya ke [yellow]intinya[].
|
||||
tutorial.drillInfo.text = Bijih yang berbeda membutuhkan pertambangan yang berbeda. Batu membutuhkan pertambangan batu, besi membutuhkan pertambangan besi, dll.
|
||||
tutorial.drillPlaced2.text = Memindahkan barang ke dalam inti menempatkannya di [yellow]inventaris barang[] Anda, di kiri atas. Menempatkan blok menggunakan barang dari inventaris Anda.
|
||||
tutorial.moreDrills.text = Anda bisa menghubungkan banyak pertambangan dan konveyor bersama-sama, seperti biasa.
|
||||
tutorial.deleteBlock.text = Anda dapat menghapus blok dengan mengeklik [orange]tombol mouse kanan[] di blok yang ingin Anda hapus. Coba hapus konveyor ini.
|
||||
tutorial.deleteBlockAndroid.text = Anda dapat menghapus blok dengan [orange]memilih crosshair[] di [orange]menu mode penghancur[] di kiri bawah dan mengetuk bloknya. Coba hapus konveyor ini.
|
||||
tutorial.placeTurret.text = Sekarang, pilih dan tempatkan [yellow]turret[] di [yellow]lokasi yang ditandai[].
|
||||
tutorial.placedTurretAmmo.text = Turret ini sekarang akan menerima [yellow]amunisi[] dari konveyor. Anda dapat melihat berapa banyak amunisi yang dimiliki dengan menggeser kursor di bloknya dan memeriksa di [green]bilah hijau[].
|
||||
tutorial.turretExplanation.text = Turret secara otomatis akan menembak musuh terdekat dalam jangkauan, selama mereka memiliki cukup amunisi.
|
||||
tutorial.waves.text = Setiap [yellow]60[] detik, gelombang [coral]musuh[] akan muncul di lokasi tertentu dan berusaha menghancurkan intinya.
|
||||
tutorial.coreDestruction.text = Tujuan Anda adalah untuk [yellow]mempertahankan intinya[]. Jika intinya hancur, Anda [coral]kalah dalam permainan[].
|
||||
tutorial.pausingDesktop.text = Jika Anda perlu istirahat sebentar, tekan [orange]tombol jeda[] di bagian kiri atas atau [orange]tombol spasi[] untuk menghentikan sementara permainan. Anda masih bisa memilih dan menempatkan blok sambil berhenti, tapi tidak bisa bergerak atau menembak.
|
||||
tutorial.pausingAndroid.text = Jika Anda perlu istirahat sebentar, tekan [orange]tombol jeda[] di kiri atas untuk menjeda permainan. Anda masih bisa menghapus dan menempatkan blok sambil berhenti sebentar.
|
||||
tutorial.purchaseWeapons.text = Anda bisa membeli [yellow]senjata baru[] untuk robot Anda dengan membuka menu upgrade di kiri bawah.
|
||||
tutorial.switchWeapons.text = Untuk mengganti senjata, klik ikonnya di kiri bawah, atau gunakan angka [orange][[1-9][].
|
||||
tutorial.spawnWave.text = Gelombang sekarang datang. Hancurkan mereka.
|
||||
tutorial.pumpDesc.text = Pada gelombang selanjutnya, Anda mungkin perlu menggunakan [yellow]pompa[] untuk mendistribusikan cairan untuk generator atau ekstraktor.
|
||||
tutorial.pumpPlace.text = Pompa bekerja seperti dengan pertambangan, namun mereka menghasilkan cairan dan bukan barang. Cobalah menempatkan pompa pada [yellow]minyak yang ditunjuk[].
|
||||
tutorial.conduitUse.text = Sekarang tempatkan [orange]saluran[] yang mengarah jauh dari pompa.
|
||||
tutorial.conduitUse2.text = Dan beberapa lagi...
|
||||
tutorial.conduitUse3.text = Dan beberapa lagi...
|
||||
tutorial.generator.text = Sekarang, tempatkan [orange]blok generator pembakaran[] di ujung saluran.
|
||||
tutorial.generatorExplain.text = Generator ini sekarang akan menciptakan [yellow]tenaga[] dari minyak.
|
||||
tutorial.lasers.text = Tenaga didistribusikan menggunakan [yellow]laser tenaga[]. Putar dan tempatkan di sini.
|
||||
tutorial.laserExplain.text = Generator sekarang akan memindahkan tenaga ke blok laser. Sinar [yellow]terang[] menandakan bahwa saat ini mentransmisikan tenaga, dan sinar [yellow]transparan[] berarti tidak.
|
||||
tutorial.laserMore.text = Anda dapat memeriksa berapa banyak tenaga yang dimiliki blok dengan memindahkan kursor/mengetuk di atasnya dan memeriksa [yellow]bar kuning[] di bagian atas.
|
||||
tutorial.healingTurret.text = Laser ini bisa digunakan untuk menyalakan [lime]turret perbaikan[]. Tempatkan satu di sini.
|
||||
tutorial.healingTurretExplain.text = Selama memiliki tenaga, turret ini akan [lime]memperbaiki blok terdekat[]. Saat bermain, pastikan Anda memasukkannya ke markas Anda secepat mungkin!
|
||||
tutorial.smeltery.text = Banyak blok yang membutuhkan [orange]baja[] agar dapat dibangun, yang membutuhkan [orange]peleburan[] untuk dibuat. Tempatkan satu di sini.
|
||||
tutorial.smelterySetup.text = Peleburan ini sekarang akan menghasilkan [orange]baja[] dari besi yang masuk, dengan batubara sebagai bahan bakarnya.
|
||||
tutorial.tunnelExplain.text = Perhatikan juga bahwa barang-barang itu masuk melalui [orange]blok terowongan[] dan muncul di sisi lain, melewati blok batu. Perlu diingat bahwa terowongan hanya bisa melalui sampai 2 blok.
|
||||
tutorial.end.text = Dan itu menyimpulkan tutorialnya! Semoga berhasil!
|
||||
keybind.move_x.name = gerak_x
|
||||
keybind.move_y.name = gerak_y
|
||||
keybind.select.name = pilih
|
||||
keybind.break.name = hapus
|
||||
keybind.shoot.name = tembak
|
||||
keybind.zoom_hold.name = perbesar_tahan
|
||||
keybind.zoom.name = perbesar
|
||||
keybind.menu.name = menu
|
||||
keybind.pause.name = jeda
|
||||
keybind.dash.name = berlari
|
||||
keybind.rotate_alt.name = putar_alt
|
||||
keybind.rotate.name = putar
|
||||
keybind.weapon_1.name = senjata_1
|
||||
keybind.weapon_2.name = senjata_2
|
||||
keybind.weapon_3.name = senjata_3
|
||||
keybind.weapon_4.name = senjata_4
|
||||
keybind.weapon_5.name = senjata_5
|
||||
keybind.weapon_6.name = senjata_6
|
||||
mode.waves.name = gelombang
|
||||
mode.sandbox.name = sandbox
|
||||
mode.freebuild.name = freebuild
|
||||
upgrade.standard.name = standar
|
||||
upgrade.standard.description = Robot standar.
|
||||
upgrade.blaster.name = blaster
|
||||
upgrade.blaster.description = Menembakan sebuah peluru yang lemah dan lambat.
|
||||
upgrade.triblaster.name = triblaster
|
||||
upgrade.triblaster.description = Menembakan 3 peluru secara menyebar.
|
||||
upgrade.clustergun.name = clustergun
|
||||
upgrade.clustergun.description = Menembakan sebuah granat eksplosif yang tidak akurat.
|
||||
upgrade.beam.name = meriam sinar
|
||||
upgrade.beam.description = Menembakan sinar laser jarak jauh.
|
||||
upgrade.vulcan.name = vulcan
|
||||
upgrade.vulcan.description = Menembakkan rombongan peluru dengan cepat.
|
||||
upgrade.shockgun.name = shockgun
|
||||
upgrade.shockgun.description = Menembakkan ledakan yang menghancurkan dari pecahan peluru yang terisi.
|
||||
item.stone.name = batu
|
||||
item.iron.name = besi
|
||||
item.coal.name = batu bara
|
||||
item.steel.name = baja
|
||||
item.titanium.name = titanium
|
||||
item.dirium.name = dirium
|
||||
item.thorium.name = thorium
|
||||
item.sand.name = pasir
|
||||
liquid.water.name = air
|
||||
liquid.plasma.name = plasma
|
||||
liquid.lava.name = lahar
|
||||
liquid.oil.name = minyak
|
||||
block.weaponfactory.name = pabrik senjata
|
||||
block.weaponfactory.fulldescription = Dipakai untuk membuat senjata bagi robot pemain. Klik untuk memakai. Otomatis mengambil sumber daya dari inti.
|
||||
block.air.name = udara
|
||||
block.blockpart.name = bagian blok
|
||||
block.deepwater.name = air dangkal
|
||||
block.water.name = air
|
||||
block.lava.name = lahar
|
||||
block.oil.name = minyak
|
||||
block.stone.name = batu
|
||||
block.blackstone.name = batu hitam
|
||||
block.iron.name = besi
|
||||
block.coal.name = batu bara
|
||||
block.titanium.name = titanium
|
||||
block.thorium.name = thorium
|
||||
block.dirt.name = tanah
|
||||
block.sand.name = pasir
|
||||
block.ice.name = es
|
||||
block.snow.name = salju
|
||||
block.grass.name = rumput
|
||||
block.sandblock.name = blok pasir
|
||||
block.snowblock.name = blok salju
|
||||
block.stoneblock.name = blok batu
|
||||
block.blackstoneblock.name = blok batu hitam
|
||||
block.grassblock.name = blok rumput
|
||||
block.mossblock.name = blok lumut
|
||||
block.shrub.name = belukar
|
||||
block.rock.name = batu
|
||||
block.icerock.name = batu es
|
||||
block.blackrock.name = batu hitam
|
||||
block.dirtblock.name = blok tanah
|
||||
block.stonewall.name = dinding batu
|
||||
block.stonewall.fulldescription = Sebuah blok defensif yang murah. Berguna untuk melindungi inti dan turret di beberapa gelombang pertama.
|
||||
block.ironwall.name = dinding besi
|
||||
block.ironwall.fulldescription = Blok defensif dasar. Menyediakan perlindungan dari musuh.
|
||||
block.steelwall.name = dinding baja
|
||||
block.steelwall.fulldescription = Sebuah blok defensif standar. Perlindungan yang memadai dari musuh.
|
||||
block.titaniumwall.name = dinding titanium
|
||||
block.titaniumwall.fulldescription = Blok pertahanan yang kuat. Menyediakan perlindungan dari musuh.
|
||||
block.duriumwall.name = dinding dirium
|
||||
block.duriumwall.fulldescription = Blok pertahanan yang sangat kuat. Menyediakan perlindungan dari musuh.
|
||||
block.compositewall.name = dinding komposit
|
||||
block.steelwall-large.name = dinding baja besar
|
||||
block.steelwall-large.fulldescription = Sebuah blok defensif standar. Membentang beberapa ubin.
|
||||
block.titaniumwall-large.name = dinding titanium besar
|
||||
block.titaniumwall-large.fulldescription = Blok pertahanan yang kuat. Membentang beberapa ubin.
|
||||
block.duriumwall-large.name = dinding dirium yang besar
|
||||
block.duriumwall-large.fulldescription = Blok pertahanan yang sangat kuat. Membentang beberapa ubin.
|
||||
block.titaniumshieldwall.name = dinding perisai
|
||||
block.titaniumshieldwall.fulldescription = Sebuah blok defensif yang kuat, dengan tambahan perisai. Membutuhkan tenaga. Menggunakan energi untuk menyerap peluru musuh. Dianjurkan untuk menggunakan pemercepat tenaga untuk memberi energi pada blok ini.
|
||||
block.repairturret.name = turret perbaikan
|
||||
block.repairturret.fulldescription = Memperbaiki blok terdekat yang rusak dengan lambat. Menggunakan sedikit tenaga.
|
||||
block.megarepairturret.name = perbaikan turret II
|
||||
block.megarepairturret.fulldescription = Memperbaiki blok yang rusak dengan normal. Menggunakan tenaga.
|
||||
block.shieldgenerator.name = pembangkit perisai
|
||||
block.shieldgenerator.fulldescription = Blok defensif yang maju. Mellindungi semua blok dalam radius dari serangan. Menggunakan tenaga dengan lambat saat menganggur, namun menyalurkan energi dengan cepat pada kontak peluru.
|
||||
block.door.name = pintu
|
||||
block.door.fulldescription = Blok yang bisa dibuka dan ditutup dengan mengetuknya.
|
||||
block.door-large.name = pintu besar
|
||||
block.door-large.fulldescription = Blok yang bisa dibuka dan ditutup dengan mengetuknya.
|
||||
block.conduit.name = saluran
|
||||
block.conduit.fulldescription = Blok pengangkut cairan dasar. Bekerja seperti konveyor, tapi dengan cairan. Terbaik digunakan dengan pompa atau saluran lainnya. Bisa digunakan sebagai jembatan di atas cairan untuk musuh dan pemain.
|
||||
block.pulseconduit.name = saluran cepat
|
||||
block.pulseconduit.fulldescription = Blok pengangkut cairan tingkat lanjut. Mengangkut cairan lebih cepat dan menyimpan lebih banyak dari pada saluran standar.
|
||||
block.liquidrouter.name = router cairan
|
||||
block.liquidrouter.fulldescription = Bekerja seperti router. Menerima masukan cairan dari satu sisi dan mengeluarkannya ke sisi yang lain. Berguna untuk pemisahan cairan dari satu saluran ke beberapa saluran lainnya.
|
||||
block.conveyor.name = konveyor
|
||||
block.conveyor.fulldescription = Blok dasar pengangkut barang. Memindahkan barang ke depan dan secara otomatis menyimpannya ke turret, ekstraktor, dan pertambangan. Bisa diputar. Bisa digunakan sebagai jembatan di atas cairan untuk musuh dan pemain.
|
||||
block.steelconveyor.name = konveyor baja
|
||||
block.steelconveyor.fulldescription = Blok transportasi barang lanjutan. Memindahkan barang lebih cepat dari konveyor standar.
|
||||
block.poweredconveyor.name = konveyor cepat
|
||||
block.poweredconveyor.fulldescription = Blok terbaik untuk pengangkutan barang. Memindahkan barang lebih cepat dari konveyor baja.
|
||||
block.router.name = router
|
||||
block.router.fulldescription = Menerima item dari satu arah dan mengeluarkannya ke 3 arah. Bisa juga menyimpan sejumlah barang. Berguna untuk membelah bahan dari satu pertambangan ke beberapa turret.
|
||||
block.junction.name = persimpangan jalan
|
||||
block.junction.fulldescription = Bertindak sebagai jembatan untuk dua sabuk persimpangan. Berguna dalam situasi dengan dua konveyor berbeda yang membawa bahan berbeda ke lokasi yang berbeda.
|
||||
block.conveyortunnel.name = terowongan konveyor
|
||||
block.conveyortunnel.fulldescription = Memindahkan barang di bawah blok. Untuk menggunakan, tempatkan satu terowongan yang menuju ke terowongan di bawah blok, dan satu di sisi lain. Pastikan kedua terowongan menghadap ke arah yang berlawanan, yaitu menuju blok yang mereka masukkan atau keluarkan.
|
||||
block.liquidjunction.name = persimpangan cairan
|
||||
block.liquidjunction.fulldescription = Bertindak sebagai jembatan untuk dua saluran persimpangan. Berguna dalam situasi dengan dua saluran berbeda yang membawa cairan berbeda ke lokasi yang berbeda.
|
||||
block.liquiditemjunction.name = persimpangan barang-cairan
|
||||
block.liquiditemjunction.fulldescription = Bertindak sebagai jembatan untuk menyilang saluran dan konveyor.
|
||||
block.powerbooster.name = pemercepat tenaga
|
||||
block.powerbooster.fulldescription = Mendistribusikan tenaga ke semua blok dalam radiusnya.
|
||||
block.powerlaser.name = laser tenaga
|
||||
block.powerlaser.fulldescription = Membuat laser yang mentransmisikan daya ke blok di depannya. Tidak menghasilkan tenaga itu sendiri. Terbaik digunakan dengan generator atau laser lainnya.
|
||||
block.powerlaserrouter.name = router laser
|
||||
block.powerlaserrouter.fulldescription = Laser yang mendistribusikan tenaga ke tiga arah sekaligus. Berguna dalam situasi di mana diperlukan tenaga ke beberapa blok dari satu generator.
|
||||
block.powerlasercorner.name = sudut laser
|
||||
block.powerlasercorner.fulldescription = Laser yang mendistribusikan tenaga ke dua arah sekaligus. Berguna dalam situasi di mana diperlukan tenaga ke beberapa blok dari satu generator, dan arah router kurang tepat.
|
||||
block.teleporter.name = teleporter
|
||||
block.teleporter.fulldescription = Blok transportasi barang lanjutan. Teleporter memasukkan barang ke teleporter lain dengan warna yang sama. Tidak ada apa-apa jika tidak ada teleporter dengan warna yang sama. Jika beberapa teleporter memiliki warna yang sama, teleporter dipilih secara acak. Menggunakan tenaga. Ketuk/klik untuk mengubah warna.
|
||||
block.sorter.name = penyortir
|
||||
block.sorter.fulldescription = Menyortir barang menurut jenis bahannya. Bahan yang diterima ditandai dengan warna di blok. Semua item yang sesuai dengan jenis bahan dilepaskan ke depan, segala sesuatu yang lain dikeluarkan ke kiri dan kanan.
|
||||
block.core.name = inti
|
||||
block.pump.name = pompa
|
||||
block.pump.fulldescription = Memompa cairan dari sumber blok- biasanya air, lahar atau minyak. Mengeluarkan cairan ke saluran terdekat.
|
||||
block.fluxpump.name = pompa flux
|
||||
block.fluxpump.fulldescription = Sebuah versi lanjutan dari pompa. Menyimpan lebih banyak cairan dan memompa cairan lebih cepat.
|
||||
block.smelter.name = peleburan
|
||||
block.smelter.fulldescription = Blok kerajinan esensial. Saat dimasukkan 1 besi dan 1 batu bara sebagai bahan bakar, akan mengeluarkan satu baja. Disarankan untuk memasukkan besi dan batu bara ke sabuk yang berbeda untuk mencegah penyumbatan.
|
||||
block.crucible.name = peleburan dirium
|
||||
block.crucible.fulldescription = Sebuah blok kerajinan yang maju. Saat dimasukkan 1 titanium, 1 baja dan 1 batu bara sebagai bahan bakar, mengeluarkan satu dirium. Disarankan untuk memasukkan batubara, baja dan titanium pada sabuk yang berbeda untuk mencegah penyumbatan.
|
||||
block.coalpurifier.name = ekstraktor batubara
|
||||
block.coalpurifier.fulldescription = Blok ekstraktor dasar. mengeluarkan batu bara saat dipasok dengan air dan batu dalam skala yang besar.
|
||||
block.titaniumpurifier.name = ekstraktor titanium
|
||||
block.titaniumpurifier.fulldescription = Blok ekstraktor standar. mengeluarkan titanium bila dipasok dengan air dan besi dalam skala yang besar.
|
||||
block.oilrefinery.name = penyulingan minyak
|
||||
block.oilrefinery.fulldescription = Menyuling sejumlah minyak menjadi batubara. Berguna untuk memasok turret berbasis batubara saat penambangan batubara langka.
|
||||
block.stoneformer.name = pembentuk batu
|
||||
block.stoneformer.fulldescription = Mengubah lahar ke dalam batu. Berguna untuk menghasilkan batu dalam jumlah besar untuk pemurni batu bara.
|
||||
block.lavasmelter.name = peleburan lava
|
||||
block.lavasmelter.fulldescription = Menggunakan lahar untuk mengubah besi menjadi baja. Sebuah alternatif untuk peleburan batubara. Berguna dalam situasi di mana pertambangan batubara langka.
|
||||
block.stonedrill.name = pertambangan batu
|
||||
block.stonedrill.fulldescription = Pertambangan penting. Saat diletakkan di atas ubin batu, akan menghasilkan batu pada kecepatan yang lambat tanpa batas waktu.
|
||||
block.irondrill.name = pertambangan besi
|
||||
block.irondrill.fulldescription = Pertambangan dasar. Saat diletakkan di atas ubin bijih besi, akan mengeluarkan besi pada kecepatan yang lambat tanpa batas waktu.
|
||||
block.coaldrill.name = pertambangan batubara
|
||||
block.coaldrill.fulldescription = Pertambangan dasar. Saat ditempatkan di ubin bijih batubara, akan mengeluarkan batu bara pada kecepatan yang lambat tanpa batas waktu.
|
||||
block.thoriumdrill.name = pertambangan thorium
|
||||
block.thoriumdrill.fulldescription = Sebuah pertambangan yang canggih. Saat ditempatkan di ubin bijih thorium, akan mengeluarkan thorium pada kecepatan lambat tanpa batas waktu.
|
||||
block.titaniumdrill.name = pertambangan titanium
|
||||
block.titaniumdrill.fulldescription = Sebuah pertambangan yang canggih. Saat ditempatkan pada ubin bijih titanium, akan mengeluarkan titanium pada kecepatan lambat tanpa batas waktu.
|
||||
block.omnidrill.name = pertambangan super
|
||||
block.omnidrill.fulldescription = Pertambangan yang terbaik. Akan saya tambang bijih apapun itu ditempatkan pada kecepatan tinggi.
|
||||
block.coalgenerator.name = pembangkit tenaga batubara
|
||||
block.coalgenerator.fulldescription = Generator penting. Menghasilkan tenaga dari batu bara. Keluarkan tenaga sebagai laser ke 4 sisinya.
|
||||
block.thermalgenerator.name = pembangkit tenaga panas
|
||||
block.thermalgenerator.fulldescription = Menghasilkan tenaga dari lahar. Mengeluarkan tenaga sebagai laser ke 4 sisi.
|
||||
block.combustiongenerator.name = pembangkit tenaga minyak
|
||||
block.combustiongenerator.fulldescription = Menghasilkan tenaga dari minyak. Mengeluarkan tenaga sebagai laser ke 4 sisi.
|
||||
block.rtgenerator.name = pembangkit tenaga radioaktif
|
||||
block.rtgenerator.fulldescription = Menghasilkan sedikit tenaga dari peluruhan radioaktif thorium. Mengeluarkan tenaga sebagai laser ke 4 sisi.
|
||||
block.nuclearreactor.name = reaktor nuklir
|
||||
block.nuclearreactor.fulldescription = Versi lanjutan Pembangkit Tenaga Radioaktif, dan generator tenaga tertinggi. Menghasilkan tenaga dari thorium. Membutuhkan pendinginan air konstan. Sangat mudah menguap; akan meledak dengan hebat jika tidak cukup jumlah pendingin yang diberikan.
|
||||
block.turret.name = turret
|
||||
block.turret.fulldescription = Sebuah menara dasar yang murah. Menggunakan batu untuk amunisi. Memiliki jangkauan yang sedikit lebih banyak daripada turret ganda.
|
||||
block.doubleturret.name = turret ganda
|
||||
block.doubleturret.fulldescription = Versi turret standar yang sedikit lebih bertenaga. Menggunakan batu untuk amunisi. Memberikan damage secara signifikan lebih banyak, namun memiliki jangkauan yang lebih rendah. Menembak dua peluru.
|
||||
block.machineturret.name = turret cepat
|
||||
block.machineturret.fulldescription = Sebuah menara standar. Menggunakan besi untuk amunisi. Memiliki tembakan yang cepat dengan damage yang layak.
|
||||
block.shotgunturret.name = turret split
|
||||
block.shotgunturret.fulldescription = Sebuah turret standar. Menggunakan besi untuk amunisi. Menembakkan 7 peluru. Jaraknya pendek, namun damage-nya lebih tinggi daripada turret cepat.
|
||||
block.flameturret.name = turret api
|
||||
block.flameturret.fulldescription = Turret jarak dekat lanjutan. Menggunakan batubara untuk amunisi. Memiliki jangkauan yang pendek, namun sangat tinggi damage-nya. Bagus untuk jarak dekat. Dianjurkan untuk digunakan dibalik dinding.
|
||||
block.sniperturret.name = turret railgun
|
||||
block.sniperturret.fulldescription = Turret jarak jauh lanjutan. Menggunakan baja untuk amunisi. Kerusakan yang sangat tinggi, namun menembak dengan lambat. Mahal untuk digunakan, tapi bisa ditempatkan jauh dari garis musuh karena jangkauannya.
|
||||
block.mortarturret.name = turret flak
|
||||
block.mortarturret.fulldescription = Turret dengan akurasi pendek dan damage eksplosif. Menggunakan batubara untuk amunisi. Menembakkan peluru yang meledak lalu menjadi pecahan peluru. Berguna untuk kerumunan musuh yang besar.
|
||||
block.laserturret.name = turret laser
|
||||
block.laserturret.fulldescription = Turret satu target. Menggunakan tenaga. Memiliki jarak sedang yang bagus. Target tunggal saja. Tidak pernah meleset.
|
||||
block.waveturret.name = turret tesla
|
||||
block.waveturret.fulldescription = Turret target banyak. Menggunakan tenaga. Jaraknya sedang. Tidak pernah meleset. Rata-rata damage-nya kecil, namun bisa menembak beberapa musuh bersamaan dengan petir berantai.
|
||||
block.plasmaturret.name = turret plasma
|
||||
block.plasmaturret.fulldescription = Versi yang sangat maju dari turret api. Menggunakan batubara sebagai amunisi. Damage yang sangat tinggi, jaraknya pendek sampai sedang.
|
||||
block.chainturret.name = turret berantai
|
||||
block.chainturret.fulldescription = Menara api yang menembak dengan cepat. Menggunakan thorium sebagai amunisi. Menembak peluru besar dengan kecepatan tinggi. Jaraknya sedang. Membentang beberapa ubin. Sangat tangguh.
|
||||
block.titancannon.name = meriam titan
|
||||
block.titancannon.fulldescription = Turret jarak jauh terakhir. Menggunakan thorium sebagai amunisi. Menembakkan peluru yang meledak dengan cipratan besar dengan kecepatan sedang. Jarak jauh. Membentang beberapa ubin. Sangat tangguh.
|
||||
block.playerspawn.name = spawn pemain
|
||||
block.enemyspawn.name = spawn musuh
|
||||
text.about=Dibuat oleh [ROYAL]Anuken.[]\nAwalnya masuk di [orange]GDL[] MM Jam.\n\nKredit:\n- SFX dibuat dengan [YELLOW]bfxr[]\n- Musik dibuat oleh [GREEN]RoccoW[] / ditemukan di [lime]FreeMusicArchive.org[]\n\nTerima kasih khusus kepada:\n- [coral]MitchellFJN[]: playtesting dan umpan balik yang luas\n- [sky]Luxray5474[]: pekerjaan wiki, kontribusi kode\n- Semua penguji beta di itch.io dan Google Play\n
|
||||
text.discord=Bergabunglah dengan Discord Mindustry!
|
||||
text.gameover=Intinya hancur.
|
||||
text.highscore=[YELLOW]Rekor baru!
|
||||
text.lasted=Anda bertahan sampai gelombang
|
||||
text.level.highscore=Skor Tinggi: [accent]{0}
|
||||
text.level.delete.title=Konfirmasi Hapus
|
||||
text.level.select=Pilih Level
|
||||
text.level.mode=Modus permainan:
|
||||
text.savegame=Simpan Permainan
|
||||
text.loadgame=Lanjutkan
|
||||
text.joingame=Bermain Bersama
|
||||
text.quit=Keluar
|
||||
text.about.button=Tentang
|
||||
text.name=Nama:
|
||||
text.players={0} pemain online
|
||||
text.players.single={0} pemain online
|
||||
text.server.mismatch=Kesalahan paket: kemungkinan versi client / server tidak sesuai.\nPastikan Anda dan host memiliki versi terbaru Mindustry!
|
||||
text.server.closing=[accent]Menutup server...
|
||||
text.server.kicked.kick=Anda telah dikeluarkan dari server!
|
||||
text.server.kicked.invalidPassword=Kata sandi salah!
|
||||
text.server.kicked.clientOutdated=Client versi lama! Update game Anda!
|
||||
text.server.kicked.serverOutdated=Server versi lama! Tanyakan host untuk mengupdate!
|
||||
text.server.connected={0} telah bergabung.
|
||||
text.server.disconnected={0} telah terputus.
|
||||
text.nohost=Tidak dapat meng-host server pada peta khusus!
|
||||
text.hostserver=Host Server
|
||||
text.host=Host
|
||||
text.hosting=[accent]Membuka server...
|
||||
text.hosts.refresh=Segarkan
|
||||
text.hosts.discovering=Mencari game LAN
|
||||
text.server.refreshing=Menyegarkan server
|
||||
text.hosts.none=[lightgray]Tidak ada game LAN yang ditemukan!
|
||||
text.host.invalid=[scarlet]Tidak dapat terhubung ke host.
|
||||
text.server.friendlyfire=Tembak Sesama
|
||||
text.server.add=Tambahkan Server
|
||||
text.server.delete=Yakin ingin menghapus server ini?
|
||||
text.server.hostname=Host: {0}
|
||||
text.server.edit=Sunting Server
|
||||
text.joingame.title=Bermain Bersama
|
||||
text.joingame.ip=IP:
|
||||
text.disconnect=Sambungan terputus.
|
||||
text.connecting=[accent]Menghubungkan...
|
||||
text.connecting.data=[accent]Memuat data level...
|
||||
text.connectfail=[crimson]Gagal terhubung ke server: [orange]{0}
|
||||
text.server.port=Port:
|
||||
text.server.addressinuse=Alamat sudah di pakai!
|
||||
text.server.invalidport=Nomor port salah!
|
||||
text.server.error=[crimson]Kesalahan server hosting: [orange]{0}
|
||||
text.save.new=Simpan Baru
|
||||
text.save.overwrite=Yakin ingin mengganti slot simpan ini?
|
||||
text.overwrite=Ganti
|
||||
text.save.none=Tidak ada simpanan ditemukan!
|
||||
text.saveload=[accent]Menyimpan...
|
||||
text.savefail=Gagal menyimpan game!
|
||||
text.save.delete.confirm=Yakin ingin menghapus save ini?
|
||||
text.save.delete=Hapus
|
||||
text.save.export=Ekspor Simpanan
|
||||
text.save.import.invalid=[orange]Simpanan ini tidak valid!
|
||||
text.save.import.fail=[crimson]Gagal mengimpor: [orange]{0}
|
||||
text.save.export.fail=[crimson]Gagal mengekspor save: [orange]{0}
|
||||
text.save.import=Impor Simpanan
|
||||
text.save.newslot=Nama simpanan:
|
||||
text.save.rename=Ganti nama
|
||||
text.save.rename.text=Nama baru:
|
||||
text.selectslot=Pilih simpanan.
|
||||
text.slot=[accent]Slot{0}
|
||||
text.save.corrupted=[orange]Simpanan rusak atau tidak valid!
|
||||
text.empty=<kosong>
|
||||
text.on=Hidup
|
||||
text.off=Mati
|
||||
text.save.autosave=Simpan otomatis: {0}
|
||||
text.save.map=Peta: {0}
|
||||
text.save.wave=Gelombang {0}
|
||||
text.save.date=Terakhir Disimpan: {0}
|
||||
text.confirm=Konfirmasi
|
||||
text.delete=Hapus
|
||||
text.ok=OK
|
||||
text.open=Buka
|
||||
text.cancel=Batal
|
||||
text.openlink=Buka tautan
|
||||
text.back=Kembali
|
||||
text.quit.confirm=Anda yakin ingin berhenti?
|
||||
text.loading=[accent]Memuat...
|
||||
text.wave=[orange]Gelombang {0}
|
||||
text.wave.waiting=Gelombang dimulai {0}
|
||||
text.waiting=Menunggu...
|
||||
text.enemies={0} musuh
|
||||
text.enemies.single={0} Musuh
|
||||
text.loadimage=Buka Gambar
|
||||
text.saveimage=Simpan Gambar
|
||||
text.editor.badsize=[orange]Dimensi gambar tidak valid![]\nDimensi peta yang valid: {0}
|
||||
text.editor.errorimageload=Kesalahan saat memuat file gambar:\n[orange]{0}
|
||||
text.editor.errorimagesave=Kesalahan saat menyimpan file gambar:\n[orange]{0}
|
||||
text.editor.generate=Hasilkan
|
||||
text.editor.resize=Ubah ukuran
|
||||
text.editor.loadmap=Buka Peta
|
||||
text.editor.savemap=Simpan Peta
|
||||
text.editor.loadimage=Buka Gambar
|
||||
text.editor.saveimage=Simpan Gambar
|
||||
text.editor.unsaved=[scarlet]Anda memiliki perubahan yang belum disimpan![]\nYakin ingin keluar?
|
||||
text.editor.resizemap=Ubah ukuran peta
|
||||
text.editor.mapname=Nama Peta:
|
||||
text.editor.overwrite=[accent]Peringatan!\nIni akan mengganti peta yang ada.
|
||||
text.editor.selectmap=Pilih peta yang akan dimuat:
|
||||
text.width=Lebar:
|
||||
text.height=Tinggi:
|
||||
text.menu=Menu
|
||||
text.play=Main
|
||||
text.load=Buka
|
||||
text.save=Simpan
|
||||
text.language.restart=Silakan mulai ulang permainan Anda agar pengaturan bahasa mulai berlaku.
|
||||
text.settings.language=Bahasa
|
||||
text.settings=Pengaturan
|
||||
text.tutorial=Tutorial
|
||||
text.editor=Pengedit
|
||||
text.mapeditor=Pengedit Peta
|
||||
text.donate=Sumbangkan
|
||||
text.settings.reset=Atur ulang ke Default
|
||||
text.settings.controls=Kontrol
|
||||
text.settings.game=Permainan
|
||||
text.settings.sound=Suara
|
||||
text.settings.graphics=Grafis
|
||||
text.upgrades=Perbaruan
|
||||
text.purchased=[LIME]Dibuat!
|
||||
text.weapons=Senjata
|
||||
text.paused=Jeda
|
||||
text.info.title=[accent]Info
|
||||
text.error.title=[crimson]Telah terjadi kesalahan
|
||||
text.error.crashtitle=Telah terjadi kesalahan
|
||||
text.blocks.blockinfo=Info Blok
|
||||
text.blocks.powercapacity=Kapasitas Tenaga
|
||||
text.blocks.powershot=Tenaga/tembakan
|
||||
text.blocks.size=Ukuran
|
||||
text.blocks.liquidcapacity=Kapasitas cairan
|
||||
text.blocks.maxitemssecond=Batas barang/detik
|
||||
text.blocks.powerrange=Jangkauan tenaga
|
||||
text.blocks.itemcapacity=Kapasitas Barang
|
||||
text.blocks.inputliquid=Cairan yang Masuk
|
||||
text.blocks.inputitem=Barang yang Masuk
|
||||
text.blocks.explosive=Mudah meledak!
|
||||
text.blocks.health=Darah
|
||||
text.blocks.inaccuracy=Ketidaktelitian
|
||||
text.blocks.shots=Tembakan
|
||||
text.blocks.inputcapacity=Kapasitas masuk
|
||||
text.blocks.outputcapacity=Kapasitas keluar
|
||||
setting.difficulty.easy=mudah
|
||||
setting.difficulty.normal=normal
|
||||
setting.difficulty.hard=sulit
|
||||
setting.difficulty.insane=sangat susah
|
||||
setting.difficulty.purge=paling susah
|
||||
setting.difficulty.name=Kesulitan:
|
||||
setting.screenshake.name=Layar Bergoyang
|
||||
setting.indicators.name=Indikator Musuh
|
||||
setting.effects.name=Efek Tampilan
|
||||
setting.sensitivity.name=Sensitivitas Pengendali
|
||||
setting.saveinterval.name=Waktu Simpan Otomatis
|
||||
setting.seconds={0} Detik
|
||||
setting.fullscreen.name=Layar Penuh
|
||||
setting.fps.name=Tunjukkan FPS
|
||||
setting.vsync.name=VSync
|
||||
setting.lasers.name=Tampilkan Laser Tenaga
|
||||
setting.healthbars.name=Tampilkan Bar Darah Entitas
|
||||
setting.musicvol.name=Volume Musik
|
||||
setting.mutemusic.name=Bisukan Musik
|
||||
setting.sfxvol.name=Volume Suara
|
||||
setting.mutesound.name=Bisukan Suara
|
||||
map.maze.name=labirin
|
||||
map.fortress.name=benteng
|
||||
map.sinkhole.name=lubang pembuangan
|
||||
map.caves.name=gua
|
||||
map.volcano.name=gunung berapi
|
||||
map.caldera.name=kaldera
|
||||
map.scorch.name=penghangusan
|
||||
map.desert.name=gurun
|
||||
map.island.name=pulau
|
||||
map.grassland.name=padang rumput
|
||||
map.tundra.name=tundra
|
||||
map.spiral.name=spiral
|
||||
map.tutorial.name=tutorial
|
||||
keybind.move_x.name=gerak_x
|
||||
keybind.move_y.name=gerak_y
|
||||
keybind.select.name=pilih
|
||||
keybind.break.name=hapus
|
||||
keybind.shoot.name=tembak
|
||||
keybind.zoom_hold.name=perbesar_tahan
|
||||
keybind.zoom.name=perbesar
|
||||
keybind.menu.name=menu
|
||||
keybind.pause.name=jeda
|
||||
keybind.dash.name=berlari
|
||||
keybind.rotate_alt.name=putar_alt
|
||||
keybind.rotate.name=putar
|
||||
mode.waves.name=gelombang
|
||||
mode.sandbox.name=sandbox
|
||||
mode.freebuild.name=freebuild
|
||||
item.stone.name=batu
|
||||
item.coal.name=batu bara
|
||||
item.titanium.name=titanium
|
||||
item.thorium.name=thorium
|
||||
item.sand.name=pasir
|
||||
liquid.water.name=air
|
||||
liquid.lava.name=lahar
|
||||
liquid.oil.name=minyak
|
||||
block.door.name=pintu
|
||||
block.door-large.name=pintu besar
|
||||
block.conduit.name=saluran
|
||||
block.pulseconduit.name=saluran cepat
|
||||
block.liquidrouter.name=router cairan
|
||||
block.conveyor.name=konveyor
|
||||
block.router.name=router
|
||||
block.junction.name=persimpangan jalan
|
||||
block.liquidjunction.name=persimpangan cairan
|
||||
block.sorter.name=penyortir
|
||||
block.smelter.name=peleburan
|
||||
text.credits=Credits
|
||||
text.link.discord.description=the official Mindustry discord chatroom
|
||||
text.link.github.description=Game source code
|
||||
text.link.dev-builds.description=Unstable development builds
|
||||
text.link.trello.description=Official trello board for planned features
|
||||
text.link.itch.io.description=itch.io page with PC downloads and web version
|
||||
text.link.google-play.description=Google Play store listing
|
||||
text.link.wiki.description=official Mindustry wiki
|
||||
text.linkfail=Failed to open link!\nThe URL has been copied to your cliboard.
|
||||
text.editor.web=The web version does not support the editor!\nDownload the game to use it.
|
||||
text.web.unsupported=The web version does not support this feature! Download the game to use it.
|
||||
text.multiplayer.web=This version of the game does not support multiplayer!\nTo play multiplayer from your browser, use the "multiplayer web version" link at the itch.io page.
|
||||
text.host.web=The web version does not support hosting games! Download the game to use this feature.
|
||||
text.map.delete=Are you sure you want to delete the map "[orange]{0}[]"?
|
||||
text.construction.title=Block Construction Guide
|
||||
text.construction=You've just selected [accent]block construction mode[].\n\nTo begin placing, simply tap a valid location near your ship.\nOnce you have selected some blocks, press the checkbox to confirm, and your ship will begin constructing them.\n\n- [accent]Remove blocks[] from your selection by tapping them.\n- [accent]Shift the selection[] by holding and dragging any block in the selection.\n- [accent]Place blocks in a line[] by tapping and holding an empty spot, then dragging in a direction.\n- [accent]Cancel construction or selection[] by pressing the X at the bottom left.
|
||||
text.deconstruction.title=Block Deconstruction Guide
|
||||
text.deconstruction=You've just selected [accent]block deconstruction mode[].\n\nTo begin breaking, simply tap a block near your ship.\nOnce you have selected some blocks, press the checkbox to confirm, and your ship will begin de-constructing them.\n\n- [accent]Remove blocks[] from your selection by tapping them.\n- [accent]Remove blocks in an area[] by tapping and holding an empty spot, then dragging in a direction.\n- [accent]Cancel deconstruction or selection[] by pressing the X at the bottom left.
|
||||
text.showagain=Don't show again next session
|
||||
text.unlocks=Unlocks
|
||||
text.addplayers=Add/Remove Players
|
||||
text.newgame=New Game
|
||||
text.maps=Maps
|
||||
text.maps.none=[LIGHT_GRAY]No maps found!
|
||||
text.unlocked=New Block Unlocked!
|
||||
text.unlocked.plural=New Blocks Unlocked!
|
||||
text.server.kicked.fastShoot=You are shooting too quickly.
|
||||
text.server.kicked.banned=You are banned on this server.
|
||||
text.server.kicked.recentKick=You have been kicked recently.\nWait before connecting again.
|
||||
text.server.kicked.nameInUse=There is someone with that name\nalready on this server.
|
||||
text.server.kicked.nameEmpty=Your name must contain at least one character or number.
|
||||
text.server.kicked.idInUse=You are already on this server! Connecting with two accounts is not permitted.
|
||||
text.server.kicked.customClient=This server does not support custom builds. Download an official version.
|
||||
text.host.info=The [accent]host[] button hosts a server on ports [scarlet]6567[] and [scarlet]6568.[]\nAnybody on the same [LIGHT_GRAY]wifi or local network[] should be able to see your server in their server list.\n\nIf you want people to be able to connect from anywhere by IP, [accent]port forwarding[] is required.\n\n[LIGHT_GRAY]Note: If someone is experiencing trouble connecting to your LAN game, make sure you have allowed Mindustry access to your local network in your firewall settings.
|
||||
text.join.info=Here, you can enter a [accent]server IP[] to connect to, or discover [accent]local network[] servers to connect to.\nBoth LAN and WAN multiplayer is supported.\n\n[LIGHT_GRAY]Note: There is no automatic global server list; if you want to connect to someone by IP, you would need to ask the host for their IP.
|
||||
text.trace=Trace Player
|
||||
text.trace.playername=Player name: [accent]{0}
|
||||
text.trace.ip=IP: [accent]{0}
|
||||
text.trace.id=Unique ID: [accent]{0}
|
||||
text.trace.android=Android Client: [accent]{0}
|
||||
text.trace.modclient=Custom Client: [accent]{0}
|
||||
text.trace.totalblocksbroken=Total blocks broken: [accent]{0}
|
||||
text.trace.structureblocksbroken=Structure blocks broken: [accent]{0}
|
||||
text.trace.lastblockbroken=Last block broken: [accent]{0}
|
||||
text.trace.totalblocksplaced=Total blocks placed: [accent]{0}
|
||||
text.trace.lastblockplaced=Last block placed: [accent]{0}
|
||||
text.invalidid=Invalid client ID! Submit a bug report.
|
||||
text.server.bans=Bans
|
||||
text.server.bans.none=No banned players found!
|
||||
text.server.admins=Admins
|
||||
text.server.admins.none=No admins found!
|
||||
text.server.outdated=[crimson]Outdated Server![]
|
||||
text.server.outdated.client=[crimson]Outdated Client![]
|
||||
text.server.version=[lightgray]Version: {0}
|
||||
text.server.custombuild=[yellow]Custom Build
|
||||
text.confirmban=Are you sure you want to ban this player?
|
||||
text.confirmunban=Are you sure you want to unban this player?
|
||||
text.confirmadmin=Are you sure you want to make this player an admin?
|
||||
text.confirmunadmin=Are you sure you want to remove admin status from this player?
|
||||
text.disconnect.data=Failed to load world data!
|
||||
text.save.difficulty=Difficulty: {0}
|
||||
text.copylink=Copy Link
|
||||
text.changelog.title=Changelog
|
||||
text.changelog.loading=Getting changelog...
|
||||
text.changelog.error.android=[orange]Note that the changelog sometimes does not work on Android 4.4 and below!\nThis is due to an internal Android bug.
|
||||
text.changelog.error.ios=[orange]The changelog is currently not supported in iOS.
|
||||
text.changelog.error=[scarlet]Error getting changelog!\nCheck your internet connection.
|
||||
text.changelog.current=[yellow][[Current version]
|
||||
text.changelog.latest=[orange][[Latest version]
|
||||
text.saving=[accent]Saving...
|
||||
text.unknown=Unknown
|
||||
text.custom=Custom
|
||||
text.builtin=Built-In
|
||||
text.map.delete.confirm=Are you sure you want to delete this map? This action cannot be undone!
|
||||
text.map.random=[accent]Random Map
|
||||
text.map.nospawn=This map does not have any cores for the player to spawn in! Add a [ROYAL]blue[] core to this map in the editor.
|
||||
text.editor.slope=\\
|
||||
text.editor.openin=Open In Editor
|
||||
text.editor.oregen=Ore Generation
|
||||
text.editor.oregen.info=Ore Generation:
|
||||
text.editor.mapinfo=Map Info
|
||||
text.editor.author=Author:
|
||||
text.editor.description=Description:
|
||||
text.editor.name=Name:
|
||||
text.editor.teams=Teams
|
||||
text.editor.elevation=Elevation
|
||||
text.editor.saved=Saved!
|
||||
text.editor.save.noname=Your map does not have a name! Set one in the 'map info' menu.
|
||||
text.editor.save.overwrite=Your map overwrites a built-in map! Pick a different name in the 'map info' menu.
|
||||
text.editor.import.exists=[scarlet]Unable to import:[] a built-in map named '{0}' already exists!
|
||||
text.editor.import=Import...
|
||||
text.editor.importmap=Import Map
|
||||
text.editor.importmap.description=Import an already existing map
|
||||
text.editor.importfile=Import File
|
||||
text.editor.importfile.description=Import an external map file
|
||||
text.editor.importimage=Import Terrain Image
|
||||
text.editor.importimage.description=Import an external map image file
|
||||
text.editor.export=Export...
|
||||
text.editor.exportfile=Export File
|
||||
text.editor.exportfile.description=Export a map file
|
||||
text.editor.exportimage=Export Terrain Image
|
||||
text.editor.exportimage.description=Export a map image file
|
||||
text.editor.overwrite.confirm=[scarlet]Warning![] A map with this name already exists. Are you sure you want to overwrite it?
|
||||
text.fps=FPS: {0}
|
||||
text.tps=TPS: {0}
|
||||
text.ping=Ping: {0}ms
|
||||
text.settings.rebind=Rebind
|
||||
text.yes=Yes
|
||||
text.no=No
|
||||
text.blocks.targetsair=Targets Air
|
||||
text.blocks.itemspeed=Units Moved
|
||||
text.blocks.shootrange=Range
|
||||
text.blocks.poweruse=Power Use
|
||||
text.blocks.inputitemcapacity=Input Item Capacity
|
||||
text.blocks.outputitemcapacity=Input Item Capacity
|
||||
text.blocks.maxpowergeneration=Max Power Generation
|
||||
text.blocks.powertransferspeed=Power Transfer
|
||||
text.blocks.craftspeed=Production Speed
|
||||
text.blocks.inputliquidaux=Aux Liquid
|
||||
text.blocks.inputitems=Input Items
|
||||
text.blocks.outputitem=Output Item
|
||||
text.blocks.drilltier=Drillables
|
||||
text.blocks.drillspeed=Base Drill Speed
|
||||
text.blocks.liquidoutput=Liquid Output
|
||||
text.blocks.liquiduse=Liquid Use
|
||||
text.blocks.coolant=Coolant
|
||||
text.blocks.coolantuse=Coolant Use
|
||||
text.blocks.inputliquidfuel=Fuel Liquid
|
||||
text.blocks.liquidfueluse=Liquid Fuel Use
|
||||
text.blocks.reload=Reload
|
||||
text.blocks.inputfuel=Fuel
|
||||
text.blocks.fuelburntime=Fuel Burn Time
|
||||
text.unit.blocks=blocks
|
||||
text.unit.powersecond=power units/second
|
||||
text.unit.liquidsecond=liquid units/second
|
||||
text.unit.itemssecond=items/second
|
||||
text.unit.pixelssecond=pixels/second
|
||||
text.unit.liquidunits=liquid units
|
||||
text.unit.powerunits=power units
|
||||
text.unit.degrees=degrees
|
||||
text.unit.seconds=seconds
|
||||
text.unit.none=
|
||||
text.unit.items=items
|
||||
text.category.general=General
|
||||
text.category.power=Power
|
||||
text.category.liquids=Liquids
|
||||
text.category.items=Items
|
||||
text.category.crafting=Crafting
|
||||
text.category.shooting=Shooting
|
||||
setting.multithread.name=Multithreading
|
||||
setting.minimap.name=Show Minimap
|
||||
text.keybind.title=Rebind Keys
|
||||
keybind.block_info.name=block_info
|
||||
keybind.chat.name=chat
|
||||
keybind.player_list.name=player_list
|
||||
keybind.console.name=console
|
||||
mode.text.help.title=Description of modes
|
||||
mode.waves.description=the normal mode. limited resources and automatic incoming waves.
|
||||
mode.sandbox.description=infinite resources and no timer for waves.
|
||||
mode.freebuild.description=limited resources and no timer for waves.
|
||||
content.item.name=Items
|
||||
content.liquid.name=Liquids
|
||||
content.unit-type.name=Units
|
||||
content.recipe.name=Blocks
|
||||
item.stone.description=A common raw material. Used for separating and refining into other materials, or melting into lava.
|
||||
item.tungsten.name=Tungsten
|
||||
item.tungsten.description=A common, but very useful structure material. Used in drills and heat-resistant blocks such as generators and smelteries.
|
||||
item.lead.name=Lead
|
||||
item.lead.description=A basic starter material. Used extensively in electronics and liquid transportation blocks.
|
||||
item.coal.description=A common and readily available fuel.
|
||||
item.carbide.name=Carbide
|
||||
item.carbide.description=A tough alloy made with tungsten and carbon. Used in advanced transportation blocks and high-tier drills.
|
||||
item.titanium.description=A rare super-light metal used extensively in liquid transportation, drills and aircraft.
|
||||
item.thorium.description=A dense, radioactive metal used as structural support and nuclear fuel.
|
||||
item.silicon.name=Silicon
|
||||
item.silcion.description=An extremely useful semiconductor, with applications in solar panels and many complex electronics.
|
||||
item.plastanium.name=Plastanium
|
||||
item.plastanium.description=A light, ductile material used in advanced aircraft and fragmentation ammunition.
|
||||
item.phase-matter.name=Phase Matter
|
||||
item.surge-alloy.name=Surge Alloy
|
||||
item.biomatter.name=Biomatter
|
||||
item.biomatter.description=A clump of organic mush; used for conversion into oil or as a basic fuel.
|
||||
item.sand.description=A common material that is used extensively in smelting, both in alloying and as a flux.
|
||||
item.blast-compound.name=Blast Compound
|
||||
item.blast-compound.description=A volatile compound used in bombs and explosives. While it can burned as fuel, this is not advised.
|
||||
item.pyratite.name=Pyratite
|
||||
item.pyratite.description=An extremely flammable substance used in incendiary weapons.
|
||||
liquid.cryofluid.name=Cryofluid
|
||||
text.item.explosiveness=[LIGHT_GRAY]Explosiveness: {0}
|
||||
text.item.flammability=[LIGHT_GRAY]Flammability: {0}
|
||||
text.item.radioactivity=[LIGHT_GRAY]Radioactivity: {0}
|
||||
text.item.fluxiness=[LIGHT_GRAY]Flux Power: {0}
|
||||
text.item.hardness=[LIGHT_GRAY]Hardness: {0}
|
||||
text.liquid.heatcapacity=[LIGHT_GRAY]Heat Capacity: {0}
|
||||
text.liquid.viscosity=[LIGHT_GRAY]Viscosity: {0}
|
||||
text.liquid.temperature=[LIGHT_GRAY]Temperature: {0}
|
||||
block.tungsten-wall.name=Tungsten Wall
|
||||
block.tungsten-wall-large.name=Large Tungsten Wall
|
||||
block.carbide-wall.name=Carbide Wall
|
||||
block.carbide-wall-large.name=Large Carbide Wall
|
||||
block.thorium-wall.name=Thorium Wall
|
||||
block.thorium-wall-large.name=Large Thorium Wall
|
||||
block.duo.name=Duo
|
||||
block.scorch.name=Scorch
|
||||
block.hail.name=Hail
|
||||
block.lancer.name=Lancer
|
||||
block.titanium-conveyor.name=Titanium Conveyor
|
||||
block.splitter.name=Splitter
|
||||
block.splitter.description=Outputs items into two opposite directions immediately after they are recieved.
|
||||
block.router.description=Splits items into all 4 directions. Can store items as a buffer.
|
||||
block.distributor.name=Distributor
|
||||
block.distributor.description=A splitter that can split items into 8 directions.
|
||||
block.sorter.description=Sorts items. If an item matches the selection, it is allowed to pass. Otherwise, the item is outputted to the left and right.
|
||||
block.overflow-gate.name=Overflow Gate
|
||||
block.overflow-gate.description=A combination splitter and router that only outputs to the left and right if the front path is blocked.
|
||||
block.bridgeconveyor.name=Bridge Conveyor
|
||||
block.bridgeconveyor.description=A conveyor that can go over other blocks, for up to two total blocks.
|
||||
block.arc-smelter.name=Arc Smelter
|
||||
block.silicon-smelter.name=Silicon Smelter
|
||||
block.phase-weaver.name=Phase Weaver
|
||||
block.pulverizer.name=Pulverizer
|
||||
block.cryofluidmixer.name=Cryofluid Mixer
|
||||
block.melter.name=Melter
|
||||
block.incinerator.name=Incinerator
|
||||
block.biomattercompressor.name=Biomatter Compressor
|
||||
block.separator.name=Separator
|
||||
block.centrifuge.name=Centrifuge
|
||||
block.power-node.name=Power Node
|
||||
block.power-node-large.name=Large Power Node
|
||||
block.battery.name=Battery
|
||||
block.battery-large.name=Large Battery
|
||||
block.combustion-generator.name=Combustion Generator
|
||||
block.turbine-generator.name=Turbine Generator
|
||||
block.tungsten-drill.name=Tungsten Drill
|
||||
block.carbide-drill.name=Carbide Drill
|
||||
block.laser-drill.name=Laser Drill
|
||||
block.water-extractor.name=Water Extractor
|
||||
block.cultivator.name=Cultivator
|
||||
block.dart-ship-factory.name=Dart Ship Factory
|
||||
block.delta-mech-factory.name=Delta Mech Factory
|
||||
block.dronefactory.name=Drone Factory
|
||||
block.repairpoint.name=Repair Point
|
||||
block.resupplypoint.name=Resupply Point
|
||||
block.liquidtank.name=Liquid Tank
|
||||
block.bridgeconduit.name=Bridge Conduit
|
||||
block.mechanical-pump.name=Mechanical Pump
|
||||
block.itemsource.name=Item Source
|
||||
block.itemvoid.name=Item Void
|
||||
block.liquidsource.name=Liquid Source
|
||||
block.powervoid.name=Power Void
|
||||
block.powerinfinite.name=Power Infinite
|
||||
block.unloader.name=Unloader
|
||||
block.sortedunloader.name=Sorted Unloader
|
||||
block.vault.name=Vault
|
||||
block.wave.name=Wave
|
||||
block.swarmer.name=Swarmer
|
||||
block.salvo.name=Salvo
|
||||
block.ripple.name=Ripple
|
||||
block.phase-conveyor.name=Phase Conveyor
|
||||
block.bridge-conveyor.name=Bridge Conveyor
|
||||
block.plastanium-compressor.name=Plastanium Compressor
|
||||
block.pyratite-mixer.name=Pyratite Mixer
|
||||
block.blast-mixer.name=Blast Mixer
|
||||
block.solidifer.name=Solidifer
|
||||
block.solar-panel.name=Solar Panel
|
||||
block.solar-panel-large.name=Large Solar Panel
|
||||
block.oil-extractor.name=Oil Extractor
|
||||
block.javelin-ship-factory.name=Javelin Ship factory
|
||||
block.drone-factory.name=Drone Factory
|
||||
block.fabricator-factory.name=Fabricator Factory
|
||||
block.repair-point.name=Repair Point
|
||||
block.resupply-point.name=Resupply Point
|
||||
block.pulse-conduit.name=Pulse Conduit
|
||||
block.phase-conduit.name=Phase Conduit
|
||||
block.liquid-router.name=Liquid Router
|
||||
block.liquid-tank.name=Liquid Tank
|
||||
block.liquid-junction.name=Liquid Junction
|
||||
block.bridge-conduit.name=Bridge Conduit
|
||||
block.rotary-pump.name=Rotary Pump
|
||||
block.nuclear-reactor.name=Nuclear Reactor
|
||||
text.save.old=This save is for an older version of the game, and can no longer be used.\n\n[LIGHT_GRAY]Save backwards compatibility will be implemented in the full 4.0 release.
|
||||
|
||||
@@ -1,488 +1,495 @@
|
||||
text.about = Stworzony przez [ROYAL] Anuken. []\nPierwotnie wpis w [orange] GDL [] MM Jam.\n\nNapisy:\n- SFX wykonane z pomocą [YELLOW] bfxr []\n- Muzyka wykonana przez [GREEN] RoccoW [] / znaleziona na [lime] FreeMusicArchive.org []\n\nSpecjalne podziękowania dla:\n- [coral] MitchellFJN []: obszerne testowanie i feedback\n- [niebo] Luxray5474 []: prace związane z wiki, pomoc z kodem\n- Wszystkich beta testerów na itch.io i Google Play\n
|
||||
text.discord = Odwiedź nasz serwer Discord
|
||||
text.gameover = Rdzeń został zniszczony.
|
||||
text.highscore = [YELLOW] Nowy rekord!
|
||||
text.lasted = Wytrwałeś do fali
|
||||
text.level.highscore = Rekord: [accent]{0}
|
||||
text.level.delete.title = Potwierdź kasowanie
|
||||
text.level.delete = Czy na pewno chcesz usunąć mapę \"[orange]{0}\"?
|
||||
text.level.select = Wybrany poziom
|
||||
text.level.mode = Tryb gry:
|
||||
text.savegame = Zapisz Grę
|
||||
text.loadgame = Wczytaj grę
|
||||
text.joingame = Gra wieloosobowa
|
||||
text.quit = Wyjdź
|
||||
text.about.button = O grze
|
||||
text.name = Nazwa:
|
||||
text.public = Publiczny
|
||||
text.players = {0} graczy online
|
||||
text.server.player.host = {0} (host)
|
||||
text.players.single = {0} gracz online
|
||||
text.server.mismatch = Błąd pakietu: możliwa niezgodność wersji klienta/serwera.\nUpewnij się, że Ty i host macie najnowszą wersję Mindustry!
|
||||
text.server.closing = [accent] Zamykanie serwera ...
|
||||
text.server.kicked.kick = Zostałeś wyrzucony z serwera!
|
||||
text.server.kicked.invalidPassword = Nieprawidłowe hasło!
|
||||
text.server.kicked.clientOutdated = Nieaktualna gra! Zaktualizują ją!
|
||||
text.server.kicked.serverOutdated = Nieaktualna gra! Zaktualizują ją!
|
||||
text.server.connected = {0} dołączył do gry .
|
||||
text.server.disconnected = {0} został rozłączony.
|
||||
text.nohost = Nie można hostować serwera na mapie niestandardowej!
|
||||
text.hostserver = Serwer hosta
|
||||
text.host = Host
|
||||
text.hosting = [accent] Otwieranie serwera ...
|
||||
text.hosts.refresh = Odśwież
|
||||
text.hosts.discovering = Wyszukiwanie gier w sieci LAN
|
||||
text.server.refreshing = Odświeżanie serwera
|
||||
text.hosts.none = [lightgray] Brak serwerów w sieci LAN!
|
||||
text.host.invalid = [scarlet] Nie można połączyć się z hostem.
|
||||
text.server.friendlyfire = Bratobójczy ogień
|
||||
text.server.add = Dodaj serwer
|
||||
text.server.delete = Czy na pewno chcesz usunąć ten serwer?
|
||||
text.server.hostname = Host: {0}
|
||||
text.server.edit = Edytuj serwer
|
||||
text.joingame.byip = Dołącz przez IP...
|
||||
text.joingame.title = Dołącz do gry
|
||||
text.joingame.ip = IP:
|
||||
text.disconnect = Rozłączony.
|
||||
text.connecting = [accent]Łączenie ...
|
||||
text.connecting.data = [accent]Ładowanie danych świata...
|
||||
text.connectfail = [crimson]Nie można połączyć się z serwerem: [orange] {0}
|
||||
text.server.port = Port:
|
||||
text.server.addressinuse = Adres jest już w użyciu!
|
||||
text.server.invalidport = Nieprawidłowy numer portu.
|
||||
text.server.error = [crimson] Błąd hostowania serwera: [orange] {0}
|
||||
text.tutorial.back = < Cofnij
|
||||
text.tutorial.next = Dalej >
|
||||
text.save.new = Nowy zapis
|
||||
text.save.overwrite = Czy na pewno chcesz nadpisać zapis gry?
|
||||
text.overwrite = Nadpisz
|
||||
text.save.none = Nie znaleziono zapisów gry!
|
||||
text.saveload = [akcent]Zapisywanie...
|
||||
text.savefail = Nie udało się zapisać gry!
|
||||
text.save.delete.confirm = Czy na pewno chcesz usunąć ten zapis gry?
|
||||
text.save.delete = Usuń
|
||||
text.save.export = Eksportuj
|
||||
text.save.import.invalid = [orange]Zapis gry jest niepoprawny!
|
||||
text.save.import.fail = [crimson]Nie udało się zaimportować zapisu: [orange] {0}
|
||||
text.save.export.fail = [crimson]Nie można wyeksportować zapisu: [orange] {0}
|
||||
text.save.import = Importuj
|
||||
text.save.newslot = Zapisz nazwę:
|
||||
text.save.rename = Zmień nazwę
|
||||
text.save.rename.text = Zmień nazwę
|
||||
text.selectslot = Wybierz zapis.
|
||||
text.slot = [accent]Slot {0}
|
||||
text.save.corrupted = [orange]Zapis gry jest uszkodzony lub nieprawidłowy!
|
||||
text.empty = <pusto>
|
||||
text.on = Włączone
|
||||
text.off = Wyłączone
|
||||
text.save.autosave = Zapisywanie automatyczne
|
||||
text.save.map = Mapa: {0}
|
||||
text.save.wave = Fala: {0}
|
||||
text.save.date = Ostatnio zapisano: {0}
|
||||
text.confirm = Potwierdź
|
||||
text.delete = Usuń
|
||||
text.ok = Ok
|
||||
text.open = Otwórz
|
||||
text.cancel = Anuluj
|
||||
text.openlink = Otwórz link
|
||||
text.back = Wróć
|
||||
text.quit.confirm = Czy na pewno chcesz wyjść?
|
||||
text.loading = [accent]Ładowanie ...
|
||||
text.wave = [orange]Fala {0}
|
||||
text.wave.waiting = Fala w {0}
|
||||
text.waiting = Oczekiwanie...
|
||||
text.enemies = {0} wrogów
|
||||
text.enemies.single = {0} wróg
|
||||
text.loadimage = Załaduj obraz
|
||||
text.saveimage = Zapisz obraz
|
||||
text.editor.badsize = [orange]Nieprawidłowe wymiary obrazu![]\nWymiary poprawne: {0}
|
||||
text.editor.errorimageload = Błąd podczas ładowania pliku obrazu: [orange]{0}
|
||||
text.editor.errorimagesave = Błąd podczas zapisywania pliku obrazu: [orange]{0}
|
||||
text.editor.generate = Generuj
|
||||
text.editor.resize = Zmień rozmiar
|
||||
text.editor.loadmap = Załaduj mapę
|
||||
text.editor.savemap = Zapisz mapę
|
||||
text.editor.loadimage = Załaduj obraz
|
||||
text.editor.saveimage = Zapisz obraz
|
||||
text.editor.unsaved = [scarlet]Masz niezapisane zmiany![]\nCzy na pewno chcesz wyjść?
|
||||
text.editor.brushsize = Rozmiar pędzla: {0}
|
||||
text.editor.noplayerspawn = Ta mapa nie ma ustawionego spawnu gracza!
|
||||
text.editor.manyplayerspawns = Mapy nie mogą mieć więcej niż jeden punkt spawnu gracza!
|
||||
text.editor.manyenemyspawns = Nie może mieć więcej niż {0} punktów spawnu wroga!
|
||||
text.editor.resizemap = Zmień rozmiar mapy
|
||||
text.editor.resizebig = [scarlet]Uwaga![]\nMapy większe niż 256 jednostek mogą przycinać i być niestabilne.
|
||||
text.editor.mapname = Nazwa mapy:
|
||||
text.editor.overwrite = [accent]Uwaga!\nSpowoduje to nadpisanie istniejącej mapy.
|
||||
text.editor.failoverwrite = [crimson]Nie można nadpisać mapy podstawowej!
|
||||
text.editor.selectmap = Wybierz mapę do załadowania:
|
||||
text.width = Szerokość:
|
||||
text.height = Wysokość:
|
||||
text.randomize = Wylosuj
|
||||
text.apply = Zastosuj
|
||||
text.update = Zaktualizuj
|
||||
text.menu = Menu
|
||||
text.play = Graj
|
||||
text.load = Wczytaj
|
||||
text.save = Zapisz
|
||||
text.language.restart = Uruchom grę ponownie aby ustawiony język zaczął funkcjonować.
|
||||
text.settings.language = Język
|
||||
text.settings = Ustawienia
|
||||
text.tutorial = Poradnik
|
||||
text.editor = Edytor
|
||||
text.mapeditor = Edytor map
|
||||
text.donate = Wspomóż nas
|
||||
text.settings.reset = Przywróć domyślne
|
||||
text.settings.controls = Sterowanie
|
||||
text.settings.game = Gra
|
||||
text.settings.sound = Dźwięk
|
||||
text.settings.graphics = Grafika
|
||||
text.upgrades = Ulepszenia
|
||||
text.purchased = [LIME]Stworzono!
|
||||
text.weapons = Bronie
|
||||
text.paused = Wstrzymano
|
||||
text.respawn = Odrodzenie za
|
||||
text.info.title = [accent]Informacje
|
||||
text.error.title = [crimson]Wystąpił błąd
|
||||
text.error.crashmessage = [SCARLET]Wystąpił nieoczekiwany błąd, który spowodowałby awarię.[]\nProszę, powiadom dewelopera gry o tym błędzie, pisząc jak do niego doszło: [ORANGE]anukendev@gmail.com[]
|
||||
text.error.crashtitle = Wystąpił błąd
|
||||
text.mode.break = Tryb przerw: {0}
|
||||
text.mode.place = Tryb układania: {0}
|
||||
placemode.hold.name = linia
|
||||
placemode.areadelete.name = obszar
|
||||
placemode.touchdelete.name = Dotyk
|
||||
placemode.holddelete.name = Przytrzymać
|
||||
placemode.none.name = żaden
|
||||
placemode.touch.name = Dotyk
|
||||
placemode.cursor.name = kursor
|
||||
text.blocks.extrainfo = [accent]Dodatkowe informacje o bloku:
|
||||
text.blocks.blockinfo = Informacje o bloku
|
||||
text.blocks.powercapacity = Moc znamionowa
|
||||
text.blocks.powershot = moc / strzał
|
||||
text.blocks.powersecond = moc / sekunda
|
||||
text.blocks.powerdraindamage = siła ataku / obrażenia
|
||||
text.blocks.shieldradius = Promień osłony
|
||||
text.blocks.itemspeedsecond = prędkość / sekundy
|
||||
text.blocks.range = Zakres
|
||||
text.blocks.size = Rozmiar
|
||||
text.blocks.powerliquid = moc / ciecz
|
||||
text.blocks.maxliquidsecond = maksymalna ilość cieczy / sekunda
|
||||
text.blocks.liquidcapacity = Pojemność cieczy
|
||||
text.blocks.liquidsecond = ciecz / sekunda
|
||||
text.blocks.damageshot = obrażenia / strzał
|
||||
text.blocks.ammocapacity = Pojemność amunicji
|
||||
text.blocks.ammo = Amunicja:
|
||||
text.blocks.ammoitem = amunicja / przedmiot
|
||||
text.blocks.maxitemssecond = Maksymalna liczba przedmiotów / Sekunda
|
||||
text.blocks.powerrange = Zakres mocy
|
||||
text.blocks.lasertilerange = Zasięg lasera
|
||||
text.blocks.capacity = Wydajność
|
||||
text.blocks.itemcapacity = Pojemność przedmiotów
|
||||
text.blocks.maxpowergenerationsecond = maksymalne generowanie energii / sekunda
|
||||
text.blocks.powergenerationsecond = wytwarzanie energii / sekunda
|
||||
text.blocks.generationsecondsitem = sekunda / przedmiot
|
||||
text.blocks.input = Wkład
|
||||
text.blocks.inputliquid = Potrzebna ciecz
|
||||
text.blocks.inputitem = Potrzebne przedmioty
|
||||
text.blocks.output = Wyjście
|
||||
text.blocks.secondsitem = sekundy / przedmiot
|
||||
text.blocks.maxpowertransfersecond = maksymalny transfer mocy / sekundę
|
||||
text.blocks.explosive = Wysoce wybuchowy!
|
||||
text.blocks.repairssecond = naprawa / sekunda
|
||||
text.blocks.health = Zdrowie
|
||||
text.blocks.inaccuracy = Niedokładność
|
||||
text.blocks.shots = Strzały
|
||||
text.blocks.shotssecond = Strzały / Sekunda
|
||||
text.blocks.fuel = Paliwo
|
||||
text.blocks.fuelduration = Wydajność paliwa
|
||||
text.blocks.maxoutputsecond = maksymalne wyjście / sekunda
|
||||
text.blocks.inputcapacity = Pojemność wejściowa
|
||||
text.blocks.outputcapacity = Wydajność wyjściowa
|
||||
text.blocks.poweritem = moc / przedmiot
|
||||
text.placemode = Tryb miejsca
|
||||
text.breakmode = Tryb przerwania
|
||||
text.health = Zdrowie:
|
||||
setting.difficulty.easy = łatwy
|
||||
setting.difficulty.normal = normalny
|
||||
setting.difficulty.hard = trudny
|
||||
setting.difficulty.insane = szalony
|
||||
setting.difficulty.purge = Czystka
|
||||
setting.difficulty.name = Poziom trudności
|
||||
setting.screenshake.name = Trzęsienie się ekranu
|
||||
setting.smoothcam.name = Płynna kamera
|
||||
setting.indicators.name = Wskaźniki wroga
|
||||
setting.effects.name = Wyświetlanie efektów
|
||||
setting.sensitivity.name = Czułość kontrolera
|
||||
setting.saveinterval.name = Interwał automatycznego zapisywania
|
||||
setting.seconds = Sekundy
|
||||
setting.fps.name = Widoczny licznik FPS
|
||||
setting.vsync.name = Synchronizacja pionowa
|
||||
setting.lasers.name = Pokaż lasery zasilające
|
||||
setting.healthbars.name = Pokaż paski zdrowia jednostki
|
||||
setting.pixelate.name = Rozpikselizowany obraz
|
||||
setting.musicvol.name = Głośność muzyki
|
||||
setting.mutemusic.name = Wycisz muzykę
|
||||
setting.sfxvol.name = Głośność dźwięków
|
||||
setting.mutesound.name = Wycisz dźwięki
|
||||
map.maze.name = labirynt
|
||||
map.fortress.name = twierdza
|
||||
map.sinkhole.name = wgłębienie
|
||||
map.caves.name = jaskinie
|
||||
map.volcano.name = wulkan
|
||||
map.caldera.name = kaldera
|
||||
map.scorch.name = opalacz
|
||||
map.desert.name = pustynia
|
||||
map.island.name = wyspa
|
||||
map.grassland.name = łąka
|
||||
map.tundra.name = tundra
|
||||
map.spiral.name = spirala
|
||||
map.tutorial.name = Poradnik
|
||||
tutorial.intro.text = [yellow]Witamy w poradniku do gry.[]\nAby rozpocząć, naciśnij \"Dalej\".
|
||||
tutorial.moveDesktop.text = Aby się poruszać, użyj klawiszy [orange]W A S[] oraz [orange]D[]. Przytrzymaj [orange]shift[], aby przyśpieszyć.\nPrzytrzymując [orange]ctrl[] podczas kręcenia [orange]rolką myszy[] możesz zmieniać poziom przybliżenia mapy.
|
||||
tutorial.shoot.text = Do celowania używasz kursora myszy.\n[orange]Lewy przycisk myszy[] służy do strzelania. Poćwicz na [yellow]celu[].
|
||||
tutorial.moveAndroid.text = Aby przesunąć widok, przeciągnij jednym palcem po ekranie. Ściśnij i przeciągnij, aby powiększyć lub pomniejszyć.
|
||||
tutorial.placeSelect.text = Wybierz [yellow]przenośnik[] z menu blokowego w prawym dolnym rogu.
|
||||
tutorial.placeConveyorDesktop.text = Użyj [orange]rolki myszy[] aby obrócić przenośnik [orange]do przodu[], a następnie umieść go w [yellow]oznaczonym miejscu[] za pomocą [orange]lewego przycisku myszy[].
|
||||
tutorial.placeConveyorAndroid.text = Użyj [orange]przycisk obracania[], aby obrócić przenośnik [orange]do przodu[]. Jednym palcem przeciągnij go na [yellow]wskazaną pozycję[], a następnie umieść go za pomocą [orange]znacznika wyboru[].
|
||||
tutorial.placeConveyorAndroidInfo.text = Możesz też nacisnąć ikonę celownika w lewym dolnym rogu, aby przełączyć na [pomarańczowy] [[tryb dotykowy] [] i umieścić bloki, dotykając ekranu. W trybie dotykowym bloki można obracać strzałką w lewym dolnym rogu. Naciśnij [żółty] następny [], aby go wypróbować.
|
||||
tutorial.placeDrill.text = Teraz wybierz i umieść [yellow]wiertło do kamienia[] w oznaczonym miejscu.
|
||||
tutorial.blockInfo.text = Jeśli chcesz się dowiedzieć więcej na temat wybranego bloku, kliknij [orange]znak zapytania[] w prawym górnym rogu, aby przeczytać jego opis.
|
||||
tutorial.deselectDesktop.text = Możesz anulować wybór bloku za pomocą [orange]prawego przycisku myszy[].
|
||||
tutorial.deselectAndroid.text = Możesz odznaczyć blok, naciskając przycisk [orange]X[].
|
||||
tutorial.drillPlaced.text = Wiertło będzie teraz produkować [yellow]kamień[] i podawać go na przenośnik, który przeniesie go do [yellow]rdzenia[]
|
||||
tutorial.drillInfo.text = Różne rudy wymagają różnych wierteł. Kamień wymaga wiertła do kamieniu, żelazo wymaga wiertła do żelaza, itd.
|
||||
tutorial.drillPlaced2.text = Przeniesienie przedmiotów do rdzenia powoduje umieszczenie ich w [yellow]inwentarzu przedmiotów[] w lewym górnym rogu. Stawianie bloków te przedmioty zużywa.
|
||||
tutorial.moreDrills.text = Możesz połączyć wiertła i przenośników w przedstawiony sposób:
|
||||
tutorial.deleteBlock.text = Możesz usuwać bloki, klikając [orange]prawy przycisk myszy[] na bloku, który chcesz usunąć.\nSpróbuj usunąć [yellow]oznaczony[] przenośnik.
|
||||
tutorial.deleteBlockAndroid.text = Możesz usuwać bloki za pomocą [orange]krzyżyka[] w [orange]menu przerywania[] w lewym dolnym rogu i stukając w blok.\nSpróbuj usunąć [yellow]oznaczony[] przenośnik.
|
||||
tutorial.placeTurret.text = Teraz wybierz i umieść [yellow]działko[] w [yellow]zaznaczonym miejscu[].
|
||||
tutorial.placedTurretAmmo.text = Działko przyjmie teraz [yellow]amunicję[] z przenośnika. Możesz zobaczyć, ile ma amunicji, najeżdżając na działko kursorem i sprawdzając [green]zielony pasek[].
|
||||
tutorial.turretExplanation.text = Wieżyczki będą strzelać automatycznie do najbliższego wroga w zasięgu, o ile będą miały wystarczającą ilość amunicji.
|
||||
tutorial.waves.text = Co każde [yellow]60[] sekund, fala [coral]wrogów[] pojawi się w określonym miejscu na mapie i spróbuje zniszczyć rdzeń.
|
||||
tutorial.coreDestruction.text = Twoim celem jest [yellow]obrona rdzenia[]. Zniszczenie rdzenia jest równoznaczne z [coral]przegraną[].
|
||||
tutorial.pausingDesktop.text = Jeśli chcesz zrobić przerwę, naciśnij [orange]spację[] lub [orange]przycisk pauzy[] w lewym górnym rogu. Nadal możesz wybierać i wstawiać klocki podczas pauzy, ale nie możesz niszczyć i strzelać.
|
||||
tutorial.pausingAndroid.text = Jeśli chcesz zrobić przerwę, naciśnij [orange]przycisk pauzy[]. Nadal możesz stawiać i niszczyć bloki.
|
||||
tutorial.purchaseWeapons.text = Możesz kupić nowe [żółte] bronie [] dla swojego mecha, otwierając menu aktualizacji w lewym dolnym rogu.
|
||||
tutorial.switchWeapons.text = Zmień broń, klikając jej ikonę w lewym dolnym rogu lub używając cyfr [orange][1-9[].
|
||||
tutorial.spawnWave.text = Fala wrogów nadchodzi! Zniszcz ich.
|
||||
tutorial.pumpDesc.text = W późniejszych falach może być konieczne użycie [yellow]pompy[] do rozprowadzania cieczy dla generatorów lub ekstraktorów.
|
||||
tutorial.pumpPlace.text = Pompy działają podobnie do wierteł, z tym wyjątkiem, że wytwarzają ciecze zamiast ród.\nSpróbuj umieścić pompę na [yellow]oleju[].
|
||||
tutorial.conduitUse.text = Teraz umieść [orange]rurę[] wychodzącą od pompy.
|
||||
tutorial.conduitUse2.text = I tak jeszcze jedną...
|
||||
tutorial.conduitUse3.text = I jeszcze jedeną...
|
||||
tutorial.generator.text = Teraz umieść [orange]generator spalinowy[] na końcu kanału.
|
||||
tutorial.generatorExplain.text = Generator ten będzie teraz wytwarzać [yellow]energię[] z oleju.
|
||||
tutorial.lasers.text = Energia jest dystrybuowana za pomocą [yellow]przekaźników[]. Umieść takowy przekaźnik na [yellow]wskazanej pozycji[].
|
||||
tutorial.laserExplain.text = Generator przeniesie teraz moc do przekaźnika. Wiązka [orange]nieprzeźroczysta[] oznacza, że aktualnie transmituje moc. Wiązka [yellow]przeźroczysta[] wskazuje na brak przekazywanej energii.
|
||||
tutorial.laserMore.text = Możesz sprawdzić ile energii przechowuje blok najeżdżając na niego kursorem i sprawdzając [yellow]żółty pasek[].
|
||||
tutorial.healingTurret.text = Energia może być używany do zasilania [lime]wież naprawczych[]. Umieść takową [yellow]tutaj[].
|
||||
tutorial.healingTurretExplain.text = Dopóki dostarczana jest do niej energia będzie [lime]naprawiać pobliskie bloki[]. Podczas gry ustawiłeś ją niedaleko swojej bazy tak szybko, jak to tylko możliwe!
|
||||
tutorial.smeltery.text = Wiele bloków wymaga do pracy [orange]stali[], którą można wytwarzać w [orange]hucie[]. A skoro tak, to postaw ją teraz.
|
||||
tutorial.smelterySetup.text = Huta wytworzy teraz z żelaza [orange]stal[], wykorzystując węgiel jako paliwo.
|
||||
tutorial.tunnelExplain.text = Zwróć też uwagę, że przedmioty przechodzą przez [orange]tunel[] i wynurzają się po drugiej stronie, przechodząc przez kamienny blok. Pamiętaj, że tunele mogą przechodzić tylko do 2 bloków.
|
||||
tutorial.end.text = I na tym poradnik się kończy!\nPozostaje tylko życzyć Ci [orange]powodzenia[]!
|
||||
keybind.move_x.name = Poruszanie w poziomie
|
||||
keybind.move_y.name = Poruszanie w pionie
|
||||
keybind.select.name = Wybieranie
|
||||
keybind.break.name = Niszczenie
|
||||
keybind.shoot.name = Strzelanie
|
||||
keybind.zoom_hold.name = Inicjator przybliżania
|
||||
keybind.zoom.name = Przybliżanie
|
||||
keybind.menu.name = menu
|
||||
keybind.pause.name = pauza
|
||||
keybind.dash.name = przyśpieszenie
|
||||
keybind.rotate_alt.name = Obracanie (1)
|
||||
keybind.rotate.name = Obracanie (2)
|
||||
keybind.weapon_1.name = Broń 1
|
||||
keybind.weapon_2.name = Broń 2
|
||||
keybind.weapon_3.name = Broń 3
|
||||
keybind.weapon_4.name = Broń 4
|
||||
keybind.weapon_5.name = Broń 5
|
||||
keybind.weapon_6.name = Broń 6
|
||||
mode.waves.name = Fale
|
||||
mode.sandbox.name = sandbox
|
||||
mode.freebuild.name = budowanie
|
||||
upgrade.standard.name = Standardowy
|
||||
upgrade.standard.description = Standardowy mech.
|
||||
upgrade.blaster.name = blaster
|
||||
upgrade.blaster.description = Wystrzeliwuje powolną, słabą kulę.
|
||||
upgrade.triblaster.name = triblaster
|
||||
upgrade.triblaster.description = Strzela 3 pociskami w rozprzestrzenianiu.
|
||||
upgrade.clustergun.name = clustergun
|
||||
upgrade.clustergun.description = Wystrzeliwuje w różnych kierunkach kilka granatów.
|
||||
upgrade.beam.name = Działko laserowe
|
||||
upgrade.beam.description = Strzela laserem o dalekim zasięgu.
|
||||
upgrade.vulcan.name = wulkan
|
||||
upgrade.vulcan.description = Wystrzeliwuje grad szybkich pocisków.
|
||||
upgrade.shockgun.name = Działko elektryczne
|
||||
upgrade.shockgun.description = Wystrzeliwuje niszczycielski podmuch naładowanych odłamków.
|
||||
item.stone.name = kamień
|
||||
item.iron.name = żelazo
|
||||
item.coal.name = węgiel
|
||||
item.steel.name = stal
|
||||
item.titanium.name = tytan
|
||||
item.dirium.name = dirium
|
||||
item.thorium.name = uran
|
||||
item.sand.name = piasek
|
||||
liquid.water.name = woda
|
||||
liquid.plasma.name = plazma
|
||||
liquid.lava.name = lawa
|
||||
liquid.oil.name = olej
|
||||
block.weaponfactory.name = fabryka broni
|
||||
block.air.name = Powietrze.
|
||||
block.blockpart.name = Kawałek bloku
|
||||
block.deepwater.name = głęboka woda
|
||||
block.water.name = woda
|
||||
block.lava.name = lawa
|
||||
block.oil.name = olej
|
||||
block.stone.name = kamień
|
||||
block.blackstone.name = czarny kamień
|
||||
block.iron.name = żelazo
|
||||
block.coal.name = węgiel
|
||||
block.titanium.name = tytan
|
||||
block.thorium.name = uran
|
||||
block.dirt.name = ziemia
|
||||
block.sand.name = piasek
|
||||
block.ice.name = lód
|
||||
block.snow.name = śnieg
|
||||
block.grass.name = trawa
|
||||
block.sandblock.name = blok z piasku
|
||||
block.snowblock.name = blok ze śniegu
|
||||
block.stoneblock.name = blok z kamienia
|
||||
block.blackstoneblock.name = blok z czarnego kamienia
|
||||
block.grassblock.name = blok z trawy
|
||||
block.mossblock.name = porośnięty blok
|
||||
block.shrub.name = krzew
|
||||
block.rock.name = kamyk
|
||||
block.icerock.name = kamyk lodowy
|
||||
block.blackrock.name = czarny kamyk
|
||||
block.dirtblock.name = Brudny blok
|
||||
block.stonewall.name = Kamienna ściana
|
||||
block.stonewall.fulldescription = Tani blok obronny. Przydatny do ochrony rdzenia i wież w pierwszych kilku falach.
|
||||
block.ironwall.name = Żelazna ściana
|
||||
block.ironwall.fulldescription = Podstawowy blok obronny. Zapewnia ochronę przed wrogami.
|
||||
block.steelwall.name = stalowa ściana
|
||||
block.steelwall.fulldescription = Standardowy blok obronny. odpowiednia ochrona przed wrogami.
|
||||
block.titaniumwall.name = tytanowa ściana
|
||||
block.titaniumwall.fulldescription = Silny blok obronny. Zapewnia ochronę przed wrogami.
|
||||
block.duriumwall.name = ściana z dirium
|
||||
block.duriumwall.fulldescription = Bardzo silny blok obronny. Zapewnia ochronę przed wrogami.
|
||||
block.compositewall.name = ściana kompozytowa
|
||||
block.steelwall-large.name = duża stalowa ściana
|
||||
block.steelwall-large.fulldescription = Standardowy blok obronny. Rozpiętość wielu płytek.
|
||||
block.titaniumwall-large.name = duża tytanowa ściana
|
||||
block.titaniumwall-large.fulldescription = Silny blok obronny. Rozpiętość wielu płytek.
|
||||
block.duriumwall-large.name = duża ściana z dirium
|
||||
block.duriumwall-large.fulldescription = Bardzo silny blok obronny. Rozpiętość wielu płytek.
|
||||
block.titaniumshieldwall.name = Ściana z polem obronnym
|
||||
block.titaniumshieldwall.fulldescription = Silny blok obronny z dodatkową wbudowaną tarczą. Wymaga zasilania. Używa energii do pochłaniania pocisków wroga. W celu dostarczenia zasilania zaleca się stosowanie wzmacniaczy energii.
|
||||
block.repairturret.name = Wieża naprawcza
|
||||
block.repairturret.fulldescription = Naprawia pobliskie uszkodzone bloki w niedużej prędkości. Wykorzystuje niewielkie ilości energii.
|
||||
block.megarepairturret.name = Wieża naprawcza II
|
||||
block.megarepairturret.fulldescription = Naprawia pobliskie uszkodzone bloki z przyzwoitą prędkośą. Do działania wykorzystuje energię.
|
||||
block.shieldgenerator.name = Generator tarczy
|
||||
block.shieldgenerator.fulldescription = Zaawansowany blok obronny. Osłania wszystkie bloki w promieniu przed atakiem wroga. Zużywa energię z niewielką prędkością gdy jest w stanie bezczynności, ale z kolei gdy jest w użyciu, energię pobiera bardzo szybko.
|
||||
block.door.name = drzwi
|
||||
block.door.fulldescription = Blok, który można otworzyć i zamknąć poprzez dotknięcie
|
||||
block.door-large.name = duże drzwi
|
||||
block.door-large.fulldescription = Blok, który można otworzyć i zamknąć poprzez dotknięcie
|
||||
block.conduit.name = Rura
|
||||
block.conduit.fulldescription = Podstawowy blok transportu cieczy. Działa jak przenośnik, tylko że z płynami. Najlepiej stosować z pompami bądź razem innymi rurami.\nMoże być używany jako pomost nad płynami dla wrogów i graczy.
|
||||
block.pulseconduit.name = Rura impulsowa
|
||||
block.pulseconduit.fulldescription = Zaawansowany blok transportu cieczy. Transportuje ciecze szybciej i przechowuje więcej niż rury standardowe.
|
||||
block.liquidrouter.name = Rozdzielacz płynów
|
||||
block.liquidrouter.fulldescription = Działa podobnie do zwykłego rozdzielacza. Akceptuje wejście cieczy z jednej strony i przekazuje ją na pozostałe strony. Przydatny do rozdzielania cieczy z jednej rury do wielu.
|
||||
block.conveyor.name = Przenośnik
|
||||
block.conveyor.fulldescription = Podstawowy blok transportu przedmiotów. Przenosi przedmioty do przodu i automatycznie umieszcza je w blokach. Może być używany jako pomost nad płynami dla wrogów i graczy.
|
||||
block.steelconveyor.name = Przenośnik stalowy
|
||||
block.steelconveyor.fulldescription = Zaawansowany blok transportu przedmiotów. Przenosi elementy szybciej niż standardowe przenośniki.
|
||||
block.poweredconveyor.name = przenośnik impulsowy
|
||||
block.poweredconveyor.fulldescription = Najszybszy blok transportowy przedmiotów.
|
||||
block.router.name = Rozdzielacz
|
||||
block.router.fulldescription = Przyjmuje przedmioty z jednego kierunku i przekazuje je w 3 innych kierunkach. Może również przechowywać pewną liczbę przedmiotów. Przydatny do dzielenia materiałów z jednego wiertła na wiele dział.
|
||||
block.junction.name = węzeł
|
||||
block.junction.fulldescription = Działa jako pomost dla dwóch skrzyżowanych przenośników taśmowych. Przydatny w sytuacjach, gdy dwa różne przenośniki przenoszą różne materiały do różnych lokalizacji.
|
||||
block.conveyortunnel.name = tunel przenośnikowy
|
||||
block.conveyortunnel.fulldescription = Transportuje przedmiot pod blokami. Aby użyć, umieść jeden tunel prowadzący do bloku, który ma zostać tunelowany, i jeden po drugiej stronie. Upewnij się, że oba tunele są skierowane w przeciwnych kierunkach, czyli w wejście do bloku podającego, a wyjście do bloku odbierającego.
|
||||
block.liquidjunction.name = Węzeł dla płynów
|
||||
block.liquidjunction.fulldescription = Skrzyżowanie dla rurociągów. Przydatne w sytuacji, w której transportujemy różne ciecze w rurach, które muszą się przeciąć.
|
||||
block.liquiditemjunction.name = Węzeł rur i przenośników
|
||||
block.liquiditemjunction.fulldescription = Skrzyżowanie przenośników taśmowych oraz rur.
|
||||
block.powerbooster.name = Wzmacniacz energii
|
||||
block.powerbooster.fulldescription = Dystrybuuje moc do wszystkich bloków w swoim promieniu.
|
||||
block.powerlaser.name = Przekaźnik
|
||||
block.powerlaser.fulldescription = Tworzy laser, który przesyła moc do bloku przed nim. Nie generuje energii. Najlepiej stosować z generatorami lub innymi przekaźnikami.
|
||||
block.powerlaserrouter.name = Duży rozdzielacz energii
|
||||
block.powerlaserrouter.fulldescription = Przekaźnik, który dystrybuuje energię w trzech kierunkach jednocześnie. Przydatne w sytuacjach, w których wymagane jest zasilanie wielu bloków z jednego generatora.
|
||||
block.powerlasercorner.name = Rozdzielacz energii
|
||||
block.powerlasercorner.fulldescription = Przekaźnik, który dystrybuuje energię w dwóch kierunkach jednocześnie. Przydatny w sytuacjach, gdy wymagane jest zasilanie wielu bloków z jednego generatora, a router jest nieprecyzyjny.
|
||||
block.teleporter.name = teleporter
|
||||
block.teleporter.fulldescription = Zaawansowany blok transportu przedmiotów. Teleporty przenoszą przedmioty do innych teleportów tego samego koloru. Jeżeli nie istnieją teleporty z tym samym kolorem, to nie niczego nigdzie nie przenosi. Jeśli istnieje wiele teleportów tego samego koloru, wybierany jest losowy. Zużywa energię. Stuknij aby zmienić kolor.
|
||||
block.sorter.name = Sortownik
|
||||
block.sorter.fulldescription = Sortuje przedmioty według rodzaju materiału. Materiał do zaakceptowania jest oznaczony w bloku. Wszystkie pasujące przedmioty są wysyłane do przodu, wszystko inne jest wyprowadzane na lewo i na prawo.
|
||||
block.core.name = Rdzeń
|
||||
block.pump.name = pompa
|
||||
block.pump.fulldescription = Pompuje ciecze z bloku źródłowego - zwykle wody, lawy lub oleju. Wyprowadza ciecz do pobliskich rur.
|
||||
block.fluxpump.name = pompa strumieniowa
|
||||
block.fluxpump.fulldescription = Zaawansowana wersja pompy. Przechowuje więcej cieczy i szybciej pompuje.
|
||||
block.smelter.name = huta
|
||||
block.smelter.fulldescription = Niezbędny blok rzemieślniczy. Po wprowadzeniu 1 żelaza i 1 węgla jako paliwa, wytwarza 1 stal. Zaleca się wprowadzanie żelaza i węgla na różne pasy, aby zapobiec zatkaniu.
|
||||
block.crucible.name = tygiel
|
||||
block.crucible.fulldescription = Zaawansowany blok rzemieślniczy. Po wprowadzeniu 1 tytanu, 1 stali i 1 węgla jako paliwa, otrzymuje 1 dirium. Zaleca się wprowadzanie węgla, stali i tytanu z różnych taśm, aby zapobiec zatkaniu.
|
||||
block.coalpurifier.name = ekstraktor węgla
|
||||
block.coalpurifier.fulldescription = Wyprowadza węgiel, gdy jest dostarczana duża ilością wody i kamienia.
|
||||
block.titaniumpurifier.name = ekstraktor tytanu
|
||||
block.titaniumpurifier.fulldescription = Wyprowadza tytan, gdy jest dostarczana duża ilości wody i żelaza.
|
||||
block.oilrefinery.name = Rafineria ropy
|
||||
block.oilrefinery.fulldescription = Rafinuje duże ilości oleju do postaci węgla. Przydatne do napędzania działek napędzanych węglem, gry nie ma w pobliżu wystarcząjacej ilości rud węgla.
|
||||
block.stoneformer.name = Wytwarzacz kamienia
|
||||
block.stoneformer.fulldescription = Schładza lawę do postaci kamień. Przydatny do produkcji ogromnych ilości kamienia do oczyszczania węgla.
|
||||
block.lavasmelter.name = Huta lawowa
|
||||
block.lavasmelter.fulldescription = Używa lawy, by przekształcić żelazo w stal. Alternatywa dla zwykłych hut. Przydatny w sytuacjach, gdy brakuje węgla.
|
||||
block.stonedrill.name = wiertło do kamienia
|
||||
block.stonedrill.fulldescription = Niezbędne wiertło. Po umieszczeniu na kamiennym podłożu, powoli i w nieskończoność wydobywa kamień.
|
||||
block.irondrill.name = wiertło do żelaza
|
||||
block.irondrill.fulldescription = Po umieszczeniu na rudzie żelaza, powoli i w nieskończoność wydobywa żelazo.
|
||||
block.coaldrill.name = wiertło do węgla
|
||||
block.coaldrill.fulldescription = Po umieszczeniu na rudzie węgla, powoli i w nieskończoność wydobywa węgiel.
|
||||
block.thoriumdrill.name = wiertło do uranu
|
||||
block.thoriumdrill.fulldescription = Wiertło zaawansowane. Po umieszczeniu na rudzie uranu, wydobywa uran w wolnym tempie przez czas nieokreślony.
|
||||
block.titaniumdrill.name = wiertło do tytanu
|
||||
block.titaniumdrill.fulldescription = Wiertło zaawansowane. Po umieszczeniu na rudzie tytanu, wydobywa tytan w wolnym tempie przez czas nieokreślony.
|
||||
block.omnidrill.name = omnidril
|
||||
block.omnidrill.fulldescription = Wiertło wielofunkcyjne. W szybkim tempie wydobywa każdą rudę.
|
||||
block.coalgenerator.name = generator na węgiel
|
||||
block.coalgenerator.fulldescription = Niezbędny generator. Generuje energię z węgla na wszystkie strony.
|
||||
block.thermalgenerator.name = generator termiczny
|
||||
block.thermalgenerator.fulldescription = Generuje energię z lawy. Generuje energię z węgla na wszystkie strony.
|
||||
block.combustiongenerator.name = generator spalinowy
|
||||
block.combustiongenerator.fulldescription = Generuje moc z oleju. Generuje energię z węgla na wszystkie strony.
|
||||
block.rtgenerator.name = Generator RTG
|
||||
block.rtgenerator.fulldescription = Generuje niewielkie ilości energii z rozpadu promieniotwórczego uranu. Generuje energię z węgla na wszystkie strony.
|
||||
block.nuclearreactor.name = reaktor jądrowy
|
||||
block.nuclearreactor.fulldescription = Zaawansowana wersja generatora RTG i zarazem najlepsze źródło energii. Generuje ją z uranu. Wymaga stałego chłodzenia wodą. Wybucha niemal natychmiast w momencie, gdy dostarczona zostanie niewystarczająca ilość płynu chłodzącego.
|
||||
block.turret.name = działko
|
||||
block.turret.fulldescription = Podstawowa, nieduża wieżyczka. Używa kamienia jako amunicji. Ma nieco większy zasięg niż działko podwójne.
|
||||
block.doubleturret.name = działko podwójne
|
||||
block.doubleturret.fulldescription = Nieco mocniejsza wersja działka. Używa kamienia jako amunicji. Znacznie więcej obrażeń, ale ma mniejszy zasięg. Wystrzeliwuje dwie kule.
|
||||
block.machineturret.name = działko szybkostrzelne
|
||||
block.machineturret.fulldescription = Standardowa, wszechstronna wieża. Używa żelaza jako amunicji. Strzela dość szybko i ma przyzwoite uszkodzenia.
|
||||
block.shotgunturret.name = działko odłamkowe
|
||||
block.shotgunturret.fulldescription = Standardowa wieża. Używa żelaza do amunicji. Wystrzeliwuje 7 pocisków. Niższy zasięg, ale większe obrażenia niż działko szybkostrzelne.
|
||||
block.flameturret.name = miotacz ognia
|
||||
block.flameturret.fulldescription = Zaawansowana wieżyczka bliskiego zasięgu. Używa węgla jako amunicji. Ma bardzo niski zasięg, ale bardzo duże obrażenia. Dobra na krótkie dystanse. Zalecana do stosowania za ścianami.
|
||||
block.sniperturret.name = karabin
|
||||
block.sniperturret.fulldescription = Zaawansowana wieżyczka dalekiego zasięgu. Używa stali jako amunicji. Ma bardzo duże obrażenia, ale niski współczynnik ognia. Kosztowne w użyciu, ale można je umieścić z dala od linii wroga ze względu na jego zasięg.
|
||||
block.mortarturret.name = Miotacz odłamków
|
||||
block.mortarturret.fulldescription = Zaawansowana, bardzo dokładne działko rozpryskowe. Używa węgla jako amunicji. Wystrzeliwuje grad eksplodujących pocisków. Przydatny dla dużych hord wrogów.
|
||||
block.laserturret.name = działo laserowe
|
||||
block.laserturret.fulldescription = Zaawansowana wieża z jednym celem. Używa energii. Dobra wieża o średnim zasięgu. Atakuje tylko 1 cel i nigdy nie pudłuje.
|
||||
block.waveturret.name = Działo Tesli
|
||||
block.waveturret.fulldescription = Zaawansowana wieża celującai. Używa mocy. Średni zasięg. Nigdy nie trafia. Stosuje niskie obrażenia, ale może trafić wielu wrogów jednocześnie z oświetleniem łańcuszkiem.
|
||||
block.plasmaturret.name = Działo plazmowe
|
||||
block.plasmaturret.fulldescription = Wysoce zaawansowana wersja miotacza ognia. Używa węgla jako amunicji. Zadaje bardzo duże obrażenia i posiada średni zasięg.
|
||||
block.chainturret.name = Działo uranowe
|
||||
block.chainturret.fulldescription = Najlepsze działo szybkiego ognia. Używa uranu jako amunicji. Wystrzeliwuje duże spirale z dużą szybkością. Posiada średni zasięg.
|
||||
block.titancannon.name = Potężne działo uranowe
|
||||
block.titancannon.fulldescription = Najlepsze działo dalekiego zasięgu. Używa uranu jako amunicji. Wystrzeliwuje duże pociski z odłamkami. Ma średnią szybkostrzelność i duży promień rażenia.
|
||||
block.playerspawn.name = Spawn gracza
|
||||
block.enemyspawn.name = Spawn wroga
|
||||
text.about=Stworzony przez [ROYAL] Anuken. []\nPierwotnie wpis w [orange] GDL [] MM Jam.\n\nNapisy:\n- SFX wykonane z pomocą [YELLOW] bfxr []\n- Muzyka wykonana przez [GREEN] RoccoW [] / znaleziona na [lime] FreeMusicArchive.org []\n\nSpecjalne podziękowania dla:\n- [coral] MitchellFJN []: obszerne testowanie i feedback\n- [niebo] Luxray5474 []: prace związane z wiki, pomoc z kodem\n- Wszystkich beta testerów na itch.io i Google Play\n
|
||||
text.discord=Odwiedź nasz serwer Discord
|
||||
text.gameover=Rdzeń został zniszczony.
|
||||
text.highscore=[YELLOW] Nowy rekord!
|
||||
text.lasted=Wytrwałeś do fali
|
||||
text.level.highscore=Rekord: [accent]{0}
|
||||
text.level.delete.title=Potwierdź kasowanie
|
||||
text.level.select=Wybrany poziom
|
||||
text.level.mode=Tryb gry:
|
||||
text.savegame=Zapisz Grę
|
||||
text.loadgame=Wczytaj grę
|
||||
text.joingame=Gra wieloosobowa
|
||||
text.quit=Wyjdź
|
||||
text.about.button=O grze
|
||||
text.name=Nazwa:
|
||||
text.players={0} graczy online
|
||||
text.players.single={0} gracz online
|
||||
text.server.mismatch=Błąd pakietu: możliwa niezgodność wersji klienta/serwera.\nUpewnij się, że Ty i host macie najnowszą wersję Mindustry!
|
||||
text.server.closing=[accent] Zamykanie serwera ...
|
||||
text.server.kicked.kick=Zostałeś wyrzucony z serwera!
|
||||
text.server.kicked.invalidPassword=Nieprawidłowe hasło!
|
||||
text.server.kicked.clientOutdated=Nieaktualna gra! Zaktualizują ją!
|
||||
text.server.kicked.serverOutdated=Nieaktualna gra! Zaktualizują ją!
|
||||
text.server.connected={0} dołączył do gry .
|
||||
text.server.disconnected={0} został rozłączony.
|
||||
text.nohost=Nie można hostować serwera na mapie niestandardowej!
|
||||
text.hostserver=Serwer hosta
|
||||
text.host=Host
|
||||
text.hosting=[accent] Otwieranie serwera ...
|
||||
text.hosts.refresh=Odśwież
|
||||
text.hosts.discovering=Wyszukiwanie gier w sieci LAN
|
||||
text.server.refreshing=Odświeżanie serwera
|
||||
text.hosts.none=[lightgray] Brak serwerów w sieci LAN!
|
||||
text.host.invalid=[scarlet] Nie można połączyć się z hostem.
|
||||
text.server.friendlyfire=Bratobójczy ogień
|
||||
text.server.add=Dodaj serwer
|
||||
text.server.delete=Czy na pewno chcesz usunąć ten serwer?
|
||||
text.server.hostname=Host: {0}
|
||||
text.server.edit=Edytuj serwer
|
||||
text.joingame.title=Dołącz do gry
|
||||
text.joingame.ip=IP:
|
||||
text.disconnect=Rozłączony.
|
||||
text.connecting=[accent]Łączenie ...
|
||||
text.connecting.data=[accent]Ładowanie danych świata...
|
||||
text.connectfail=[crimson]Nie można połączyć się z serwerem: [orange] {0}
|
||||
text.server.port=Port:
|
||||
text.server.addressinuse=Adres jest już w użyciu!
|
||||
text.server.invalidport=Nieprawidłowy numer portu.
|
||||
text.server.error=[crimson] Błąd hostowania serwera: [orange] {0}
|
||||
text.save.new=Nowy zapis
|
||||
text.save.overwrite=Czy na pewno chcesz nadpisać zapis gry?
|
||||
text.overwrite=Nadpisz
|
||||
text.save.none=Nie znaleziono zapisów gry!
|
||||
text.saveload=[akcent]Zapisywanie...
|
||||
text.savefail=Nie udało się zapisać gry!
|
||||
text.save.delete.confirm=Czy na pewno chcesz usunąć ten zapis gry?
|
||||
text.save.delete=Usuń
|
||||
text.save.export=Eksportuj
|
||||
text.save.import.invalid=[orange]Zapis gry jest niepoprawny!
|
||||
text.save.import.fail=[crimson]Nie udało się zaimportować zapisu: [orange] {0}
|
||||
text.save.export.fail=[crimson]Nie można wyeksportować zapisu: [orange] {0}
|
||||
text.save.import=Importuj
|
||||
text.save.newslot=Zapisz nazwę:
|
||||
text.save.rename=Zmień nazwę
|
||||
text.save.rename.text=Zmień nazwę
|
||||
text.selectslot=Wybierz zapis.
|
||||
text.slot=[accent]Slot {0}
|
||||
text.save.corrupted=[orange]Zapis gry jest uszkodzony lub nieprawidłowy!
|
||||
text.empty=<pusto>
|
||||
text.on=Włączone
|
||||
text.off=Wyłączone
|
||||
text.save.autosave=Zapisywanie automatyczne
|
||||
text.save.map=Mapa: {0}
|
||||
text.save.wave=Fala: {0}
|
||||
text.save.date=Ostatnio zapisano: {0}
|
||||
text.confirm=Potwierdź
|
||||
text.delete=Usuń
|
||||
text.ok=Ok
|
||||
text.open=Otwórz
|
||||
text.cancel=Anuluj
|
||||
text.openlink=Otwórz link
|
||||
text.back=Wróć
|
||||
text.quit.confirm=Czy na pewno chcesz wyjść?
|
||||
text.loading=[accent]Ładowanie ...
|
||||
text.wave=[orange]Fala {0}
|
||||
text.wave.waiting=Fala w {0}
|
||||
text.waiting=Oczekiwanie...
|
||||
text.enemies={0} wrogów
|
||||
text.enemies.single={0} wróg
|
||||
text.loadimage=Załaduj obraz
|
||||
text.saveimage=Zapisz obraz
|
||||
text.editor.badsize=[orange]Nieprawidłowe wymiary obrazu![]\nWymiary poprawne: {0}
|
||||
text.editor.errorimageload=Błąd podczas ładowania pliku obrazu: [orange]{0}
|
||||
text.editor.errorimagesave=Błąd podczas zapisywania pliku obrazu: [orange]{0}
|
||||
text.editor.generate=Generuj
|
||||
text.editor.resize=Zmień rozmiar
|
||||
text.editor.loadmap=Załaduj mapę
|
||||
text.editor.savemap=Zapisz mapę
|
||||
text.editor.loadimage=Załaduj obraz
|
||||
text.editor.saveimage=Zapisz obraz
|
||||
text.editor.unsaved=[scarlet]Masz niezapisane zmiany![]\nCzy na pewno chcesz wyjść?
|
||||
text.editor.resizemap=Zmień rozmiar mapy
|
||||
text.editor.mapname=Nazwa mapy:
|
||||
text.editor.overwrite=[accent]Uwaga!\nSpowoduje to nadpisanie istniejącej mapy.
|
||||
text.editor.selectmap=Wybierz mapę do załadowania:
|
||||
text.width=Szerokość:
|
||||
text.height=Wysokość:
|
||||
text.menu=Menu
|
||||
text.play=Graj
|
||||
text.load=Wczytaj
|
||||
text.save=Zapisz
|
||||
text.language.restart=Uruchom grę ponownie aby ustawiony język zaczął funkcjonować.
|
||||
text.settings.language=Język
|
||||
text.settings=Ustawienia
|
||||
text.tutorial=Poradnik
|
||||
text.editor=Edytor
|
||||
text.mapeditor=Edytor map
|
||||
text.donate=Wspomóż nas
|
||||
text.settings.reset=Przywróć domyślne
|
||||
text.settings.controls=Sterowanie
|
||||
text.settings.game=Gra
|
||||
text.settings.sound=Dźwięk
|
||||
text.settings.graphics=Grafika
|
||||
text.upgrades=Ulepszenia
|
||||
text.purchased=[LIME]Stworzono!
|
||||
text.weapons=Bronie
|
||||
text.paused=Wstrzymano
|
||||
text.info.title=[accent]Informacje
|
||||
text.error.title=[crimson]Wystąpił błąd
|
||||
text.error.crashtitle=Wystąpił błąd
|
||||
text.blocks.blockinfo=Informacje o bloku
|
||||
text.blocks.powercapacity=Moc znamionowa
|
||||
text.blocks.powershot=moc / strzał
|
||||
text.blocks.size=Rozmiar
|
||||
text.blocks.liquidcapacity=Pojemność cieczy
|
||||
text.blocks.maxitemssecond=Maksymalna liczba przedmiotów / Sekunda
|
||||
text.blocks.powerrange=Zakres mocy
|
||||
text.blocks.itemcapacity=Pojemność przedmiotów
|
||||
text.blocks.inputliquid=Potrzebna ciecz
|
||||
text.blocks.inputitem=Potrzebne przedmioty
|
||||
text.blocks.explosive=Wysoce wybuchowy!
|
||||
text.blocks.health=Zdrowie
|
||||
text.blocks.inaccuracy=Niedokładność
|
||||
text.blocks.shots=Strzały
|
||||
text.blocks.inputcapacity=Pojemność wejściowa
|
||||
text.blocks.outputcapacity=Wydajność wyjściowa
|
||||
setting.difficulty.easy=łatwy
|
||||
setting.difficulty.normal=normalny
|
||||
setting.difficulty.hard=trudny
|
||||
setting.difficulty.insane=szalony
|
||||
setting.difficulty.purge=Czystka
|
||||
setting.difficulty.name=Poziom trudności
|
||||
setting.screenshake.name=Trzęsienie się ekranu
|
||||
setting.indicators.name=Wskaźniki wroga
|
||||
setting.effects.name=Wyświetlanie efektów
|
||||
setting.sensitivity.name=Czułość kontrolera
|
||||
setting.saveinterval.name=Interwał automatycznego zapisywania
|
||||
setting.seconds=Sekundy
|
||||
setting.fps.name=Widoczny licznik FPS
|
||||
setting.vsync.name=Synchronizacja pionowa
|
||||
setting.lasers.name=Pokaż lasery zasilające
|
||||
setting.healthbars.name=Pokaż paski zdrowia jednostki
|
||||
setting.musicvol.name=Głośność muzyki
|
||||
setting.mutemusic.name=Wycisz muzykę
|
||||
setting.sfxvol.name=Głośność dźwięków
|
||||
setting.mutesound.name=Wycisz dźwięki
|
||||
map.maze.name=labirynt
|
||||
map.fortress.name=twierdza
|
||||
map.sinkhole.name=wgłębienie
|
||||
map.caves.name=jaskinie
|
||||
map.volcano.name=wulkan
|
||||
map.caldera.name=kaldera
|
||||
map.scorch.name=opalacz
|
||||
map.desert.name=pustynia
|
||||
map.island.name=wyspa
|
||||
map.grassland.name=łąka
|
||||
map.tundra.name=tundra
|
||||
map.spiral.name=spirala
|
||||
map.tutorial.name=Poradnik
|
||||
keybind.move_x.name=Poruszanie w poziomie
|
||||
keybind.move_y.name=Poruszanie w pionie
|
||||
keybind.select.name=Wybieranie
|
||||
keybind.break.name=Niszczenie
|
||||
keybind.shoot.name=Strzelanie
|
||||
keybind.zoom_hold.name=Inicjator przybliżania
|
||||
keybind.zoom.name=Przybliżanie
|
||||
keybind.menu.name=menu
|
||||
keybind.pause.name=pauza
|
||||
keybind.dash.name=przyśpieszenie
|
||||
keybind.rotate_alt.name=Obracanie (1)
|
||||
keybind.rotate.name=Obracanie (2)
|
||||
mode.waves.name=Fale
|
||||
mode.sandbox.name=sandbox
|
||||
mode.freebuild.name=budowanie
|
||||
item.stone.name=kamień
|
||||
item.coal.name=węgiel
|
||||
item.titanium.name=tytan
|
||||
item.thorium.name=uran
|
||||
item.sand.name=piasek
|
||||
liquid.water.name=woda
|
||||
liquid.lava.name=lawa
|
||||
liquid.oil.name=olej
|
||||
block.door.name=drzwi
|
||||
block.door-large.name=duże drzwi
|
||||
block.conduit.name=Rura
|
||||
block.pulseconduit.name=Rura impulsowa
|
||||
block.liquidrouter.name=Rozdzielacz płynów
|
||||
block.conveyor.name=Przenośnik
|
||||
block.router.name=Rozdzielacz
|
||||
block.junction.name=węzeł
|
||||
block.liquidjunction.name=Węzeł dla płynów
|
||||
block.sorter.name=Sortownik
|
||||
block.smelter.name=huta
|
||||
text.credits=Credits
|
||||
text.link.discord.description=the official Mindustry discord chatroom
|
||||
text.link.github.description=Game source code
|
||||
text.link.dev-builds.description=Unstable development builds
|
||||
text.link.trello.description=Official trello board for planned features
|
||||
text.link.itch.io.description=itch.io page with PC downloads and web version
|
||||
text.link.google-play.description=Google Play store listing
|
||||
text.link.wiki.description=official Mindustry wiki
|
||||
text.linkfail=Failed to open link!\nThe URL has been copied to your cliboard.
|
||||
text.editor.web=The web version does not support the editor!\nDownload the game to use it.
|
||||
text.web.unsupported=The web version does not support this feature! Download the game to use it.
|
||||
text.multiplayer.web=This version of the game does not support multiplayer!\nTo play multiplayer from your browser, use the "multiplayer web version" link at the itch.io page.
|
||||
text.host.web=The web version does not support hosting games! Download the game to use this feature.
|
||||
text.map.delete=Are you sure you want to delete the map "[orange]{0}[]"?
|
||||
text.construction.title=Block Construction Guide
|
||||
text.construction=You've just selected [accent]block construction mode[].\n\nTo begin placing, simply tap a valid location near your ship.\nOnce you have selected some blocks, press the checkbox to confirm, and your ship will begin constructing them.\n\n- [accent]Remove blocks[] from your selection by tapping them.\n- [accent]Shift the selection[] by holding and dragging any block in the selection.\n- [accent]Place blocks in a line[] by tapping and holding an empty spot, then dragging in a direction.\n- [accent]Cancel construction or selection[] by pressing the X at the bottom left.
|
||||
text.deconstruction.title=Block Deconstruction Guide
|
||||
text.deconstruction=You've just selected [accent]block deconstruction mode[].\n\nTo begin breaking, simply tap a block near your ship.\nOnce you have selected some blocks, press the checkbox to confirm, and your ship will begin de-constructing them.\n\n- [accent]Remove blocks[] from your selection by tapping them.\n- [accent]Remove blocks in an area[] by tapping and holding an empty spot, then dragging in a direction.\n- [accent]Cancel deconstruction or selection[] by pressing the X at the bottom left.
|
||||
text.showagain=Don't show again next session
|
||||
text.unlocks=Unlocks
|
||||
text.addplayers=Add/Remove Players
|
||||
text.newgame=New Game
|
||||
text.maps=Maps
|
||||
text.maps.none=[LIGHT_GRAY]No maps found!
|
||||
text.unlocked=New Block Unlocked!
|
||||
text.unlocked.plural=New Blocks Unlocked!
|
||||
text.server.kicked.fastShoot=You are shooting too quickly.
|
||||
text.server.kicked.banned=You are banned on this server.
|
||||
text.server.kicked.recentKick=You have been kicked recently.\nWait before connecting again.
|
||||
text.server.kicked.nameInUse=There is someone with that name\nalready on this server.
|
||||
text.server.kicked.nameEmpty=Your name must contain at least one character or number.
|
||||
text.server.kicked.idInUse=You are already on this server! Connecting with two accounts is not permitted.
|
||||
text.server.kicked.customClient=This server does not support custom builds. Download an official version.
|
||||
text.host.info=The [accent]host[] button hosts a server on ports [scarlet]6567[] and [scarlet]6568.[]\nAnybody on the same [LIGHT_GRAY]wifi or local network[] should be able to see your server in their server list.\n\nIf you want people to be able to connect from anywhere by IP, [accent]port forwarding[] is required.\n\n[LIGHT_GRAY]Note: If someone is experiencing trouble connecting to your LAN game, make sure you have allowed Mindustry access to your local network in your firewall settings.
|
||||
text.join.info=Here, you can enter a [accent]server IP[] to connect to, or discover [accent]local network[] servers to connect to.\nBoth LAN and WAN multiplayer is supported.\n\n[LIGHT_GRAY]Note: There is no automatic global server list; if you want to connect to someone by IP, you would need to ask the host for their IP.
|
||||
text.trace=Trace Player
|
||||
text.trace.playername=Player name: [accent]{0}
|
||||
text.trace.ip=IP: [accent]{0}
|
||||
text.trace.id=Unique ID: [accent]{0}
|
||||
text.trace.android=Android Client: [accent]{0}
|
||||
text.trace.modclient=Custom Client: [accent]{0}
|
||||
text.trace.totalblocksbroken=Total blocks broken: [accent]{0}
|
||||
text.trace.structureblocksbroken=Structure blocks broken: [accent]{0}
|
||||
text.trace.lastblockbroken=Last block broken: [accent]{0}
|
||||
text.trace.totalblocksplaced=Total blocks placed: [accent]{0}
|
||||
text.trace.lastblockplaced=Last block placed: [accent]{0}
|
||||
text.invalidid=Invalid client ID! Submit a bug report.
|
||||
text.server.bans=Bans
|
||||
text.server.bans.none=No banned players found!
|
||||
text.server.admins=Admins
|
||||
text.server.admins.none=No admins found!
|
||||
text.server.outdated=[crimson]Outdated Server![]
|
||||
text.server.outdated.client=[crimson]Outdated Client![]
|
||||
text.server.version=[lightgray]Version: {0}
|
||||
text.server.custombuild=[yellow]Custom Build
|
||||
text.confirmban=Are you sure you want to ban this player?
|
||||
text.confirmunban=Are you sure you want to unban this player?
|
||||
text.confirmadmin=Are you sure you want to make this player an admin?
|
||||
text.confirmunadmin=Are you sure you want to remove admin status from this player?
|
||||
text.disconnect.data=Failed to load world data!
|
||||
text.save.difficulty=Difficulty: {0}
|
||||
text.copylink=Copy Link
|
||||
text.changelog.title=Changelog
|
||||
text.changelog.loading=Getting changelog...
|
||||
text.changelog.error.android=[orange]Note that the changelog sometimes does not work on Android 4.4 and below!\nThis is due to an internal Android bug.
|
||||
text.changelog.error.ios=[orange]The changelog is currently not supported in iOS.
|
||||
text.changelog.error=[scarlet]Error getting changelog!\nCheck your internet connection.
|
||||
text.changelog.current=[yellow][[Current version]
|
||||
text.changelog.latest=[orange][[Latest version]
|
||||
text.saving=[accent]Saving...
|
||||
text.unknown=Unknown
|
||||
text.custom=Custom
|
||||
text.builtin=Built-In
|
||||
text.map.delete.confirm=Are you sure you want to delete this map? This action cannot be undone!
|
||||
text.map.random=[accent]Random Map
|
||||
text.map.nospawn=This map does not have any cores for the player to spawn in! Add a [ROYAL]blue[] core to this map in the editor.
|
||||
text.editor.slope=\\
|
||||
text.editor.openin=Open In Editor
|
||||
text.editor.oregen=Ore Generation
|
||||
text.editor.oregen.info=Ore Generation:
|
||||
text.editor.mapinfo=Map Info
|
||||
text.editor.author=Author:
|
||||
text.editor.description=Description:
|
||||
text.editor.name=Name:
|
||||
text.editor.teams=Teams
|
||||
text.editor.elevation=Elevation
|
||||
text.editor.saved=Saved!
|
||||
text.editor.save.noname=Your map does not have a name! Set one in the 'map info' menu.
|
||||
text.editor.save.overwrite=Your map overwrites a built-in map! Pick a different name in the 'map info' menu.
|
||||
text.editor.import.exists=[scarlet]Unable to import:[] a built-in map named '{0}' already exists!
|
||||
text.editor.import=Import...
|
||||
text.editor.importmap=Import Map
|
||||
text.editor.importmap.description=Import an already existing map
|
||||
text.editor.importfile=Import File
|
||||
text.editor.importfile.description=Import an external map file
|
||||
text.editor.importimage=Import Terrain Image
|
||||
text.editor.importimage.description=Import an external map image file
|
||||
text.editor.export=Export...
|
||||
text.editor.exportfile=Export File
|
||||
text.editor.exportfile.description=Export a map file
|
||||
text.editor.exportimage=Export Terrain Image
|
||||
text.editor.exportimage.description=Export a map image file
|
||||
text.editor.overwrite.confirm=[scarlet]Warning![] A map with this name already exists. Are you sure you want to overwrite it?
|
||||
text.fps=FPS: {0}
|
||||
text.tps=TPS: {0}
|
||||
text.ping=Ping: {0}ms
|
||||
text.settings.rebind=Rebind
|
||||
text.yes=Yes
|
||||
text.no=No
|
||||
text.blocks.targetsair=Targets Air
|
||||
text.blocks.itemspeed=Units Moved
|
||||
text.blocks.shootrange=Range
|
||||
text.blocks.poweruse=Power Use
|
||||
text.blocks.inputitemcapacity=Input Item Capacity
|
||||
text.blocks.outputitemcapacity=Input Item Capacity
|
||||
text.blocks.maxpowergeneration=Max Power Generation
|
||||
text.blocks.powertransferspeed=Power Transfer
|
||||
text.blocks.craftspeed=Production Speed
|
||||
text.blocks.inputliquidaux=Aux Liquid
|
||||
text.blocks.inputitems=Input Items
|
||||
text.blocks.outputitem=Output Item
|
||||
text.blocks.drilltier=Drillables
|
||||
text.blocks.drillspeed=Base Drill Speed
|
||||
text.blocks.liquidoutput=Liquid Output
|
||||
text.blocks.liquiduse=Liquid Use
|
||||
text.blocks.coolant=Coolant
|
||||
text.blocks.coolantuse=Coolant Use
|
||||
text.blocks.inputliquidfuel=Fuel Liquid
|
||||
text.blocks.liquidfueluse=Liquid Fuel Use
|
||||
text.blocks.reload=Reload
|
||||
text.blocks.inputfuel=Fuel
|
||||
text.blocks.fuelburntime=Fuel Burn Time
|
||||
text.unit.blocks=blocks
|
||||
text.unit.powersecond=power units/second
|
||||
text.unit.liquidsecond=liquid units/second
|
||||
text.unit.itemssecond=items/second
|
||||
text.unit.pixelssecond=pixels/second
|
||||
text.unit.liquidunits=liquid units
|
||||
text.unit.powerunits=power units
|
||||
text.unit.degrees=degrees
|
||||
text.unit.seconds=seconds
|
||||
text.unit.none=
|
||||
text.unit.items=items
|
||||
text.category.general=General
|
||||
text.category.power=Power
|
||||
text.category.liquids=Liquids
|
||||
text.category.items=Items
|
||||
text.category.crafting=Crafting
|
||||
text.category.shooting=Shooting
|
||||
setting.fullscreen.name=Fullscreen
|
||||
setting.multithread.name=Multithreading
|
||||
setting.minimap.name=Show Minimap
|
||||
text.keybind.title=Rebind Keys
|
||||
keybind.block_info.name=block_info
|
||||
keybind.chat.name=chat
|
||||
keybind.player_list.name=player_list
|
||||
keybind.console.name=console
|
||||
mode.text.help.title=Description of modes
|
||||
mode.waves.description=the normal mode. limited resources and automatic incoming waves.
|
||||
mode.sandbox.description=infinite resources and no timer for waves.
|
||||
mode.freebuild.description=limited resources and no timer for waves.
|
||||
content.item.name=Items
|
||||
content.liquid.name=Liquids
|
||||
content.unit-type.name=Units
|
||||
content.recipe.name=Blocks
|
||||
item.stone.description=A common raw material. Used for separating and refining into other materials, or melting into lava.
|
||||
item.tungsten.name=Tungsten
|
||||
item.tungsten.description=A common, but very useful structure material. Used in drills and heat-resistant blocks such as generators and smelteries.
|
||||
item.lead.name=Lead
|
||||
item.lead.description=A basic starter material. Used extensively in electronics and liquid transportation blocks.
|
||||
item.coal.description=A common and readily available fuel.
|
||||
item.carbide.name=Carbide
|
||||
item.carbide.description=A tough alloy made with tungsten and carbon. Used in advanced transportation blocks and high-tier drills.
|
||||
item.titanium.description=A rare super-light metal used extensively in liquid transportation, drills and aircraft.
|
||||
item.thorium.description=A dense, radioactive metal used as structural support and nuclear fuel.
|
||||
item.silicon.name=Silicon
|
||||
item.silcion.description=An extremely useful semiconductor, with applications in solar panels and many complex electronics.
|
||||
item.plastanium.name=Plastanium
|
||||
item.plastanium.description=A light, ductile material used in advanced aircraft and fragmentation ammunition.
|
||||
item.phase-matter.name=Phase Matter
|
||||
item.surge-alloy.name=Surge Alloy
|
||||
item.biomatter.name=Biomatter
|
||||
item.biomatter.description=A clump of organic mush; used for conversion into oil or as a basic fuel.
|
||||
item.sand.description=A common material that is used extensively in smelting, both in alloying and as a flux.
|
||||
item.blast-compound.name=Blast Compound
|
||||
item.blast-compound.description=A volatile compound used in bombs and explosives. While it can burned as fuel, this is not advised.
|
||||
item.pyratite.name=Pyratite
|
||||
item.pyratite.description=An extremely flammable substance used in incendiary weapons.
|
||||
liquid.cryofluid.name=Cryofluid
|
||||
text.item.explosiveness=[LIGHT_GRAY]Explosiveness: {0}
|
||||
text.item.flammability=[LIGHT_GRAY]Flammability: {0}
|
||||
text.item.radioactivity=[LIGHT_GRAY]Radioactivity: {0}
|
||||
text.item.fluxiness=[LIGHT_GRAY]Flux Power: {0}
|
||||
text.item.hardness=[LIGHT_GRAY]Hardness: {0}
|
||||
text.liquid.heatcapacity=[LIGHT_GRAY]Heat Capacity: {0}
|
||||
text.liquid.viscosity=[LIGHT_GRAY]Viscosity: {0}
|
||||
text.liquid.temperature=[LIGHT_GRAY]Temperature: {0}
|
||||
block.tungsten-wall.name=Tungsten Wall
|
||||
block.tungsten-wall-large.name=Large Tungsten Wall
|
||||
block.carbide-wall.name=Carbide Wall
|
||||
block.carbide-wall-large.name=Large Carbide Wall
|
||||
block.thorium-wall.name=Thorium Wall
|
||||
block.thorium-wall-large.name=Large Thorium Wall
|
||||
block.duo.name=Duo
|
||||
block.scorch.name=Scorch
|
||||
block.hail.name=Hail
|
||||
block.lancer.name=Lancer
|
||||
block.titanium-conveyor.name=Titanium Conveyor
|
||||
block.splitter.name=Splitter
|
||||
block.splitter.description=Outputs items into two opposite directions immediately after they are recieved.
|
||||
block.router.description=Splits items into all 4 directions. Can store items as a buffer.
|
||||
block.distributor.name=Distributor
|
||||
block.distributor.description=A splitter that can split items into 8 directions.
|
||||
block.sorter.description=Sorts items. If an item matches the selection, it is allowed to pass. Otherwise, the item is outputted to the left and right.
|
||||
block.overflow-gate.name=Overflow Gate
|
||||
block.overflow-gate.description=A combination splitter and router that only outputs to the left and right if the front path is blocked.
|
||||
block.bridgeconveyor.name=Bridge Conveyor
|
||||
block.bridgeconveyor.description=A conveyor that can go over other blocks, for up to two total blocks.
|
||||
block.arc-smelter.name=Arc Smelter
|
||||
block.silicon-smelter.name=Silicon Smelter
|
||||
block.phase-weaver.name=Phase Weaver
|
||||
block.pulverizer.name=Pulverizer
|
||||
block.cryofluidmixer.name=Cryofluid Mixer
|
||||
block.melter.name=Melter
|
||||
block.incinerator.name=Incinerator
|
||||
block.biomattercompressor.name=Biomatter Compressor
|
||||
block.separator.name=Separator
|
||||
block.centrifuge.name=Centrifuge
|
||||
block.power-node.name=Power Node
|
||||
block.power-node-large.name=Large Power Node
|
||||
block.battery.name=Battery
|
||||
block.battery-large.name=Large Battery
|
||||
block.combustion-generator.name=Combustion Generator
|
||||
block.turbine-generator.name=Turbine Generator
|
||||
block.tungsten-drill.name=Tungsten Drill
|
||||
block.carbide-drill.name=Carbide Drill
|
||||
block.laser-drill.name=Laser Drill
|
||||
block.water-extractor.name=Water Extractor
|
||||
block.cultivator.name=Cultivator
|
||||
block.dart-ship-factory.name=Dart Ship Factory
|
||||
block.delta-mech-factory.name=Delta Mech Factory
|
||||
block.dronefactory.name=Drone Factory
|
||||
block.repairpoint.name=Repair Point
|
||||
block.resupplypoint.name=Resupply Point
|
||||
block.liquidtank.name=Liquid Tank
|
||||
block.bridgeconduit.name=Bridge Conduit
|
||||
block.mechanical-pump.name=Mechanical Pump
|
||||
block.itemsource.name=Item Source
|
||||
block.itemvoid.name=Item Void
|
||||
block.liquidsource.name=Liquid Source
|
||||
block.powervoid.name=Power Void
|
||||
block.powerinfinite.name=Power Infinite
|
||||
block.unloader.name=Unloader
|
||||
block.sortedunloader.name=Sorted Unloader
|
||||
block.vault.name=Vault
|
||||
block.wave.name=Wave
|
||||
block.swarmer.name=Swarmer
|
||||
block.salvo.name=Salvo
|
||||
block.ripple.name=Ripple
|
||||
block.phase-conveyor.name=Phase Conveyor
|
||||
block.bridge-conveyor.name=Bridge Conveyor
|
||||
block.plastanium-compressor.name=Plastanium Compressor
|
||||
block.pyratite-mixer.name=Pyratite Mixer
|
||||
block.blast-mixer.name=Blast Mixer
|
||||
block.solidifer.name=Solidifer
|
||||
block.solar-panel.name=Solar Panel
|
||||
block.solar-panel-large.name=Large Solar Panel
|
||||
block.oil-extractor.name=Oil Extractor
|
||||
block.javelin-ship-factory.name=Javelin Ship factory
|
||||
block.drone-factory.name=Drone Factory
|
||||
block.fabricator-factory.name=Fabricator Factory
|
||||
block.repair-point.name=Repair Point
|
||||
block.resupply-point.name=Resupply Point
|
||||
block.pulse-conduit.name=Pulse Conduit
|
||||
block.phase-conduit.name=Phase Conduit
|
||||
block.liquid-router.name=Liquid Router
|
||||
block.liquid-tank.name=Liquid Tank
|
||||
block.liquid-junction.name=Liquid Junction
|
||||
block.bridge-conduit.name=Bridge Conduit
|
||||
block.rotary-pump.name=Rotary Pump
|
||||
block.nuclear-reactor.name=Nuclear Reactor
|
||||
text.save.old=This save is for an older version of the game, and can no longer be used.\n\n[LIGHT_GRAY]Save backwards compatibility will be implemented in the full 4.0 release.
|
||||
|
||||
@@ -3,9 +3,8 @@ text.discord=Junte-se ao Discord do Mindustry! (Lá nós falamos em inglês)
|
||||
text.gameover=O núcleo foi destruído.
|
||||
text.highscore=[YELLOW]Novo recorde!
|
||||
text.lasted=Você durou até a horda
|
||||
text.level.highscore= Melhor\npontuação: [accent] {0}
|
||||
text.level.highscore=Melhor\npontuação: [accent] {0}
|
||||
text.level.delete.title=Confirmar exclusão
|
||||
text.level.delete=Você tem certeza que quer excluir\no mapa "[orange]{0}"?
|
||||
text.level.select=Seleção de Fase
|
||||
text.level.mode=Modo de Jogo:
|
||||
text.savegame=Salvar Jogo
|
||||
@@ -33,7 +32,6 @@ text.loading=[accent]Carregando...
|
||||
text.wave=[orange]Horda {0}
|
||||
text.wave.waiting=Horda em {0}
|
||||
text.waiting=Aguardando...
|
||||
text.countdown=Horda em {0}
|
||||
text.enemies={0} Inimigos restantes
|
||||
text.enemies.single={0} Inimigo restante
|
||||
text.loadimage=Carregar\nImagem
|
||||
@@ -48,21 +46,12 @@ text.editor.savemap=Salvar\n Mapa
|
||||
text.editor.loadimage=Carregar\n Imagem
|
||||
text.editor.saveimage=Salvar\nImagem
|
||||
text.editor.unsaved=[scarlet]Você tem alterações não salvas![]\nTem certeza que quer sair?
|
||||
text.editor.brushsize=Tamanho do pincel: {0}
|
||||
text.editor.noplayerspawn=Este mapa não tem ponto de spawn para o jogador!
|
||||
text.editor.manyplayerspawns=Mapas não podem ter mais de um\nponto de spawn para jogador!
|
||||
text.editor.manyenemyspawns=Não pode haver mais de\n{0} pontos de spawn para inimigos!
|
||||
text.editor.resizemap=Redimensionar Mapa
|
||||
text.editor.resizebig=[scarlet]Aviso!\n[]Mapas maiores que 256 unidades podem ser 'lentos' e instáveis
|
||||
text.editor.mapname=Nome do Mapa:
|
||||
text.editor.overwrite=[accent]Aviso!\nIsso sobrescreve um mapa existente.
|
||||
text.editor.failoverwrite=[crimson]Não é possível salvar sobre o mapa padrão!
|
||||
text.editor.selectmap=Selecione uma mapa para carregar:
|
||||
text.width=Largura:
|
||||
text.height=Altura:
|
||||
text.randomize=Aleatório
|
||||
text.apply=Aplicar
|
||||
text.update=Atualizar
|
||||
text.menu=Menu
|
||||
text.play=Jogar
|
||||
text.load=Carregar
|
||||
@@ -81,58 +70,27 @@ text.upgrades=Melhorias
|
||||
text.purchased=[LIME]Comprado!
|
||||
text.weapons=Arsenal
|
||||
text.paused=Pausado
|
||||
text.respawn=Reaparecendo em
|
||||
text.error.title=[crimson]Um erro ocorreu
|
||||
text.error.crashmessage=[SCARLET]Um erro inesperado aconteceu, que pode ter causado o jogo a fechar. []Por favor, informe as exatas circunstâncias em que o erro ocorreu ao desenvolvidor:\n[ORANGE]anukendev@gmail.com[]
|
||||
text.error.crashtitle=Um erro ocorreu.
|
||||
text.blocks.extrainfo=[accent]Informação extra:
|
||||
text.blocks.blockinfo=Informação do Bloco
|
||||
text.blocks.powercapacity=Capacidade de Energia
|
||||
text.blocks.powershot=Energia/tiro
|
||||
text.blocks.powersecond=Energia/segundo
|
||||
text.blocks.powerdraindamage=Energia/dano
|
||||
text.blocks.shieldradius=Raio do Escudo
|
||||
text.blocks.itemspeedsecond=Itens/segundo
|
||||
text.blocks.range=Alcance
|
||||
text.blocks.size=Tamanho
|
||||
text.blocks.powerliquid=Energia/Líquido
|
||||
text.blocks.maxliquidsecond=Entrada Máx. Líquido/segundo
|
||||
text.blocks.liquidcapacity=Capacidade de Líquido
|
||||
text.blocks.liquidsecond=Líquido/segundo
|
||||
text.blocks.damageshot=Dano/tiro
|
||||
text.blocks.ammocapacity=Munição Máxima
|
||||
text.blocks.ammo=Munição
|
||||
text.blocks.ammoitem=Munição/item
|
||||
text.blocks.maxitemssecond=Máximo de itens/segundo
|
||||
text.blocks.powerrange=Alcance da Energia
|
||||
text.blocks.lasertilerange=Alcance do Laser (em células)
|
||||
text.blocks.capacity=Capacidade
|
||||
text.blocks.itemcapacity=Capacidade de Itens
|
||||
text.blocks.powergenerationsecond=Geração de Energia/segundo
|
||||
text.blocks.generationsecondsitem=Tempo de geração/item
|
||||
text.blocks.input=Entrada
|
||||
text.blocks.inputliquid=Líquido de entrada
|
||||
text.blocks.inputitem=Item de entrada
|
||||
text.blocks.output=Saída
|
||||
text.blocks.secondsitem=Segundos/item
|
||||
text.blocks.maxpowertransfersecond=Transferência máxima de Energia/segundo
|
||||
text.blocks.explosive=Altamente Explosivo!
|
||||
text.blocks.repairssecond=Reparo/segundo
|
||||
text.blocks.health=Saúde
|
||||
text.blocks.inaccuracy=Imprecisão
|
||||
text.blocks.shots=Tiros
|
||||
text.blocks.shotssecond=Taxa de tiro
|
||||
text.placemode=Modo construção
|
||||
text.breakmode=Modo remoção
|
||||
text.health=Saúde
|
||||
setting.difficulty.easy=Fácil
|
||||
setting.difficulty.normal=Normal
|
||||
setting.difficulty.hard=Difícil
|
||||
setting.difficulty.name=Dificuldade
|
||||
setting.screenshake.name=Balanço da Tela
|
||||
#Tremor da tela?
|
||||
setting.smoothcam.name=Câmera suave
|
||||
#Suavizar Câmera?
|
||||
setting.indicators.name=Indicadores de Inimigos
|
||||
setting.effects.name=Particulas
|
||||
setting.sensitivity.name=Sensibilidade do Controle
|
||||
@@ -140,7 +98,6 @@ setting.fps.name=Mostrar FPS
|
||||
setting.vsync.name=VSync
|
||||
setting.lasers.name=Mostrar lasers
|
||||
setting.healthbars.name=Mostrar barra de saúde de entidades
|
||||
setting.pixelate.name=Pixelar Tela
|
||||
setting.musicvol.name=Volume da Música
|
||||
setting.mutemusic.name=Desligar Musica
|
||||
setting.sfxvol.name=Volume de Efeitos
|
||||
@@ -158,54 +115,10 @@ map.grassland.name=grassland
|
||||
map.tundra.name=tundra
|
||||
map.spiral.name=spiral
|
||||
map.tutorial.name=tutorial
|
||||
tutorial.intro.text=[yellow]Bem-vindo ao tutorial.[] Para começar aperte 'próximo'.
|
||||
tutorial.moveDesktop.text=Para mover, use as teclas [orange][[WASD][]. Segure [orange]shift[] para mover rápido. Segure [orange]CTRL[] enquanto usa a [orange]roda do mouse[] para aumentar ou diminuir o zoom.
|
||||
tutorial.shootInternal.text=Use o mouse para mirar, segure [orange]botão esquerdo do mouse[] para atirar. Tente praticar no [yellow]alvo[].
|
||||
tutorial.moveAndroid.text=Para arrastar a visão, passe um dedo pela tela. Pince com os dedos para aumentar ou diminuir o zoom.
|
||||
tutorial.placeSelect.text=Tente selecionar uma [yellow]esteira[] do menu de blocos no canto inferior direito.
|
||||
tutorial.placeConveyorDesktop.text=Use a [orange][[roda do mouse][] para girar a esteira até que aponte [orange]para frente[], então coloque-a no [yellow]local marcado[] usando o [orange][[botão esquerdo do mouse][].
|
||||
tutorial.placeConveyorAndroid.text=Use o [orange][[botão de girar][] para girar a esteira para que aponte [orange]para frente[], arraste-a para a posição e então coloque-a na [yellow]posição marcada[] usando o [orange][[botão de confirmação][].
|
||||
tutorial.placeConveyorAndroidInfo.text=Você também pode apertar no ícone com uma cruz no canto inferior esquerdo para alterar para o [orange][[modo de toque][], e colocar blocos apertando na tela. No modo de toque, blocos podem ser girados com a seta no canto inferior esquerdo. Aperte [yellow]próximo[] para tentar.
|
||||
tutorial.placeDrill.text=Agora selecione e coloque uma [yellow]broca de pedra[] no local marcado.
|
||||
tutorial.blockInfo.text=Se quiser saber mais sobre os blocos, você pode apertar o [orange]símbolo de interrogação[] no canto superior direito para ler mais.
|
||||
tutorial.deselectDesktop.text=Você pode cancelar a seleção de um bloco usando o [orange][botão direito do mouse[].
|
||||
tutorial.deselectAndroid.text=ocê pode cancelar a seleção de um bloco apertando o botão [orange]X[].
|
||||
tutorial.drillPlaced.text=A broca produzirá [yellow]pedra[], direcionando o produzido para a esteira a qual moverá a pedra para o [yellow]núcleo[].
|
||||
tutorial.drillInfo.text=Minérios diferentes precisam de diferentes brocas. Pedra precisam de brocas de pedra, Ferro de brocas de ferro, etc.
|
||||
tutorial.drillPlaced2.text=Itens movidos para o núcleo são colocados em seu [yellow]inventário[], no canto superior esquerdo. Colocar blocos gasta os recursos do inventário.
|
||||
tutorial.moreDrills.text=Você pode conectar várias brocas e esteiras, veja.
|
||||
tutorial.deleteBlock.text=Você pode excluir blocos clickando com o [orange]botão direito do mouse[] no bloco que quiser destruir. Tente excluir esta esteira.
|
||||
tutorial.deleteBlockAndroid.text=Você pode excluir blocos [orange]apertando na cruz[] no [orange]menu modo de quebra[] no canto inferior esquerdo e então apertando no bloco desejado. Tente excluir esta esteira.
|
||||
tutorial.placeTurret.text=Agora, selecione e construa uma [yellow]torre[] no [yellow]local marcado[].
|
||||
tutorial.placedTurretAmmo.text=Esta torre aceitará [yellow]munição[] da esteira. Você pode ver quanta munição elas tem passando o mouse sobre elas e verificando a [green]barra verde[].
|
||||
tutorial.turretExplanation.text=As torres irão atirar no inimigo mais próximo que estiver ao alcance, contanto que tenham munição suficiente.
|
||||
tutorial.waves.text=A cada [yellow]60[] segundos, uma horda de [coral]inimigos[] irá aparecer em locais específicos e tentará destruir o núcleo.
|
||||
tutorial.coreDestruction.text=Seu objetivo é [yellow]defender o núcleo[]. Se o núcleo for destruído, vecê [coral]perde o jogo[].
|
||||
tutorial.pausingDesktop.text=Se você precisar parar por alguns instantes, aperte o [orange]botão de pausa[] no canto superior esquerdo ou [orange]barra de espaço[] para pausar o jogo. Você pode colocar blocos enquanto o jogo esta pausado, porém não poderá se mover ou atirar.
|
||||
tutorial.pausingAndroid.text=Se você precisar parar por alguns instantes, aperte o [orange]botão de pausa[] no canto superior esquerdo ou [orange]barra de espaço[] para pausar o jogo. Você pode colocar blocos enquanto o jogo esta pausado.
|
||||
tutorial.purchaseWeapons.text=Você pode comprar novas [yellow]armas[] para seu mecha, basta abrir o menu de melhorias no canto inferior esquerdo.
|
||||
tutorial.switchWeapons.text=Alterne entre suas armas clickando em seu ícone ou usando as teclas numéricas [orange][[1-9][].
|
||||
tutorial.spawnWave.text=Uma horda esta vindo. Destrúa-os.
|
||||
tutorial.pumpDesc.text=Em hordas mais avançadas, você talvez precise de [yellow]bombas[] para distribuir líquidos para geradores ou extratores.
|
||||
tutorial.pumpPlace.text=Bombas trabalham de forma semelhante às brocas, porém elas produzem líquidos ao envés de minérios. Tente colocar uma bomba na [yellow]célula de petróleo designada[].
|
||||
tutorial.conduitUse.text=Agora coloque um [orange]cano[] levando para longe da bomba.
|
||||
tutorial.conduitUse2.text=E mais alguns...
|
||||
tutorial.conduitUse3.text=E mais alguns...
|
||||
tutorial.generator.text=Agora coloque um [orange]gerador a combustão[] no final do cano.
|
||||
tutorial.generatorExplain.text=Este gerador irá produzir [yellow]energia[] do petróleo.
|
||||
tutorial.lasers.text=Energia é distribuida usando [yellow]lasers[]. Gire e coloque um aqui.
|
||||
tutorial.laserExplain.text=O gerador irá mover energia para o bloco do laser. Um feixe [yellow]opaco[] significa que a energia está sendo transmitida, e um feixe [yellow]transparente[] significa que não.
|
||||
tutorial.laserMore.text=Você pode verificar quanta energia um bloco tem ao passar o mouse sobre eles e verificando a [yellow]barra amarela[] no topo.
|
||||
tutorial.healingTurret.text=Este laser pode ser usado para energizar uma [lime]torre de reparo[]. Coloque uma aqui.
|
||||
tutorial.healingTurretExplain.text=Enquanto tiver energia, esta torre irá [lime]reparar blocos próximos.[] Quando jogar, tenha certeza de construir uma dessas próximas do núcleo o mais rápido possível!
|
||||
tutorial.smeltery.text=Muitos blocos precisam de [orange]aço[] para serem construídos, o que requer uma [orange]fundidora[] para ser feito. Coloque uma aqui.
|
||||
tutorial.smelterySetup.text=Esta fundidora irá produzir [orange]aço[] quando receber carvão e ferro.
|
||||
tutorial.end.text=E este é o fim do Tutorial! Boa Sorte!
|
||||
keybind.move_x.name=move_x
|
||||
keybind.move_y.name=move_y
|
||||
keybind.select.name=selecionar
|
||||
keybind.break.name=quebrar
|
||||
keybind.shootInternal.name=atirar
|
||||
keybind.zoom_hold.name=segurar_zoom
|
||||
keybind.zoom.name=zoom
|
||||
keybind.menu.name=menu
|
||||
@@ -213,259 +126,370 @@ keybind.pause.name=pausar
|
||||
keybind.dash.name=Correr
|
||||
keybind.rotate_alt.name=girar_alt*
|
||||
keybind.rotate.name=girar
|
||||
keybind.weapon_1.name=Arma 1
|
||||
keybind.weapon_2.name=Arma 2
|
||||
keybind.weapon_3.name=Arma 3
|
||||
keybind.weapon_4.name=Arma 4
|
||||
keybind.weapon_5.name=Arma 5
|
||||
keybind.weapon_6.name=Arma 6
|
||||
mode.waves.name=hordas
|
||||
mode.sandbox.name=sandbox
|
||||
#CAIXINHA DE AREIA
|
||||
mode.freebuild.name=construção \nlivre
|
||||
weapon.blaster.name=Blaster
|
||||
weapon.blaster.description=Atira um projétil lento e fraco.
|
||||
weapon.triblaster.name=Blaster Triplo
|
||||
weapon.triblaster.description=Atira 3 balas que se espalham.
|
||||
weapon.multigun.name=Escopeta
|
||||
weapon.multigun.description=Atira balas com baixa precisão e uma\n alta taxa de disparo.
|
||||
weapon.flamer.name=Lança-Chamas
|
||||
weapon.railgun.name=Rifle Sniper
|
||||
weapon.flamer.description=É um lança-chamas. O que mais ele faria?
|
||||
weapon.railgun.description=Atira um projétil de longo alcance.
|
||||
weapon.mortar.name=Morteiro
|
||||
weapon.mortar.description=Atira um projétil lento, porém devastador.
|
||||
item.stone.name=Pedra
|
||||
item.iron.name=Ferro
|
||||
item.coal.name=Carvão
|
||||
item.steel.name=Aço
|
||||
item.titanium.name=Titânio
|
||||
item.dirium.name=Dírio
|
||||
item.thorium.name=Urânio
|
||||
liquid.water.name=Água
|
||||
liquid.plasma.name=Plasma
|
||||
liquid.lava.name=Lava
|
||||
liquid.oil.name=Petróleo
|
||||
block.air.name=Ar
|
||||
block.blockpart.name=blockpart
|
||||
#que?
|
||||
block.deepwater.name=Água Profunda
|
||||
block.water.name=Água
|
||||
block.lava.name=Lava
|
||||
block.oil.name=Petróleo
|
||||
block.stone.name=Pedra
|
||||
block.blackstone.name=Pedra Escura
|
||||
block.iron.name=Ferro
|
||||
block.coal.name=Carvão
|
||||
block.titanium.name=Titânio
|
||||
block.thorium.name=Urânio
|
||||
block.dirt.name=Terra
|
||||
block.sand.name=Areia
|
||||
block.ice.name=Gelo
|
||||
block.snow.name=Neve
|
||||
block.grass.name=Grama
|
||||
block.sandblock.name=Bloco de Areia
|
||||
block.snowblock.name=Bloco de Neve
|
||||
block.stoneblock.name=Rocha
|
||||
block.blackstoneblock.name=Rocha Escura
|
||||
block.grassblock.name=Bloco de Grama
|
||||
block.mossblock.name=Musgo
|
||||
block.shrub.name=Arbusto
|
||||
block.rock.name=Rocha
|
||||
block.icerock.name=Rocha de Gelo
|
||||
block.blackrock.name=Rocha Escura
|
||||
block.dirtblock.name=Bloco de Terra
|
||||
block.stonewall.name=Parede de Pedra
|
||||
block.stonewall.fulldescription=Um bloco defensivo barato. Útil para proteger o núcleo e torres nas primeiras hordas.
|
||||
block.ironwall.name=Parede de Ferro
|
||||
block.ironwall.fulldescription=Um bloco defensivo básico. Fornece proteção contra inimigos.
|
||||
block.steelwall.name=Parede de aço
|
||||
block.steelwall.fulldescription=Um bloco defensivo padrão. Fornece proteção contra inimigos.
|
||||
block.titaniumwall.name=Parede de Titânio
|
||||
block.titaniumwall.fulldescription=Um bloco defensivo forte. Fornece proteção contra inimigos.
|
||||
block.duriumwall.name=Parede de Dírio
|
||||
block.duriumwall.fulldescription=Um bloco defensivo muito forte. Fornece proteção contra inimigos.
|
||||
block.compositewall.name=Parede de Composto
|
||||
block.compositewall.fulldescription= Um bloco defensivo extremamente forte. Fornece a melhor proteção contra inimigos.
|
||||
block.steelwall-large.name=Parede Grande de Aço
|
||||
block.steelwall-large.fulldescription=Um bloco defensivo padrão. Ocupa multiplas células.
|
||||
block.titaniumwall-large.name=Parede Grande de Titânio
|
||||
block.titaniumwall-large.fulldescription=Um bloco defensivo forte. Ocupa multiplas células.
|
||||
block.duriumwall-large.name=Parede Grande de Dírio
|
||||
block.duriumwall-large.fulldescription=Um bloco defensivo muito forte. Ocupa multiplas células.
|
||||
block.titaniumshieldwall.name=Parede com Escudo
|
||||
block.titaniumshieldwall.fulldescription=Um bloco defensivo forte, com um escudo de energia imbutido. Usa energia passivamente e para absorver projéteis inimigos. É recomendado usar distribuidores de energia para abastecer este bloco.
|
||||
#A strong defensive block, with an extra built-in shield. Requires power. Uses energy to absorb enemy bullets. It is recommended to use power boosters to provide energy to this block.
|
||||
block.repairturret.name=Torre de Reparo
|
||||
block.repairturret.fulldescription=Lentamente repara blocos danificados dentro do seu alcance. Consome um pouco de energia.
|
||||
#Repairs nearby damaged blocks in range at a slow rate. Uses small amounts of power.
|
||||
block.repairturret.description=[powerinfo]Consome Energia.[white]\nRepara blocos próximos.
|
||||
block.megarepairturret.name=Torre de Reparo II
|
||||
block.megarepairturret.fulldescription=Repara blocos danificados dentro do seu alcance. Consome um pouco de energia.
|
||||
block.megarepairturret.description=[powerinfo]Consome Energia.[white]\nRepara blocos próximos.
|
||||
block.shieldgenerator.name=Gerador de Escudo
|
||||
block.shieldgenerator.fulldescription= Um bloco defensivo avançado. Protege todos os blocos em um raio. Lentamente usa energia quando parado, mas rapidamente drena em contato com projéteis.
|
||||
#An advanced defensive block. Shields all the blocks in a radius from attack. Uses power at a slow rate when idle, but drains energy quickly on bullet contact.
|
||||
block.door.name=Porta
|
||||
block.door.fulldescription=Um bloco que pode ser aberto e fechado ao tocar nele.
|
||||
block.door.description=Abre e Fecha.\n[interact]Toque para alternar o estado.
|
||||
block.door-large.name=Porta Grande
|
||||
block.door-large.fulldescription=Um bloco que pode ser aberto e fechado ao tocar nele.
|
||||
block.door-large.description=Abre e Fecha.\n[interact]Toque para alternar o estado.
|
||||
block.conduit.name=Cano
|
||||
block.conduit.fulldescription=Bloco de transporte de líquido básico. Funciona como uma esteira, mas com líquidos. Pode ser usado como uma ponte para inimigos e jogadores.
|
||||
#Basic liquid transport block. Works like a conveyor, but with liquids. Best used with pumps or other conduits. Can be used as a bridge over liquids for enemies and players.
|
||||
block.pulseconduit.name=Cano de impulso
|
||||
block.pulseconduit.fulldescription=Bloco de transporte de líquido avançado. Transporta líquidos mais rapidamente e armazena mais que canos normais.
|
||||
#Advanced liquid transport block. Transports liquids faster and stores more than standard conduits.
|
||||
block.liquidrouter.name=Roteador de líquido
|
||||
block.liquidrouter.fulldescription=Aceita líquido de uma direção e o redireciona para as outras 3 direções. Útil para dividir o líquido entre vários canos.
|
||||
#Works similarly to a router. Accepts liquid input from one side and outputs it to the other sides. Useful for splitting liquid from a single conduit into multiple other conduits.
|
||||
block.liquidrouter.description=Divide líquidos em 3 direções.
|
||||
block.conveyor.name=Esteira
|
||||
block.conveyor.fulldescription=Bloco de transporte básico. Movimenta itens para frente e automaticamente os deposita em torres ou blocos de fabricação. Pode ser girado. Pode ser usado como uma ponte para inimigos e jogadores.
|
||||
#Basic item transport block. Moves items forward and automatically deposits them into turrets or crafters. Rotatable. Can be used as a bridge over liquids for enemies and players.
|
||||
block.steelconveyor.name=Esteira de aço
|
||||
block.steelconveyor.fulldescription=Bloco de transporte avançado. Movimenta itens mais rapidamente que esteiras normais.
|
||||
#Advanced item transport block. Moves items faster than standard conveyors.
|
||||
block.poweredconveyor.name=Esteira de Impulso
|
||||
block.poweredconveyor.fulldescription=O Bloco supremo de transporte. Movimenta itens mais rapidamente que esteiras de aço.
|
||||
#The ultimate item transport block. Moves items faster than carbide conveyors.
|
||||
block.router.name=Roteador
|
||||
block.router.fulldescription=Aceita itens de uma direção e os redireciona para as outras 3 direções. Pode guardar uma certa quantidade de itens. Útil para dividir materiais entre várias torres.
|
||||
block.router.description=Divide materiais em 3 direções.
|
||||
block.junction.name=Junção
|
||||
block.junction.fulldescription=Funciona como uma ponte para 2 linhas de esteiras que se cruzam. Útil em situações onde duas esteiras carregam diferentes materiais para diferentes locais.
|
||||
block.junction.description=Funciona como uma junção para as esteiras.
|
||||
block.conveyortunnel.name=Túnel de esteira
|
||||
block.conveyortunnel.fulldescription=Transporta itens por baixo de blocos. Para usar coloque um túnel apontado para o bloco que deseja passar por baixo, e outro apontado para o primeiro túnel.
|
||||
block.conveyortunnel.description=Transporta intes por baixo de blocos.
|
||||
block.liquidjunction.name=Junção de líquido
|
||||
block.liquidjunction.fulldescription=Funciona como uma ponte para 2 canos que se cruzam. Útil em situações onde 2 canos diferentes carregam diferentes líquidos para diferentes locais.
|
||||
block.liquiditemjunction.name=liquid-item junction
|
||||
block.liquiditemjunction.fulldescription=Acts as a bridge for crossing conduits and conveyors.
|
||||
block.liquiditemjunction.description=Serves as a junction for items and liquids.
|
||||
block.powerbooster.name=Distribuidor de energia
|
||||
block.powerbooster.fulldescription=Distribui energia para todos os blocos dentro de seu raio.
|
||||
block.powerbooster.description=Distribui energia em um raio.
|
||||
block.powerlaser.name=Laser
|
||||
#Laser de energia?
|
||||
block.powerlaser.fulldescription=Cria um laser que transmite energia para o bloco à sua frente. Melhor usado com geradores ou outros lasers. Não gera energia.
|
||||
block.powerlaser.description=Transmite energia.
|
||||
block.powerlaserrouter.name=laser duplo
|
||||
block.powerlaserrouter.fulldescription=Divide a entrada de energia em 3 lasers. Útil em situações onde é necessário conectar muitos blocos a partir de um gerador.
|
||||
block.powerlaserrouter.description=Divide a entrada de energia em 3 lasers.
|
||||
block.powerlasercorner.name=laser triplo
|
||||
#*Essa nomeação ficou escrota
|
||||
block.powerlasercorner.fulldescription=Laser que distribui energia para duas direções ao mesmo tempo. Útil em situações onde é necessário conectar muitos blocos a partir de um gerador.
|
||||
block.powerlasercorner.description=Divide a entrada de energia em 2 lasers.
|
||||
block.teleporter.name=Teleportador
|
||||
block.teleporter.fulldescription=Bloco avançado de transporte de itens. Teleportadores transferem itens para outros teleportadores da mesma cor. Não faz nada se não houverem outros da mesma cor. Se houverem múltiplos da mesma cor, um aleatório será selecionado. Toque nas flechas para mudar de cor.
|
||||
block.teleporter.description=[interact]Tap block to config[]
|
||||
block.sorter.name=Ordenador
|
||||
block.sorter.fulldescription=Separa itens pelo tipo de material. O material a ser aceito é indicado pela cor do bloco. Todos os itens que correspondem ao material a ser separado são direcionados para frente, todo o resto é direcionado para os lados.
|
||||
block.sorter.description=[interact]Aperte no bloco para configurar[]
|
||||
block.core.name=núcleo
|
||||
block.pump.name=bomba
|
||||
block.pump.fulldescription=Bombeia líquidos de um bloco, geralmente água, lava ou petróleo. Os líquidos são bombeados para canos próximos.
|
||||
block.pump.description=Bombeia líquidos para canos próximos.
|
||||
block.fluxpump.name=Bomba de fluxo
|
||||
block.fluxpump.fulldescription=Uma versão avançada da bomba comum. Guarda mais líquido e bombeia mais rápido.
|
||||
block.fluxpump.description=Bombeia líquidos para canos próximos.
|
||||
block.smelter.name=Fornalha
|
||||
block.smelter.fulldescription=O bloco de produção essencial. Quando recebe 1 carvão e\n1 ferro produz 1 aço
|
||||
block.smelter.description=Converte carvão + ferro em aço.
|
||||
block.crucible.name=Usina de fundição
|
||||
block.crucible.fulldescription=Um bloco de produção avançado. Quando recebe 1 titânio e 1 aço produz 1 dírio.
|
||||
block.crucible.description=Converte aço + titânio em dírio.
|
||||
block.coalpurifier.name=Extrator de carvão
|
||||
block.coalpurifier.fulldescription=Um bloco extrator básico. Produz carvão quando fornecido com grandes quantidades de água e pedra.
|
||||
block.coalpurifier.description=Converte pedra + água em carvão.
|
||||
block.titaniumpurifier.name=Extrator de titânio
|
||||
block.titaniumpurifier.fulldescription=Um bloco extrator padrão. Produz titânio quando fornecido com grandes quantidas de água e ferro.
|
||||
block.titaniumpurifier.description=Converte água e ferro em titânio.
|
||||
block.oilrefinery.name=Refinaria de Petróleo
|
||||
block.oilrefinery.fulldescription=Refina grande quantidades de petróleo para produzir carvão. Útil para abastecer torres que utilizam carvão quando jazidas de carvão são escassas.
|
||||
block.oilrefinery.description=Converte petróleo em carvão.
|
||||
block.stoneformer.name=Formador de Pedra
|
||||
block.stoneformer.fulldescription=Solidifica lava para formar pedra. Útil para produzir grandes quantidades de pedra para extratores de carvão.
|
||||
block.stoneformer.description=Converte lava em pedra.
|
||||
block.lavasmelter.name=Fornalha à Lava
|
||||
block.lavasmelter.fulldescription=Usa lava para converter ferro em aço. Uma alternativa para a fundidora. Útil em situações onde não há carvão por perto.
|
||||
block.lavasmelter.description=Converte ferro + lava em aço.
|
||||
block.stonedrill.name=Broca de pedra
|
||||
block.stonedrill.fulldescription=A broca essencial. Quando colocada em uma jazida de pedra gera pedra indefinidamente.
|
||||
block.stonedrill.description=Gera 1 pedra a cada 4 segundos.
|
||||
#Mines 1 stone every 4 seconds.
|
||||
block.irondrill.name=Broca de Ferro
|
||||
block.irondrill.fulldescription=Uma broca básica. Quando colocada sobre uma jazida de ferro, lentamente gera ferro.
|
||||
#A basic drill. When placed on tungsten ore tiles, outputs tungsten at a slow pace indefinitely.
|
||||
block.irondrill.description=Gera 1 ferro a cada 5 segundos.
|
||||
block.coaldrill.name=Broca de Carvão
|
||||
block.coaldrill.fulldescription=Uma broca básica. Quando colocada sobre uma jazida de carvão, lentamente gera carvão.
|
||||
block.coaldrill.description=Gera 1 carvão a cada 5 segundos.
|
||||
block.thoriumdrill.name=Broca de Urânio
|
||||
block.thoriumdrill.fulldescription=Uma broca avançada. Quando colocada sobre uma jazida de urânio, lentamente gera urânio.
|
||||
block.thoriumdrill.description=Gera 1 Urânio a cada 7 segundos.
|
||||
block.titaniumdrill.name=Broca de Titânio
|
||||
block.titaniumdrill.fulldescription=Uma broca avançada. Quando colocada sobre uma jazida de titânio, lentamente gera titânio.
|
||||
block.titaniumdrill.description=Gera 1 Titânio a cada 5 segundos.
|
||||
block.omnidrill.name=Omnibroca
|
||||
block.omnidrill.fulldescription=A broca suprema. Rapidamente extrai qualquer minério em que é colocada.
|
||||
#The ultimate drill. Will mine any ore it is placed on at a rapid pace.
|
||||
block.omnidrill.description=Gera 1 de qualquer recurso a cada 3 segundos.
|
||||
block.coalgenerator.name=Gerador à Carvão
|
||||
#Crase ou não?
|
||||
block.coalgenerator.fulldescription=O gerador essencial. Gera energia a partir de carvão. Distribui energia em forma de laser para os 4 lados.
|
||||
block.coalgenerator.description=Gera energia a partir de carvão.
|
||||
block.thermalgenerator.name=Gerador Térmico
|
||||
block.thermalgenerator.fulldescription=Gera energia a partir de lava. Distribui energia em forma de laser para os 4 lados.
|
||||
block.thermalgenerator.description=Gera energia a partir de lava.
|
||||
block.combustiongenerator.name=Gerador à Combustão
|
||||
block.combustiongenerator.fulldescription=Gera energia a partir de petróleo. Distribui energia em forma de laser para os 4 lados.
|
||||
block.combustiongenerator.description=Gera energia a partir de petróleo.
|
||||
block.rtgenerator.name=Gerador RTG
|
||||
block.rtgenerator.fulldescription=Gera pouca quantidade de energia a partir do decaimento radioativo do urânio. Distribui energia em forma de laser para os 4 lados.
|
||||
block.rtgenerator.description=Gera energia a partir de Urânio.
|
||||
block.nuclearreactor.name=Reator Nuclear
|
||||
block.nuclearreactor.fulldescription=Uma versão avançada do gerador RTG. Gera energia a partir de Urânio. Requer constante resfriamento à água. Altamente volátil; explodirá violentamente se não for suprido com quantiddades suficientes de água.
|
||||
block.turret.name=Torre Comum
|
||||
block.turret.fulldescription=Uma torre básica e barata. Usa pedra como munição. Tem alcance um pouco maior que a torre dupla.
|
||||
block.turret.description=[turretinfo]Munição: pedra
|
||||
block.doubleturret.name=Torre Dupla
|
||||
block.doubleturret.fulldescription=Uma versão um pouco mais poderosa do que a torre comum. Usa pedra como munição. Causa um dano maior, porém tem menor alcance. Atira dois projéteis.
|
||||
block.doubleturret.description=[turretinfo]Munição: pedra
|
||||
block.machineturret.name=Torre Automática
|
||||
block.machineturret.fulldescription=Uma torre padrão completa. Usa ferro como munição. Tem alta taxa de disparo e dano decente.
|
||||
block.machineturret.description=[turretinfo]Munição: ferro
|
||||
block.shotgunturret.name=Torre Splitter
|
||||
#Splitter turret
|
||||
block.shotgunturret.fulldescription=Uma torre padrão. Usa ferro como munição. Atira 7 balas em forma de cone. Pouco alcance, porém maior dano do que a Torre Dupla.
|
||||
block.shotgunturret.description=[turretinfo]Munição: ferro
|
||||
block.flameturret.name=Torre lança-\nchamas
|
||||
block.flameturret.fulldescription=Torre avançada de baixo alcance. Usa carvão. Pouco alcance mas alto dano. Boa para trechos estreitos. Recomenda-se usá-la atŕas de paredes.
|
||||
block.flameturret.description=[turretinfo]Munição: carvão
|
||||
block.sniperturret.name=Torre Sniper
|
||||
#Torre Railgun?
|
||||
block.sniperturret.fulldescription=Torre avançada de longo alcance. Usa aço como munição. Dano altíssimo, porém baixa taxa de disparo. Cara para usar, porém pode ser colocada longe das linhas inimigas dado seu alcance.
|
||||
block.sniperturret.description=[turretinfo]Munição: aço
|
||||
block.mortarturret.name=Torre Flak
|
||||
block.mortarturret.fulldescription=Torre avançada de dano em área. Usa carvão. Taxa de disparo e balas lentas, mas alto dano em alvo único ou distribuído.
|
||||
block.mortarturret.description=[turretinfo]Munição: carvão
|
||||
block.laserturret.name=Torre laser
|
||||
block.laserturret.fulldescription=Torre de alvo único avançada. Usa energia. Boa torre de alcance médio e uso geral. Alvo único apenas. Nunca erra.
|
||||
block.laserturret.description=[turretinfo]Usa Energia
|
||||
block.waveturret.name=Torre Tesla
|
||||
block.waveturret.fulldescription=Torre de múltiplos alvos avançada. Usa Energia. Alcance médio. Nunca erra. Dano médio-baixo, porém pode acertar vários inimigos simultaneamente com raios conectados.
|
||||
block.waveturret.description=[turretinfo]Usa Energia
|
||||
block.plasmaturret.name=Torre de Plasma
|
||||
block.plasmaturret.fulldescription=Versão altamente avançada da Torre lança-chamas. Usa carvão. Dano altíssimo e alcance médio-baixo.
|
||||
block.plasmaturret.description=[turretinfo]Munição: carvão
|
||||
block.chainturret.name=Canhão automático
|
||||
block.chainturret.fulldescription=A torre de tiro rápido mais avançada. Usa Urânio como munição. Atira grandes projéteis rapidamente. Alcance médio. Ocupa várias células. Extremamente resistente.
|
||||
block.chainturret.description=[turretinfo]Munição: Urânio
|
||||
block.titancannon.name=Canhão Titã
|
||||
block.titancannon.fulldescription=A torre de longo alcance mais avançada. Usa Urânio como munição. Atira várias balas de dano em área à uma taxa de disparo média. Alto alcance. Ocupa várias células. Extremamente resistente.
|
||||
block.titancannon.description=[turretinfo]Munição: Urânio
|
||||
block.playerspawn.name=playerspawn
|
||||
block.enemyspawn.name=enemyspawn
|
||||
text.credits=Credits
|
||||
text.link.discord.description=the official Mindustry discord chatroom
|
||||
text.link.github.description=Game source code
|
||||
text.link.dev-builds.description=Unstable development builds
|
||||
text.link.trello.description=Official trello board for planned features
|
||||
text.link.itch.io.description=itch.io page with PC downloads and web version
|
||||
text.link.google-play.description=Google Play store listing
|
||||
text.link.wiki.description=official Mindustry wiki
|
||||
text.linkfail=Failed to open link!\nThe URL has been copied to your cliboard.
|
||||
text.editor.web=The web version does not support the editor!\nDownload the game to use it.
|
||||
text.web.unsupported=The web version does not support this feature! Download the game to use it.
|
||||
text.multiplayer.web=This version of the game does not support multiplayer!\nTo play multiplayer from your browser, use the "multiplayer web version" link at the itch.io page.
|
||||
text.host.web=The web version does not support hosting games! Download the game to use this feature.
|
||||
text.map.delete=Are you sure you want to delete the map "[orange]{0}[]"?
|
||||
text.construction.title=Block Construction Guide
|
||||
text.construction=You've just selected [accent]block construction mode[].\n\nTo begin placing, simply tap a valid location near your ship.\nOnce you have selected some blocks, press the checkbox to confirm, and your ship will begin constructing them.\n\n- [accent]Remove blocks[] from your selection by tapping them.\n- [accent]Shift the selection[] by holding and dragging any block in the selection.\n- [accent]Place blocks in a line[] by tapping and holding an empty spot, then dragging in a direction.\n- [accent]Cancel construction or selection[] by pressing the X at the bottom left.
|
||||
text.deconstruction.title=Block Deconstruction Guide
|
||||
text.deconstruction=You've just selected [accent]block deconstruction mode[].\n\nTo begin breaking, simply tap a block near your ship.\nOnce you have selected some blocks, press the checkbox to confirm, and your ship will begin de-constructing them.\n\n- [accent]Remove blocks[] from your selection by tapping them.\n- [accent]Remove blocks in an area[] by tapping and holding an empty spot, then dragging in a direction.\n- [accent]Cancel deconstruction or selection[] by pressing the X at the bottom left.
|
||||
text.showagain=Don't show again next session
|
||||
text.unlocks=Unlocks
|
||||
text.joingame=Join Game
|
||||
text.addplayers=Add/Remove Players
|
||||
text.newgame=New Game
|
||||
text.maps=Maps
|
||||
text.maps.none=[LIGHT_GRAY]No maps found!
|
||||
text.about.button=About
|
||||
text.name=Name:
|
||||
text.unlocked=New Block Unlocked!
|
||||
text.unlocked.plural=New Blocks Unlocked!
|
||||
text.players={0} players online
|
||||
text.players.single={0} player online
|
||||
text.server.mismatch=Packet error: possible client/server version mismatch.\nMake sure you and the host have the\nlatest version of Mindustry!
|
||||
text.server.closing=[accent]Closing server...
|
||||
text.server.kicked.kick=You have been kicked from the server!
|
||||
text.server.kicked.fastShoot=You are shooting too quickly.
|
||||
text.server.kicked.invalidPassword=Invalid password!
|
||||
text.server.kicked.clientOutdated=Outdated client! Update your game!
|
||||
text.server.kicked.serverOutdated=Outdated server! Ask the host to update!
|
||||
text.server.kicked.banned=You are banned on this server.
|
||||
text.server.kicked.recentKick=You have been kicked recently.\nWait before connecting again.
|
||||
text.server.kicked.nameInUse=There is someone with that name\nalready on this server.
|
||||
text.server.kicked.nameEmpty=Your name must contain at least one character or number.
|
||||
text.server.kicked.idInUse=You are already on this server! Connecting with two accounts is not permitted.
|
||||
text.server.kicked.customClient=This server does not support custom builds. Download an official version.
|
||||
text.server.connected={0} has joined.
|
||||
text.server.disconnected={0} has disconnected.
|
||||
text.nohost=Can't host server on a custom map!
|
||||
text.host.info=The [accent]host[] button hosts a server on ports [scarlet]6567[] and [scarlet]6568.[]\nAnybody on the same [LIGHT_GRAY]wifi or local network[] should be able to see your server in their server list.\n\nIf you want people to be able to connect from anywhere by IP, [accent]port forwarding[] is required.\n\n[LIGHT_GRAY]Note: If someone is experiencing trouble connecting to your LAN game, make sure you have allowed Mindustry access to your local network in your firewall settings.
|
||||
text.join.info=Here, you can enter a [accent]server IP[] to connect to, or discover [accent]local network[] servers to connect to.\nBoth LAN and WAN multiplayer is supported.\n\n[LIGHT_GRAY]Note: There is no automatic global server list; if you want to connect to someone by IP, you would need to ask the host for their IP.
|
||||
text.hostserver=Host Server
|
||||
text.host=Host
|
||||
text.hosting=[accent]Opening server...
|
||||
text.hosts.refresh=Refresh
|
||||
text.hosts.discovering=Discovering LAN games
|
||||
text.server.refreshing=Refreshing server
|
||||
text.hosts.none=[lightgray]No LAN games found!
|
||||
text.host.invalid=[scarlet]Can't connect to host.
|
||||
text.server.friendlyfire=Friendly Fire
|
||||
text.trace=Trace Player
|
||||
text.trace.playername=Player name: [accent]{0}
|
||||
text.trace.ip=IP: [accent]{0}
|
||||
text.trace.id=Unique ID: [accent]{0}
|
||||
text.trace.android=Android Client: [accent]{0}
|
||||
text.trace.modclient=Custom Client: [accent]{0}
|
||||
text.trace.totalblocksbroken=Total blocks broken: [accent]{0}
|
||||
text.trace.structureblocksbroken=Structure blocks broken: [accent]{0}
|
||||
text.trace.lastblockbroken=Last block broken: [accent]{0}
|
||||
text.trace.totalblocksplaced=Total blocks placed: [accent]{0}
|
||||
text.trace.lastblockplaced=Last block placed: [accent]{0}
|
||||
text.invalidid=Invalid client ID! Submit a bug report.
|
||||
text.server.bans=Bans
|
||||
text.server.bans.none=No banned players found!
|
||||
text.server.admins=Admins
|
||||
text.server.admins.none=No admins found!
|
||||
text.server.add=Add Server
|
||||
text.server.delete=Are you sure you want to delete this server?
|
||||
text.server.hostname=Host: {0}
|
||||
text.server.edit=Edit Server
|
||||
text.server.outdated=[crimson]Outdated Server![]
|
||||
text.server.outdated.client=[crimson]Outdated Client![]
|
||||
text.server.version=[lightgray]Version: {0}
|
||||
text.server.custombuild=[yellow]Custom Build
|
||||
text.confirmban=Are you sure you want to ban this player?
|
||||
text.confirmunban=Are you sure you want to unban this player?
|
||||
text.confirmadmin=Are you sure you want to make this player an admin?
|
||||
text.confirmunadmin=Are you sure you want to remove admin status from this player?
|
||||
text.joingame.title=Join Game
|
||||
text.joingame.ip=IP:
|
||||
text.disconnect=Disconnected.
|
||||
text.disconnect.data=Failed to load world data!
|
||||
text.connecting=[accent]Connecting...
|
||||
text.connecting.data=[accent]Loading world data...
|
||||
text.connectfail=[crimson]Failed to connect to server: [orange]{0}
|
||||
text.server.port=Port:
|
||||
text.server.addressinuse=Address already in use!
|
||||
text.server.invalidport=Invalid port number!
|
||||
text.server.error=[crimson]Error hosting server: [orange]{0}
|
||||
text.save.new=New Save
|
||||
text.save.none=No saves found!
|
||||
text.save.delete.confirm=Are you sure you want to delete this save?
|
||||
text.save.delete=Delete
|
||||
text.save.export=Export Save
|
||||
text.save.import.invalid=[orange]This save is invalid!
|
||||
text.save.import.fail=[crimson]Failed to import save: [orange]{0}
|
||||
text.save.export.fail=[crimson]Failed to export save: [orange]{0}
|
||||
text.save.import=Import Save
|
||||
text.save.newslot=Save name:
|
||||
text.save.rename=Rename
|
||||
text.save.rename.text=New name:
|
||||
text.on=On
|
||||
text.off=Off
|
||||
text.save.autosave=Autosave: {0}
|
||||
text.save.map=Map: {0}
|
||||
text.save.difficulty=Difficulty: {0}
|
||||
text.copylink=Copy Link
|
||||
text.changelog.title=Changelog
|
||||
text.changelog.loading=Getting changelog...
|
||||
text.changelog.error.android=[orange]Note that the changelog sometimes does not work on Android 4.4 and below!\nThis is due to an internal Android bug.
|
||||
text.changelog.error.ios=[orange]The changelog is currently not supported in iOS.
|
||||
text.changelog.error=[scarlet]Error getting changelog!\nCheck your internet connection.
|
||||
text.changelog.current=[yellow][[Current version]
|
||||
text.changelog.latest=[orange][[Latest version]
|
||||
text.saving=[accent]Saving...
|
||||
text.unknown=Unknown
|
||||
text.custom=Custom
|
||||
text.builtin=Built-In
|
||||
text.map.delete.confirm=Are you sure you want to delete this map? This action cannot be undone!
|
||||
text.map.random=[accent]Random Map
|
||||
text.map.nospawn=This map does not have any cores for the player to spawn in! Add a [ROYAL]blue[] core to this map in the editor.
|
||||
text.editor.slope=\\
|
||||
text.editor.openin=Open In Editor
|
||||
text.editor.oregen=Ore Generation
|
||||
text.editor.oregen.info=Ore Generation:
|
||||
text.editor.mapinfo=Map Info
|
||||
text.editor.author=Author:
|
||||
text.editor.description=Description:
|
||||
text.editor.name=Name:
|
||||
text.editor.teams=Teams
|
||||
text.editor.elevation=Elevation
|
||||
text.editor.saved=Saved!
|
||||
text.editor.save.noname=Your map does not have a name! Set one in the 'map info' menu.
|
||||
text.editor.save.overwrite=Your map overwrites a built-in map! Pick a different name in the 'map info' menu.
|
||||
text.editor.import.exists=[scarlet]Unable to import:[] a built-in map named '{0}' already exists!
|
||||
text.editor.import=Import...
|
||||
text.editor.importmap=Import Map
|
||||
text.editor.importmap.description=Import an already existing map
|
||||
text.editor.importfile=Import File
|
||||
text.editor.importfile.description=Import an external map file
|
||||
text.editor.importimage=Import Terrain Image
|
||||
text.editor.importimage.description=Import an external map image file
|
||||
text.editor.export=Export...
|
||||
text.editor.exportfile=Export File
|
||||
text.editor.exportfile.description=Export a map file
|
||||
text.editor.exportimage=Export Terrain Image
|
||||
text.editor.exportimage.description=Export a map image file
|
||||
text.editor.overwrite.confirm=[scarlet]Warning![] A map with this name already exists. Are you sure you want to overwrite it?
|
||||
text.fps=FPS: {0}
|
||||
text.tps=TPS: {0}
|
||||
text.ping=Ping: {0}ms
|
||||
text.language.restart=Please restart your game for the language settings to take effect.
|
||||
text.settings.language=Language
|
||||
text.settings.rebind=Rebind
|
||||
text.yes=Yes
|
||||
text.no=No
|
||||
text.info.title=[accent]Info
|
||||
text.blocks.targetsair=Targets Air
|
||||
text.blocks.itemspeed=Units Moved
|
||||
text.blocks.shootrange=Range
|
||||
text.blocks.poweruse=Power Use
|
||||
text.blocks.inputitemcapacity=Input Item Capacity
|
||||
text.blocks.outputitemcapacity=Input Item Capacity
|
||||
text.blocks.maxpowergeneration=Max Power Generation
|
||||
text.blocks.powertransferspeed=Power Transfer
|
||||
text.blocks.craftspeed=Production Speed
|
||||
text.blocks.inputliquidaux=Aux Liquid
|
||||
text.blocks.inputitems=Input Items
|
||||
text.blocks.outputitem=Output Item
|
||||
text.blocks.drilltier=Drillables
|
||||
text.blocks.drillspeed=Base Drill Speed
|
||||
text.blocks.liquidoutput=Liquid Output
|
||||
text.blocks.liquiduse=Liquid Use
|
||||
text.blocks.coolant=Coolant
|
||||
text.blocks.coolantuse=Coolant Use
|
||||
text.blocks.inputliquidfuel=Fuel Liquid
|
||||
text.blocks.liquidfueluse=Liquid Fuel Use
|
||||
text.blocks.reload=Reload
|
||||
text.blocks.inputfuel=Fuel
|
||||
text.blocks.fuelburntime=Fuel Burn Time
|
||||
text.blocks.inputcapacity=Input capacity
|
||||
text.blocks.outputcapacity=Output capacity
|
||||
text.unit.blocks=blocks
|
||||
text.unit.powersecond=power units/second
|
||||
text.unit.liquidsecond=liquid units/second
|
||||
text.unit.itemssecond=items/second
|
||||
text.unit.pixelssecond=pixels/second
|
||||
text.unit.liquidunits=liquid units
|
||||
text.unit.powerunits=power units
|
||||
text.unit.degrees=degrees
|
||||
text.unit.seconds=seconds
|
||||
text.unit.none=
|
||||
text.unit.items=items
|
||||
text.category.general=General
|
||||
text.category.power=Power
|
||||
text.category.liquids=Liquids
|
||||
text.category.items=Items
|
||||
text.category.crafting=Crafting
|
||||
text.category.shooting=Shooting
|
||||
setting.difficulty.insane=insane
|
||||
setting.difficulty.purge=purge
|
||||
setting.saveinterval.name=Autosave Interval
|
||||
setting.seconds={0} Seconds
|
||||
setting.fullscreen.name=Fullscreen
|
||||
setting.multithread.name=Multithreading
|
||||
setting.minimap.name=Show Minimap
|
||||
text.keybind.title=Rebind Keys
|
||||
keybind.shoot.name=shoot
|
||||
keybind.block_info.name=block_info
|
||||
keybind.chat.name=chat
|
||||
keybind.player_list.name=player_list
|
||||
keybind.console.name=console
|
||||
mode.text.help.title=Description of modes
|
||||
mode.waves.description=the normal mode. limited resources and automatic incoming waves.
|
||||
mode.sandbox.description=infinite resources and no timer for waves.
|
||||
mode.freebuild.description=limited resources and no timer for waves.
|
||||
content.item.name=Items
|
||||
content.liquid.name=Liquids
|
||||
content.unit-type.name=Units
|
||||
content.recipe.name=Blocks
|
||||
item.stone.description=A common raw material. Used for separating and refining into other materials, or melting into lava.
|
||||
item.tungsten.name=Tungsten
|
||||
item.tungsten.description=A common, but very useful structure material. Used in drills and heat-resistant blocks such as generators and smelteries.
|
||||
item.lead.name=Lead
|
||||
item.lead.description=A basic starter material. Used extensively in electronics and liquid transportation blocks.
|
||||
item.coal.description=A common and readily available fuel.
|
||||
item.carbide.name=Carbide
|
||||
item.carbide.description=A tough alloy made with tungsten and carbon. Used in advanced transportation blocks and high-tier drills.
|
||||
item.titanium.description=A rare super-light metal used extensively in liquid transportation, drills and aircraft.
|
||||
item.thorium.description=A dense, radioactive metal used as structural support and nuclear fuel.
|
||||
item.silicon.name=Silicon
|
||||
item.silcion.description=An extremely useful semiconductor, with applications in solar panels and many complex electronics.
|
||||
item.plastanium.name=Plastanium
|
||||
item.plastanium.description=A light, ductile material used in advanced aircraft and fragmentation ammunition.
|
||||
item.phase-matter.name=Phase Matter
|
||||
item.surge-alloy.name=Surge Alloy
|
||||
item.biomatter.name=Biomatter
|
||||
item.biomatter.description=A clump of organic mush; used for conversion into oil or as a basic fuel.
|
||||
item.sand.name=Sand
|
||||
item.sand.description=A common material that is used extensively in smelting, both in alloying and as a flux.
|
||||
item.blast-compound.name=Blast Compound
|
||||
item.blast-compound.description=A volatile compound used in bombs and explosives. While it can burned as fuel, this is not advised.
|
||||
item.pyratite.name=Pyratite
|
||||
item.pyratite.description=An extremely flammable substance used in incendiary weapons.
|
||||
liquid.cryofluid.name=Cryofluid
|
||||
text.item.explosiveness=[LIGHT_GRAY]Explosiveness: {0}
|
||||
text.item.flammability=[LIGHT_GRAY]Flammability: {0}
|
||||
text.item.radioactivity=[LIGHT_GRAY]Radioactivity: {0}
|
||||
text.item.fluxiness=[LIGHT_GRAY]Flux Power: {0}
|
||||
text.item.hardness=[LIGHT_GRAY]Hardness: {0}
|
||||
text.liquid.heatcapacity=[LIGHT_GRAY]Heat Capacity: {0}
|
||||
text.liquid.viscosity=[LIGHT_GRAY]Viscosity: {0}
|
||||
text.liquid.temperature=[LIGHT_GRAY]Temperature: {0}
|
||||
block.tungsten-wall.name=Tungsten Wall
|
||||
block.tungsten-wall-large.name=Large Tungsten Wall
|
||||
block.carbide-wall.name=Carbide Wall
|
||||
block.carbide-wall-large.name=Large Carbide Wall
|
||||
block.thorium-wall.name=Thorium Wall
|
||||
block.thorium-wall-large.name=Large Thorium Wall
|
||||
block.duo.name=Duo
|
||||
block.scorch.name=Scorch
|
||||
block.hail.name=Hail
|
||||
block.lancer.name=Lancer
|
||||
block.titanium-conveyor.name=Titanium Conveyor
|
||||
block.splitter.name=Splitter
|
||||
block.splitter.description=Outputs items into two opposite directions immediately after they are recieved.
|
||||
block.distributor.name=Distributor
|
||||
block.distributor.description=A splitter that can split items into 8 directions.
|
||||
block.overflow-gate.name=Overflow Gate
|
||||
block.overflow-gate.description=A combination splitter and router that only outputs to the left and right if the front path is blocked.
|
||||
block.bridgeconveyor.name=Bridge Conveyor
|
||||
block.bridgeconveyor.description=A conveyor that can go over other blocks, for up to two total blocks.
|
||||
block.arc-smelter.name=Arc Smelter
|
||||
block.silicon-smelter.name=Silicon Smelter
|
||||
block.phase-weaver.name=Phase Weaver
|
||||
block.pulverizer.name=Pulverizer
|
||||
block.cryofluidmixer.name=Cryofluid Mixer
|
||||
block.melter.name=Melter
|
||||
block.incinerator.name=Incinerator
|
||||
block.biomattercompressor.name=Biomatter Compressor
|
||||
block.separator.name=Separator
|
||||
block.centrifuge.name=Centrifuge
|
||||
block.power-node.name=Power Node
|
||||
block.power-node-large.name=Large Power Node
|
||||
block.battery.name=Battery
|
||||
block.battery-large.name=Large Battery
|
||||
block.combustion-generator.name=Combustion Generator
|
||||
block.turbine-generator.name=Turbine Generator
|
||||
block.tungsten-drill.name=Tungsten Drill
|
||||
block.carbide-drill.name=Carbide Drill
|
||||
block.laser-drill.name=Laser Drill
|
||||
block.water-extractor.name=Water Extractor
|
||||
block.cultivator.name=Cultivator
|
||||
block.dart-ship-factory.name=Dart Ship Factory
|
||||
block.delta-mech-factory.name=Delta Mech Factory
|
||||
block.dronefactory.name=Drone Factory
|
||||
block.repairpoint.name=Repair Point
|
||||
block.resupplypoint.name=Resupply Point
|
||||
block.liquidtank.name=Liquid Tank
|
||||
block.bridgeconduit.name=Bridge Conduit
|
||||
block.mechanical-pump.name=Mechanical Pump
|
||||
block.itemsource.name=Item Source
|
||||
block.itemvoid.name=Item Void
|
||||
block.liquidsource.name=Liquid Source
|
||||
block.powervoid.name=Power Void
|
||||
block.powerinfinite.name=Power Infinite
|
||||
block.unloader.name=Unloader
|
||||
block.sortedunloader.name=Sorted Unloader
|
||||
block.vault.name=Vault
|
||||
block.wave.name=Wave
|
||||
block.swarmer.name=Swarmer
|
||||
block.salvo.name=Salvo
|
||||
block.ripple.name=Ripple
|
||||
block.phase-conveyor.name=Phase Conveyor
|
||||
block.bridge-conveyor.name=Bridge Conveyor
|
||||
block.plastanium-compressor.name=Plastanium Compressor
|
||||
block.pyratite-mixer.name=Pyratite Mixer
|
||||
block.blast-mixer.name=Blast Mixer
|
||||
block.solidifer.name=Solidifer
|
||||
block.solar-panel.name=Solar Panel
|
||||
block.solar-panel-large.name=Large Solar Panel
|
||||
block.oil-extractor.name=Oil Extractor
|
||||
block.javelin-ship-factory.name=Javelin Ship factory
|
||||
block.drone-factory.name=Drone Factory
|
||||
block.fabricator-factory.name=Fabricator Factory
|
||||
block.repair-point.name=Repair Point
|
||||
block.resupply-point.name=Resupply Point
|
||||
block.pulse-conduit.name=Pulse Conduit
|
||||
block.phase-conduit.name=Phase Conduit
|
||||
block.liquid-router.name=Liquid Router
|
||||
block.liquid-tank.name=Liquid Tank
|
||||
block.liquid-junction.name=Liquid Junction
|
||||
block.bridge-conduit.name=Bridge Conduit
|
||||
block.rotary-pump.name=Rotary Pump
|
||||
block.nuclear-reactor.name=Nuclear Reactor
|
||||
text.save.old=This save is for an older version of the game, and can no longer be used.\n\n[LIGHT_GRAY]Save backwards compatibility will be implemented in the full 4.0 release.
|
||||
|
||||
@@ -1,500 +1,495 @@
|
||||
text.about = Створено [ROYAL] Anuken. []\nСпочатку запис у [orange] GDL [] MM Jam.\nТворці:\n- SFX зроблено з [YELLOW] bfxr []\n- Музика зроблена [GREEN] RoccoW [] / Знайдено на [lime] FreeMusicArchive.org [] \nОсоблива подяка:\n- [coral] MitchellFJN []: екстенсивне тестування та відгуки\n- [sky] Luxray5474 []: робота з вікі, вклади коду\n- Всі бета-тестери на itch.io та Google Play\n
|
||||
text.discord = Приєднуйтесь до нашого Discord!
|
||||
text.changes = [SCARLET] Увага! \n[] Деякі важливі механіки гри були змінені.\n- [accent] Телепорти [] тепер використовують електроенергію. \n- [accent] Домінна піч [] та [accent] Тиглі [] тепер мають ліміт. \n- [accent] Тиглі [] зараз вимагають вугілля як паливо.
|
||||
text.gameover = Ядро було зруйновано.
|
||||
text.highscore = [YELLOW] Новий рекорд!
|
||||
text.lasted = Ви тримались до хвилі
|
||||
text.level.highscore = Рекорд: [accent] {0}
|
||||
text.level.delete.title = Підтвердьте видалення
|
||||
text.level.delete = Ви впевнені, що хочете видалити карту \"[orange] {0} \"?
|
||||
text.level.select = Вибір рівня
|
||||
text.level.mode = Ігровий режим
|
||||
text.savegame = Зберегти гру
|
||||
text.loadgame = Завантажити гру
|
||||
text.joingame = Приєднатися\nдо гри
|
||||
text.about=Створено [ROYAL] Anuken. []\nСпочатку запис у [orange] GDL [] MM Jam.\nТворці:\n- SFX зроблено з [YELLOW] bfxr []\n- Музика зроблена [GREEN] RoccoW [] / Знайдено на [lime] FreeMusicArchive.org [] \nОсоблива подяка:\n- [coral] MitchellFJN []: екстенсивне тестування та відгуки\n- [sky] Luxray5474 []: робота з вікі, вклади коду\n- Всі бета-тестери на itch.io та Google Play\n
|
||||
text.discord=Приєднуйтесь до нашого Discord!
|
||||
text.gameover=Ядро було зруйновано.
|
||||
text.highscore=[YELLOW] Новий рекорд!
|
||||
text.lasted=Ви тримались до хвилі
|
||||
text.level.highscore=Рекорд: [accent] {0}
|
||||
text.level.delete.title=Підтвердьте видалення
|
||||
text.level.select=Вибір рівня
|
||||
text.level.mode=Ігровий режим
|
||||
text.savegame=Зберегти гру
|
||||
text.loadgame=Завантажити гру
|
||||
text.joingame=Приєднатися\nдо гри
|
||||
text.newgame=Нова гра
|
||||
text.quit = Вийти
|
||||
text.about.button = Про
|
||||
text.name = Назва:
|
||||
text.public = Публічний
|
||||
text.players = {0} гравців онлайн
|
||||
text.server.player.host = {0} (host)
|
||||
text.players.single = {0} гравців онлайн
|
||||
text.server.mismatch = Пакетна помилка: невідповідність версії версії клієнта / сервера. Переконайтеся, що ви та хост мають останню версію Mindustry!
|
||||
text.server.closing = [accent] Закриття сервера ...
|
||||
text.server.kicked.kick = Ви були вигнані з сервера!
|
||||
text.server.kicked.invalidPassword = Невірний пароль!
|
||||
text.server.kicked.clientOutdated = Застарілий клієнт! Оновіть свою гру!
|
||||
text.server.kicked.serverOutdated = Застарілий сервер! Попросіть хост оновити!
|
||||
text.server.connected = {0} приєднався.
|
||||
text.server.disconnected = {0} від'єднано.
|
||||
text.nohost = Неможливо розмістити сервер на власній карті!
|
||||
text.hostserver = Хост-сервер
|
||||
text.host = Хост
|
||||
text.hosting = [accent] Відкриття сервера ...
|
||||
text.hosts.refresh = Оновити
|
||||
text.hosts.discovering = Знайомство з мережевими іграми
|
||||
text.server.refreshing = Оновити сервери
|
||||
text.hosts.none = [lightgray] Ніяких ігор у мережі не знайдено!
|
||||
text.host.invalid = [scarlet] Неможливо підключитися до хосту.
|
||||
text.server.friendlyfire = Дружній вогонь
|
||||
text.server.add = Додати сервер
|
||||
text.server.delete = Ви впевнені, що хочете видалити цей сервер?
|
||||
text.server.hostname = Хост: {0}
|
||||
text.server.edit = Редагувати сервер
|
||||
text.joingame.byip = [] Приєднатися по IP ...[]
|
||||
text.joingame.title = Приєднатися до гри
|
||||
text.joingame.ip = IP
|
||||
text.disconnect = Роз'єднано
|
||||
text.connecting = [accent] Підключення ...
|
||||
text.connecting.data = [accent] Завантаження світових даних ...
|
||||
text.connectfail = [crimson] Не вдалося підключитися до сервера: [orange] {0}
|
||||
text.server.port = Порт
|
||||
text.server.addressinuse = Адреса вже використовується!
|
||||
text.server.invalidport = Недійсний номер порту.
|
||||
text.server.error = [crimson] Помилка хостингу сервера: [orange] {0}
|
||||
text.tutorial.back = < Попер.
|
||||
text.tutorial.next = Далі >
|
||||
text.save.new = Нове збереження
|
||||
text.save.overwrite = Ви впевнені, що хочете перезаписати цей слот для збереження?
|
||||
text.overwrite = Перезаписати
|
||||
text.save.none = Не знайдено жодних збережень!
|
||||
text.saveload = [accent] Збереження ...
|
||||
text.savefail = Не вдалося зберегти гру!
|
||||
text.save.delete.confirm = Ви впевнені, що хочете видалити це збереження?
|
||||
text.save.delete = Видалити
|
||||
text.save.export = Експорт збереження
|
||||
text.save.import.invalid = [orange] Це збереження недійсне!
|
||||
text.save.import.fail = [crimson] Не вдалося імпортувати збереження: [orange] {0}
|
||||
text.save.export.fail = [crimson] Не вдалося експортувати збереження: [orange] {0}
|
||||
text.save.import = Імпортувати збереження
|
||||
text.save.newslot = Назва збереження:
|
||||
text.save.rename = Переіменувати
|
||||
text.save.rename.text = Нова назва:
|
||||
text.selectslot = Виберіть збереження.
|
||||
text.slot = [accent] слот {0}
|
||||
text.save.corrupted = [orange] Збережений файл пошкоджений або він невірний!
|
||||
text.empty = <порожньо>
|
||||
text.on = Увімкнути
|
||||
text.off = Вимкнути
|
||||
text.save.autosave = Автозбереження: {0}
|
||||
text.save.map = Карта
|
||||
text.save.wave = Хвиля {0}
|
||||
text.save.difficulty = Складність
|
||||
text.save.date = Останнє збережено: {0}
|
||||
text.confirm = Підтвердити
|
||||
text.delete = Видалити
|
||||
text.ok = ОК
|
||||
text.open = Відкрити
|
||||
text.cancel = Скасувати
|
||||
text.openlink = Відкрити посилання
|
||||
text.back = Назад
|
||||
text.quit.confirm = Ти впевнений що хочеш піти?
|
||||
text.loading = [accent] Завантаження ...
|
||||
text.wave = [orange] хвиля {0}
|
||||
text.wave.waiting = Хвиля через {0}
|
||||
text.waiting = Очікування…
|
||||
text.enemies = {0} Вороги
|
||||
text.enemies.single = Противник
|
||||
text.loadimage = Завантажити зображення
|
||||
text.saveimage = Зберегти зображення
|
||||
text.oregen = Генерація руд
|
||||
text.editor.badsize = [orange] Недійсні розміри зображення! [] Дійсні розміри карти: {0}
|
||||
text.editor.errorimageload = Помилка завантаження файлу зображень: [orange] {0}
|
||||
text.editor.errorimagesave = Помилка збереження файлу зображення: [orange] {0}
|
||||
text.editor.generate = Генератор
|
||||
text.editor.resize = Змінити розмір
|
||||
text.editor.loadmap = // Завантажити карту
|
||||
text.editor.savemap = Зберегти карту
|
||||
text.editor.loadimage = Завантажити зображення
|
||||
text.editor.saveimage = Зберегти зображення
|
||||
text.editor.unsaved = [scarlet] У вас є незбережені зміни! [] Ви впевнені, що хочете вийти?
|
||||
text.editor.brushsize = Розмір пензля: {0}
|
||||
text.editor.noplayerspawn = Ця карта не має ігрового поля для гравця!
|
||||
text.editor.manyplayerspawns = Карти не можуть мати більше одного ігрового поля для гравців!
|
||||
text.editor.manyenemyspawns = Не може бути більше ніж {0} ворожих точок!
|
||||
text.editor.resizemap = Змінити розмір карти
|
||||
text.editor.resizebig = [scarlet] Попередження! [] Карти, розмір яких перевищує 256 одиниць, можуть виснути і можуть бути нестабільними.
|
||||
text.editor.mapname = Назва карти:
|
||||
text.editor.overwrite = [accent] Попередження! Це перезаписує існуючу карту.
|
||||
text.editor.failoverwrite = [crimson] Неможливо перезаписати карту за замовчуванням!
|
||||
text.editor.selectmap = Виберіть карту для завантаження:
|
||||
text.width = Ширина
|
||||
text.height = Висота
|
||||
text.randomize = Рандомізувати
|
||||
text.apply = Застосувати
|
||||
text.update = Оновити
|
||||
text.menu = Меню
|
||||
text.play = Відтворити
|
||||
text.load = Завантаження
|
||||
text.save = Зберегти
|
||||
text.language.restart = Будь ласка, перезапустіть свою гру, щоб налаштування мови набули чинності.
|
||||
text.settings.language = Мова
|
||||
text.settings = Налаштування
|
||||
text.tutorial = Навчальний\nпосібник
|
||||
text.editor = Редактор
|
||||
text.mapeditor = Редактор карт
|
||||
text.donate = Підтримати проект
|
||||
text.settings.reset = Скинути до стандартних
|
||||
text.settings.controls = Елементи управління
|
||||
text.settings.game = Гра
|
||||
text.settings.sound = Звук
|
||||
text.settings.graphics = Графіка
|
||||
text.upgrades = Оновлення
|
||||
text.purchased = [LIME] Створено!
|
||||
text.weapons = Зброя
|
||||
text.paused = Пауза
|
||||
text.respawn = Відновлення за
|
||||
text.info.title = [accent] інформація
|
||||
text.error.title = [crimson] Виникла помилка
|
||||
text.error.crashmessage = [SCARLET] Виникла несподівана помилка, що призвела до збою. [] Будь ласка, повідомте про конкретні обставини, розробнику: [ORANGE] anukendev@gmail.com []
|
||||
text.error.crashtitle = Виникла помилка
|
||||
text.mode.break = Режим зносу: {0}
|
||||
text.mode.place = Режим будівництва: {0}
|
||||
placemode.hold.name = Лінія
|
||||
placemode.areadelete.name = Площа
|
||||
placemode.touchdelete.name = Дотик
|
||||
placemode.holddelete.name = Утримування.
|
||||
placemode.none.name = (None)
|
||||
placemode.touch.name = Дотик
|
||||
placemode.cursor.name = курсор
|
||||
text.blocks.extrainfo = [accent] додатковий інформаційний блок:
|
||||
text.blocks.blockinfo = Блокування інформації
|
||||
text.blocks.powercapacity = Потужність
|
||||
text.blocks.powershot = Потужність / постріл
|
||||
text.blocks.powersecond = Потужність / секунда
|
||||
text.blocks.powerdraindamage = Потужність дренажу / пошкодження
|
||||
text.blocks.shieldradius = Радіус щита
|
||||
text.blocks.itemspeedsecond = Швидкість / секунда
|
||||
text.blocks.range = Радіус
|
||||
text.blocks.size = Розмір
|
||||
text.blocks.powerliquid = Потужність / Рідина
|
||||
text.blocks.maxliquidsecond = Макс. Рідина / секунда
|
||||
text.blocks.liquidcapacity = Ємкість рідини
|
||||
text.blocks.liquidsecond = Рідина / секунда
|
||||
text.blocks.damageshot = Пошкодження / постріл
|
||||
text.blocks.ammocapacity = Місткість боєприпасів
|
||||
text.blocks.ammo = Набої
|
||||
text.blocks.ammoitem = Боєприпаси / предмет
|
||||
text.blocks.maxitemssecond = Макс. Елементи / секунду
|
||||
text.blocks.powerrange = Радіус потужності
|
||||
text.blocks.lasertilerange = Радіус лазерних плиток
|
||||
text.blocks.capacity = Ємкість
|
||||
text.blocks.itemcapacity = Ємкість предмету
|
||||
text.blocks.maxpowergenerationsecond = Максимальна потужність / секунда
|
||||
text.blocks.powergenerationsecond = Потужність / секунда
|
||||
text.blocks.generationsecondsitem = Генерація за секунду / предмет
|
||||
text.blocks.input = Ввід
|
||||
text.blocks.inputliquid = Ввід речовини
|
||||
text.blocks.inputitem = Вхідний матеріал
|
||||
text.blocks.output = Вивід
|
||||
text.blocks.secondsitem = Секунда / предмет
|
||||
text.blocks.maxpowertransfersecond = Максимальна передача потужності / секунда
|
||||
text.blocks.explosive = Вибухонебезпечний!
|
||||
text.blocks.repairssecond = Ремонт / секунда
|
||||
text.blocks.health = Здоров'я
|
||||
text.blocks.inaccuracy = Неточність
|
||||
text.blocks.shots = Постріли
|
||||
text.blocks.shotssecond = Постріли / секунду
|
||||
text.blocks.fuel = Паливо:
|
||||
text.blocks.fuelduration = Тривалість палива
|
||||
text.blocks.maxoutputsecond = Макс. Вихід / секунду
|
||||
text.blocks.inputcapacity = Вхідна ємність
|
||||
text.blocks.outputcapacity = Випускна ємність
|
||||
text.blocks.poweritem = Потужність / виріб
|
||||
text.placemode = Місцевий режим
|
||||
text.breakmode = Перерваний режим
|
||||
text.health = Здоров'я
|
||||
setting.difficulty.easy = Легкий
|
||||
setting.difficulty.normal = Нормальний
|
||||
setting.difficulty.hard = Важкий
|
||||
setting.difficulty.insane = Божевільний
|
||||
setting.difficulty.purge = Очистити
|
||||
setting.difficulty.name = Складність
|
||||
setting.screenshake.name = Тряска екрана
|
||||
setting.smoothcam.name = Гладка камера
|
||||
setting.indicators.name = Індикатори ворога
|
||||
setting.effects.name = Ефекти відображення
|
||||
setting.sensitivity.name = Чутливість контролера
|
||||
setting.saveinterval.name = Інтервал автозбереження
|
||||
setting.seconds = {0} секунд
|
||||
setting.fullscreen.name = Повноекранний
|
||||
setting.multithread.name = Багатопотоковий [scarlet] (нестабільний!)
|
||||
setting.fps.name = Показати FPS
|
||||
setting.vsync.name = VSunc
|
||||
setting.lasers.name = Показати енергетичні лазери
|
||||
setting.healthbars.name = Показати здоров'я
|
||||
setting.pixelate.name = Пікселяція екрану
|
||||
setting.musicvol.name = Гучність музики
|
||||
setting.mutemusic.name = Вимкнути музику
|
||||
setting.sfxvol.name = Гучність ефектів
|
||||
setting.mutesound.name = Вимкнути звук
|
||||
map.maze.name = Лабіринт
|
||||
map.fortress.name = Фортеця
|
||||
map.sinkhole.name = Свердловина
|
||||
map.caves.name = Печери
|
||||
map.volcano.name = Вулкан
|
||||
map.caldera.name = Кальдера
|
||||
map.scorch.name = Мертва земля
|
||||
map.desert.name = Пустеля
|
||||
map.island.name = Острів
|
||||
map.grassland.name = Пасовища
|
||||
map.tundra.name = Тундра
|
||||
map.spiral.name = Спіраль
|
||||
map.tutorial.name = Навчання
|
||||
tutorial.intro.text = [yellow] Ласкаво просимо до підручника. [] Для початку натисніть \"далі\".
|
||||
tutorial.moveDesktop.text = Для переміщення використовуйте клавіші [orange] [[WASD] []. Утримуйте [orange] SHIFT[], для прискорення. Утримуйте [orange] CTRL [], використовуючи [orange] колесо прокручування [] для збільшення або зменшення.
|
||||
tutorial.shoot.text = Використовуйте мишу, щоб націлитись, утримуйте [orange] ліву кнопку миші [], щоб стріляти. Попрактикуйтесь на [yellow] мішені [].
|
||||
tutorial.moveAndroid.text = Щоб перетягнути панораму, перетягніть один палець по екрану. Використовуйте два пальця, щоб збільшити чи зменшити маштаб.
|
||||
tutorial.placeSelect.text = Спробуйте вибрати [yellow] конвеєр [] у меню блоку внизу справа.
|
||||
tutorial.placeConveyorDesktop.text = Використовуйте [orange] [[колесико миші] [], щоб повернути конвеєр [orange] вперед [], а потім помістіть його в [yellow] позначене місце [], використовуючи [orange] [[ліву кнопку миші] [].
|
||||
tutorial.placeConveyorAndroid.text = Використовуйте [orange] [[кнопку оберту] [], щоб обернути конвеєр [оранжевий] вперед [], перетягуйте його одним пальцем, а потім помістіть його в [yellow] позначене місце [], використовуючи [orange] [[галочка][].
|
||||
tutorial.placeConveyorAndroidInfo.text = Крім того, ви можете натиснути піктограму перехрестя внизу ліворуч, щоб переключитися на [orange] [[сенсорний режим]] [], і помістити блоки, натиснувши на екран. У сенсорному режимі блоки можна повертати зі стрілкою внизу ліворуч. Натисніть [yellow] наступний [], щоб спробувати.
|
||||
tutorial.placeDrill.text = Тепер виберіть та розмістіть [yellow] кам'яне свердло [] у зазначеному місці.
|
||||
tutorial.blockInfo.text = Якщо ви хочете дізнатись більше про блок, ви можете торкнутися [orange] знак питання [] у верхньому правому куті, щоб прочитати його опис.
|
||||
tutorial.deselectDesktop.text = Ви можете вимкнути блок, використовуючи [orange] [[клацання правою кнопкою миші] [].
|
||||
tutorial.deselectAndroid.text = Ви можете скасувати вибір блоку, натиснувши кнопку [orange] X [].
|
||||
tutorial.drillPlaced.text = Дриль тепер видобуває [yellow] камінь, [] та виведе його на конвеєр, а потім переміщає його в [yellow] ядро [].
|
||||
tutorial.drillInfo.text = Різні руди потребують різних дрилі. Камінь вимагає кам'яні свердла, залізо вимагає залізні свердла та ін
|
||||
tutorial.drillPlaced2.text = Переміщення елементів у ядро вказує їх у ваш [yellow] предметний інвентар [] у верхньому лівому куті. Розміщення блоків використовує предмети з вашого інвентарю.
|
||||
tutorial.moreDrills.text = Ви можете пов'язати багато свердлів і конвеєрів разом в одну гілку конвеєра.
|
||||
tutorial.deleteBlock.text = Ви можете видалити блоки, натиснувши правою клавішею [orange] правою кнопкою миші [] по блоці, який ви хочете видалити. Спробуйте видалити цей конвеєр.
|
||||
tutorial.deleteBlockAndroid.text = Ви можете видалити блоки за допомогою [orange], перехрестя [] в меню [mode] зламу [orange] у нижньому лівому куті та натиснувши на блок. Спробуйте видалити цей конвеєр.
|
||||
tutorial.placeTurret.text = Тепер виділіть та розмістіть [yellow] турель [] у [yellow] позначеному місці [].
|
||||
tutorial.placedTurretAmmo.text = Ця турель тепер приймає [yellow] боєприпас [] з конвеєра. Ви можете побачити, скільки боєприпасів вона має, натискаючи на неї і перевіряючи [green] зелену полоску [].
|
||||
tutorial.turretExplanation.text = Турелі будуть автоматично стріляти у найближчого ворога, якщо вони мають достатню кількість боєприпасів.
|
||||
tutorial.waves.text = Кожні [yellow] 60 [] секунд, хвиля [coral] ворогів [] буде виникати в певних місцях і намагатися знищити ядро.
|
||||
tutorial.coreDestruction.text = Ваша мета полягає в тому, щоб [yellow] захищати ядро []. Якщо ядро знищено, ви [coral] програєте[].
|
||||
tutorial.pausingDesktop.text = Якщо вам коли-небудь потрібно зробити перерву, натисніть кнопку [orange] паузи [] у верхньому лівому куті або на кнопку [orange] пропуск [], щоб призупинити гру. Ви можете вибрати і розмістити блоки під час призупинення, але не можете переміщатися чи стріляти.
|
||||
tutorial.pausingAndroid.text = Якщо вам коли-небудь потрібно зробити перерву, натисніть кнопку [orange] пауза [] у верхньому лівому куті, щоб призупинити гру. Ти можеш ще знищувати та будувати блоки під час призупинення.
|
||||
tutorial.purchaseWeapons.text = Ви можете придбати нову [yellow] зброю [] для вашого механізму, відкривши меню оновлення в лівому нижньому кутку.
|
||||
tutorial.switchWeapons.text = Перемикати зброю будь-яким натисканням його піктограми внизу ліворуч або за допомогою цифр [orange] [[1-9] [].
|
||||
tutorial.spawnWave.text = Ось хвиля зараз. Знищи їх
|
||||
tutorial.pumpDesc.text = У пізніших хвилях, можливо, доведеться використовувати [yellow] насоси [] для розподілу рідин для генераторів або екстракторів.
|
||||
tutorial.pumpPlace.text = Насоси працюють аналогічно свердлам, за винятком того, що вони виробляють рідини замість предметів. Спробуйте встановити насос на [yellow] призначене мастило [].
|
||||
tutorial.conduitUse.text = Тепер покладіть [orange] трубопровід [], віддаляючись від насоса.
|
||||
tutorial.conduitUse2.text = І ще кілька ...
|
||||
tutorial.conduitUse3.text = І ще кілька ...
|
||||
tutorial.generator.text = Тепер, помістіть блок [orange] базовий генератор енергії [] в кінці каналу.
|
||||
tutorial.generatorExplain.text = Цей генератор тепер створить [yellow] енергію [] від масла.
|
||||
tutorial.lasers.text = Потужність розподіляється за допомогою [yellow] лазерів потужності []. Поверніть і помістіть його тут.
|
||||
tutorial.laserExplain.text = Тепер генератор переведе енергію в лазерний блок. Промінь [yellow] непрозорий [] означає, що в даний час він передає потужність, а промінь [yellow] прозорий [] означає, що це не так.
|
||||
tutorial.laserMore.text = Ви можете перевірити, скільки енергії в блоку, наведіть курсор миші на нього і перевірте [yellow] жовту стрічку [] у верхній частині екрана.
|
||||
tutorial.healingTurret.text = Цей лазер може бути використаний для живлення турелі для ремонту [lime] []. Помістіть одну тут.
|
||||
tutorial.healingTurretExplain.text = Поки вона має енергію, ця турель може [lime] відремонтувати блоки. [] Під час гри постарайтеся збудувати одну таку чим швидше!
|
||||
tutorial.smeltery.text = Для багатьох блоків потрібна [orange] сталь [], для цього потрібна[orange] доминна піч [] . Місце тут.
|
||||
tutorial.smelterySetup.text = Ця піч буде тепер виробляти [orange] сталь [] із вхідного заліза, використовуючи вугілля як паливо.
|
||||
tutorial.tunnelExplain.text = Також зауважте, що елементи проходять через [yellow] тунельний блок [] і з'являються з іншого боку, проходячи через кам'яний блок. Майте на увазі, що тунелі можуть проходити лише до 2 блоків.
|
||||
tutorial.end.text = Ви завершили підручник! Удачі!
|
||||
text.keybind.title = Ключ перемотки
|
||||
keybind.move_x.name = move_x
|
||||
keybind.move_y.name = move_y
|
||||
keybind.select.name = Вибрати
|
||||
keybind.break.name = {0}break{/0}{1}; {/1}
|
||||
keybind.shoot.name = Постріл
|
||||
keybind.zoom_hold.name = zoom_hold
|
||||
keybind.zoom.name = Збільшити
|
||||
keybind.block_info.name = Інформація про блок
|
||||
keybind.menu.name = Меню
|
||||
keybind.pause.name = Пауза
|
||||
keybind.dash.name = Тире
|
||||
keybind.chat.name = Чат
|
||||
keybind.player_list.name = Список гравців
|
||||
keybind.console.name = // Консоль 1
|
||||
keybind.rotate_alt.name = rotate_alt
|
||||
keybind.rotate.name = Повернути
|
||||
keybind.weapon_1.name = Зброя!
|
||||
keybind.weapon_2.name = Зброя!
|
||||
keybind.weapon_3.name = Зброя!
|
||||
keybind.weapon_4.name = Зброя!
|
||||
keybind.weapon_5.name = Зброя!
|
||||
keybind.weapon_6.name = Зброя!
|
||||
mode.waves.name = Хвилі
|
||||
mode.sandbox.name = Пісочниця
|
||||
mode.freebuild.name = Вільний режим
|
||||
upgrade.standard.name = Стандартний
|
||||
upgrade.standard.description = Стандартний механ.
|
||||
upgrade.blaster.name = Бластер
|
||||
upgrade.blaster.description = Стріляє повільно, слабкі кулі.
|
||||
upgrade.triblaster.name = Трипластер
|
||||
upgrade.triblaster.description = Вистрілює 3 кулі в розповсюдженні.
|
||||
upgrade.clustergun.name = Касетна гармата
|
||||
upgrade.clustergun.description = Вистрілює неточними вибуховими гранатами.
|
||||
upgrade.beam.name = Пушечна гармата
|
||||
upgrade.beam.description = Вистрілює далекобійним,пробірний лазерний промінь.
|
||||
upgrade.vulcan.name = Вулкан
|
||||
upgrade.vulcan.description = Вистрілює шквал швидких куль.
|
||||
upgrade.shockgun.name = Шок-пушка
|
||||
upgrade.shockgun.description = Стріляє руйнівним вибухом заряженої шрапнелі.
|
||||
item.stone.name = Камінь
|
||||
item.iron.name = Залізо
|
||||
item.coal.name = Вугівалля
|
||||
item.steel.name = Сталь
|
||||
item.titanium.name = Титан
|
||||
item.dirium.name = Дириум
|
||||
item.thorium.name = Уран
|
||||
item.sand.name = Пісок
|
||||
liquid.water.name = Вода
|
||||
liquid.plasma.name = Плазма
|
||||
liquid.lava.name = Лава
|
||||
liquid.oil.name = Нафта
|
||||
block.weaponfactory.name = Фабрика зброї
|
||||
block.weaponfactory.fulldescription = Використовується для створення зброї для гравця mech. Натисніть, щоб використати. Автоматично приймає ресурси з основного ядра.
|
||||
block.air.name = Повітря
|
||||
block.blockpart.name = Блокчастина
|
||||
block.deepwater.name = Глибока вода
|
||||
block.water.name = Вода
|
||||
block.lava.name = Лава
|
||||
block.oil.name = Нафта
|
||||
block.stone.name = Камінь
|
||||
block.blackstone.name = Чорний камінь
|
||||
block.iron.name = Залізо
|
||||
block.coal.name = Вугілля
|
||||
block.titanium.name = Титан
|
||||
block.thorium.name = Уран
|
||||
block.dirt.name = Бруд
|
||||
block.sand.name = Пісок
|
||||
block.ice.name = Лід
|
||||
block.snow.name = Сніг
|
||||
block.grass.name = Трава
|
||||
block.sandblock.name = Блок піску
|
||||
block.snowblock.name = Блок снігу
|
||||
block.stoneblock.name = Блок камню
|
||||
block.blackstoneblock.name = Блок чорного камню
|
||||
block.grassblock.name = Блок бруду
|
||||
block.mossblock.name = Моссблок
|
||||
block.shrub.name = Чагарник
|
||||
block.rock.name = Камень
|
||||
block.icerock.name = Ледяний камень
|
||||
block.blackrock.name = Чорний камінь
|
||||
block.dirtblock.name = Блок землі
|
||||
block.stonewall.name = Кам'яна стіна
|
||||
block.stonewall.fulldescription = Недорогий захисний блок. Корисно для захисту ядра та турелі в перші кілька хвиль.
|
||||
block.ironwall.name = Залізна стіна
|
||||
block.ironwall.fulldescription = Основний захисний блок. Забезпечує захист від ворогів.
|
||||
block.steelwall.name = Сталева стіна
|
||||
block.steelwall.fulldescription = Стандартний захисний блок. адекватний захист від ворогів.
|
||||
block.titaniumwall.name = Титанова стіна
|
||||
block.titaniumwall.fulldescription = Сильний захисний блок. Забезпечує захист від ворогів.
|
||||
block.duriumwall.name = Діріумова стіна
|
||||
block.duriumwall.fulldescription = Дуже сильний захисний блок. Забезпечує захист від ворогів.
|
||||
block.compositewall.name = Композитна стіна
|
||||
block.steelwall-large.name = Велика сталева стіна
|
||||
block.steelwall-large.fulldescription = Стандартний захисний блок. Поєднує в собі кілька блоків.
|
||||
block.titaniumwall-large.name = Велика титанова стіна
|
||||
block.titaniumwall-large.fulldescription = Сильний захисний блок. Поєднує в собі кілька блоків.
|
||||
block.duriumwall-large.name = Велика дирмітова стіна
|
||||
block.duriumwall-large.fulldescription = Дуже сильний захисний блок.Поєднує в собі кілька блоків.
|
||||
block.titaniumshieldwall.name = Стіна з щитом
|
||||
block.titaniumshieldwall.fulldescription = Сильний захисний блок з додатковим вбудованим щитом. Потрібна енергія. Використовує енергію для поглинання ворожих куль. Рекомендується використовувати силові пристосування для забезпечення енергії цього блоку.
|
||||
block.repairturret.name = Ремонтна турель
|
||||
block.repairturret.fulldescription = Ремонтує недалекі пошкодженні блоки.Повільний темп. Використовує невелику кількість енергії.
|
||||
block.megarepairturret.name = Ремонтна турель II
|
||||
block.megarepairturret.fulldescription = Ремонтує недалекі пошкодженні блоки.Збільшений радіус та швидший темп ремонту . Використовує багато енергії.
|
||||
block.shieldgenerator.name = Генератор щиту
|
||||
block.shieldgenerator.fulldescription = Передовий захисний блок. Захищає всі блоки в радіусі від нападу. Не вкористовує енергію при бездіяльності, але швидко витрачає енергію на захист від куль.
|
||||
block.door.name = Двері
|
||||
block.door.fulldescription = Блок, який можна відкрити та закрити, торкнувшись його.
|
||||
block.door-large.name = Великі двері
|
||||
block.door-large.fulldescription = Блок, який можна відкрити та закрити, торкнувшись його.
|
||||
block.conduit.name = Трубопровід
|
||||
block.conduit.fulldescription = Основний транспортний блок. Працює як конвеєр, але з рідинами. Найкраще використовується з насосами або іншими трубопроводами. Може використовуватися як міст через рідини для ворогів та гравців.
|
||||
block.pulseconduit.name = Імпульсний канал
|
||||
block.pulseconduit.fulldescription = Покращенний блок перевезення рідин. Транспортує рідини швидше і зберігає більше стандартних каналів.
|
||||
block.liquidrouter.name = маршрутизатор для рідини
|
||||
block.liquidrouter.fulldescription = Працює аналогічно маршрутизатору. Приймає рідину ввід з одного боку і виводить його на інші сторони. Корисний для розщеплення рідини з одного каналу на кілька інших трубопроводів.
|
||||
block.conveyor.name = Конвеєр
|
||||
block.conveyor.fulldescription = Базовий транспортний блок. Переміщує предмети вперед і автоматично вкладає їх у турелі або ремісники. Поворотний Може використовуватися як міст через рідину для ворогів та гравців.
|
||||
block.steelconveyor.name = Сталевий конвеєр
|
||||
block.steelconveyor.fulldescription = Розширений блок транспортування предметів. Переміщення елементів швидше, ніж стандартні конвеєри.
|
||||
block.poweredconveyor.name = Імпульсний конвеєр
|
||||
block.poweredconveyor.fulldescription = Кінцевий транспортний блок. Переміщення елементів швидше, ніж сталеві конвеєри.
|
||||
block.router.name = Маршрутизатор
|
||||
block.router.fulldescription = Приймає елементи з одного напрямку і виводить їх на 3 інших напрямках. Можна також зберігати певну кількість предметів. Використовується для розщеплення матеріалів з одного свердла на декілька башточок.
|
||||
block.junction.name = Міст
|
||||
block.junction.fulldescription = Виступає як міст для двох перехресних конвеєрних стрічок. Корисне у ситуаціях з двома різними конвеєрами, що несуть різні матеріали в різних місцях.
|
||||
block.conveyortunnel.name = Конвеєрний тунель
|
||||
block.conveyortunnel.fulldescription = Транспортує предмети під блоками. Щоб використати, помістіть один тунель, що веде у блок, щоб бути підсвіченим, а один - з іншого боку. Переконайтеся, що обидва тунелі стикаються з протилежними напрямками, тобто до блоків, які вони вводять або виводять.
|
||||
block.liquidjunction.name = Міст для рідини
|
||||
block.liquidjunction.fulldescription = Діє як міст для двох перехресних трубопроводів. Корисно в ситуаціях з двома різними трубами, що несуть різні рідини в різних місцях.
|
||||
block.liquiditemjunction.name = Перехрестя рідкого пункту
|
||||
block.liquiditemjunction.fulldescription = Виступає як міст для перетину трубопроводів і конвеєрів.
|
||||
block.powerbooster.name = Підсилювач потужності
|
||||
block.powerbooster.fulldescription = Поширює енергію на всі блоки в межах його радіуса.
|
||||
block.powerlaser.name = Енергетичний лазер
|
||||
block.powerlaser.fulldescription = Створює лазер, який передає енергію блоку перед ним. Не створює жодної сили сама. Найкраще використовується з генераторами або іншими лазерами.
|
||||
block.powerlaserrouter.name = Лазерний маршрутизатор
|
||||
block.powerlaserrouter.fulldescription = Лазер, який розподіляє енергію у три напрямки одночасно. Корисно в ситуаціях, коли потрібно живити кілька блоків від одного генератора.
|
||||
block.powerlasercorner.name = Лазерний кут
|
||||
block.powerlasercorner.fulldescription = Лазер, який розподіляє енергію одночасно на два напрямки. Корисно в ситуаціях, коли потрібно живити кілька блоків від одного генератора, а маршрутизатор неточний.
|
||||
block.teleporter.name = Телепорт
|
||||
block.teleporter.fulldescription = Продвинутий блок транспортування предметів.Щоб телепортувати предмети з одного місця в інше потрібно збудувати 2 телепорти і назначити на них одинаковий колір. Використовує енергію. Натисніть, щоб змінити колір.
|
||||
block.sorter.name = Сортувальник
|
||||
block.sorter.fulldescription = Сортує предмети за типом матеріалу. Матеріал для прийняття позначається кольором у блоці. Всі елементи, що відповідають матеріалу сортування, виводяться вперед, а все інше виводить ліворуч і праворуч.
|
||||
block.core.name = Ядро
|
||||
block.pump.name = Насос
|
||||
block.pump.fulldescription = Насоси рідини з вихідного блоку - зазвичай вода, лава чи олія. Виводить рідину в сусідні трубопроводи.
|
||||
block.fluxpump.name = Флюсовий насос
|
||||
block.fluxpump.fulldescription = Розширений варіант насоса. Зберігає більше рідини та перекачує швидше.
|
||||
block.smelter.name = Плавильня
|
||||
block.smelter.fulldescription = Основний ремісничий блок. Коли вводиться 1 залізо та 1 вугілля в якості палива, виводить одну сталь. Рекомендується вводити залізо та вугілля на різних поясах, щоб запобігти засміченню.
|
||||
block.crucible.name = Тигель
|
||||
block.crucible.fulldescription = Розширений блок обробки. При введенні 1 титану, 1 сталі та 1 вугілля в якості пального, виводить один дирний. Рекомендується вводити вугілля, сталь та титан на різних поясах, щоб запобігти засміченню.
|
||||
block.coalpurifier.name = вугільний екстрактор
|
||||
block.coalpurifier.fulldescription = Основний екстрактор. Виходить вугілля при постачанні великої кількості води та каменю.
|
||||
block.titaniumpurifier.name = Титановий екстрактор
|
||||
block.titaniumpurifier.fulldescription = Стандартний блок екстрактора. Виходить титан при постачанні великої кількості води та заліза.
|
||||
block.oilrefinery.name = Нафтопереробний завод
|
||||
block.oilrefinery.fulldescription = Очищує велику кількість нафти і перетворює на вугілля. Корисний для заправки вугільних башточок, коли вугільні родовища є дефіцитними.
|
||||
block.stoneformer.name = Кам'янний екстрактор
|
||||
block.stoneformer.fulldescription = Здавлюється рідка лава в камінь. Корисно для виготовлення великої кількості каменю для очищувачів вугілля.
|
||||
block.lavasmelter.name = Лавовий завод
|
||||
block.lavasmelter.fulldescription = Використовує лаву для перетворення залізо на сталь. Альтернатива плавильні. Корисно в ситуаціях, коли вугілля є дефіцитним.
|
||||
block.stonedrill.name = Кам'янна свердловина
|
||||
block.stonedrill.fulldescription = Основна свердловина.Розміщюється на кам'яній плитці виводить камінь повільними темпами.
|
||||
block.irondrill.name = Залізна свердловина
|
||||
block.irondrill.fulldescription = Базова свердловина.Розміщюється на родовищі залізної руди, випускає залізо в повільному темпі.
|
||||
block.coaldrill.name = Вугільна свердловина
|
||||
block.coaldrill.fulldescription = Базова свердловина.Розміщюється на родовищі вугільної руди ,видобуває вугілля повільними темпами.
|
||||
block.thoriumdrill.name = Уранова свердловина
|
||||
block.thoriumdrill.fulldescription = Продвинута свердловина. Розміщюється на родовищі уранової руди.Видобуток урану відбувається повільними темпами.
|
||||
block.titaniumdrill.name = Титанова свердловина
|
||||
block.titaniumdrill.fulldescription = Продвинута свердловина.Розміщюється на родовищі титанової руди, Видобуток титану відбувається повільним темпом.
|
||||
block.omnidrill.name = Убер свердловина
|
||||
block.omnidrill.fulldescription = Кінцева свердловина.Дуже швидко видобуває будь-який вид руди.
|
||||
block.coalgenerator.name = Вугільний генератор
|
||||
block.coalgenerator.fulldescription = Основний генератор. Генерує енергію з вугілля. Виводиться потужність лазерів на 4 сторони.
|
||||
block.thermalgenerator.name = Теплогенератор
|
||||
block.thermalgenerator.fulldescription = Генерує енергію від лави. Виводиться потужність лазерів на 4 сторони.
|
||||
block.combustiongenerator.name = Генератор горіння
|
||||
block.combustiongenerator.fulldescription = Генерує енергію з нафти. Виводиться потужність лазерів на 4 сторони.
|
||||
block.rtgenerator.name = RTG генератор
|
||||
block.rtgenerator.fulldescription = Генерує невелику кількість енергії з радіоактивного розпаду урану. Виводиться потужність лазерів на 4 сторони.
|
||||
block.nuclearreactor.name = Ядерний реактор
|
||||
block.nuclearreactor.fulldescription = Розширений варіант RTG Generator і кінцевий генератор електроенергії. Генерує енергію з урану. Потребує постійного водяного охолодження.Сильно вибухне якщо не буде постачання води у великії кількості
|
||||
block.turret.name = Турель
|
||||
block.turret.fulldescription = Базова, дешева турель. Використовує камінь для боєприпасів. Має трохи більше діапазону, ніж подвійна турель.
|
||||
block.doubleturret.name = Подвійна турель
|
||||
block.doubleturret.fulldescription = Дещо потужна версія турель. Використовує камінь для боєприпасів. Значно більший урон, але менший діапазон. Вистрілює дві кулі.
|
||||
block.machineturret.name = Кулеметна турель
|
||||
block.machineturret.fulldescription = Стандартна всеосяжна турель. Використовує залізо для боєприпасів. Має швидку швидкість пострілу і гідну шкоду.
|
||||
block.shotgunturret.name = Розріджуюча турель
|
||||
block.shotgunturret.fulldescription = Стандартна турель. Використовує залізо для боєприпасів. Вистрілює 7 куль навколо себе.Наносить значних ушкоджень,звісно якщо поцілить :)
|
||||
block.flameturret.name = Вогнемет
|
||||
block.flameturret.fulldescription = Продвинута турель ближнього діапазону. Використовує вугілля для боєприпасів. Має дуже низький радіус, але дуже високий збиток. Добре для близьких дистанцій. Рекомендується використовувати за стінами.
|
||||
block.sniperturret.name = Лазерна турель.
|
||||
block.sniperturret.fulldescription = Продвинута далекобійна турель. Використовує сталь для боєприпасів. Дуже високий збиток, але низький рівень урону. Дорогі для використання, але можуть бути розташовані далеко від ліній ворога через його радіус.
|
||||
block.mortarturret.name = Флак турель
|
||||
block.mortarturret.fulldescription = Продвинута,неточна турель. Використовує вугілля для боєприпасів. Стріляє кулями, що вибухають у шрапнеллв. Корисне для великих натовпів ворогів.
|
||||
block.laserturret.name = Лазерна турель
|
||||
block.laserturret.fulldescription = Продвинута однопушечна турель. Використовує енергію. Хороша на середніх дистанціях. Ніколи не пропускає.
|
||||
block.waveturret.name = Тесла
|
||||
block.waveturret.fulldescription = Передова багатоцільова турель. Використовує енергію. Середній радіус. Ніколи не пропускає. Активно знижує, але може вражати декількох ворогів одночасно з ланцюговим освітленням.
|
||||
block.plasmaturret.name = Плазмова турель
|
||||
block.plasmaturret.fulldescription = Дуже продвинута версія Вогнеметної турелі. Використовує вугілля як боєприпаси. Дуже високий урон, від близької до середньої дистанції.
|
||||
block.chainturret.name = Уранова турель
|
||||
block.chainturret.fulldescription = Остаточна швидкістна вежа. Використовує уран як боєприпаси. Вистрілює великі кулі при високій швидкості вогню. Середній радіус. Промінь кілька плиток. Надзвичайно жорсткий.
|
||||
block.titancannon.name = Титанова гармата
|
||||
block.titancannon.fulldescription = Найбільш далекобійна турель. Використовує уран як боєприпаси. Вистрілює великі снаряди. Далекобійний. Промінь кілька плиток. Надзвичайно жорсткий.
|
||||
block.playerspawn.name = Спавн Гравця
|
||||
block.enemyspawn.name = Спавн ворогів
|
||||
text.quit=Вийти
|
||||
text.about.button=Про
|
||||
text.name=Назва:
|
||||
text.players={0} гравців онлайн
|
||||
text.players.single={0} гравців онлайн
|
||||
text.server.mismatch=Пакетна помилка: невідповідність версії версії клієнта / сервера. Переконайтеся, що ви та хост мають останню версію Mindustry!
|
||||
text.server.closing=[accent] Закриття сервера ...
|
||||
text.server.kicked.kick=Ви були вигнані з сервера!
|
||||
text.server.kicked.invalidPassword=Невірний пароль!
|
||||
text.server.kicked.clientOutdated=Застарілий клієнт! Оновіть свою гру!
|
||||
text.server.kicked.serverOutdated=Застарілий сервер! Попросіть хост оновити!
|
||||
text.server.connected={0} приєднався.
|
||||
text.server.disconnected={0} від'єднано.
|
||||
text.nohost=Неможливо розмістити сервер на власній карті!
|
||||
text.hostserver=Хост-сервер
|
||||
text.host=Хост
|
||||
text.hosting=[accent] Відкриття сервера ...
|
||||
text.hosts.refresh=Оновити
|
||||
text.hosts.discovering=Знайомство з мережевими іграми
|
||||
text.server.refreshing=Оновити сервери
|
||||
text.hosts.none=[lightgray] Ніяких ігор у мережі не знайдено!
|
||||
text.host.invalid=[scarlet] Неможливо підключитися до хосту.
|
||||
text.server.friendlyfire=Дружній вогонь
|
||||
text.server.add=Додати сервер
|
||||
text.server.delete=Ви впевнені, що хочете видалити цей сервер?
|
||||
text.server.hostname=Хост: {0}
|
||||
text.server.edit=Редагувати сервер
|
||||
text.joingame.title=Приєднатися до гри
|
||||
text.joingame.ip=IP
|
||||
text.disconnect=Роз'єднано
|
||||
text.connecting=[accent] Підключення ...
|
||||
text.connecting.data=[accent] Завантаження світових даних ...
|
||||
text.connectfail=[crimson] Не вдалося підключитися до сервера: [orange] {0}
|
||||
text.server.port=Порт
|
||||
text.server.addressinuse=Адреса вже використовується!
|
||||
text.server.invalidport=Недійсний номер порту.
|
||||
text.server.error=[crimson] Помилка хостингу сервера: [orange] {0}
|
||||
text.save.new=Нове збереження
|
||||
text.save.overwrite=Ви впевнені, що хочете перезаписати цей слот для збереження?
|
||||
text.overwrite=Перезаписати
|
||||
text.save.none=Не знайдено жодних збережень!
|
||||
text.saveload=[accent] Збереження ...
|
||||
text.savefail=Не вдалося зберегти гру!
|
||||
text.save.delete.confirm=Ви впевнені, що хочете видалити це збереження?
|
||||
text.save.delete=Видалити
|
||||
text.save.export=Експорт збереження
|
||||
text.save.import.invalid=[orange] Це збереження недійсне!
|
||||
text.save.import.fail=[crimson] Не вдалося імпортувати збереження: [orange] {0}
|
||||
text.save.export.fail=[crimson] Не вдалося експортувати збереження: [orange] {0}
|
||||
text.save.import=Імпортувати збереження
|
||||
text.save.newslot=Назва збереження:
|
||||
text.save.rename=Переіменувати
|
||||
text.save.rename.text=Нова назва:
|
||||
text.selectslot=Виберіть збереження.
|
||||
text.slot=[accent] слот {0}
|
||||
text.save.corrupted=[orange] Збережений файл пошкоджений або він невірний!
|
||||
text.empty=<порожньо>
|
||||
text.on=Увімкнути
|
||||
text.off=Вимкнути
|
||||
text.save.autosave=Автозбереження: {0}
|
||||
text.save.map=Карта
|
||||
text.save.wave=Хвиля {0}
|
||||
text.save.difficulty=Складність
|
||||
text.save.date=Останнє збережено: {0}
|
||||
text.confirm=Підтвердити
|
||||
text.delete=Видалити
|
||||
text.ok=ОК
|
||||
text.open=Відкрити
|
||||
text.cancel=Скасувати
|
||||
text.openlink=Відкрити посилання
|
||||
text.back=Назад
|
||||
text.quit.confirm=Ти впевнений що хочеш піти?
|
||||
text.loading=[accent] Завантаження ...
|
||||
text.wave=[orange] хвиля {0}
|
||||
text.wave.waiting=Хвиля через {0}
|
||||
text.waiting=Очікування…
|
||||
text.enemies={0} Вороги
|
||||
text.enemies.single=Противник
|
||||
text.loadimage=Завантажити зображення
|
||||
text.saveimage=Зберегти зображення
|
||||
text.editor.badsize=[orange] Недійсні розміри зображення! [] Дійсні розміри карти: {0}
|
||||
text.editor.errorimageload=Помилка завантаження файлу зображень: [orange] {0}
|
||||
text.editor.errorimagesave=Помилка збереження файлу зображення: [orange] {0}
|
||||
text.editor.generate=Генератор
|
||||
text.editor.resize=Змінити розмір
|
||||
text.editor.loadmap=// Завантажити карту
|
||||
text.editor.savemap=Зберегти карту
|
||||
text.editor.loadimage=Завантажити зображення
|
||||
text.editor.saveimage=Зберегти зображення
|
||||
text.editor.unsaved=[scarlet] У вас є незбережені зміни! [] Ви впевнені, що хочете вийти?
|
||||
text.editor.resizemap=Змінити розмір карти
|
||||
text.editor.mapname=Назва карти:
|
||||
text.editor.overwrite=[accent] Попередження! Це перезаписує існуючу карту.
|
||||
text.editor.selectmap=Виберіть карту для завантаження:
|
||||
text.width=Ширина
|
||||
text.height=Висота
|
||||
text.menu=Меню
|
||||
text.play=Відтворити
|
||||
text.load=Завантаження
|
||||
text.save=Зберегти
|
||||
text.language.restart=Будь ласка, перезапустіть свою гру, щоб налаштування мови набули чинності.
|
||||
text.settings.language=Мова
|
||||
text.settings=Налаштування
|
||||
text.tutorial=Навчальний\nпосібник
|
||||
text.editor=Редактор
|
||||
text.mapeditor=Редактор карт
|
||||
text.donate=Підтримати проект
|
||||
text.settings.reset=Скинути до стандартних
|
||||
text.settings.controls=Елементи управління
|
||||
text.settings.game=Гра
|
||||
text.settings.sound=Звук
|
||||
text.settings.graphics=Графіка
|
||||
text.upgrades=Оновлення
|
||||
text.purchased=[LIME] Створено!
|
||||
text.weapons=Зброя
|
||||
text.paused=Пауза
|
||||
text.info.title=[accent] інформація
|
||||
text.error.title=[crimson] Виникла помилка
|
||||
text.error.crashtitle=Виникла помилка
|
||||
text.blocks.blockinfo=Блокування інформації
|
||||
text.blocks.powercapacity=Потужність
|
||||
text.blocks.powershot=Потужність / постріл
|
||||
text.blocks.size=Розмір
|
||||
text.blocks.liquidcapacity=Ємкість рідини
|
||||
text.blocks.maxitemssecond=Макс. Елементи / секунду
|
||||
text.blocks.powerrange=Радіус потужності
|
||||
text.blocks.itemcapacity=Ємкість предмету
|
||||
text.blocks.inputliquid=Ввід речовини
|
||||
text.blocks.inputitem=Вхідний матеріал
|
||||
text.blocks.explosive=Вибухонебезпечний!
|
||||
text.blocks.health=Здоров'я
|
||||
text.blocks.inaccuracy=Неточність
|
||||
text.blocks.shots=Постріли
|
||||
text.blocks.inputcapacity=Вхідна ємність
|
||||
text.blocks.outputcapacity=Випускна ємність
|
||||
setting.difficulty.easy=Легкий
|
||||
setting.difficulty.normal=Нормальний
|
||||
setting.difficulty.hard=Важкий
|
||||
setting.difficulty.insane=Божевільний
|
||||
setting.difficulty.purge=Очистити
|
||||
setting.difficulty.name=Складність
|
||||
setting.screenshake.name=Тряска екрана
|
||||
setting.indicators.name=Індикатори ворога
|
||||
setting.effects.name=Ефекти відображення
|
||||
setting.sensitivity.name=Чутливість контролера
|
||||
setting.saveinterval.name=Інтервал автозбереження
|
||||
setting.seconds={0} секунд
|
||||
setting.fullscreen.name=Повноекранний
|
||||
setting.multithread.name=Багатопотоковий [scarlet] (нестабільний!)
|
||||
setting.fps.name=Показати FPS
|
||||
setting.vsync.name=VSunc
|
||||
setting.lasers.name=Показати енергетичні лазери
|
||||
setting.healthbars.name=Показати здоров'я
|
||||
setting.musicvol.name=Гучність музики
|
||||
setting.mutemusic.name=Вимкнути музику
|
||||
setting.sfxvol.name=Гучність ефектів
|
||||
setting.mutesound.name=Вимкнути звук
|
||||
map.maze.name=Лабіринт
|
||||
map.fortress.name=Фортеця
|
||||
map.sinkhole.name=Свердловина
|
||||
map.caves.name=Печери
|
||||
map.volcano.name=Вулкан
|
||||
map.caldera.name=Кальдера
|
||||
map.scorch.name=Мертва земля
|
||||
map.desert.name=Пустеля
|
||||
map.island.name=Острів
|
||||
map.grassland.name=Пасовища
|
||||
map.tundra.name=Тундра
|
||||
map.spiral.name=Спіраль
|
||||
map.tutorial.name=Навчання
|
||||
text.keybind.title=Ключ перемотки
|
||||
keybind.move_x.name=move_x
|
||||
keybind.move_y.name=move_y
|
||||
keybind.select.name=Вибрати
|
||||
keybind.break.name={0}break{/0}{1}; {/1}
|
||||
keybind.shoot.name=Постріл
|
||||
keybind.zoom_hold.name=zoom_hold
|
||||
keybind.zoom.name=Збільшити
|
||||
keybind.block_info.name=Інформація про блок
|
||||
keybind.menu.name=Меню
|
||||
keybind.pause.name=Пауза
|
||||
keybind.dash.name=Тире
|
||||
keybind.chat.name=Чат
|
||||
keybind.player_list.name=Список гравців
|
||||
keybind.console.name=// Консоль 1
|
||||
keybind.rotate_alt.name=rotate_alt
|
||||
keybind.rotate.name=Повернути
|
||||
mode.waves.name=Хвилі
|
||||
mode.sandbox.name=Пісочниця
|
||||
mode.freebuild.name=Вільний режим
|
||||
item.stone.name=Камінь
|
||||
item.coal.name=Вугівалля
|
||||
item.titanium.name=Титан
|
||||
item.thorium.name=Уран
|
||||
item.sand.name=Пісок
|
||||
liquid.water.name=Вода
|
||||
liquid.lava.name=Лава
|
||||
liquid.oil.name=Нафта
|
||||
block.door.name=Двері
|
||||
block.door-large.name=Великі двері
|
||||
block.conduit.name=Трубопровід
|
||||
block.pulseconduit.name=Імпульсний канал
|
||||
block.liquidrouter.name=маршрутизатор для рідини
|
||||
block.conveyor.name=Конвеєр
|
||||
block.router.name=Маршрутизатор
|
||||
block.junction.name=Міст
|
||||
block.liquidjunction.name=Міст для рідини
|
||||
block.sorter.name=Сортувальник
|
||||
block.smelter.name=Плавильня
|
||||
text.credits=Credits
|
||||
text.link.discord.description=the official Mindustry discord chatroom
|
||||
text.link.github.description=Game source code
|
||||
text.link.dev-builds.description=Unstable development builds
|
||||
text.link.trello.description=Official trello board for planned features
|
||||
text.link.itch.io.description=itch.io page with PC downloads and web version
|
||||
text.link.google-play.description=Google Play store listing
|
||||
text.link.wiki.description=official Mindustry wiki
|
||||
text.linkfail=Failed to open link!\nThe URL has been copied to your cliboard.
|
||||
text.editor.web=The web version does not support the editor!\nDownload the game to use it.
|
||||
text.web.unsupported=The web version does not support this feature! Download the game to use it.
|
||||
text.multiplayer.web=This version of the game does not support multiplayer!\nTo play multiplayer from your browser, use the "multiplayer web version" link at the itch.io page.
|
||||
text.host.web=The web version does not support hosting games! Download the game to use this feature.
|
||||
text.map.delete=Are you sure you want to delete the map "[orange]{0}[]"?
|
||||
text.construction.title=Block Construction Guide
|
||||
text.construction=You've just selected [accent]block construction mode[].\n\nTo begin placing, simply tap a valid location near your ship.\nOnce you have selected some blocks, press the checkbox to confirm, and your ship will begin constructing them.\n\n- [accent]Remove blocks[] from your selection by tapping them.\n- [accent]Shift the selection[] by holding and dragging any block in the selection.\n- [accent]Place blocks in a line[] by tapping and holding an empty spot, then dragging in a direction.\n- [accent]Cancel construction or selection[] by pressing the X at the bottom left.
|
||||
text.deconstruction.title=Block Deconstruction Guide
|
||||
text.deconstruction=You've just selected [accent]block deconstruction mode[].\n\nTo begin breaking, simply tap a block near your ship.\nOnce you have selected some blocks, press the checkbox to confirm, and your ship will begin de-constructing them.\n\n- [accent]Remove blocks[] from your selection by tapping them.\n- [accent]Remove blocks in an area[] by tapping and holding an empty spot, then dragging in a direction.\n- [accent]Cancel deconstruction or selection[] by pressing the X at the bottom left.
|
||||
text.showagain=Don't show again next session
|
||||
text.unlocks=Unlocks
|
||||
text.addplayers=Add/Remove Players
|
||||
text.maps=Maps
|
||||
text.maps.none=[LIGHT_GRAY]No maps found!
|
||||
text.unlocked=New Block Unlocked!
|
||||
text.unlocked.plural=New Blocks Unlocked!
|
||||
text.server.kicked.fastShoot=You are shooting too quickly.
|
||||
text.server.kicked.banned=You are banned on this server.
|
||||
text.server.kicked.recentKick=You have been kicked recently.\nWait before connecting again.
|
||||
text.server.kicked.nameInUse=There is someone with that name\nalready on this server.
|
||||
text.server.kicked.nameEmpty=Your name must contain at least one character or number.
|
||||
text.server.kicked.idInUse=You are already on this server! Connecting with two accounts is not permitted.
|
||||
text.server.kicked.customClient=This server does not support custom builds. Download an official version.
|
||||
text.host.info=The [accent]host[] button hosts a server on ports [scarlet]6567[] and [scarlet]6568.[]\nAnybody on the same [LIGHT_GRAY]wifi or local network[] should be able to see your server in their server list.\n\nIf you want people to be able to connect from anywhere by IP, [accent]port forwarding[] is required.\n\n[LIGHT_GRAY]Note: If someone is experiencing trouble connecting to your LAN game, make sure you have allowed Mindustry access to your local network in your firewall settings.
|
||||
text.join.info=Here, you can enter a [accent]server IP[] to connect to, or discover [accent]local network[] servers to connect to.\nBoth LAN and WAN multiplayer is supported.\n\n[LIGHT_GRAY]Note: There is no automatic global server list; if you want to connect to someone by IP, you would need to ask the host for their IP.
|
||||
text.trace=Trace Player
|
||||
text.trace.playername=Player name: [accent]{0}
|
||||
text.trace.ip=IP: [accent]{0}
|
||||
text.trace.id=Unique ID: [accent]{0}
|
||||
text.trace.android=Android Client: [accent]{0}
|
||||
text.trace.modclient=Custom Client: [accent]{0}
|
||||
text.trace.totalblocksbroken=Total blocks broken: [accent]{0}
|
||||
text.trace.structureblocksbroken=Structure blocks broken: [accent]{0}
|
||||
text.trace.lastblockbroken=Last block broken: [accent]{0}
|
||||
text.trace.totalblocksplaced=Total blocks placed: [accent]{0}
|
||||
text.trace.lastblockplaced=Last block placed: [accent]{0}
|
||||
text.invalidid=Invalid client ID! Submit a bug report.
|
||||
text.server.bans=Bans
|
||||
text.server.bans.none=No banned players found!
|
||||
text.server.admins=Admins
|
||||
text.server.admins.none=No admins found!
|
||||
text.server.outdated=[crimson]Outdated Server![]
|
||||
text.server.outdated.client=[crimson]Outdated Client![]
|
||||
text.server.version=[lightgray]Version: {0}
|
||||
text.server.custombuild=[yellow]Custom Build
|
||||
text.confirmban=Are you sure you want to ban this player?
|
||||
text.confirmunban=Are you sure you want to unban this player?
|
||||
text.confirmadmin=Are you sure you want to make this player an admin?
|
||||
text.confirmunadmin=Are you sure you want to remove admin status from this player?
|
||||
text.disconnect.data=Failed to load world data!
|
||||
text.copylink=Copy Link
|
||||
text.changelog.title=Changelog
|
||||
text.changelog.loading=Getting changelog...
|
||||
text.changelog.error.android=[orange]Note that the changelog sometimes does not work on Android 4.4 and below!\nThis is due to an internal Android bug.
|
||||
text.changelog.error.ios=[orange]The changelog is currently not supported in iOS.
|
||||
text.changelog.error=[scarlet]Error getting changelog!\nCheck your internet connection.
|
||||
text.changelog.current=[yellow][[Current version]
|
||||
text.changelog.latest=[orange][[Latest version]
|
||||
text.saving=[accent]Saving...
|
||||
text.unknown=Unknown
|
||||
text.custom=Custom
|
||||
text.builtin=Built-In
|
||||
text.map.delete.confirm=Are you sure you want to delete this map? This action cannot be undone!
|
||||
text.map.random=[accent]Random Map
|
||||
text.map.nospawn=This map does not have any cores for the player to spawn in! Add a [ROYAL]blue[] core to this map in the editor.
|
||||
text.editor.slope=\\
|
||||
text.editor.openin=Open In Editor
|
||||
text.editor.oregen=Ore Generation
|
||||
text.editor.oregen.info=Ore Generation:
|
||||
text.editor.mapinfo=Map Info
|
||||
text.editor.author=Author:
|
||||
text.editor.description=Description:
|
||||
text.editor.name=Name:
|
||||
text.editor.teams=Teams
|
||||
text.editor.elevation=Elevation
|
||||
text.editor.saved=Saved!
|
||||
text.editor.save.noname=Your map does not have a name! Set one in the 'map info' menu.
|
||||
text.editor.save.overwrite=Your map overwrites a built-in map! Pick a different name in the 'map info' menu.
|
||||
text.editor.import.exists=[scarlet]Unable to import:[] a built-in map named '{0}' already exists!
|
||||
text.editor.import=Import...
|
||||
text.editor.importmap=Import Map
|
||||
text.editor.importmap.description=Import an already existing map
|
||||
text.editor.importfile=Import File
|
||||
text.editor.importfile.description=Import an external map file
|
||||
text.editor.importimage=Import Terrain Image
|
||||
text.editor.importimage.description=Import an external map image file
|
||||
text.editor.export=Export...
|
||||
text.editor.exportfile=Export File
|
||||
text.editor.exportfile.description=Export a map file
|
||||
text.editor.exportimage=Export Terrain Image
|
||||
text.editor.exportimage.description=Export a map image file
|
||||
text.editor.overwrite.confirm=[scarlet]Warning![] A map with this name already exists. Are you sure you want to overwrite it?
|
||||
text.fps=FPS: {0}
|
||||
text.tps=TPS: {0}
|
||||
text.ping=Ping: {0}ms
|
||||
text.settings.rebind=Rebind
|
||||
text.yes=Yes
|
||||
text.no=No
|
||||
text.blocks.targetsair=Targets Air
|
||||
text.blocks.itemspeed=Units Moved
|
||||
text.blocks.shootrange=Range
|
||||
text.blocks.poweruse=Power Use
|
||||
text.blocks.inputitemcapacity=Input Item Capacity
|
||||
text.blocks.outputitemcapacity=Input Item Capacity
|
||||
text.blocks.maxpowergeneration=Max Power Generation
|
||||
text.blocks.powertransferspeed=Power Transfer
|
||||
text.blocks.craftspeed=Production Speed
|
||||
text.blocks.inputliquidaux=Aux Liquid
|
||||
text.blocks.inputitems=Input Items
|
||||
text.blocks.outputitem=Output Item
|
||||
text.blocks.drilltier=Drillables
|
||||
text.blocks.drillspeed=Base Drill Speed
|
||||
text.blocks.liquidoutput=Liquid Output
|
||||
text.blocks.liquiduse=Liquid Use
|
||||
text.blocks.coolant=Coolant
|
||||
text.blocks.coolantuse=Coolant Use
|
||||
text.blocks.inputliquidfuel=Fuel Liquid
|
||||
text.blocks.liquidfueluse=Liquid Fuel Use
|
||||
text.blocks.reload=Reload
|
||||
text.blocks.inputfuel=Fuel
|
||||
text.blocks.fuelburntime=Fuel Burn Time
|
||||
text.unit.blocks=blocks
|
||||
text.unit.powersecond=power units/second
|
||||
text.unit.liquidsecond=liquid units/second
|
||||
text.unit.itemssecond=items/second
|
||||
text.unit.pixelssecond=pixels/second
|
||||
text.unit.liquidunits=liquid units
|
||||
text.unit.powerunits=power units
|
||||
text.unit.degrees=degrees
|
||||
text.unit.seconds=seconds
|
||||
text.unit.none=
|
||||
text.unit.items=items
|
||||
text.category.general=General
|
||||
text.category.power=Power
|
||||
text.category.liquids=Liquids
|
||||
text.category.items=Items
|
||||
text.category.crafting=Crafting
|
||||
text.category.shooting=Shooting
|
||||
setting.minimap.name=Show Minimap
|
||||
mode.text.help.title=Description of modes
|
||||
mode.waves.description=the normal mode. limited resources and automatic incoming waves.
|
||||
mode.sandbox.description=infinite resources and no timer for waves.
|
||||
mode.freebuild.description=limited resources and no timer for waves.
|
||||
content.item.name=Items
|
||||
content.liquid.name=Liquids
|
||||
content.unit-type.name=Units
|
||||
content.recipe.name=Blocks
|
||||
item.stone.description=A common raw material. Used for separating and refining into other materials, or melting into lava.
|
||||
item.tungsten.name=Tungsten
|
||||
item.tungsten.description=A common, but very useful structure material. Used in drills and heat-resistant blocks such as generators and smelteries.
|
||||
item.lead.name=Lead
|
||||
item.lead.description=A basic starter material. Used extensively in electronics and liquid transportation blocks.
|
||||
item.coal.description=A common and readily available fuel.
|
||||
item.carbide.name=Carbide
|
||||
item.carbide.description=A tough alloy made with tungsten and carbon. Used in advanced transportation blocks and high-tier drills.
|
||||
item.titanium.description=A rare super-light metal used extensively in liquid transportation, drills and aircraft.
|
||||
item.thorium.description=A dense, radioactive metal used as structural support and nuclear fuel.
|
||||
item.silicon.name=Silicon
|
||||
item.silcion.description=An extremely useful semiconductor, with applications in solar panels and many complex electronics.
|
||||
item.plastanium.name=Plastanium
|
||||
item.plastanium.description=A light, ductile material used in advanced aircraft and fragmentation ammunition.
|
||||
item.phase-matter.name=Phase Matter
|
||||
item.surge-alloy.name=Surge Alloy
|
||||
item.biomatter.name=Biomatter
|
||||
item.biomatter.description=A clump of organic mush; used for conversion into oil or as a basic fuel.
|
||||
item.sand.description=A common material that is used extensively in smelting, both in alloying and as a flux.
|
||||
item.blast-compound.name=Blast Compound
|
||||
item.blast-compound.description=A volatile compound used in bombs and explosives. While it can burned as fuel, this is not advised.
|
||||
item.pyratite.name=Pyratite
|
||||
item.pyratite.description=An extremely flammable substance used in incendiary weapons.
|
||||
liquid.cryofluid.name=Cryofluid
|
||||
text.item.explosiveness=[LIGHT_GRAY]Explosiveness: {0}
|
||||
text.item.flammability=[LIGHT_GRAY]Flammability: {0}
|
||||
text.item.radioactivity=[LIGHT_GRAY]Radioactivity: {0}
|
||||
text.item.fluxiness=[LIGHT_GRAY]Flux Power: {0}
|
||||
text.item.hardness=[LIGHT_GRAY]Hardness: {0}
|
||||
text.liquid.heatcapacity=[LIGHT_GRAY]Heat Capacity: {0}
|
||||
text.liquid.viscosity=[LIGHT_GRAY]Viscosity: {0}
|
||||
text.liquid.temperature=[LIGHT_GRAY]Temperature: {0}
|
||||
block.tungsten-wall.name=Tungsten Wall
|
||||
block.tungsten-wall-large.name=Large Tungsten Wall
|
||||
block.carbide-wall.name=Carbide Wall
|
||||
block.carbide-wall-large.name=Large Carbide Wall
|
||||
block.thorium-wall.name=Thorium Wall
|
||||
block.thorium-wall-large.name=Large Thorium Wall
|
||||
block.duo.name=Duo
|
||||
block.scorch.name=Scorch
|
||||
block.hail.name=Hail
|
||||
block.lancer.name=Lancer
|
||||
block.titanium-conveyor.name=Titanium Conveyor
|
||||
block.splitter.name=Splitter
|
||||
block.splitter.description=Outputs items into two opposite directions immediately after they are recieved.
|
||||
block.router.description=Splits items into all 4 directions. Can store items as a buffer.
|
||||
block.distributor.name=Distributor
|
||||
block.distributor.description=A splitter that can split items into 8 directions.
|
||||
block.sorter.description=Sorts items. If an item matches the selection, it is allowed to pass. Otherwise, the item is outputted to the left and right.
|
||||
block.overflow-gate.name=Overflow Gate
|
||||
block.overflow-gate.description=A combination splitter and router that only outputs to the left and right if the front path is blocked.
|
||||
block.bridgeconveyor.name=Bridge Conveyor
|
||||
block.bridgeconveyor.description=A conveyor that can go over other blocks, for up to two total blocks.
|
||||
block.arc-smelter.name=Arc Smelter
|
||||
block.silicon-smelter.name=Silicon Smelter
|
||||
block.phase-weaver.name=Phase Weaver
|
||||
block.pulverizer.name=Pulverizer
|
||||
block.cryofluidmixer.name=Cryofluid Mixer
|
||||
block.melter.name=Melter
|
||||
block.incinerator.name=Incinerator
|
||||
block.biomattercompressor.name=Biomatter Compressor
|
||||
block.separator.name=Separator
|
||||
block.centrifuge.name=Centrifuge
|
||||
block.power-node.name=Power Node
|
||||
block.power-node-large.name=Large Power Node
|
||||
block.battery.name=Battery
|
||||
block.battery-large.name=Large Battery
|
||||
block.combustion-generator.name=Combustion Generator
|
||||
block.turbine-generator.name=Turbine Generator
|
||||
block.tungsten-drill.name=Tungsten Drill
|
||||
block.carbide-drill.name=Carbide Drill
|
||||
block.laser-drill.name=Laser Drill
|
||||
block.water-extractor.name=Water Extractor
|
||||
block.cultivator.name=Cultivator
|
||||
block.dart-ship-factory.name=Dart Ship Factory
|
||||
block.delta-mech-factory.name=Delta Mech Factory
|
||||
block.dronefactory.name=Drone Factory
|
||||
block.repairpoint.name=Repair Point
|
||||
block.resupplypoint.name=Resupply Point
|
||||
block.liquidtank.name=Liquid Tank
|
||||
block.bridgeconduit.name=Bridge Conduit
|
||||
block.mechanical-pump.name=Mechanical Pump
|
||||
block.itemsource.name=Item Source
|
||||
block.itemvoid.name=Item Void
|
||||
block.liquidsource.name=Liquid Source
|
||||
block.powervoid.name=Power Void
|
||||
block.powerinfinite.name=Power Infinite
|
||||
block.unloader.name=Unloader
|
||||
block.sortedunloader.name=Sorted Unloader
|
||||
block.vault.name=Vault
|
||||
block.wave.name=Wave
|
||||
block.swarmer.name=Swarmer
|
||||
block.salvo.name=Salvo
|
||||
block.ripple.name=Ripple
|
||||
block.phase-conveyor.name=Phase Conveyor
|
||||
block.bridge-conveyor.name=Bridge Conveyor
|
||||
block.plastanium-compressor.name=Plastanium Compressor
|
||||
block.pyratite-mixer.name=Pyratite Mixer
|
||||
block.blast-mixer.name=Blast Mixer
|
||||
block.solidifer.name=Solidifer
|
||||
block.solar-panel.name=Solar Panel
|
||||
block.solar-panel-large.name=Large Solar Panel
|
||||
block.oil-extractor.name=Oil Extractor
|
||||
block.javelin-ship-factory.name=Javelin Ship factory
|
||||
block.drone-factory.name=Drone Factory
|
||||
block.fabricator-factory.name=Fabricator Factory
|
||||
block.repair-point.name=Repair Point
|
||||
block.resupply-point.name=Resupply Point
|
||||
block.pulse-conduit.name=Pulse Conduit
|
||||
block.phase-conduit.name=Phase Conduit
|
||||
block.liquid-router.name=Liquid Router
|
||||
block.liquid-tank.name=Liquid Tank
|
||||
block.liquid-junction.name=Liquid Junction
|
||||
block.bridge-conduit.name=Bridge Conduit
|
||||
block.rotary-pump.name=Rotary Pump
|
||||
block.nuclear-reactor.name=Nuclear Reactor
|
||||
text.save.old=This save is for an older version of the game, and can no longer be used.\n\n[LIGHT_GRAY]Save backwards compatibility will be implemented in the full 4.0 release.
|
||||
|
||||
@@ -3,6 +3,8 @@ precision mediump float;
|
||||
precision mediump int;
|
||||
#endif
|
||||
|
||||
#define SPACE 1.0
|
||||
|
||||
uniform sampler2D u_texture;
|
||||
|
||||
uniform vec4 u_color;
|
||||
@@ -11,30 +13,15 @@ uniform vec2 u_texsize;
|
||||
varying vec4 v_color;
|
||||
varying vec2 v_texCoord;
|
||||
|
||||
bool id(vec4 v){
|
||||
return v.a > 0.1;
|
||||
}
|
||||
|
||||
void main() {
|
||||
|
||||
vec2 T = v_texCoord.xy;
|
||||
|
||||
vec2 v = vec2(1.0/u_texsize.x, 1.0/u_texsize.y);
|
||||
|
||||
bool any = false;
|
||||
vec4 c = texture2D(u_texture, v_texCoord.xy);
|
||||
|
||||
float step = 1.0;
|
||||
|
||||
vec4 c = texture2D(u_texture, T);
|
||||
|
||||
if(texture2D(u_texture, T).a < 0.1 &&
|
||||
(id(texture2D(u_texture, T + vec2(0, step) * v)) || id(texture2D(u_texture, T + vec2(0, -step) * v)) ||
|
||||
id(texture2D(u_texture, T + vec2(step, 0) * v)) || id(texture2D(u_texture, T + vec2(-step, 0) * v))))
|
||||
any = true;
|
||||
|
||||
if(any){
|
||||
gl_FragColor = u_color;
|
||||
}else{
|
||||
gl_FragColor = c * v_color;
|
||||
}
|
||||
gl_FragColor = mix(c * v_color, u_color,
|
||||
(1.0-step(0.1, texture2D(u_texture, v_texCoord.xy).a)) *
|
||||
step(0.1, texture2D(u_texture, v_texCoord.xy + vec2(0, SPACE) * v).a +
|
||||
texture2D(u_texture, v_texCoord.xy + vec2(0, -SPACE) * v).a +
|
||||
texture2D(u_texture, v_texCoord.xy + vec2(SPACE, 0) * v).a +
|
||||
texture2D(u_texture, v_texCoord.xy + vec2(-SPACE, 0) * v).a));
|
||||
}
|
||||
|
||||
|
Before Width: | Height: | Size: 131 KiB After Width: | Height: | Size: 133 KiB |
@@ -1,24 +1,22 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module>
|
||||
<source path="io/anuke/mindustry" />
|
||||
<extend-configuration-property name="gdx.reflect.include" value="io.anuke.mindustry.world.Tile" />
|
||||
<extend-configuration-property name="gdx.reflect.include" value="io.anuke.mindustry.game.Content" />
|
||||
<extend-configuration-property name="gdx.reflect.include" value="io.anuke.mindustry.io.Maps" />
|
||||
<extend-configuration-property name="gdx.reflect.include" value="io.anuke.mindustry.entities.Player" />
|
||||
<extend-configuration-property name="gdx.reflect.include" value="io.anuke.mindustry.entities.units.BaseUnit" />
|
||||
<extend-configuration-property name="gdx.reflect.include" value="io.anuke.mindustry.world.Map" />
|
||||
<extend-configuration-property name="gdx.reflect.include" value="io.anuke.mindustry.game.SpawnGroup" />
|
||||
<extend-configuration-property name="gdx.reflect.include" value="io.anuke.mindustry.core.GameState" />
|
||||
<extend-configuration-property name="gdx.reflect.include" value="io.anuke.mindustry.game.EventType" />
|
||||
<extend-configuration-property name="gdx.reflect.include" value="io.anuke.mindustry.io.SaveFileVersion" />
|
||||
<extend-configuration-property name="gdx.reflect.include" value="io.anuke.mindustry.type.Recipe" />
|
||||
<extend-configuration-property name="gdx.reflect.include" value="io.anuke.ucore.entities.impl.EffectEntity" />
|
||||
<extend-configuration-property name="gdx.reflect.include" value="io.anuke.mindustry.net.Packets" />
|
||||
<extend-configuration-property name="gdx.reflect.include" value="io.anuke.mindustry.net.Packet" />
|
||||
<extend-configuration-property name="gdx.reflect.include" value="io.anuke.mindustry.entities.effect" />
|
||||
<extend-configuration-property name="gdx.reflect.include" value="io.anuke.mindustry.entities.bullet.Bullet" />
|
||||
<extend-configuration-property name="gdx.reflect.include" value="io.anuke.mindustry.type.Recipe" />
|
||||
<extend-configuration-property name="gdx.reflect.include" value="io.anuke.mindustry.net.Streamable" />
|
||||
<extend-configuration-property name="gdx.reflect.include" value="io.anuke.mindustry.world.meta.BlockBar" />
|
||||
<extend-configuration-property name="gdx.reflect.include" value="com.badlogic.gdx.utils.Predicate" />
|
||||
<source path="io/anuke/mindustry"/>
|
||||
<extend-configuration-property name="gdx.reflect.include" value="io.anuke.mindustry.world.Tile"/>
|
||||
<extend-configuration-property name="gdx.reflect.include" value="io.anuke.mindustry.game.Content"/>
|
||||
<extend-configuration-property name="gdx.reflect.include" value="io.anuke.mindustry.io.Maps"/>
|
||||
<extend-configuration-property name="gdx.reflect.include" value="io.anuke.mindustry.world.Map"/>
|
||||
<extend-configuration-property name="gdx.reflect.include" value="io.anuke.mindustry.game.SpawnGroup"/>
|
||||
<extend-configuration-property name="gdx.reflect.include" value="io.anuke.mindustry.core.GameState"/>
|
||||
<extend-configuration-property name="gdx.reflect.include" value="io.anuke.mindustry.game.EventType"/>
|
||||
<extend-configuration-property name="gdx.reflect.include" value="io.anuke.mindustry.io.SaveFileVersion"/>
|
||||
<extend-configuration-property name="gdx.reflect.include" value="io.anuke.ucore.entities.impl.EffectEntity"/>
|
||||
<extend-configuration-property name="gdx.reflect.include" value="io.anuke.mindustry.net.Packets"/>
|
||||
<extend-configuration-property name="gdx.reflect.include" value="io.anuke.mindustry.net.Packet"/>
|
||||
<extend-configuration-property name="gdx.reflect.include" value="io.anuke.mindustry.entities.effect"/>
|
||||
<extend-configuration-property name="gdx.reflect.include" value="io.anuke.mindustry.entities.bullet.Bullet"/>
|
||||
<extend-configuration-property name="gdx.reflect.include" value="io.anuke.mindustry.game.Team"/>
|
||||
<extend-configuration-property name="gdx.reflect.include" value="io.anuke.mindustry.net.Streamable"/>
|
||||
<extend-configuration-property name="gdx.reflect.include" value="io.anuke.mindustry.world.meta.BlockBar"/>
|
||||
<extend-configuration-property name="gdx.reflect.include" value="io.anuke.mindustry.world.mapgen.WorldGenerator"/>
|
||||
<extend-configuration-property name="gdx.reflect.include" value="com.badlogic.gdx.utils.Predicate"/>
|
||||
</module>
|
||||
@@ -1,6 +1,5 @@
|
||||
package io.anuke.mindustry;
|
||||
|
||||
import com.badlogic.gdx.utils.async.AsyncExecutor;
|
||||
import io.anuke.mindustry.core.*;
|
||||
import io.anuke.mindustry.io.BundleLoader;
|
||||
import io.anuke.ucore.core.Timers;
|
||||
@@ -9,36 +8,35 @@ import io.anuke.ucore.util.Log;
|
||||
|
||||
import static io.anuke.mindustry.Vars.*;
|
||||
|
||||
public class Mindustry extends ModuleCore {
|
||||
private AsyncExecutor exec = new AsyncExecutor(1);
|
||||
public class Mindustry extends ModuleCore{
|
||||
|
||||
@Override
|
||||
public void init(){
|
||||
Timers.mark();
|
||||
@Override
|
||||
public void init(){
|
||||
Timers.mark();
|
||||
|
||||
Vars.init();
|
||||
Vars.init();
|
||||
|
||||
debug = Platform.instance.isDebug();
|
||||
debug = Platform.instance.isDebug();
|
||||
|
||||
Log.setUseColors(false);
|
||||
BundleLoader.load();
|
||||
ContentLoader.load();
|
||||
Log.setUseColors(false);
|
||||
BundleLoader.load();
|
||||
ContentLoader.load();
|
||||
|
||||
module(logic = new Logic());
|
||||
module(world = new World());
|
||||
module(control = new Control());
|
||||
module(renderer = new Renderer());
|
||||
module(ui = new UI());
|
||||
module(netServer = new NetServer());
|
||||
module(netClient = new NetClient());
|
||||
module(logic = new Logic());
|
||||
module(world = new World());
|
||||
module(control = new Control());
|
||||
module(renderer = new Renderer());
|
||||
module(ui = new UI());
|
||||
module(netServer = new NetServer());
|
||||
module(netClient = new NetClient());
|
||||
|
||||
Log.info("Time to load [total]: {0}", Timers.elapsed());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void render(){
|
||||
super.render();
|
||||
threads.handleRender();
|
||||
}
|
||||
@Override
|
||||
public void render(){
|
||||
super.render();
|
||||
threads.handleRender();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -19,8 +19,8 @@ import io.anuke.mindustry.io.Version;
|
||||
import io.anuke.mindustry.net.Net;
|
||||
import io.anuke.ucore.entities.Entities;
|
||||
import io.anuke.ucore.entities.EntityGroup;
|
||||
import io.anuke.ucore.entities.trait.DrawTrait;
|
||||
import io.anuke.ucore.entities.impl.EffectEntity;
|
||||
import io.anuke.ucore.entities.trait.DrawTrait;
|
||||
import io.anuke.ucore.scene.ui.layout.Unit;
|
||||
import io.anuke.ucore.util.OS;
|
||||
import io.anuke.ucore.util.Translator;
|
||||
@@ -28,167 +28,150 @@ import io.anuke.ucore.util.Translator;
|
||||
import java.util.Locale;
|
||||
|
||||
public class Vars{
|
||||
public static boolean testMobile;
|
||||
//shorthand for whether or not this is running on android or ios
|
||||
public static boolean mobile;
|
||||
public static boolean ios;
|
||||
public static boolean android;
|
||||
//shorthand for whether or not this is running on GWT
|
||||
public static boolean gwt;
|
||||
|
||||
//respawn time in frames
|
||||
public static final float respawnduration = 60*4;
|
||||
//time between waves in frames (on normal mode)
|
||||
public static final float wavespace = 60*60*2f;
|
||||
//waves can last no longer than 3 minutes, otherwise the next one spawns
|
||||
public static final float maxwavespace = 60*60*4f;
|
||||
|
||||
//set ridiculously high for now
|
||||
public static final float coreBuildRange = 800999f;
|
||||
//discord group URL
|
||||
public static final String discordURL = "https://discord.gg/BKADYds";
|
||||
|
||||
public static final String releasesURL = "https://api.github.com/repos/Anuken/Mindustry/releases";
|
||||
|
||||
//directory for user-created map data
|
||||
public static FileHandle customMapDirectory;
|
||||
//save file directory
|
||||
public static FileHandle saveDirectory;
|
||||
public static String mapExtension = "mmap";
|
||||
public static String saveExtension = "msav";
|
||||
//scale of the font
|
||||
public static float fontScale;
|
||||
//camera zoom displayed on startup
|
||||
public static int baseCameraScale;
|
||||
//if true, player speed will be increased, massive amounts of resources will be given on start, and other debug options will be available
|
||||
public static boolean debug = false;
|
||||
public static boolean console = false;
|
||||
//whether the player can clip through walls
|
||||
public static boolean noclip = false;
|
||||
//whether turrets have infinite ammo (only with debug)
|
||||
public static boolean infiniteAmmo = true;
|
||||
//whether to show paths of enemies
|
||||
public static boolean showPaths = false;
|
||||
//if false, player is always hidden
|
||||
public static boolean showPlayer = true;
|
||||
//whether to hide ui, only on debug
|
||||
public static boolean showUI = true;
|
||||
//whether to show block debug
|
||||
public static boolean showBlockDebug = false;
|
||||
|
||||
public static boolean showFog = true;
|
||||
|
||||
//respawn time in frames
|
||||
public static final float respawnduration = 60 * 4;
|
||||
//time between waves in frames (on normal mode)
|
||||
public static final float wavespace = 60 * 60 * 2f;
|
||||
//waves can last no longer than 3 minutes, otherwise the next one spawns
|
||||
public static final float maxwavespace = 60 * 60 * 4f;
|
||||
//set ridiculously high for now
|
||||
public static final float coreBuildRange = 800999f;
|
||||
//discord group URL
|
||||
public static final String discordURL = "https://discord.gg/BKADYds";
|
||||
public static final String releasesURL = "https://api.github.com/repos/Anuken/Mindustry/releases";
|
||||
public static final int maxTextLength = 150;
|
||||
public static final int maxNameLength = 40;
|
||||
public static final int maxCharNameLength = 20;
|
||||
public static final int saveSlots = 64;
|
||||
public static final float itemSize = 5f;
|
||||
public static final int tilesize = 8;
|
||||
public static final Locale[] locales = {new Locale("en"), new Locale("fr"), new Locale("ru"), new Locale("uk", "UA"), new Locale("pl"),
|
||||
new Locale("de"), new Locale("pt", "BR"), new Locale("ko"), new Locale("in", "ID"), new Locale("ita"), new Locale("es")};
|
||||
public static final Color[] playerColors = {
|
||||
Color.valueOf("82759a"),
|
||||
Color.valueOf("c0c1c5"),
|
||||
Color.valueOf("fff0e7"),
|
||||
Color.valueOf("7d2953"),
|
||||
Color.valueOf("ff074e"),
|
||||
Color.valueOf("ff072a"),
|
||||
Color.valueOf("ff76a6"),
|
||||
Color.valueOf("a95238"),
|
||||
Color.valueOf("ffa108"),
|
||||
Color.valueOf("feeb2c"),
|
||||
Color.valueOf("ffcaa8"),
|
||||
Color.valueOf("008551"),
|
||||
Color.valueOf("00e339"),
|
||||
Color.valueOf("423c7b"),
|
||||
Color.valueOf("4b5ef1"),
|
||||
Color.valueOf("2cabfe"),
|
||||
};
|
||||
//server port
|
||||
public static final int port = 6567;
|
||||
public static final int webPort = 6568;
|
||||
public static boolean testMobile;
|
||||
//shorthand for whether or not this is running on android or ios
|
||||
public static boolean mobile;
|
||||
public static boolean ios;
|
||||
public static boolean android;
|
||||
//shorthand for whether or not this is running on GWT
|
||||
public static boolean gwt;
|
||||
//directory for user-created map data
|
||||
public static FileHandle customMapDirectory;
|
||||
//save file directory
|
||||
public static FileHandle saveDirectory;
|
||||
public static String mapExtension = "mmap";
|
||||
public static String saveExtension = "msav";
|
||||
//scale of the font
|
||||
public static float fontScale;
|
||||
//camera zoom displayed on startup
|
||||
public static int baseCameraScale;
|
||||
//if true, player speed will be increased, massive amounts of resources will be given on start, and other debug options will be available
|
||||
public static boolean debug = false;
|
||||
public static boolean console = false;
|
||||
//whether the player can clip through walls
|
||||
public static boolean noclip = false;
|
||||
//whether turrets have infinite ammo (only with debug)
|
||||
public static boolean infiniteAmmo = true;
|
||||
//whether to show paths of enemies
|
||||
public static boolean showPaths = false;
|
||||
//if false, player is always hidden
|
||||
public static boolean showPlayer = true;
|
||||
//whether to hide ui, only on debug
|
||||
public static boolean showUI = true;
|
||||
//whether to show block debug
|
||||
public static boolean showBlockDebug = false;
|
||||
public static boolean showFog = true;
|
||||
public static boolean headless = false;
|
||||
public static float controllerMin = 0.25f;
|
||||
public static float baseControllerSpeed = 11f;
|
||||
//only if smoothCamera
|
||||
public static boolean snapCamera = true;
|
||||
public static GameState state;
|
||||
public static ThreadHandler threads;
|
||||
|
||||
public static boolean headless = false;
|
||||
public static Control control;
|
||||
public static Logic logic;
|
||||
public static Renderer renderer;
|
||||
public static UI ui;
|
||||
public static World world;
|
||||
public static NetServer netServer;
|
||||
public static NetClient netClient;
|
||||
|
||||
public static float controllerMin = 0.25f;
|
||||
public static Player[] players = {};
|
||||
|
||||
public static float baseControllerSpeed = 11f;
|
||||
public static EntityGroup<Player> playerGroup;
|
||||
public static EntityGroup<TileEntity> tileGroup;
|
||||
public static EntityGroup<Bullet> bulletGroup;
|
||||
public static EntityGroup<Shield> shieldGroup;
|
||||
public static EntityGroup<EffectEntity> effectGroup;
|
||||
public static EntityGroup<DrawTrait> groundEffectGroup;
|
||||
public static EntityGroup<ItemDrop> itemGroup;
|
||||
|
||||
public static final int saveSlots = 64;
|
||||
public static EntityGroup<Puddle> puddleGroup;
|
||||
public static EntityGroup<Fire> fireGroup;
|
||||
public static EntityGroup<BaseUnit>[] unitGroups;
|
||||
|
||||
public static final float itemSize = 5f;
|
||||
public static final Translator[] tmptr = new Translator[]{new Translator(), new Translator(), new Translator(), new Translator()};
|
||||
|
||||
//only if smoothCamera
|
||||
public static boolean snapCamera = true;
|
||||
|
||||
public static final int tilesize = 8;
|
||||
public static void init(){
|
||||
Version.init();
|
||||
|
||||
public static final Translator[] tmptr = new Translator[]{new Translator(), new Translator(), new Translator(), new Translator()};
|
||||
playerGroup = Entities.addGroup(Player.class).enableMapping();
|
||||
tileGroup = Entities.addGroup(TileEntity.class, false);
|
||||
bulletGroup = Entities.addGroup(Bullet.class).enableMapping();
|
||||
shieldGroup = Entities.addGroup(Shield.class, false);
|
||||
effectGroup = Entities.addGroup(EffectEntity.class, false);
|
||||
groundEffectGroup = Entities.addGroup(DrawTrait.class, false);
|
||||
puddleGroup = Entities.addGroup(Puddle.class, false).enableMapping();
|
||||
itemGroup = Entities.addGroup(ItemDrop.class).enableMapping();
|
||||
fireGroup = Entities.addGroup(Fire.class, false).enableMapping();
|
||||
unitGroups = new EntityGroup[Team.all.length];
|
||||
|
||||
public static final Locale[] locales = {new Locale("en"), new Locale("fr"), new Locale("ru"), new Locale("uk", "UA"), new Locale("pl"),
|
||||
new Locale("de"), new Locale("pt", "BR"), new Locale("ko"), new Locale("in", "ID"), new Locale("ita"), new Locale("es")};
|
||||
for(Team team : Team.all){
|
||||
unitGroups[team.ordinal()] = Entities.addGroup(BaseUnit.class).enableMapping();
|
||||
}
|
||||
|
||||
public static final Color[] playerColors = {
|
||||
Color.valueOf("82759a"),
|
||||
Color.valueOf("c0c1c5"),
|
||||
Color.valueOf("fff0e7"),
|
||||
Color.valueOf("7d2953"),
|
||||
Color.valueOf("ff074e"),
|
||||
Color.valueOf("ff072a"),
|
||||
Color.valueOf("ff76a6"),
|
||||
Color.valueOf("a95238"),
|
||||
Color.valueOf("ffa108"),
|
||||
Color.valueOf("feeb2c"),
|
||||
Color.valueOf("ffcaa8"),
|
||||
Color.valueOf("008551"),
|
||||
Color.valueOf("00e339"),
|
||||
Color.valueOf("423c7b"),
|
||||
Color.valueOf("4b5ef1"),
|
||||
Color.valueOf("2cabfe"),
|
||||
};
|
||||
for(EntityGroup<?> group : Entities.getAllGroups()){
|
||||
group.setRemoveListener(entity -> {
|
||||
if(entity instanceof SyncTrait && Net.client()){
|
||||
netClient.addRemovedEntity((entity).getID());
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
//server port
|
||||
public static final int port = 6567;
|
||||
public static final int webPort = 6568;
|
||||
threads = new ThreadHandler(Platform.instance.getThreadProvider());
|
||||
|
||||
public static GameState state;
|
||||
public static ThreadHandler threads;
|
||||
mobile = Gdx.app.getType() == ApplicationType.Android || Gdx.app.getType() == ApplicationType.iOS || testMobile;
|
||||
ios = Gdx.app.getType() == ApplicationType.iOS;
|
||||
android = Gdx.app.getType() == ApplicationType.Android;
|
||||
gwt = Gdx.app.getType() == ApplicationType.WebGL;
|
||||
|
||||
public static Control control;
|
||||
public static Logic logic;
|
||||
public static Renderer renderer;
|
||||
public static UI ui;
|
||||
public static World world;
|
||||
public static NetServer netServer;
|
||||
public static NetClient netClient;
|
||||
|
||||
public static Player[] players = {};
|
||||
if(!gwt){
|
||||
customMapDirectory = OS.getAppDataDirectory("Mindustry").child("maps/");
|
||||
saveDirectory = OS.getAppDataDirectory("Mindustry").child("saves/");
|
||||
}
|
||||
|
||||
public static EntityGroup<Player> playerGroup;
|
||||
public static EntityGroup<TileEntity> tileGroup;
|
||||
public static EntityGroup<Bullet> bulletGroup;
|
||||
public static EntityGroup<Shield> shieldGroup;
|
||||
public static EntityGroup<EffectEntity> effectGroup;
|
||||
public static EntityGroup<DrawTrait> groundEffectGroup;
|
||||
public static EntityGroup<ItemDrop> itemGroup;
|
||||
|
||||
public static EntityGroup<Puddle> puddleGroup;
|
||||
public static EntityGroup<Fire> fireGroup;
|
||||
public static EntityGroup<BaseUnit>[] unitGroups;
|
||||
|
||||
public static void init(){
|
||||
Version.init();
|
||||
|
||||
playerGroup = Entities.addGroup(Player.class).enableMapping();
|
||||
tileGroup = Entities.addGroup(TileEntity.class, false);
|
||||
bulletGroup = Entities.addGroup(Bullet.class).enableMapping();
|
||||
shieldGroup = Entities.addGroup(Shield.class, false);
|
||||
effectGroup = Entities.addGroup(EffectEntity.class, false);
|
||||
groundEffectGroup = Entities.addGroup(DrawTrait.class, false);
|
||||
puddleGroup = Entities.addGroup(Puddle.class, false).enableMapping();
|
||||
itemGroup = Entities.addGroup(ItemDrop.class).enableMapping();
|
||||
fireGroup = Entities.addGroup(Fire.class, false).enableMapping();
|
||||
unitGroups = new EntityGroup[Team.all.length];
|
||||
|
||||
for(Team team : Team.all){
|
||||
unitGroups[team.ordinal()] = Entities.addGroup(BaseUnit.class).enableMapping();
|
||||
}
|
||||
|
||||
for(EntityGroup<?> group : Entities.getAllGroups()){
|
||||
group.setRemoveListener(entity -> {
|
||||
if(entity instanceof SyncTrait && Net.client()){
|
||||
netClient.addRemovedEntity(((SyncTrait) entity).getID());
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
threads = new ThreadHandler(Platform.instance.getThreadProvider());
|
||||
|
||||
mobile = Gdx.app.getType() == ApplicationType.Android || Gdx.app.getType() == ApplicationType.iOS || testMobile;
|
||||
ios = Gdx.app.getType() == ApplicationType.iOS;
|
||||
android = Gdx.app.getType() == ApplicationType.Android;
|
||||
gwt = Gdx.app.getType() == ApplicationType.WebGL;
|
||||
|
||||
if(!gwt) {
|
||||
customMapDirectory = OS.getAppDataDirectory("Mindustry").child("maps/");
|
||||
saveDirectory = OS.getAppDataDirectory("Mindustry").child("saves/");
|
||||
}
|
||||
|
||||
fontScale = Math.max(Unit.dp.scl(1f)/2f, 0.5f);
|
||||
baseCameraScale = Math.round(Unit.dp.scl(4));
|
||||
}
|
||||
fontScale = Math.max(Unit.dp.scl(1f) / 2f, 0.5f);
|
||||
baseCameraScale = Math.round(Unit.dp.scl(4));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -26,32 +26,53 @@ import static io.anuke.mindustry.Vars.*;
|
||||
|
||||
//TODO consider using quadtrees for finding specific types of blocks within an area
|
||||
//TODO maybe use Arrays instead of ObjectSets?
|
||||
/**Class used for indexing special target blocks for AI.*/
|
||||
public class BlockIndexer {
|
||||
/**Size of one ore quadrant.*/
|
||||
|
||||
/**
|
||||
* Class used for indexing special target blocks for AI.
|
||||
*/
|
||||
public class BlockIndexer{
|
||||
/**
|
||||
* Size of one ore quadrant.
|
||||
*/
|
||||
private final static int oreQuadrantSize = 20;
|
||||
/**Size of one structure quadrant.*/
|
||||
/**
|
||||
* Size of one structure quadrant.
|
||||
*/
|
||||
private final static int structQuadrantSize = 12;
|
||||
|
||||
/**Set of all ores that are being scanned.*/
|
||||
/**
|
||||
* Set of all ores that are being scanned.
|
||||
*/
|
||||
private final ObjectSet<Item> scanOres = ObjectSet.with(Items.tungsten, Items.coal, Items.lead, Items.thorium, Items.titanium);
|
||||
/**Stores all ore quadtrants on the map.*/
|
||||
private ObjectMap<Item, ObjectSet<Tile>> ores;
|
||||
|
||||
private final ObjectSet<Item> itemSet = new ObjectSet<>();
|
||||
|
||||
/**Tags all quadrants.*/
|
||||
/**
|
||||
* Stores all ore quadtrants on the map.
|
||||
*/
|
||||
private ObjectMap<Item, ObjectSet<Tile>> ores;
|
||||
/**
|
||||
* Tags all quadrants.
|
||||
*/
|
||||
private Bits[] structQuadrants;
|
||||
|
||||
/**Maps teams to a map of flagged tiles by type.*/
|
||||
/**
|
||||
* Maps teams to a map of flagged tiles by type.
|
||||
*/
|
||||
private ObjectMap<BlockFlag, ObjectSet<Tile>> enemyMap = new ObjectMap<>();
|
||||
/**Maps teams to a map of flagged tiles by type.*/
|
||||
/**
|
||||
* Maps teams to a map of flagged tiles by type.
|
||||
*/
|
||||
private ObjectMap<BlockFlag, ObjectSet<Tile>> allyMap = new ObjectMap<>();
|
||||
/**Empty map for invalid teams.*/
|
||||
/**
|
||||
* Empty map for invalid teams.
|
||||
*/
|
||||
private ObjectMap<BlockFlag, ObjectSet<Tile>> emptyMap = new ObjectMap<>();
|
||||
/**Maps tile positions to their last known tile index data.*/
|
||||
/**
|
||||
* Maps tile positions to their last known tile index data.
|
||||
*/
|
||||
private IntMap<TileIndex> typeMap = new IntMap<>();
|
||||
/**Empty array used for returning.*/
|
||||
/**
|
||||
* Empty array used for returning.
|
||||
*/
|
||||
private ObjectSet<Tile> emptyArray = new ObjectSet<>();
|
||||
|
||||
public BlockIndexer(){
|
||||
@@ -74,18 +95,18 @@ public class BlockIndexer {
|
||||
|
||||
//create bitset for each team type that contains each quadrant
|
||||
structQuadrants = new Bits[Team.all.length];
|
||||
for(int i = 0; i < Team.all.length; i ++){
|
||||
structQuadrants[i] = new Bits(Mathf.ceil(world.width() / (float)structQuadrantSize) * Mathf.ceil(world.height() / (float)structQuadrantSize));
|
||||
for(int i = 0; i < Team.all.length; i++){
|
||||
structQuadrants[i] = new Bits(Mathf.ceil(world.width() / (float) structQuadrantSize) * Mathf.ceil(world.height() / (float) structQuadrantSize));
|
||||
}
|
||||
|
||||
for(int x = 0; x < world.width(); x ++){
|
||||
for (int y = 0; y < world.height(); y++) {
|
||||
for(int x = 0; x < world.width(); x++){
|
||||
for(int y = 0; y < world.height(); y++){
|
||||
process(world.tile(x, y));
|
||||
}
|
||||
}
|
||||
|
||||
for (int x = 0; x < quadWidth(); x++) {
|
||||
for (int y = 0; y < quadHeight(); y++) {
|
||||
for(int x = 0; x < quadWidth(); x++){
|
||||
for(int y = 0; y < quadHeight(); y++){
|
||||
updateQuadrant(world.tile(x * structQuadrantSize, y * structQuadrantSize));
|
||||
}
|
||||
}
|
||||
@@ -94,12 +115,16 @@ public class BlockIndexer {
|
||||
});
|
||||
}
|
||||
|
||||
/**Get all allied blocks with a flag.*/
|
||||
/**
|
||||
* Get all allied blocks with a flag.
|
||||
*/
|
||||
public ObjectSet<Tile> getAllied(Team team, BlockFlag type){
|
||||
return (state.teams.get(team).ally ? allyMap : enemyMap).get(type, emptyArray);
|
||||
}
|
||||
|
||||
/**Get all enemy blocks with a flag.*/
|
||||
/**
|
||||
* Get all enemy blocks with a flag.
|
||||
*/
|
||||
public ObjectSet<Tile> getEnemy(Team team, BlockFlag type){
|
||||
return (!state.teams.get(team).ally ? allyMap : enemyMap).get(type, emptyArray);
|
||||
}
|
||||
@@ -108,13 +133,13 @@ public class BlockIndexer {
|
||||
Entity closest = null;
|
||||
float dst = 0;
|
||||
|
||||
for(int rx = Math.max((int)((x-range)/tilesize/structQuadrantSize), 0); rx <= (int)((x+range)/tilesize/structQuadrantSize) && rx < quadWidth(); rx ++){
|
||||
for(int ry = Math.max((int)((y-range)/tilesize/structQuadrantSize), 0); ry <= (int)((y+range)/tilesize/structQuadrantSize) && ry < quadHeight(); ry ++){
|
||||
for(int rx = Math.max((int) ((x - range) / tilesize / structQuadrantSize), 0); rx <= (int) ((x + range) / tilesize / structQuadrantSize) && rx < quadWidth(); rx++){
|
||||
for(int ry = Math.max((int) ((y - range) / tilesize / structQuadrantSize), 0); ry <= (int) ((y + range) / tilesize / structQuadrantSize) && ry < quadHeight(); ry++){
|
||||
|
||||
if(!getQuad(team, rx, ry)) continue;
|
||||
|
||||
for(int tx = rx * structQuadrantSize; tx < (rx + 1) * structQuadrantSize && tx < world.width(); tx ++){
|
||||
for(int ty = ry * structQuadrantSize; ty < (ry + 1) * structQuadrantSize && ty < world.height(); ty ++ ){
|
||||
for(int tx = rx * structQuadrantSize; tx < (rx + 1) * structQuadrantSize && tx < world.width(); tx++){
|
||||
for(int ty = ry * structQuadrantSize; ty < (ry + 1) * structQuadrantSize && ty < world.height(); ty++){
|
||||
Tile other = world.tile(tx, ty);
|
||||
|
||||
if(other == null || other.entity == null || !pred.test(other)) continue;
|
||||
@@ -134,22 +159,26 @@ public class BlockIndexer {
|
||||
return (TileEntity) closest;
|
||||
}
|
||||
|
||||
/**Returns a set of tiles that have ores of the specified type nearby.
|
||||
/**
|
||||
* Returns a set of tiles that have ores of the specified type nearby.
|
||||
* While each tile in the set is not guaranteed to have an ore directly on it,
|
||||
* each tile will at least have an ore within {@link #oreQuadrantSize} / 2 blocks of it.
|
||||
* Only specific ore types are scanned. See {@link #scanOres}.*/
|
||||
* Only specific ore types are scanned. See {@link #scanOres}.
|
||||
*/
|
||||
public ObjectSet<Tile> getOrePositions(Item item){
|
||||
return ores.get(item, emptyArray);
|
||||
}
|
||||
|
||||
/**Find the closest ore block relative to a position.*/
|
||||
/**
|
||||
* Find the closest ore block relative to a position.
|
||||
*/
|
||||
public Tile findClosestOre(float xp, float yp, Item item){
|
||||
Tile tile = Geometry.findClosest(xp, yp, world.indexer().getOrePositions(item));
|
||||
Tile tile = Geometry.findClosest(xp, yp, world.indexer().getOrePositions(item));
|
||||
|
||||
if(tile == null) return null;
|
||||
|
||||
for (int x = Math.max(0, tile.x - oreQuadrantSize/2); x < tile.x + oreQuadrantSize/2 && x < world.width(); x++) {
|
||||
for (int y = Math.max(0, tile.y - oreQuadrantSize/2); y < tile.y + oreQuadrantSize/2 && y < world.height(); y++) {
|
||||
for(int x = Math.max(0, tile.x - oreQuadrantSize / 2); x < tile.x + oreQuadrantSize / 2 && x < world.width(); x++){
|
||||
for(int y = Math.max(0, tile.y - oreQuadrantSize / 2); y < tile.y + oreQuadrantSize / 2 && y < world.height(); y++){
|
||||
Tile res = world.tile(x, y);
|
||||
if(res.block() == Blocks.air && res.floor().drops != null && res.floor().drops.item == item){
|
||||
return res;
|
||||
@@ -186,12 +215,12 @@ public class BlockIndexer {
|
||||
int quadrantY = tile.y / oreQuadrantSize;
|
||||
itemSet.clear();
|
||||
|
||||
Tile rounded = world.tile(Mathf.clamp(quadrantX * oreQuadrantSize + oreQuadrantSize /2, 0, world.width() - 1),
|
||||
Mathf.clamp(quadrantY * oreQuadrantSize + oreQuadrantSize /2, 0, world.height() - 1));
|
||||
Tile rounded = world.tile(Mathf.clamp(quadrantX * oreQuadrantSize + oreQuadrantSize / 2, 0, world.width() - 1),
|
||||
Mathf.clamp(quadrantY * oreQuadrantSize + oreQuadrantSize / 2, 0, world.height() - 1));
|
||||
|
||||
//find all items that this quadrant contains
|
||||
for (int x = quadrantX * structQuadrantSize; x < world.width() && x < (quadrantX + 1) * structQuadrantSize; x++) {
|
||||
for (int y = quadrantY * structQuadrantSize; y < world.height() && y < (quadrantY + 1) * structQuadrantSize; y++) {
|
||||
for(int x = quadrantX * structQuadrantSize; x < world.width() && x < (quadrantX + 1) * structQuadrantSize; x++){
|
||||
for(int y = quadrantY * structQuadrantSize; y < world.height() && y < (quadrantY + 1) * structQuadrantSize; y++){
|
||||
Tile result = world.tile(x, y);
|
||||
if(result.block().drops == null || !scanOres.contains(result.block().drops.item)) continue;
|
||||
|
||||
@@ -200,7 +229,7 @@ public class BlockIndexer {
|
||||
}
|
||||
|
||||
//update quadrant at this position
|
||||
for (Item item : scanOres){
|
||||
for(Item item : scanOres){
|
||||
ObjectSet<Tile> set = ores.get(item);
|
||||
|
||||
//update quadrant status depending on whether the item is in it
|
||||
@@ -219,7 +248,7 @@ public class BlockIndexer {
|
||||
int index = quadrantX + quadrantY * quadWidth();
|
||||
//Log.info("Updating quadrant: {0} {1}", quadrantX, quadrantY);
|
||||
|
||||
for(TeamData data : state.teams.getTeams()) {
|
||||
for(TeamData data : state.teams.getTeams()){
|
||||
|
||||
//fast-set this quadrant to 'occupied' if the tile just placed is already of this team
|
||||
if(tile.getTeam() == data.team && tile.entity != null){
|
||||
@@ -230,8 +259,8 @@ public class BlockIndexer {
|
||||
structQuadrants[data.team.ordinal()].clear(index);
|
||||
|
||||
outer:
|
||||
for (int x = quadrantX * structQuadrantSize; x < world.width() && x < (quadrantX + 1) * structQuadrantSize; x++) {
|
||||
for (int y = quadrantY * structQuadrantSize; y < world.height() && y < (quadrantY + 1) * structQuadrantSize; y++) {
|
||||
for(int x = quadrantX * structQuadrantSize; x < world.width() && x < (quadrantX + 1) * structQuadrantSize; x++){
|
||||
for(int y = quadrantY * structQuadrantSize; y < world.height() && y < (quadrantY + 1) * structQuadrantSize; y++){
|
||||
Tile result = world.tile(x, y);
|
||||
//when a targetable block is found, mark this quadrant as occupied and stop searching
|
||||
if(result.entity != null && result.getTeam() == data.team){
|
||||
@@ -244,16 +273,16 @@ public class BlockIndexer {
|
||||
}
|
||||
|
||||
private boolean getQuad(Team team, int quadrantX, int quadrantY){
|
||||
int index = quadrantX + quadrantY * Mathf.ceil(world.width() / (float)structQuadrantSize);
|
||||
int index = quadrantX + quadrantY * Mathf.ceil(world.width() / (float) structQuadrantSize);
|
||||
return structQuadrants[team.ordinal()].get(index);
|
||||
}
|
||||
|
||||
private int quadWidth(){
|
||||
return Mathf.ceil(world.width() / (float)structQuadrantSize);
|
||||
return Mathf.ceil(world.width() / (float) structQuadrantSize);
|
||||
}
|
||||
|
||||
private int quadHeight(){
|
||||
return Mathf.ceil(world.height() / (float)structQuadrantSize);
|
||||
return Mathf.ceil(world.height() / (float) structQuadrantSize);
|
||||
}
|
||||
|
||||
private ObjectMap<BlockFlag, ObjectSet<Tile>> getMap(Team team){
|
||||
@@ -269,10 +298,10 @@ public class BlockIndexer {
|
||||
ores.put(item, new ObjectSet<>());
|
||||
}
|
||||
|
||||
for(int x = 0; x < world.width(); x ++){
|
||||
for (int y = 0; y < world.height(); y++) {
|
||||
int qx = (x/ oreQuadrantSize);
|
||||
int qy = (y/ oreQuadrantSize);
|
||||
for(int x = 0; x < world.width(); x++){
|
||||
for(int y = 0; y < world.height(); y++){
|
||||
int qx = (x / oreQuadrantSize);
|
||||
int qy = (y / oreQuadrantSize);
|
||||
|
||||
Tile tile = world.tile(x, y);
|
||||
|
||||
@@ -280,8 +309,8 @@ public class BlockIndexer {
|
||||
if(tile.floor().drops != null && scanOres.contains(tile.floor().drops.item) && tile.block() == Blocks.air){
|
||||
ores.get(tile.floor().drops.item).add(world.tile(
|
||||
//make sure to clamp quadrant middle position, since it might go off bounds
|
||||
Mathf.clamp(qx * oreQuadrantSize + oreQuadrantSize /2, 0, world.width() - 1),
|
||||
Mathf.clamp(qy * oreQuadrantSize + oreQuadrantSize /2, 0, world.height() - 1)));
|
||||
Mathf.clamp(qx * oreQuadrantSize + oreQuadrantSize / 2, 0, world.width() - 1),
|
||||
Mathf.clamp(qy * oreQuadrantSize + oreQuadrantSize / 2, 0, world.height() - 1)));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -291,7 +320,7 @@ public class BlockIndexer {
|
||||
public final EnumSet<BlockFlag> flags;
|
||||
public final Team team;
|
||||
|
||||
public TileIndex(EnumSet<BlockFlag> flags, Team team) {
|
||||
public TileIndex(EnumSet<BlockFlag> flags, Team team){
|
||||
this.flags = flags;
|
||||
this.team = team;
|
||||
}
|
||||
|
||||
@@ -20,7 +20,7 @@ import io.anuke.ucore.util.Log;
|
||||
import static io.anuke.mindustry.Vars.state;
|
||||
import static io.anuke.mindustry.Vars.world;
|
||||
|
||||
public class Pathfinder {
|
||||
public class Pathfinder{
|
||||
private long maxUpdate = TimeUtils.millisToNanos(4);
|
||||
private PathData[] paths;
|
||||
private IntArray blocked = new IntArray();
|
||||
@@ -56,7 +56,7 @@ public class Pathfinder {
|
||||
|
||||
Tile target = null;
|
||||
float tl = 0f;
|
||||
for(GridPoint2 point : Geometry.d8) {
|
||||
for(GridPoint2 point : Geometry.d8){
|
||||
int dx = tile.x + point.x, dy = tile.y + point.y;
|
||||
|
||||
Tile other = world.tile(dx, dy);
|
||||
@@ -89,16 +89,16 @@ public class Pathfinder {
|
||||
}
|
||||
|
||||
private void update(Tile tile, Team team){
|
||||
if(paths[team.ordinal()] != null) {
|
||||
if(paths[team.ordinal()] != null){
|
||||
PathData path = paths[team.ordinal()];
|
||||
|
||||
if(!passable(tile, team)){
|
||||
path.weights[tile.x][tile.y] = Float.MAX_VALUE;
|
||||
}
|
||||
|
||||
path.search ++;
|
||||
path.search++;
|
||||
|
||||
if(path.lastSearchTime + 1000/60*3 > TimeUtils.millis()){
|
||||
if(path.lastSearchTime + 1000 / 60 * 3 > TimeUtils.millis()){
|
||||
path.frontier.clear();
|
||||
}
|
||||
|
||||
@@ -115,17 +115,17 @@ public class Pathfinder {
|
||||
|
||||
private void createFor(Team team){
|
||||
PathData path = new PathData();
|
||||
path.search ++;
|
||||
path.search++;
|
||||
path.frontier.ensureCapacity((world.width() + world.height()) * 3);
|
||||
|
||||
paths[team.ordinal()] = path;
|
||||
|
||||
for (int x = 0; x < world.width(); x++) {
|
||||
for (int y = 0; y < world.height(); y++) {
|
||||
for(int x = 0; x < world.width(); x++){
|
||||
for(int y = 0; y < world.height(); y++){
|
||||
Tile tile = world.tile(x, y);
|
||||
|
||||
if (tile.block().flags != null && state.teams.areEnemies(tile.getTeam(), team)
|
||||
&& tile.block().flags.contains(BlockFlag.target)) {
|
||||
if(tile.block().flags != null && state.teams.areEnemies(tile.getTeam(), team)
|
||||
&& tile.block().flags.contains(BlockFlag.target)){
|
||||
path.frontier.addFirst(tile);
|
||||
path.weights[x][y] = 0;
|
||||
path.searches[x][y] = path.search;
|
||||
@@ -143,20 +143,20 @@ public class Pathfinder {
|
||||
|
||||
long start = TimeUtils.nanoTime();
|
||||
|
||||
while (path.frontier.size > 0 && (nsToRun < 0 || TimeUtils.timeSinceNanos(start) <= nsToRun)) {
|
||||
while(path.frontier.size > 0 && (nsToRun < 0 || TimeUtils.timeSinceNanos(start) <= nsToRun)){
|
||||
Tile tile = path.frontier.removeLast();
|
||||
float cost = path.weights[tile.x][tile.y];
|
||||
|
||||
if (cost < Float.MAX_VALUE) {
|
||||
for (GridPoint2 point : Geometry.d4) {
|
||||
if(cost < Float.MAX_VALUE){
|
||||
for(GridPoint2 point : Geometry.d4){
|
||||
|
||||
int dx = tile.x + point.x, dy = tile.y + point.y;
|
||||
Tile other = world.tile(dx, dy);
|
||||
|
||||
if (other != null && (path.weights[dx][dy] > cost + 1 || path.searches[dx][dy] < path.search)
|
||||
if(other != null && (path.weights[dx][dy] > cost + 1 || path.searches[dx][dy] < path.search)
|
||||
&& passable(other, team)){
|
||||
path.frontier.addFirst(world.tile(dx, dy));
|
||||
path.weights[dx][dy] = cost + other.cost/2f;
|
||||
path.weights[dx][dy] = cost + other.cost / 2f;
|
||||
path.searches[dx][dy] = path.search;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,7 +18,7 @@ import java.io.IOException;
|
||||
|
||||
import static io.anuke.mindustry.Vars.*;
|
||||
|
||||
public class WaveSpawner {
|
||||
public class WaveSpawner{
|
||||
private static final int quadsize = 4;
|
||||
|
||||
private Bits quadrants;
|
||||
@@ -34,28 +34,28 @@ public class WaveSpawner {
|
||||
|
||||
public void write(DataOutput output) throws IOException{
|
||||
output.writeShort(flySpawns.size);
|
||||
for (FlyerSpawn spawn : flySpawns){
|
||||
for(FlyerSpawn spawn : flySpawns){
|
||||
output.writeFloat(spawn.angle);
|
||||
}
|
||||
|
||||
output.writeShort(groundSpawns.size);
|
||||
for (GroundSpawn spawn : groundSpawns){
|
||||
output.writeShort((short)spawn.x);
|
||||
output.writeShort((short)spawn.y);
|
||||
for(GroundSpawn spawn : groundSpawns){
|
||||
output.writeShort((short) spawn.x);
|
||||
output.writeShort((short) spawn.y);
|
||||
}
|
||||
}
|
||||
|
||||
public void read(DataInput input) throws IOException{
|
||||
short flya = input.readShort();
|
||||
|
||||
for (int i = 0; i < flya; i++) {
|
||||
|
||||
for(int i = 0; i < flya; i++){
|
||||
FlyerSpawn spawn = new FlyerSpawn();
|
||||
spawn.angle = input.readFloat();
|
||||
flySpawns.add(spawn);
|
||||
}
|
||||
|
||||
|
||||
short grounda = input.readShort();
|
||||
for (int i = 0; i < grounda; i++) {
|
||||
for(int i = 0; i < grounda; i++){
|
||||
GroundSpawn spawn = new GroundSpawn();
|
||||
spawn.x = input.readShort();
|
||||
spawn.y = input.readShort();
|
||||
@@ -80,13 +80,13 @@ public class WaveSpawner {
|
||||
int addGround = groundGroups - groundSpawns.size, addFly = flyGroups - flySpawns.size;
|
||||
|
||||
//add extra groups if the total exceeds it
|
||||
for (int i = 0; i < addGround; i++) {
|
||||
for(int i = 0; i < addGround; i++){
|
||||
GroundSpawn spawn = new GroundSpawn();
|
||||
findLocation(spawn);
|
||||
groundSpawns.add(spawn);
|
||||
}
|
||||
|
||||
for (int i = 0; i < addFly; i++) {
|
||||
for(int i = 0; i < addFly; i++){
|
||||
FlyerSpawn spawn = new FlyerSpawn();
|
||||
findLocation(spawn);
|
||||
flySpawns.add(spawn);
|
||||
@@ -99,7 +99,7 @@ public class WaveSpawner {
|
||||
int groups = group.getGroupsSpawned(state.wave);
|
||||
int spawned = group.getUnitsSpawned(state.wave);
|
||||
|
||||
for (int i = 0; i < groups; i++) {
|
||||
for(int i = 0; i < groups; i++){
|
||||
Squad squad = new Squad();
|
||||
float spawnX, spawnY;
|
||||
float spread;
|
||||
@@ -109,11 +109,11 @@ public class WaveSpawner {
|
||||
//TODO verify flyer spawn
|
||||
|
||||
float margin = 40f; //how far away from the edge flying units spawn
|
||||
spawnX = world.width() *tilesize/2f + Mathf.sqrwavex(spawn.angle) * (world.width()/2f*tilesize + margin);
|
||||
spawnY = world.height() * tilesize/2f + Mathf.sqrwavey(spawn.angle) * (world.height()/2f*tilesize + margin);
|
||||
spawnX = world.width() * tilesize / 2f + Mathf.sqrwavex(spawn.angle) * (world.width() / 2f * tilesize + margin);
|
||||
spawnY = world.height() * tilesize / 2f + Mathf.sqrwavey(spawn.angle) * (world.height() / 2f * tilesize + margin);
|
||||
spread = margin / 1.5f;
|
||||
|
||||
flyCount ++;
|
||||
flyCount++;
|
||||
}else{
|
||||
GroundSpawn spawn = groundSpawns.get(groundCount);
|
||||
checkQuadrant(spawn.x, spawn.y);
|
||||
@@ -121,14 +121,14 @@ public class WaveSpawner {
|
||||
findLocation(spawn);
|
||||
}
|
||||
|
||||
spawnX = spawn.x * quadsize * tilesize + quadsize * tilesize/2f;
|
||||
spawnY = spawn.y * quadsize * tilesize + quadsize * tilesize/2f;
|
||||
spread = quadsize*tilesize/3f;
|
||||
spawnX = spawn.x * quadsize * tilesize + quadsize * tilesize / 2f;
|
||||
spawnY = spawn.y * quadsize * tilesize + quadsize * tilesize / 2f;
|
||||
spread = quadsize * tilesize / 3f;
|
||||
|
||||
groundCount ++;
|
||||
groundCount++;
|
||||
}
|
||||
|
||||
for (int j = 0; j < spawned; j++) {
|
||||
for(int j = 0; j < spawned; j++){
|
||||
BaseUnit unit = group.createUnit(Team.red);
|
||||
unit.setWave();
|
||||
unit.setSquad(squad);
|
||||
@@ -140,19 +140,19 @@ public class WaveSpawner {
|
||||
}
|
||||
|
||||
public void checkAllQuadrants(){
|
||||
for(int x = 0; x < quadWidth(); x ++){
|
||||
for(int y = 0; y < quadHeight(); y ++){
|
||||
for(int x = 0; x < quadWidth(); x++){
|
||||
for(int y = 0; y < quadHeight(); y++){
|
||||
checkQuadrant(x, y);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private void checkQuadrant(int quadx, int quady){
|
||||
setQuad(quadx, quady, true);
|
||||
|
||||
outer:
|
||||
for (int x = quadx * quadsize; x < world.width() && x < (quadx + 1)*quadsize; x++) {
|
||||
for (int y = quady * quadsize; y < world.height() && y < (quady + 1)*quadsize; y++) {
|
||||
for(int x = quadx * quadsize; x < world.width() && x < (quadx + 1) * quadsize; x++){
|
||||
for(int y = quady * quadsize; y < world.height() && y < (quady + 1) * quadsize; y++){
|
||||
Tile tile = world.tile(x, y);
|
||||
|
||||
if(tile == null || tile.solid() || world.pathfinder().getValueforTeam(Team.red, x, y) == Float.MAX_VALUE){
|
||||
@@ -190,7 +190,7 @@ public class WaveSpawner {
|
||||
spawn.x = -1;
|
||||
spawn.y = -1;
|
||||
|
||||
int shellWidth = quadWidth()*2 + quadHeight() * 2 * 6;
|
||||
int shellWidth = quadWidth() * 2 + quadHeight() * 2 * 6;
|
||||
shellWidth = Math.min(quadWidth() * quadHeight() / 4, shellWidth);
|
||||
|
||||
Mathf.traverseSpiral(quadWidth(), quadHeight(), Mathf.random(shellWidth), (x, y) -> {
|
||||
@@ -210,11 +210,11 @@ public class WaveSpawner {
|
||||
}
|
||||
|
||||
private int quadWidth(){
|
||||
return Mathf.ceil(world.width() / (float)quadsize);
|
||||
return Mathf.ceil(world.width() / (float) quadsize);
|
||||
}
|
||||
|
||||
private int quadHeight(){
|
||||
return Mathf.ceil(world.height() / (float)quadsize);
|
||||
return Mathf.ceil(world.height() / (float) quadsize);
|
||||
}
|
||||
|
||||
private class FlyerSpawn{
|
||||
|
||||
@@ -9,7 +9,7 @@ import io.anuke.mindustry.game.Content;
|
||||
import io.anuke.mindustry.type.AmmoType;
|
||||
import io.anuke.mindustry.type.ContentList;
|
||||
|
||||
public class AmmoTypes implements ContentList {
|
||||
public class AmmoTypes implements ContentList{
|
||||
public static AmmoType bulletTungsten, bulletLead, bulletCarbide, bulletThorium, bulletSilicon, bulletPyratite,
|
||||
shotgunTungsten, bombExplosive, bombIncendiary, bombOil, shellCarbide, flamerThermite, weaponMissile,
|
||||
flakLead, flakExplosive, flakPlastic, flakSurge, missileExplosive, missileIncindiary, missileSurge,
|
||||
@@ -17,41 +17,41 @@ public class AmmoTypes implements ContentList {
|
||||
basicFlame, lancerLaser, lightning, spectreLaser, meltdownLaser, fuseShotgun, oil, water, lava, cryofluid;
|
||||
|
||||
@Override
|
||||
public void load() {
|
||||
public void load(){
|
||||
|
||||
//weapon specific
|
||||
|
||||
shotgunTungsten = new AmmoType(Items.tungsten, WeaponBullets.tungstenShotgun, 2) {{
|
||||
shotgunTungsten = new AmmoType(Items.tungsten, WeaponBullets.tungstenShotgun, 2){{
|
||||
shootEffect = ShootFx.shootBig;
|
||||
smokeEffect = ShootFx.shootBigSmoke;
|
||||
recoil = 1f;
|
||||
}};
|
||||
|
||||
shellCarbide = new AmmoType(Items.carbide, WeaponBullets.shellCarbide, 2) {{
|
||||
shellCarbide = new AmmoType(Items.carbide, WeaponBullets.shellCarbide, 2){{
|
||||
shootEffect = ShootFx.shootBig;
|
||||
smokeEffect = ShootFx.shootBigSmoke;
|
||||
}};
|
||||
|
||||
bombExplosive = new AmmoType(Items.blastCompound, WeaponBullets.bombExplosive, 3) {{
|
||||
bombExplosive = new AmmoType(Items.blastCompound, WeaponBullets.bombExplosive, 3){{
|
||||
shootEffect = Fx.none;
|
||||
smokeEffect = Fx.none;
|
||||
}};
|
||||
|
||||
bombIncendiary = new AmmoType(Items.pyratite, WeaponBullets.bombIncendiary, 3) {{
|
||||
bombIncendiary = new AmmoType(Items.pyratite, WeaponBullets.bombIncendiary, 3){{
|
||||
shootEffect = Fx.none;
|
||||
smokeEffect = Fx.none;
|
||||
}};
|
||||
|
||||
bombOil = new AmmoType(Items.coal, WeaponBullets.bombOil, 3) {{
|
||||
bombOil = new AmmoType(Items.coal, WeaponBullets.bombOil, 3){{
|
||||
shootEffect = Fx.none;
|
||||
smokeEffect = Fx.none;
|
||||
}};
|
||||
|
||||
flamerThermite = new AmmoType(Items.pyratite, TurretBullets.basicFlame, 3) {{
|
||||
flamerThermite = new AmmoType(Items.pyratite, TurretBullets.basicFlame, 3){{
|
||||
shootEffect = ShootFx.shootSmallFlame;
|
||||
}};
|
||||
|
||||
weaponMissile = new AmmoType(Items.carbide, MissileBullets.javelin, 2) {{
|
||||
weaponMissile = new AmmoType(Items.carbide, MissileBullets.javelin, 2){{
|
||||
shootEffect = BulletFx.hitBulletSmall;
|
||||
smokeEffect = Fx.none;
|
||||
reloadMultiplier = 1.2f;
|
||||
@@ -59,37 +59,37 @@ public class AmmoTypes implements ContentList {
|
||||
|
||||
//bullets
|
||||
|
||||
bulletLead = new AmmoType(Items.lead, StandardBullets.lead, 5) {{
|
||||
bulletLead = new AmmoType(Items.lead, StandardBullets.lead, 5){{
|
||||
shootEffect = ShootFx.shootSmall;
|
||||
smokeEffect = ShootFx.shootSmallSmoke;
|
||||
reloadMultiplier = 1.6f;
|
||||
inaccuracy = 5f;
|
||||
}};
|
||||
|
||||
bulletTungsten = new AmmoType(Items.tungsten, StandardBullets.tungsten, 2) {{
|
||||
bulletTungsten = new AmmoType(Items.tungsten, StandardBullets.tungsten, 2){{
|
||||
shootEffect = ShootFx.shootSmall;
|
||||
smokeEffect = ShootFx.shootSmallSmoke;
|
||||
reloadMultiplier = 0.8f;
|
||||
}};
|
||||
|
||||
bulletCarbide = new AmmoType(Items.carbide, StandardBullets.carbide, 2) {{
|
||||
bulletCarbide = new AmmoType(Items.carbide, StandardBullets.carbide, 2){{
|
||||
shootEffect = ShootFx.shootSmall;
|
||||
smokeEffect = ShootFx.shootSmallSmoke;
|
||||
reloadMultiplier = 0.6f;
|
||||
}};
|
||||
|
||||
bulletThorium = new AmmoType(Items.thorium, StandardBullets.thorium, 2) {{
|
||||
bulletThorium = new AmmoType(Items.thorium, StandardBullets.thorium, 2){{
|
||||
shootEffect = ShootFx.shootBig;
|
||||
smokeEffect = ShootFx.shootBigSmoke;
|
||||
}};
|
||||
|
||||
bulletSilicon = new AmmoType(Items.silicon, StandardBullets.homing, 5) {{
|
||||
bulletSilicon = new AmmoType(Items.silicon, StandardBullets.homing, 5){{
|
||||
shootEffect = ShootFx.shootSmall;
|
||||
smokeEffect = ShootFx.shootSmallSmoke;
|
||||
reloadMultiplier = 1.4f;
|
||||
}};
|
||||
|
||||
bulletPyratite = new AmmoType(Items.pyratite, StandardBullets.tracer, 3) {{
|
||||
bulletPyratite = new AmmoType(Items.pyratite, StandardBullets.tracer, 3){{
|
||||
shootEffect = ShootFx.shootSmall;
|
||||
smokeEffect = ShootFx.shootSmallSmoke;
|
||||
inaccuracy = 3f;
|
||||
@@ -97,71 +97,71 @@ public class AmmoTypes implements ContentList {
|
||||
|
||||
//flak
|
||||
|
||||
flakLead = new AmmoType(Items.lead, FlakBullets.lead, 5) {{
|
||||
flakLead = new AmmoType(Items.lead, FlakBullets.lead, 5){{
|
||||
shootEffect = ShootFx.shootSmall;
|
||||
smokeEffect = ShootFx.shootSmallSmoke;
|
||||
}};
|
||||
|
||||
flakExplosive = new AmmoType(Items.blastCompound, FlakBullets.explosive, 5) {{
|
||||
flakExplosive = new AmmoType(Items.blastCompound, FlakBullets.explosive, 5){{
|
||||
shootEffect = ShootFx.shootSmall;
|
||||
smokeEffect = ShootFx.shootSmallSmoke;
|
||||
}};
|
||||
|
||||
flakPlastic = new AmmoType(Items.plastanium, FlakBullets.plastic, 5) {{
|
||||
flakPlastic = new AmmoType(Items.plastanium, FlakBullets.plastic, 5){{
|
||||
shootEffect = ShootFx.shootSmall;
|
||||
smokeEffect = ShootFx.shootSmallSmoke;
|
||||
}};
|
||||
|
||||
flakSurge = new AmmoType(Items.surgealloy, FlakBullets.surge, 5) {{
|
||||
flakSurge = new AmmoType(Items.surgealloy, FlakBullets.surge, 5){{
|
||||
shootEffect = ShootFx.shootSmall;
|
||||
smokeEffect = ShootFx.shootSmallSmoke;
|
||||
}};
|
||||
|
||||
//missiles
|
||||
|
||||
missileExplosive = new AmmoType(Items.blastCompound, MissileBullets.explosive, 1) {{
|
||||
missileExplosive = new AmmoType(Items.blastCompound, MissileBullets.explosive, 1){{
|
||||
shootEffect = ShootFx.shootBig2;
|
||||
smokeEffect = ShootFx.shootBigSmoke2;
|
||||
reloadMultiplier = 1.2f;
|
||||
}};
|
||||
|
||||
missileIncindiary = new AmmoType(Items.pyratite, MissileBullets.incindiary, 1) {{
|
||||
missileIncindiary = new AmmoType(Items.pyratite, MissileBullets.incindiary, 1){{
|
||||
shootEffect = ShootFx.shootBig2;
|
||||
smokeEffect = ShootFx.shootBigSmoke2;
|
||||
reloadMultiplier = 1.0f;
|
||||
}};
|
||||
|
||||
missileSurge = new AmmoType(Items.surgealloy, MissileBullets.surge, 1) {{
|
||||
missileSurge = new AmmoType(Items.surgealloy, MissileBullets.surge, 1){{
|
||||
shootEffect = ShootFx.shootBig2;
|
||||
smokeEffect = ShootFx.shootBigSmoke2;
|
||||
}};
|
||||
|
||||
//artillery
|
||||
|
||||
artilleryCarbide = new AmmoType(Items.carbide, ArtilleryBullets.carbide, 2) {{
|
||||
artilleryCarbide = new AmmoType(Items.carbide, ArtilleryBullets.carbide, 2){{
|
||||
shootEffect = ShootFx.shootBig2;
|
||||
smokeEffect = ShootFx.shootBigSmoke2;
|
||||
}};
|
||||
|
||||
artilleryPlastic = new AmmoType(Items.plastanium, ArtilleryBullets.plastic, 2) {{
|
||||
artilleryPlastic = new AmmoType(Items.plastanium, ArtilleryBullets.plastic, 2){{
|
||||
shootEffect = ShootFx.shootBig2;
|
||||
smokeEffect = ShootFx.shootBigSmoke2;
|
||||
reloadMultiplier = 1.4f;
|
||||
}};
|
||||
|
||||
artilleryHoming = new AmmoType(Items.silicon, ArtilleryBullets.homing, 1) {{
|
||||
artilleryHoming = new AmmoType(Items.silicon, ArtilleryBullets.homing, 1){{
|
||||
shootEffect = ShootFx.shootBig2;
|
||||
smokeEffect = ShootFx.shootBigSmoke2;
|
||||
reloadMultiplier = 0.9f;
|
||||
}};
|
||||
|
||||
artilleryIncindiary = new AmmoType(Items.pyratite, ArtilleryBullets.incindiary, 2) {{
|
||||
artilleryIncindiary = new AmmoType(Items.pyratite, ArtilleryBullets.incindiary, 2){{
|
||||
shootEffect = ShootFx.shootBig2;
|
||||
smokeEffect = ShootFx.shootBigSmoke2;
|
||||
reloadMultiplier = 1.2f;
|
||||
}};
|
||||
|
||||
artilleryExplosive = new AmmoType(Items.blastCompound, ArtilleryBullets.explosive, 1) {{
|
||||
artilleryExplosive = new AmmoType(Items.blastCompound, ArtilleryBullets.explosive, 1){{
|
||||
shootEffect = ShootFx.shootBig2;
|
||||
smokeEffect = ShootFx.shootBigSmoke2;
|
||||
reloadMultiplier = 1.6f;
|
||||
@@ -169,7 +169,7 @@ public class AmmoTypes implements ContentList {
|
||||
|
||||
//flame
|
||||
|
||||
basicFlame = new AmmoType(Liquids.oil, TurretBullets.basicFlame, 0.3f) {{
|
||||
basicFlame = new AmmoType(Liquids.oil, TurretBullets.basicFlame, 0.3f){{
|
||||
shootEffect = ShootFx.shootSmallFlame;
|
||||
}};
|
||||
|
||||
@@ -198,7 +198,7 @@ public class AmmoTypes implements ContentList {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Array<? extends Content> getAll() {
|
||||
public Array<? extends Content> getAll(){
|
||||
return AmmoType.all();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,41 +12,41 @@ public class Items implements ContentList{
|
||||
biomatter, sand, blastCompound, pyratite;
|
||||
|
||||
@Override
|
||||
public void load() {
|
||||
public void load(){
|
||||
|
||||
stone = new Item("stone", Color.valueOf("777777")) {{
|
||||
stone = new Item("stone", Color.valueOf("777777")){{
|
||||
hardness = 3;
|
||||
}};
|
||||
|
||||
tungsten = new Item("tungsten", Color.valueOf("a0b0c8")) {{
|
||||
tungsten = new Item("tungsten", Color.valueOf("a0b0c8")){{
|
||||
type = ItemType.material;
|
||||
hardness = 1;
|
||||
cost = 0.75f;
|
||||
}};
|
||||
|
||||
lead = new Item("lead", Color.valueOf("8e85a2")) {{
|
||||
lead = new Item("lead", Color.valueOf("8e85a2")){{
|
||||
type = ItemType.material;
|
||||
hardness = 1;
|
||||
cost = 0.6f;
|
||||
}};
|
||||
|
||||
coal = new Item("coal", Color.valueOf("272727")) {{
|
||||
coal = new Item("coal", Color.valueOf("272727")){{
|
||||
explosiveness = 0.2f;
|
||||
flammability = 0.5f;
|
||||
hardness = 2;
|
||||
}};
|
||||
|
||||
carbide = new Item("carbide", Color.valueOf("e2e2e2")) {{
|
||||
carbide = new Item("carbide", Color.valueOf("e2e2e2")){{
|
||||
type = ItemType.material;
|
||||
}};
|
||||
|
||||
titanium = new Item("titanium", Color.valueOf("8da1e3")) {{
|
||||
titanium = new Item("titanium", Color.valueOf("8da1e3")){{
|
||||
type = ItemType.material;
|
||||
hardness = 3;
|
||||
cost = 1.1f;
|
||||
}};
|
||||
|
||||
thorium = new Item("thorium", Color.valueOf("f9a3c7")) {{
|
||||
thorium = new Item("thorium", Color.valueOf("f9a3c7")){{
|
||||
type = ItemType.material;
|
||||
explosiveness = 0.1f;
|
||||
hardness = 4;
|
||||
@@ -54,49 +54,49 @@ public class Items implements ContentList{
|
||||
cost = 1.2f;
|
||||
}};
|
||||
|
||||
silicon = new Item("silicon", Color.valueOf("53565c")) {{
|
||||
silicon = new Item("silicon", Color.valueOf("53565c")){{
|
||||
type = ItemType.material;
|
||||
cost = 0.9f;
|
||||
}};
|
||||
|
||||
plastanium = new Item("plastanium", Color.valueOf("e9ead3")) {{
|
||||
plastanium = new Item("plastanium", Color.valueOf("e9ead3")){{
|
||||
type = ItemType.material;
|
||||
flammability = 0.1f;
|
||||
explosiveness = 0.1f;
|
||||
cost = 1.5f;
|
||||
}};
|
||||
|
||||
phasematter = new Item("phase-matter", Color.valueOf("f4ba6e")) {{
|
||||
phasematter = new Item("phase-matter", Color.valueOf("f4ba6e")){{
|
||||
type = ItemType.material;
|
||||
cost = 1.5f;
|
||||
}};
|
||||
|
||||
surgealloy = new Item("surge-alloy", Color.valueOf("b4d5c7")) {{
|
||||
surgealloy = new Item("surge-alloy", Color.valueOf("b4d5c7")){{
|
||||
type = ItemType.material;
|
||||
}};
|
||||
|
||||
biomatter = new Item("biomatter", Color.valueOf("648b55")) {{
|
||||
biomatter = new Item("biomatter", Color.valueOf("648b55")){{
|
||||
flammability = 0.4f;
|
||||
fluxiness = 0.2f;
|
||||
}};
|
||||
|
||||
sand = new Item("sand", Color.valueOf("e3d39e")) {{
|
||||
sand = new Item("sand", Color.valueOf("e3d39e")){{
|
||||
fluxiness = 0.5f;
|
||||
}};
|
||||
|
||||
blastCompound = new Item("blast-compound", Color.valueOf("ff795e")) {{
|
||||
blastCompound = new Item("blast-compound", Color.valueOf("ff795e")){{
|
||||
flammability = 0.2f;
|
||||
explosiveness = 0.6f;
|
||||
}};
|
||||
|
||||
pyratite = new Item("pyratite", Color.valueOf("ffaa5f")) {{
|
||||
pyratite = new Item("pyratite", Color.valueOf("ffaa5f")){{
|
||||
flammability = 0.7f;
|
||||
explosiveness = 0.2f;
|
||||
}};
|
||||
}
|
||||
|
||||
@Override
|
||||
public Array<? extends Content> getAll() {
|
||||
public Array<? extends Content> getAll(){
|
||||
return Item.all();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,20 +6,13 @@ import io.anuke.mindustry.game.Content;
|
||||
import io.anuke.mindustry.type.ContentList;
|
||||
import io.anuke.mindustry.type.Liquid;
|
||||
|
||||
public class Liquids implements ContentList {
|
||||
public static Liquid none, water, lava, oil, cryofluid;
|
||||
public class Liquids implements ContentList{
|
||||
public static Liquid water, lava, oil, cryofluid;
|
||||
|
||||
@Override
|
||||
public void load() {
|
||||
public void load(){
|
||||
|
||||
none = new Liquid("none", Color.CLEAR){
|
||||
@Override
|
||||
public boolean isHidden(){
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
water = new Liquid("water", Color.valueOf("486acd")) {
|
||||
water = new Liquid("water", Color.valueOf("486acd")){
|
||||
{
|
||||
heatCapacity = 0.4f;
|
||||
tier = 0;
|
||||
@@ -27,7 +20,7 @@ public class Liquids implements ContentList {
|
||||
}
|
||||
};
|
||||
|
||||
lava = new Liquid("lava", Color.valueOf("e37341")) {
|
||||
lava = new Liquid("lava", Color.valueOf("e37341")){
|
||||
{
|
||||
temperature = 0.8f;
|
||||
viscosity = 0.8f;
|
||||
@@ -36,7 +29,7 @@ public class Liquids implements ContentList {
|
||||
}
|
||||
};
|
||||
|
||||
oil = new Liquid("oil", Color.valueOf("313131")) {
|
||||
oil = new Liquid("oil", Color.valueOf("313131")){
|
||||
{
|
||||
viscosity = 0.7f;
|
||||
flammability = 0.6f;
|
||||
@@ -46,10 +39,10 @@ public class Liquids implements ContentList {
|
||||
}
|
||||
};
|
||||
|
||||
cryofluid = new Liquid("cryofluid", Color.SKY) {
|
||||
cryofluid = new Liquid("cryofluid", Color.SKY){
|
||||
{
|
||||
heatCapacity = 0.75f;
|
||||
temperature = 0.4f;
|
||||
heatCapacity = 0.9f;
|
||||
temperature = 0.25f;
|
||||
tier = 1;
|
||||
effect = StatusEffects.freezing;
|
||||
}
|
||||
@@ -57,7 +50,7 @@ public class Liquids implements ContentList {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Array<? extends Content> getAll() {
|
||||
public Array<? extends Content> getAll(){
|
||||
return Liquid.all();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,14 +8,16 @@ import io.anuke.mindustry.type.ContentList;
|
||||
import io.anuke.mindustry.type.Mech;
|
||||
import io.anuke.mindustry.type.Upgrade;
|
||||
|
||||
public class Mechs implements ContentList {
|
||||
public class Mechs implements ContentList{
|
||||
public static Mech alpha, delta, tau, omega, dart, javelin, trident, halberd;
|
||||
|
||||
/**These are not new mechs, just re-assignments for convenience.*/
|
||||
/**
|
||||
* These are not new mechs, just re-assignments for convenience.
|
||||
*/
|
||||
public static Mech starterDesktop, starterMobile;
|
||||
|
||||
@Override
|
||||
public void load() {
|
||||
public void load(){
|
||||
|
||||
alpha = new Mech("alpha-mech", false){{
|
||||
drillPower = 1;
|
||||
@@ -48,7 +50,7 @@ public class Mechs implements ContentList {
|
||||
}};
|
||||
|
||||
dart = new Mech("dart-ship", true){{
|
||||
drillPower = -1;
|
||||
drillPower = 1;
|
||||
speed = 0.4f;
|
||||
maxSpeed = 3f;
|
||||
drag = 0.1f;
|
||||
@@ -85,7 +87,7 @@ public class Mechs implements ContentList {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Array<? extends Content> getAll() {
|
||||
public Array<? extends Content> getAll(){
|
||||
return Upgrade.all();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,19 +12,19 @@ import static io.anuke.mindustry.type.Category.*;
|
||||
public class Recipes implements ContentList{
|
||||
|
||||
@Override
|
||||
public void load (){
|
||||
public void load(){
|
||||
//WALLS
|
||||
new Recipe(defense, DefenseBlocks.tungstenWall, new ItemStack(Items.tungsten, 12));
|
||||
new Recipe(defense, DefenseBlocks.tungstenWallLarge, new ItemStack(Items.tungsten, 12*4));
|
||||
new Recipe(defense, DefenseBlocks.tungstenWallLarge, new ItemStack(Items.tungsten, 12 * 4));
|
||||
|
||||
new Recipe(defense, DefenseBlocks.carbideWall, new ItemStack(Items.carbide, 12));
|
||||
new Recipe(defense, DefenseBlocks.carbideWallLarge, new ItemStack(Items.carbide, 12*4));
|
||||
new Recipe(defense, DefenseBlocks.carbideWallLarge, new ItemStack(Items.carbide, 12 * 4));
|
||||
|
||||
new Recipe(defense, DefenseBlocks.thoriumWall, new ItemStack(Items.thorium, 12));
|
||||
new Recipe(defense, DefenseBlocks.thoriumWallLarge, new ItemStack(Items.thorium, 12*4));
|
||||
new Recipe(defense, DefenseBlocks.thoriumWallLarge, new ItemStack(Items.thorium, 12 * 4));
|
||||
|
||||
new Recipe(defense, DefenseBlocks.door, new ItemStack(Items.carbide, 12), new ItemStack(Items.silicon, 8));
|
||||
new Recipe(defense, DefenseBlocks.doorLarge, new ItemStack(Items.carbide, 12*4), new ItemStack(Items.silicon, 8*4));
|
||||
new Recipe(defense, DefenseBlocks.doorLarge, new ItemStack(Items.carbide, 12 * 4), new ItemStack(Items.silicon, 8 * 4));
|
||||
|
||||
//TURRETS
|
||||
new Recipe(weapon, TurretBlocks.duo, new ItemStack(Items.tungsten, 40));
|
||||
@@ -44,11 +44,11 @@ public class Recipes implements ContentList{
|
||||
|
||||
//starter lead transporation
|
||||
new Recipe(distribution, DistributionBlocks.junction, new ItemStack(Items.lead, 2));
|
||||
new Recipe(distribution, DistributionBlocks.router, new ItemStack(Items.lead, 6));
|
||||
new Recipe(distribution, DistributionBlocks.splitter, new ItemStack(Items.lead, 6));
|
||||
|
||||
//advanced carbide transporation
|
||||
new Recipe(distribution, DistributionBlocks.splitter, new ItemStack(Items.carbide, 2), new ItemStack(Items.tungsten, 2));
|
||||
new Recipe(distribution, DistributionBlocks.multiplexer, new ItemStack(Items.carbide, 8), new ItemStack(Items.tungsten, 8));
|
||||
//new Recipe(distribution, DistributionBlocks.splitter, new ItemStack(Items.carbide, 2), new ItemStack(Items.tungsten, 2));
|
||||
new Recipe(distribution, DistributionBlocks.distributor, new ItemStack(Items.carbide, 8), new ItemStack(Items.tungsten, 8));
|
||||
new Recipe(distribution, DistributionBlocks.sorter, new ItemStack(Items.carbide, 4), new ItemStack(Items.tungsten, 4));
|
||||
new Recipe(distribution, DistributionBlocks.overflowGate, new ItemStack(Items.carbide, 4), new ItemStack(Items.tungsten, 8));
|
||||
new Recipe(distribution, DistributionBlocks.bridgeConveyor, new ItemStack(Items.carbide, 8), new ItemStack(Items.tungsten, 8));
|
||||
@@ -171,7 +171,6 @@ public class Recipes implements ContentList{
|
||||
new Recipe(production, ProductionBlocks.oilextractor, new ItemStack(Items.titanium, 40), new ItemStack(Items.surgealloy, 40));*/
|
||||
|
||||
|
||||
|
||||
//new Recipe(distribution, DistributionBlocks.massDriver, new ItemStack(Items.carbide, 1));
|
||||
|
||||
|
||||
@@ -282,7 +281,7 @@ public class Recipes implements ContentList{
|
||||
}
|
||||
|
||||
@Override
|
||||
public Array<? extends Content> getAll() {
|
||||
public Array<? extends Content> getAll(){
|
||||
return Recipe.all();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,30 +3,30 @@ package io.anuke.mindustry.content;
|
||||
import com.badlogic.gdx.utils.Array;
|
||||
import io.anuke.mindustry.content.fx.EnvironmentFx;
|
||||
import io.anuke.mindustry.entities.StatusController.StatusEntry;
|
||||
import io.anuke.mindustry.game.Content;
|
||||
import io.anuke.mindustry.type.StatusEffect;
|
||||
import io.anuke.mindustry.entities.Unit;
|
||||
import io.anuke.mindustry.game.Content;
|
||||
import io.anuke.mindustry.type.ContentList;
|
||||
import io.anuke.mindustry.type.StatusEffect;
|
||||
import io.anuke.ucore.core.Effects;
|
||||
import io.anuke.ucore.core.Timers;
|
||||
import io.anuke.ucore.util.Mathf;
|
||||
|
||||
public class StatusEffects implements ContentList {
|
||||
public class StatusEffects implements ContentList{
|
||||
public static StatusEffect none, burning, freezing, wet, melting, tarred, overdrive, shielded;
|
||||
|
||||
@Override
|
||||
public void load() {
|
||||
public void load(){
|
||||
|
||||
none = new StatusEffect(0);
|
||||
|
||||
burning = new StatusEffect(4 * 60f) {
|
||||
burning = new StatusEffect(4 * 60f){
|
||||
{
|
||||
oppositeScale = 0.5f;
|
||||
}
|
||||
|
||||
@Override
|
||||
public StatusEntry getTransition(Unit unit, StatusEffect to, float time, float newTime, StatusEntry result) {
|
||||
if (to == tarred) {
|
||||
public StatusEntry getTransition(Unit unit, StatusEffect to, float time, float newTime, StatusEntry result){
|
||||
if(to == tarred){
|
||||
unit.damage(1f);
|
||||
Effects.effect(EnvironmentFx.burning, unit.x + Mathf.range(unit.getSize() / 2f), unit.y + Mathf.range(unit.getSize() / 2f));
|
||||
return result.set(this, Math.min(time + newTime, baseDuration + tarred.baseDuration));
|
||||
@@ -36,45 +36,45 @@ public class StatusEffects implements ContentList {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void update(Unit unit, float time) {
|
||||
public void update(Unit unit, float time){
|
||||
unit.damagePeriodic(0.04f);
|
||||
|
||||
if (Mathf.chance(Timers.delta() * 0.2f)) {
|
||||
if(Mathf.chance(Timers.delta() * 0.2f)){
|
||||
Effects.effect(EnvironmentFx.burning, unit.x + Mathf.range(unit.getSize() / 2f), unit.y + Mathf.range(unit.getSize() / 2f));
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
freezing = new StatusEffect(5 * 60f) {
|
||||
freezing = new StatusEffect(5 * 60f){
|
||||
{
|
||||
oppositeScale = 0.4f;
|
||||
speedMultiplier = 0.7f;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void update(Unit unit, float time) {
|
||||
public void update(Unit unit, float time){
|
||||
|
||||
if (Mathf.chance(Timers.delta() * 0.15f)) {
|
||||
if(Mathf.chance(Timers.delta() * 0.15f)){
|
||||
Effects.effect(EnvironmentFx.freezing, unit.x + Mathf.range(unit.getSize() / 2f), unit.y + Mathf.range(unit.getSize() / 2f));
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
wet = new StatusEffect(3 * 60f) {
|
||||
wet = new StatusEffect(3 * 60f){
|
||||
{
|
||||
oppositeScale = 0.5f;
|
||||
speedMultiplier = 0.999f;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void update(Unit unit, float time) {
|
||||
if (Mathf.chance(Timers.delta() * 0.15f)) {
|
||||
public void update(Unit unit, float time){
|
||||
if(Mathf.chance(Timers.delta() * 0.15f)){
|
||||
Effects.effect(EnvironmentFx.wet, unit.x + Mathf.range(unit.getSize() / 2f), unit.y + Mathf.range(unit.getSize() / 2f));
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
melting = new StatusEffect(5 * 60f) {
|
||||
melting = new StatusEffect(5 * 60f){
|
||||
{
|
||||
oppositeScale = 0.2f;
|
||||
speedMultiplier = 0.8f;
|
||||
@@ -82,8 +82,8 @@ public class StatusEffects implements ContentList {
|
||||
}
|
||||
|
||||
@Override
|
||||
public StatusEntry getTransition(Unit unit, StatusEffect to, float time, float newTime, StatusEntry result) {
|
||||
if (to == tarred) {
|
||||
public StatusEntry getTransition(Unit unit, StatusEffect to, float time, float newTime, StatusEntry result){
|
||||
if(to == tarred){
|
||||
return result.set(this, Math.min(time + newTime / 2f, baseDuration));
|
||||
}
|
||||
|
||||
@@ -91,30 +91,30 @@ public class StatusEffects implements ContentList {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void update(Unit unit, float time) {
|
||||
public void update(Unit unit, float time){
|
||||
unit.damagePeriodic(0.3f);
|
||||
|
||||
if (Mathf.chance(Timers.delta() * 0.2f)) {
|
||||
if(Mathf.chance(Timers.delta() * 0.2f)){
|
||||
Effects.effect(EnvironmentFx.melting, unit.x + Mathf.range(unit.getSize() / 2f), unit.y + Mathf.range(unit.getSize() / 2f));
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
tarred = new StatusEffect(4 * 60f) {
|
||||
tarred = new StatusEffect(4 * 60f){
|
||||
{
|
||||
speedMultiplier = 0.6f;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void update(Unit unit, float time) {
|
||||
if (Mathf.chance(Timers.delta() * 0.15f)) {
|
||||
public void update(Unit unit, float time){
|
||||
if(Mathf.chance(Timers.delta() * 0.15f)){
|
||||
Effects.effect(EnvironmentFx.oily, unit.x + Mathf.range(unit.getSize() / 2f), unit.y + Mathf.range(unit.getSize() / 2f));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public StatusEntry getTransition(Unit unit, StatusEffect to, float time, float newTime, StatusEntry result) {
|
||||
if (to == melting || to == burning) {
|
||||
public StatusEntry getTransition(Unit unit, StatusEffect to, float time, float newTime, StatusEntry result){
|
||||
if(to == melting || to == burning){
|
||||
return result.set(to, newTime + time);
|
||||
}
|
||||
|
||||
@@ -122,7 +122,7 @@ public class StatusEffects implements ContentList {
|
||||
}
|
||||
};
|
||||
|
||||
overdrive = new StatusEffect(6f) {
|
||||
overdrive = new StatusEffect(6f){
|
||||
{
|
||||
armorMultiplier = 0.95f;
|
||||
speedMultiplier = 1.05f;
|
||||
@@ -130,13 +130,13 @@ public class StatusEffects implements ContentList {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void update(Unit unit, float time) {
|
||||
public void update(Unit unit, float time){
|
||||
//idle regen boosted
|
||||
unit.health += 0.01f * Timers.delta();
|
||||
}
|
||||
};
|
||||
|
||||
shielded = new StatusEffect(6f) {
|
||||
shielded = new StatusEffect(6f){
|
||||
{
|
||||
armorMultiplier = 3f;
|
||||
}
|
||||
@@ -149,7 +149,7 @@ public class StatusEffects implements ContentList {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Array<? extends Content> getAll() {
|
||||
public Array<? extends Content> getAll(){
|
||||
return StatusEffect.all();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,11 +6,11 @@ import io.anuke.mindustry.entities.units.types.*;
|
||||
import io.anuke.mindustry.game.Content;
|
||||
import io.anuke.mindustry.type.ContentList;
|
||||
|
||||
public class UnitTypes implements ContentList {
|
||||
public class UnitTypes implements ContentList{
|
||||
public static UnitType drone, scout, vtol, monsoon, titan, fabricator;
|
||||
|
||||
@Override
|
||||
public void load() {
|
||||
public void load(){
|
||||
drone = new UnitType("drone", Drone.class, Drone::new){{
|
||||
isFlying = true;
|
||||
drag = 0.01f;
|
||||
@@ -73,7 +73,7 @@ public class UnitTypes implements ContentList {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Array<? extends Content> getAll() {
|
||||
public Array<? extends Content> getAll(){
|
||||
return UnitType.all();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,13 +8,13 @@ import io.anuke.mindustry.type.ContentList;
|
||||
import io.anuke.mindustry.type.Upgrade;
|
||||
import io.anuke.mindustry.type.Weapon;
|
||||
|
||||
public class Weapons implements ContentList {
|
||||
public class Weapons implements ContentList{
|
||||
public static Weapon blaster, chainBlaster, shockgun, sapper, swarmer, bomber, flakgun, flamethrower, missiles;
|
||||
|
||||
@Override
|
||||
public void load() {
|
||||
public void load(){
|
||||
|
||||
blaster = new Weapon("blaster") {{
|
||||
blaster = new Weapon("blaster"){{
|
||||
length = 1.5f;
|
||||
reload = 15f;
|
||||
roundrobin = true;
|
||||
@@ -22,7 +22,7 @@ public class Weapons implements ContentList {
|
||||
setAmmo(AmmoTypes.bulletLead);
|
||||
}};
|
||||
|
||||
missiles = new Weapon("missiles") {{
|
||||
missiles = new Weapon("missiles"){{
|
||||
length = 1.5f;
|
||||
reload = 40f;
|
||||
shots = 2;
|
||||
@@ -33,7 +33,7 @@ public class Weapons implements ContentList {
|
||||
setAmmo(AmmoTypes.weaponMissile);
|
||||
}};
|
||||
|
||||
chainBlaster = new Weapon("chain-blaster") {{
|
||||
chainBlaster = new Weapon("chain-blaster"){{
|
||||
length = 1.5f;
|
||||
reload = 30f;
|
||||
roundrobin = true;
|
||||
@@ -41,7 +41,7 @@ public class Weapons implements ContentList {
|
||||
setAmmo(AmmoTypes.bulletLead, AmmoTypes.bulletCarbide, AmmoTypes.bulletTungsten, AmmoTypes.bulletSilicon, AmmoTypes.bulletThorium);
|
||||
}};
|
||||
|
||||
shockgun = new Weapon("shockgun") {{
|
||||
shockgun = new Weapon("shockgun"){{
|
||||
length = 1f;
|
||||
reload = 50f;
|
||||
roundrobin = true;
|
||||
@@ -53,7 +53,7 @@ public class Weapons implements ContentList {
|
||||
setAmmo(AmmoTypes.shotgunTungsten);
|
||||
}};
|
||||
|
||||
flakgun = new Weapon("flakgun") {{
|
||||
flakgun = new Weapon("flakgun"){{
|
||||
length = 1f;
|
||||
reload = 70f;
|
||||
roundrobin = true;
|
||||
@@ -65,7 +65,7 @@ public class Weapons implements ContentList {
|
||||
setAmmo(AmmoTypes.shellCarbide);
|
||||
}};
|
||||
|
||||
flamethrower = new Weapon("flamethrower") {{
|
||||
flamethrower = new Weapon("flamethrower"){{
|
||||
length = 1f;
|
||||
reload = 14f;
|
||||
roundrobin = true;
|
||||
@@ -74,7 +74,7 @@ public class Weapons implements ContentList {
|
||||
setAmmo(AmmoTypes.flamerThermite);
|
||||
}};
|
||||
|
||||
sapper = new Weapon("sapper") {{
|
||||
sapper = new Weapon("sapper"){{
|
||||
length = 1.5f;
|
||||
reload = 12f;
|
||||
roundrobin = true;
|
||||
@@ -82,7 +82,7 @@ public class Weapons implements ContentList {
|
||||
setAmmo(AmmoTypes.bulletCarbide);
|
||||
}};
|
||||
|
||||
swarmer = new Weapon("swarmer") {{
|
||||
swarmer = new Weapon("swarmer"){{
|
||||
length = 1.5f;
|
||||
reload = 10f;
|
||||
roundrobin = true;
|
||||
@@ -90,7 +90,7 @@ public class Weapons implements ContentList {
|
||||
setAmmo(AmmoTypes.bulletPyratite);
|
||||
}};
|
||||
|
||||
bomber = new Weapon("bomber") {{
|
||||
bomber = new Weapon("bomber"){{
|
||||
length = 0f;
|
||||
width = 2f;
|
||||
reload = 5f;
|
||||
@@ -103,7 +103,7 @@ public class Weapons implements ContentList {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Array<? extends Content> getAll() {
|
||||
public Array<? extends Content> getAll(){
|
||||
return Upgrade.all();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,10 +5,10 @@ import io.anuke.mindustry.game.Content;
|
||||
import io.anuke.mindustry.type.ContentList;
|
||||
import io.anuke.mindustry.world.Block;
|
||||
|
||||
public abstract class BlockList implements ContentList {
|
||||
public abstract class BlockList implements ContentList{
|
||||
|
||||
@Override
|
||||
public Array<? extends Content> getAll() {
|
||||
public Array<? extends Content> getAll(){
|
||||
return Block.all();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -15,26 +15,31 @@ public class Blocks extends BlockList implements ContentList{
|
||||
public static Block air, spawn, blockpart, space, metalfloor, deepwater, water, lava, oil, stone, blackstone, dirt, sand, ice, snow, grass, shrub, rock, icerock, blackrock;
|
||||
|
||||
|
||||
|
||||
@Override
|
||||
public void load() {
|
||||
air = new Floor("air") {
|
||||
public void load(){
|
||||
air = new Floor("air"){
|
||||
{
|
||||
blend = false;
|
||||
}
|
||||
|
||||
//don't draw
|
||||
public void draw(Tile tile) {}
|
||||
public void load() {}
|
||||
public void init() {}
|
||||
public void draw(Tile tile){
|
||||
}
|
||||
|
||||
public void load(){
|
||||
}
|
||||
|
||||
public void init(){
|
||||
}
|
||||
};
|
||||
|
||||
blockpart = new BlockPart();
|
||||
|
||||
for(int i = 1; i <= 6; i ++){
|
||||
for(int i = 1; i <= 6; i++){
|
||||
new BuildBlock("build" + i);
|
||||
}
|
||||
|
||||
space = new Floor("space") {{
|
||||
space = new Floor("space"){{
|
||||
placeableOn = false;
|
||||
variants = 0;
|
||||
cacheLayer = CacheLayer.space;
|
||||
@@ -43,11 +48,11 @@ public class Blocks extends BlockList implements ContentList{
|
||||
minimapColor = Color.valueOf("000001");
|
||||
}};
|
||||
|
||||
metalfloor = new Floor("metalfloor") {{
|
||||
metalfloor = new Floor("metalfloor"){{
|
||||
variants = 6;
|
||||
}};
|
||||
|
||||
deepwater = new Floor("deepwater") {{
|
||||
deepwater = new Floor("deepwater"){{
|
||||
liquidColor = Color.valueOf("546bb3");
|
||||
speedMultiplier = 0.2f;
|
||||
variants = 0;
|
||||
@@ -60,7 +65,7 @@ public class Blocks extends BlockList implements ContentList{
|
||||
minimapColor = Color.valueOf("465a96");
|
||||
}};
|
||||
|
||||
water = new Floor("water") {{
|
||||
water = new Floor("water"){{
|
||||
liquidColor = Color.valueOf("546bb3");
|
||||
speedMultiplier = 0.5f;
|
||||
variants = 0;
|
||||
@@ -72,7 +77,7 @@ public class Blocks extends BlockList implements ContentList{
|
||||
minimapColor = Color.valueOf("506eb4");
|
||||
}};
|
||||
|
||||
lava = new Floor("lava") {{
|
||||
lava = new Floor("lava"){{
|
||||
liquidColor = Color.valueOf("ed5334");
|
||||
speedMultiplier = 0.2f;
|
||||
damageTaken = 0.5f;
|
||||
@@ -85,7 +90,7 @@ public class Blocks extends BlockList implements ContentList{
|
||||
minimapColor = Color.valueOf("ed5334");
|
||||
}};
|
||||
|
||||
oil = new Floor("oil") {{
|
||||
oil = new Floor("oil"){{
|
||||
liquidColor = Color.valueOf("292929");
|
||||
status = StatusEffects.tarred;
|
||||
statusIntensity = 1f;
|
||||
@@ -97,7 +102,7 @@ public class Blocks extends BlockList implements ContentList{
|
||||
minimapColor = Color.valueOf("292929");
|
||||
}};
|
||||
|
||||
stone = new Floor("stone") {{
|
||||
stone = new Floor("stone"){{
|
||||
hasOres = true;
|
||||
drops = new ItemStack(Items.stone, 1);
|
||||
blends = block -> block != this && !(block instanceof Ore);
|
||||
@@ -105,7 +110,7 @@ public class Blocks extends BlockList implements ContentList{
|
||||
playerUnmineable = true;
|
||||
}};
|
||||
|
||||
blackstone = new Floor("blackstone") {{
|
||||
blackstone = new Floor("blackstone"){{
|
||||
drops = new ItemStack(Items.stone, 1);
|
||||
minimapColor = Color.valueOf("252525");
|
||||
playerUnmineable = true;
|
||||
@@ -115,14 +120,14 @@ public class Blocks extends BlockList implements ContentList{
|
||||
minimapColor = Color.valueOf("6e501e");
|
||||
}};
|
||||
|
||||
sand = new Floor("sand") {{
|
||||
sand = new Floor("sand"){{
|
||||
drops = new ItemStack(Items.sand, 1);
|
||||
minimapColor = Color.valueOf("988a67");
|
||||
hasOres = true;
|
||||
playerUnmineable = true;
|
||||
}};
|
||||
|
||||
ice = new Floor("ice") {{
|
||||
ice = new Floor("ice"){{
|
||||
dragMultiplier = 0.3f;
|
||||
speedMultiplier = 0.4f;
|
||||
minimapColor = Color.valueOf("c4e3e7");
|
||||
@@ -143,19 +148,16 @@ public class Blocks extends BlockList implements ContentList{
|
||||
shadow = "shrubshadow";
|
||||
}};
|
||||
|
||||
rock = new Rock("rock") {{
|
||||
rock = new Rock("rock"){{
|
||||
variants = 2;
|
||||
varyShadow = true;
|
||||
}};
|
||||
|
||||
icerock = new Rock("icerock") {{
|
||||
icerock = new Rock("icerock"){{
|
||||
variants = 2;
|
||||
varyShadow = true;
|
||||
}};
|
||||
|
||||
blackrock = new Rock("blackrock") {{
|
||||
blackrock = new Rock("blackrock"){{
|
||||
variants = 1;
|
||||
varyShadow = true;
|
||||
}};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,55 +10,54 @@ import io.anuke.mindustry.type.ItemStack;
|
||||
import io.anuke.mindustry.world.Block;
|
||||
import io.anuke.mindustry.world.blocks.production.*;
|
||||
|
||||
public class CraftingBlocks extends BlockList implements ContentList {
|
||||
public class CraftingBlocks extends BlockList implements ContentList{
|
||||
public static Block smelter, arcsmelter, siliconsmelter, plastaniumCompressor, phaseWeaver, alloysmelter, alloyfuser,
|
||||
pyratiteMixer, blastMixer,
|
||||
cryofluidmixer, melter, separator, centrifuge, biomatterCompressor, pulverizer, oilRefinery, solidifier, incinerator;
|
||||
cryofluidmixer, melter, separator, centrifuge, biomatterCompressor, pulverizer, solidifier, incinerator;
|
||||
|
||||
@Override
|
||||
public void load() {
|
||||
smelter = new Smelter("smelter") {{
|
||||
public void load(){
|
||||
smelter = new Smelter("smelter"){{
|
||||
health = 70;
|
||||
inputs = new ItemStack[]{new ItemStack(Items.tungsten, 3)};
|
||||
fuel = Items.coal;
|
||||
result = Items.carbide;
|
||||
craftTime = 45f;
|
||||
burnDuration = 35f;
|
||||
useFlux = true;
|
||||
|
||||
consumes.items(new ItemStack[]{new ItemStack(Items.tungsten, 3)});
|
||||
consumes.item(Items.coal);
|
||||
}};
|
||||
|
||||
arcsmelter = new PowerSmelter("arc-smelter") {{
|
||||
arcsmelter = new PowerSmelter("arc-smelter"){{
|
||||
health = 90;
|
||||
craftEffect = BlockFx.smeltsmoke;
|
||||
inputs = new ItemStack[]{new ItemStack(Items.coal, 1), new ItemStack(Items.tungsten, 2)};
|
||||
result = Items.carbide;
|
||||
powerUse = 0.1f;
|
||||
craftTime = 30f;
|
||||
size = 2;
|
||||
|
||||
useFlux = true;
|
||||
fluxNeeded = 2;
|
||||
|
||||
consumes.items(new ItemStack[]{new ItemStack(Items.coal, 1), new ItemStack(Items.tungsten, 2)});
|
||||
consumes.power(0.1f);
|
||||
}};
|
||||
|
||||
siliconsmelter = new PowerSmelter("silicon-smelter") {{
|
||||
siliconsmelter = new PowerSmelter("silicon-smelter"){{
|
||||
health = 90;
|
||||
craftEffect = BlockFx.smeltsmoke;
|
||||
inputs = new ItemStack[]{new ItemStack(Items.coal, 1), new ItemStack(Items.sand, 2)};
|
||||
result = Items.silicon;
|
||||
powerUse = 0.05f;
|
||||
craftTime = 40f;
|
||||
size = 2;
|
||||
hasLiquids = false;
|
||||
flameColor = Color.valueOf("ffef99");
|
||||
|
||||
consumes.items(new ItemStack[]{new ItemStack(Items.coal, 1), new ItemStack(Items.sand, 2)});
|
||||
consumes.power(0.05f);
|
||||
}};
|
||||
|
||||
plastaniumCompressor = new PlastaniumCompressor("plastanium-compressor") {{
|
||||
inputLiquid = Liquids.oil;
|
||||
inputItem = new ItemStack(Items.titanium, 2);
|
||||
plastaniumCompressor = new PlastaniumCompressor("plastanium-compressor"){{
|
||||
hasItems = true;
|
||||
liquidUse = 0.3f;
|
||||
liquidCapacity = 60f;
|
||||
powerUse = 0.5f;
|
||||
craftTime = 80f;
|
||||
output = Items.plastanium;
|
||||
itemCapacity = 30;
|
||||
@@ -67,94 +66,103 @@ public class CraftingBlocks extends BlockList implements ContentList {
|
||||
hasPower = hasLiquids = true;
|
||||
craftEffect = BlockFx.formsmoke;
|
||||
updateEffect = BlockFx.plasticburn;
|
||||
|
||||
consumes.liquid(Liquids.oil, 0.3f);
|
||||
consumes.power(0.4f);
|
||||
consumes.item(Items.titanium, 2);
|
||||
}};
|
||||
|
||||
phaseWeaver = new PhaseWeaver("phase-weaver") {{
|
||||
phaseWeaver = new PhaseWeaver("phase-weaver"){{
|
||||
health = 90;
|
||||
craftEffect = BlockFx.smeltsmoke;
|
||||
inputs = new ItemStack[]{new ItemStack(Items.thorium, 4), new ItemStack(Items.sand, 10)};
|
||||
result = Items.phasematter;
|
||||
powerUse = 0.4f;
|
||||
craftTime = 120f;
|
||||
size = 2;
|
||||
|
||||
consumes.items(new ItemStack[]{new ItemStack(Items.thorium, 4), new ItemStack(Items.sand, 10)});
|
||||
consumes.power(0.5f);
|
||||
}};
|
||||
|
||||
alloysmelter = new PowerSmelter("alloy-smelter") {{
|
||||
alloysmelter = new PowerSmelter("alloy-smelter"){{
|
||||
health = 90;
|
||||
craftEffect = BlockFx.smeltsmoke;
|
||||
inputs = new ItemStack[]{new ItemStack(Items.titanium, 2), new ItemStack(Items.lead, 4), new ItemStack(Items.silicon, 3), new ItemStack(Items.plastanium, 2)};
|
||||
result = Items.surgealloy;
|
||||
powerUse = 0.3f;
|
||||
craftTime = 50f;
|
||||
size = 2;
|
||||
|
||||
useFlux = true;
|
||||
fluxNeeded = 4;
|
||||
|
||||
consumes.power(0.3f);
|
||||
consumes.items(new ItemStack[]{new ItemStack(Items.titanium, 2), new ItemStack(Items.lead, 4), new ItemStack(Items.silicon, 3), new ItemStack(Items.plastanium, 2)});
|
||||
}};
|
||||
|
||||
alloyfuser = new PowerSmelter("alloy-fuser") {{
|
||||
alloyfuser = new PowerSmelter("alloy-fuser"){{
|
||||
health = 90;
|
||||
craftEffect = BlockFx.smeltsmoke;
|
||||
inputs = new ItemStack[]{new ItemStack(Items.titanium, 3), new ItemStack(Items.lead, 4), new ItemStack(Items.silicon, 3), new ItemStack(Items.plastanium, 2)};
|
||||
result = Items.surgealloy;
|
||||
powerUse = 0.4f;
|
||||
craftTime = 30f;
|
||||
size = 3;
|
||||
|
||||
useFlux = true;
|
||||
fluxNeeded = 4;
|
||||
|
||||
consumes.items(new ItemStack[]{new ItemStack(Items.titanium, 3), new ItemStack(Items.lead, 4), new ItemStack(Items.silicon, 3), new ItemStack(Items.plastanium, 2)});
|
||||
consumes.power(0.4f);
|
||||
}};
|
||||
|
||||
cryofluidmixer = new LiquidMixer("cryofluidmixer") {{
|
||||
cryofluidmixer = new LiquidMixer("cryofluidmixer"){{
|
||||
health = 200;
|
||||
inputLiquid = Liquids.water;
|
||||
outputLiquid = Liquids.cryofluid;
|
||||
inputItem = Items.titanium;
|
||||
liquidPerItem = 50f;
|
||||
itemCapacity = 50;
|
||||
powerUse = 0.1f;
|
||||
size = 2;
|
||||
hasPower = true;
|
||||
|
||||
consumes.power(0.1f);
|
||||
consumes.item(Items.titanium);
|
||||
consumes.liquid(Liquids.water, 0.3f);
|
||||
}};
|
||||
|
||||
blastMixer = new GenericCrafter("blast-mixer") {{
|
||||
blastMixer = new GenericCrafter("blast-mixer"){{
|
||||
itemCapacity = 20;
|
||||
hasItems = true;
|
||||
hasPower = true;
|
||||
inputLiquid = Liquids.oil;
|
||||
liquidUse = 0.05f;
|
||||
inputItem = new ItemStack(Items.pyratite, 1);
|
||||
hasLiquids = true;
|
||||
output = Items.blastCompound;
|
||||
powerUse = 0.04f;
|
||||
|
||||
size = 2;
|
||||
|
||||
consumes.liquid(Liquids.oil, 0.05f);
|
||||
consumes.item(Items.pyratite, 1);
|
||||
consumes.power(0.04f);
|
||||
}};
|
||||
|
||||
pyratiteMixer = new PowerSmelter("pyratite-mixer") {{
|
||||
pyratiteMixer = new PowerSmelter("pyratite-mixer"){{
|
||||
flameColor = Color.CLEAR;
|
||||
itemCapacity = 20;
|
||||
hasItems = true;
|
||||
hasPower = true;
|
||||
inputs = new ItemStack[]{new ItemStack(Items.coal, 1), new ItemStack(Items.lead, 2), new ItemStack(Items.sand, 2)};
|
||||
result = Items.pyratite;
|
||||
powerUse = 0.02f;
|
||||
|
||||
size = 2;
|
||||
|
||||
consumes.power(0.02f);
|
||||
consumes.items(new ItemStack[]{new ItemStack(Items.coal, 1), new ItemStack(Items.lead, 2), new ItemStack(Items.sand, 2)});
|
||||
}};
|
||||
|
||||
melter = new PowerCrafter("melter") {{
|
||||
melter = new PowerCrafter("melter"){{
|
||||
health = 200;
|
||||
outputLiquid = Liquids.lava;
|
||||
outputLiquidAmount = 0.05f;
|
||||
input = new ItemStack(Items.stone, 1);
|
||||
outputLiquidAmount = 0.75f;
|
||||
itemCapacity = 50;
|
||||
craftTime = 10f;
|
||||
powerUse = 0.1f;
|
||||
hasLiquids = hasPower = true;
|
||||
|
||||
consumes.power(0.1f);
|
||||
consumes.item(Items.stone, 2);
|
||||
}};
|
||||
|
||||
separator = new Separator("separator") {{
|
||||
liquid = Liquids.water;
|
||||
item = Items.stone;
|
||||
separator = new Separator("separator"){{
|
||||
results = new Item[]{
|
||||
null, null, null, null, null, null, null, null, null, null,
|
||||
Items.sand, Items.sand, Items.sand, Items.sand, Items.sand, Items.sand, Items.sand, Items.sand, Items.sand, Items.sand,
|
||||
@@ -164,15 +172,15 @@ public class CraftingBlocks extends BlockList implements ContentList {
|
||||
Items.coal, Items.coal,
|
||||
Items.titanium
|
||||
};
|
||||
liquidUse = 0.2f;
|
||||
filterTime = 40f;
|
||||
itemCapacity = 40;
|
||||
health = 50;
|
||||
|
||||
consumes.item(Items.stone, 2);
|
||||
consumes.liquid(Liquids.water, 0.3f);
|
||||
}};
|
||||
|
||||
centrifuge = new Separator("centrifuge") {{
|
||||
liquid = Liquids.water;
|
||||
item = Items.stone;
|
||||
centrifuge = new Separator("centrifuge"){{
|
||||
results = new Item[]{
|
||||
null, null, null, null, null, null, null, null, null, null, null, null, null,
|
||||
Items.sand, Items.sand, Items.sand, Items.sand, Items.sand, Items.sand, Items.sand, Items.sand, Items.sand, Items.sand, Items.sand, Items.sand,
|
||||
@@ -184,9 +192,7 @@ public class CraftingBlocks extends BlockList implements ContentList {
|
||||
Items.thorium,
|
||||
};
|
||||
|
||||
liquidUse = 0.3f;
|
||||
hasPower = true;
|
||||
powerUse = 0.2f;
|
||||
filterTime = 15f;
|
||||
itemCapacity = 60;
|
||||
health = 50 * 4;
|
||||
@@ -195,56 +201,52 @@ public class CraftingBlocks extends BlockList implements ContentList {
|
||||
spinnerThickness = 1.5f;
|
||||
spinnerSpeed = 3f;
|
||||
size = 2;
|
||||
|
||||
consumes.item(Items.stone, 2);
|
||||
consumes.power(0.2f);
|
||||
consumes.liquid(Liquids.water, 0.5f);
|
||||
}};
|
||||
|
||||
biomatterCompressor = new Compressor("biomattercompressor") {{
|
||||
input = new ItemStack(Items.biomatter, 1);
|
||||
biomatterCompressor = new Compressor("biomattercompressor"){{
|
||||
liquidCapacity = 60f;
|
||||
itemCapacity = 50;
|
||||
powerUse = 0.06f;
|
||||
craftTime = 25f;
|
||||
outputLiquid = Liquids.oil;
|
||||
outputLiquidAmount = 0.1f;
|
||||
outputLiquidAmount = 0.14f;
|
||||
size = 2;
|
||||
health = 320;
|
||||
hasLiquids = true;
|
||||
|
||||
consumes.item(Items.biomatter, 1);
|
||||
consumes.power(0.06f);
|
||||
}};
|
||||
|
||||
pulverizer = new Pulverizer("pulverizer") {{
|
||||
inputItem = new ItemStack(Items.stone, 2);
|
||||
pulverizer = new Pulverizer("pulverizer"){{
|
||||
itemCapacity = 40;
|
||||
powerUse = 0.2f;
|
||||
output = Items.sand;
|
||||
health = 80;
|
||||
craftEffect = BlockFx.pulverize;
|
||||
craftTime = 60f;
|
||||
updateEffect = BlockFx.pulverizeSmall;
|
||||
hasItems = hasPower = true;
|
||||
|
||||
consumes.item(Items.stone, 2);
|
||||
consumes.power(0.2f);
|
||||
}};
|
||||
|
||||
oilRefinery = new GenericCrafter("oilrefinery") {{
|
||||
inputLiquid = Liquids.oil;
|
||||
powerUse = 0.05f;
|
||||
liquidUse = 0.1f;
|
||||
liquidCapacity = 56f;
|
||||
output = Items.coal;
|
||||
health = 80;
|
||||
craftEffect = BlockFx.purifyoil;
|
||||
hasItems = hasLiquids = hasPower = true;
|
||||
}};
|
||||
|
||||
solidifier = new GenericCrafter("solidifer") {{
|
||||
inputLiquid = Liquids.lava;
|
||||
liquidUse = 1f;
|
||||
solidifier = new GenericCrafter("solidifer"){{
|
||||
liquidCapacity = 21f;
|
||||
craftTime = 14;
|
||||
output = Items.stone;
|
||||
itemCapacity = 20;
|
||||
health = 80;
|
||||
craftEffect = BlockFx.purifystone;
|
||||
hasLiquids = hasItems = true;
|
||||
|
||||
consumes.liquid(Liquids.lava, 1f);
|
||||
}};
|
||||
|
||||
incinerator = new Incinerator("incinerator") {{
|
||||
incinerator = new Incinerator("incinerator"){{
|
||||
health = 90;
|
||||
}};
|
||||
}
|
||||
|
||||
@@ -28,45 +28,52 @@ import java.io.IOException;
|
||||
public class DebugBlocks extends BlockList implements ContentList{
|
||||
public static Block powerVoid, powerInfinite, itemSource, liquidSource, itemVoid;
|
||||
|
||||
@Remote(targets = Loc.both, called = Loc.both, in = In.blocks, forward = true)
|
||||
public static void setLiquidSourceLiquid(Player player, Tile tile, Liquid liquid){
|
||||
LiquidSourceEntity entity = tile.entity();
|
||||
entity.source = liquid;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void load() {
|
||||
powerVoid = new PowerBlock("powervoid") {
|
||||
public void load(){
|
||||
powerVoid = new PowerBlock("powervoid"){
|
||||
{
|
||||
powerCapacity = Float.MAX_VALUE;
|
||||
}
|
||||
};
|
||||
|
||||
powerInfinite = new PowerNode("powerinfinite") {
|
||||
powerInfinite = new PowerNode("powerinfinite"){
|
||||
{
|
||||
powerCapacity = 10000f;
|
||||
powerSpeed = 100f;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void update(Tile tile) {
|
||||
public void update(Tile tile){
|
||||
super.update(tile);
|
||||
tile.entity.power.amount = powerCapacity;
|
||||
}
|
||||
};
|
||||
|
||||
itemSource = new Sorter("itemsource") {
|
||||
itemSource = new Sorter("itemsource"){
|
||||
{
|
||||
hasItems = true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void update(Tile tile) {
|
||||
public void update(Tile tile){
|
||||
SorterEntity entity = tile.entity();
|
||||
entity.items.items[entity.sortItem.id] = 1;
|
||||
entity.items.set(entity.sortItem, 1);
|
||||
tryDump(tile, entity.sortItem);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean acceptItem(Item item, Tile tile, Tile source) {
|
||||
public boolean acceptItem(Item item, Tile tile, Tile source){
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
liquidSource = new Block("liquidsource") {
|
||||
liquidSource = new Block("liquidsource"){
|
||||
{
|
||||
update = true;
|
||||
solid = true;
|
||||
@@ -76,16 +83,15 @@ public class DebugBlocks extends BlockList implements ContentList{
|
||||
}
|
||||
|
||||
@Override
|
||||
public void update(Tile tile) {
|
||||
public void update(Tile tile){
|
||||
LiquidSourceEntity entity = tile.entity();
|
||||
|
||||
tile.entity.liquids.amount = liquidCapacity;
|
||||
tile.entity.liquids.liquid = entity.source;
|
||||
tryDumpLiquid(tile);
|
||||
tile.entity.liquids.add(entity.source, liquidCapacity);
|
||||
tryDumpLiquid(tile, entity.source);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void draw(Tile tile) {
|
||||
public void draw(Tile tile){
|
||||
super.draw(tile);
|
||||
|
||||
LiquidSourceEntity entity = tile.entity();
|
||||
@@ -96,7 +102,7 @@ public class DebugBlocks extends BlockList implements ContentList{
|
||||
}
|
||||
|
||||
@Override
|
||||
public void buildTable(Tile tile, Table table) {
|
||||
public void buildTable(Tile tile, Table table){
|
||||
LiquidSourceEntity entity = tile.entity();
|
||||
|
||||
Array<Liquid> items = Liquid.all();
|
||||
@@ -104,8 +110,8 @@ public class DebugBlocks extends BlockList implements ContentList{
|
||||
ButtonGroup<ImageButton> group = new ButtonGroup<>();
|
||||
Table cont = new Table();
|
||||
|
||||
for (int i = 0; i < items.size; i++) {
|
||||
if (i == 0) continue;
|
||||
for(int i = 0; i < items.size; i++){
|
||||
if(i == 0) continue;
|
||||
final int f = i;
|
||||
ImageButton button = cont.addImageButton("white", "toggle", 24, () -> {
|
||||
CallBlocks.setLiquidSourceLiquid(null, tile, items.get(f));
|
||||
@@ -113,7 +119,7 @@ public class DebugBlocks extends BlockList implements ContentList{
|
||||
button.getStyle().imageUpColor = items.get(i).color;
|
||||
button.setChecked(entity.source.id == f);
|
||||
|
||||
if (i % 4 == 3) {
|
||||
if(i % 4 == 3){
|
||||
cont.row();
|
||||
}
|
||||
}
|
||||
@@ -122,43 +128,37 @@ public class DebugBlocks extends BlockList implements ContentList{
|
||||
}
|
||||
|
||||
@Override
|
||||
public TileEntity getEntity() {
|
||||
public TileEntity getEntity(){
|
||||
return new LiquidSourceEntity();
|
||||
}
|
||||
};
|
||||
|
||||
itemVoid = new Block("itemvoid") {
|
||||
itemVoid = new Block("itemvoid"){
|
||||
{
|
||||
update = solid = true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handleItem(Item item, Tile tile, Tile source) {
|
||||
public void handleItem(Item item, Tile tile, Tile source){
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean acceptItem(Item item, Tile tile, Tile source) {
|
||||
public boolean acceptItem(Item item, Tile tile, Tile source){
|
||||
return true;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@Remote(targets = Loc.both, called = Loc.both, in = In.blocks, forward = true)
|
||||
public static void setLiquidSourceLiquid(Player player, Tile tile, Liquid liquid){
|
||||
LiquidSourceEntity entity = tile.entity();
|
||||
entity.source = liquid;
|
||||
}
|
||||
|
||||
class LiquidSourceEntity extends TileEntity {
|
||||
class LiquidSourceEntity extends TileEntity{
|
||||
public Liquid source = Liquids.water;
|
||||
|
||||
@Override
|
||||
public void write(DataOutputStream stream) throws IOException {
|
||||
public void write(DataOutputStream stream) throws IOException{
|
||||
stream.writeByte(source.id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void read(DataInputStream stream) throws IOException {
|
||||
public void read(DataInputStream stream) throws IOException{
|
||||
source = Liquid.getByID(stream.readByte());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,65 +8,65 @@ import io.anuke.mindustry.world.blocks.defense.DeflectorWall;
|
||||
import io.anuke.mindustry.world.blocks.defense.Door;
|
||||
import io.anuke.mindustry.world.blocks.defense.PhaseWall;
|
||||
|
||||
public class DefenseBlocks extends BlockList implements ContentList {
|
||||
public class DefenseBlocks extends BlockList implements ContentList{
|
||||
public static Block tungstenWall, tungstenWallLarge, carbideWall, carbideWallLarge, thoriumWall, thoriumWallLarge, door, doorLarge, deflectorwall, deflectorwalllarge,
|
||||
phasewall, phasewalllarge;
|
||||
phasewall, phasewalllarge;
|
||||
|
||||
@Override
|
||||
public void load() {
|
||||
public void load(){
|
||||
int wallHealthMultiplier = 4;
|
||||
|
||||
tungstenWall = new Wall("tungsten-wall") {{
|
||||
tungstenWall = new Wall("tungsten-wall"){{
|
||||
health = 80 * wallHealthMultiplier;
|
||||
}};
|
||||
|
||||
tungstenWallLarge = new Wall("tungsten-wall-large") {{
|
||||
tungstenWallLarge = new Wall("tungsten-wall-large"){{
|
||||
health = 80 * 4 * wallHealthMultiplier;
|
||||
size = 2;
|
||||
}};
|
||||
|
||||
carbideWall = new Wall("carbide-wall") {{
|
||||
carbideWall = new Wall("carbide-wall"){{
|
||||
health = 110 * wallHealthMultiplier;
|
||||
}};
|
||||
|
||||
carbideWallLarge = new Wall("carbide-wall-large") {{
|
||||
health = 110 * wallHealthMultiplier*4;
|
||||
carbideWallLarge = new Wall("carbide-wall-large"){{
|
||||
health = 110 * wallHealthMultiplier * 4;
|
||||
size = 2;
|
||||
}};
|
||||
|
||||
thoriumWall = new Wall("thorium-wall") {{
|
||||
health = 110 * wallHealthMultiplier;
|
||||
thoriumWall = new Wall("thorium-wall"){{
|
||||
health = 200 * wallHealthMultiplier;
|
||||
}};
|
||||
|
||||
thoriumWallLarge = new Wall("thorium-wall-large") {{
|
||||
health = 110 * wallHealthMultiplier*4;
|
||||
thoriumWallLarge = new Wall("thorium-wall-large"){{
|
||||
health = 200 * wallHealthMultiplier * 4;
|
||||
size = 2;
|
||||
}};
|
||||
|
||||
deflectorwall = new DeflectorWall("deflector-wall") {{
|
||||
deflectorwall = new DeflectorWall("deflector-wall"){{
|
||||
health = 150 * wallHealthMultiplier;
|
||||
}};
|
||||
|
||||
deflectorwalllarge = new DeflectorWall("deflector-wall-large") {{
|
||||
deflectorwalllarge = new DeflectorWall("deflector-wall-large"){{
|
||||
health = 150 * 4 * wallHealthMultiplier;
|
||||
size = 2;
|
||||
}};
|
||||
|
||||
phasewall = new PhaseWall("phase-wall") {{
|
||||
phasewall = new PhaseWall("phase-wall"){{
|
||||
health = 150 * wallHealthMultiplier;
|
||||
}};
|
||||
|
||||
phasewalllarge = new PhaseWall("phase-wall-large") {{
|
||||
phasewalllarge = new PhaseWall("phase-wall-large"){{
|
||||
health = 150 * 4 * wallHealthMultiplier;
|
||||
size = 2;
|
||||
regenSpeed = 0.5f;
|
||||
}};
|
||||
|
||||
door = new Door("door") {{
|
||||
door = new Door("door"){{
|
||||
health = 100 * wallHealthMultiplier;
|
||||
}};
|
||||
|
||||
doorLarge = new Door("door-large") {{
|
||||
doorLarge = new Door("door-large"){{
|
||||
openfx = BlockFx.dooropenlarge;
|
||||
closefx = BlockFx.doorcloselarge;
|
||||
health = 100 * 4 * wallHealthMultiplier;
|
||||
|
||||
@@ -5,53 +5,51 @@ import io.anuke.mindustry.world.Block;
|
||||
import io.anuke.mindustry.world.blocks.distribution.*;
|
||||
|
||||
public class DistributionBlocks extends BlockList implements ContentList{
|
||||
public static Block conveyor, titaniumconveyor, router, multiplexer, junction,
|
||||
bridgeConveyor, phaseConveyor, sorter, splitter, overflowGate, massDriver;
|
||||
public static Block conveyor, titaniumconveyor, distributor, junction,
|
||||
bridgeConveyor, phaseConveyor, sorter, splitter, overflowGate, massDriver;
|
||||
|
||||
@Override
|
||||
public void load() {
|
||||
@Override
|
||||
public void load(){
|
||||
|
||||
conveyor = new Conveyor("conveyor") {{
|
||||
health = 45;
|
||||
speed = 0.03f;
|
||||
}};
|
||||
conveyor = new Conveyor("conveyor"){{
|
||||
health = 45;
|
||||
speed = 0.03f;
|
||||
}};
|
||||
|
||||
titaniumconveyor = new Conveyor("titanium-conveyor") {{
|
||||
health = 65;
|
||||
speed = 0.07f;
|
||||
}};
|
||||
titaniumconveyor = new Conveyor("titanium-conveyor"){{
|
||||
health = 65;
|
||||
speed = 0.07f;
|
||||
}};
|
||||
|
||||
router = new Router("router");
|
||||
junction = new Junction("junction"){{
|
||||
speed = 26;
|
||||
capacity = 32;
|
||||
}};
|
||||
|
||||
multiplexer = new Router("multiplexer") {{
|
||||
size = 2;
|
||||
itemCapacity = 80;
|
||||
}};
|
||||
bridgeConveyor = new BufferedItemBridge("bridge-conveyor"){{
|
||||
range = 3;
|
||||
}};
|
||||
|
||||
junction = new Junction("junction") {{
|
||||
speed = 26;
|
||||
capacity = 32;
|
||||
}};
|
||||
phaseConveyor = new ItemBridge("phase-conveyor"){{
|
||||
range = 7;
|
||||
hasPower = false;
|
||||
consumes.power(0.05f);
|
||||
}};
|
||||
|
||||
bridgeConveyor = new BufferedItemBridge("bridge-conveyor") {{
|
||||
range = 3;
|
||||
hasPower = false;
|
||||
}};
|
||||
sorter = new Sorter("sorter");
|
||||
|
||||
phaseConveyor = new ItemBridge("phase-conveyor") {{
|
||||
range = 7;
|
||||
}};
|
||||
splitter = new Splitter("splitter");
|
||||
|
||||
sorter = new Sorter("sorter");
|
||||
distributor = new Splitter("distributor"){{
|
||||
size = 2;
|
||||
}};
|
||||
|
||||
splitter = new Splitter("splitter");
|
||||
overflowGate = new OverflowGate("overflow-gate");
|
||||
|
||||
overflowGate = new OverflowGate("overflow-gate");
|
||||
|
||||
massDriver = new MassDriver("mass-driver"){{
|
||||
size = 3;
|
||||
itemCapacity = 80;
|
||||
range = 300f;
|
||||
}};
|
||||
}
|
||||
massDriver = new MassDriver("mass-driver"){{
|
||||
size = 3;
|
||||
itemCapacity = 80;
|
||||
range = 300f;
|
||||
}};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,46 +9,47 @@ public class LiquidBlocks extends BlockList implements ContentList{
|
||||
public static Block mechanicalPump, rotaryPump, thermalPump, conduit, pulseConduit, liquidRouter, liquidtank, liquidJunction, bridgeConduit, phaseConduit;
|
||||
|
||||
@Override
|
||||
public void load() {
|
||||
public void load(){
|
||||
|
||||
mechanicalPump = new Pump("mechanical-pump") {{
|
||||
mechanicalPump = new Pump("mechanical-pump"){{
|
||||
shadow = "shadow-round-1";
|
||||
pumpAmount = 0.1f;
|
||||
tier = 0;
|
||||
}};
|
||||
|
||||
rotaryPump = new Pump("rotary-pump") {{
|
||||
rotaryPump = new Pump("rotary-pump"){{
|
||||
shadow = "shadow-rounded-2";
|
||||
pumpAmount = 0.25f;
|
||||
powerUse = 0.015f;
|
||||
consumes.power(0.015f);
|
||||
liquidCapacity = 30f;
|
||||
hasPower = true;
|
||||
size = 2;
|
||||
tier = 1;
|
||||
}};
|
||||
|
||||
thermalPump = new Pump("thermal-pump") {{
|
||||
thermalPump = new Pump("thermal-pump"){{
|
||||
pumpAmount = 0.3f;
|
||||
powerUse = 0.02f;
|
||||
consumes.power(0.05f);
|
||||
liquidCapacity = 40f;
|
||||
size = 2;
|
||||
tier = 2;
|
||||
}};
|
||||
|
||||
conduit = new Conduit("conduit") {{
|
||||
conduit = new Conduit("conduit"){{
|
||||
health = 45;
|
||||
}};
|
||||
|
||||
pulseConduit = new Conduit("pulse-conduit") {{
|
||||
pulseConduit = new Conduit("pulse-conduit"){{
|
||||
liquidCapacity = 16f;
|
||||
liquidFlowFactor = 4.9f;
|
||||
health = 90;
|
||||
}};
|
||||
|
||||
liquidRouter = new LiquidRouter("liquid-router") {{
|
||||
liquidRouter = new LiquidRouter("liquid-router"){{
|
||||
liquidCapacity = 40f;
|
||||
}};
|
||||
|
||||
liquidtank = new LiquidRouter("liquid-tank") {{
|
||||
liquidtank = new LiquidRouter("liquid-tank"){{
|
||||
size = 3;
|
||||
liquidCapacity = 1500f;
|
||||
health = 500;
|
||||
@@ -56,13 +57,15 @@ public class LiquidBlocks extends BlockList implements ContentList{
|
||||
|
||||
liquidJunction = new LiquidJunction("liquid-junction");
|
||||
|
||||
bridgeConduit = new LiquidExtendingBridge("bridge-conduit") {{
|
||||
bridgeConduit = new LiquidExtendingBridge("bridge-conduit"){{
|
||||
range = 3;
|
||||
hasPower = false;
|
||||
}};
|
||||
|
||||
phaseConduit = new LiquidBridge("phase-conduit") {{
|
||||
phaseConduit = new LiquidBridge("phase-conduit"){{
|
||||
range = 7;
|
||||
hasPower = false;
|
||||
consumes.power(0.05f);
|
||||
}};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,11 +7,18 @@ import io.anuke.mindustry.world.Block;
|
||||
import io.anuke.mindustry.world.blocks.Floor;
|
||||
import io.anuke.mindustry.world.blocks.OreBlock;
|
||||
|
||||
public class OreBlocks extends BlockList {
|
||||
public class OreBlocks extends BlockList{
|
||||
private static final ObjectMap<Item, ObjectMap<Block, Block>> oreBlockMap = new ObjectMap<>();
|
||||
|
||||
public static Block get(Block floor, Item item){
|
||||
if(!oreBlockMap.containsKey(item)) throw new IllegalArgumentException("Item '" + item + "' is not an ore!");
|
||||
if(!oreBlockMap.get(item).containsKey(floor))
|
||||
throw new IllegalArgumentException("Block '" + floor.name + "' does not support ores!");
|
||||
return oreBlockMap.get(item).get(floor);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void load() {
|
||||
public void load(){
|
||||
Item[] ores = {Items.tungsten, Items.lead, Items.coal, Items.titanium, Items.thorium};
|
||||
|
||||
for(Item item : ores){
|
||||
@@ -25,10 +32,4 @@ public class OreBlocks extends BlockList {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static Block get(Block floor, Item item){
|
||||
if(!oreBlockMap.containsKey(item)) throw new IllegalArgumentException("Item '" + item + "' is not an ore!");
|
||||
if(!oreBlockMap.get(item).containsKey(floor)) throw new IllegalArgumentException("Block '" + floor.name + "' does not support ores!");
|
||||
return oreBlockMap.get(item).get(floor);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,24 +1,25 @@
|
||||
package io.anuke.mindustry.content.blocks;
|
||||
|
||||
import io.anuke.mindustry.content.Liquids;
|
||||
import io.anuke.mindustry.content.fx.BlockFx;
|
||||
import io.anuke.mindustry.type.ContentList;
|
||||
import io.anuke.mindustry.world.Block;
|
||||
import io.anuke.mindustry.world.blocks.distribution.WarpGate;
|
||||
import io.anuke.mindustry.world.blocks.power.*;
|
||||
|
||||
public class PowerBlocks extends BlockList implements ContentList {
|
||||
public class PowerBlocks extends BlockList implements ContentList{
|
||||
public static Block combustionGenerator, thermalGenerator, turbineGenerator, rtgGenerator, solarPanel, largeSolarPanel,
|
||||
nuclearReactor, fusionReactor, battery, batteryLarge, powerNode, powerNodeLarge, warpGate;
|
||||
|
||||
@Override
|
||||
public void load() {
|
||||
combustionGenerator = new BurnerGenerator("combustion-generator") {{
|
||||
public void load(){
|
||||
combustionGenerator = new BurnerGenerator("combustion-generator"){{
|
||||
powerOutput = 0.09f;
|
||||
powerCapacity = 40f;
|
||||
itemDuration = 40f;
|
||||
}};
|
||||
|
||||
thermalGenerator = new LiquidHeatGenerator("thermal-generator") {{
|
||||
thermalGenerator = new LiquidHeatGenerator("thermal-generator"){{
|
||||
maxLiquidGenerate = 0.5f;
|
||||
powerPerLiquid = 0.08f;
|
||||
powerCapacity = 40f;
|
||||
@@ -27,55 +28,55 @@ public class PowerBlocks extends BlockList implements ContentList {
|
||||
size = 2;
|
||||
}};
|
||||
|
||||
turbineGenerator = new TurbineGenerator("turbine-generator") {{
|
||||
turbineGenerator = new TurbineGenerator("turbine-generator"){{
|
||||
powerOutput = 0.28f;
|
||||
powerCapacity = 40f;
|
||||
itemDuration = 30f;
|
||||
powerPerLiquid = 0.7f;
|
||||
auxLiquidUse = 0.05f;
|
||||
consumes.liquid(Liquids.water, 0.05f);
|
||||
size = 2;
|
||||
}};
|
||||
|
||||
rtgGenerator = new DecayGenerator("rtg-generator") {{
|
||||
rtgGenerator = new DecayGenerator("rtg-generator"){{
|
||||
powerCapacity = 40f;
|
||||
powerOutput = 0.02f;
|
||||
itemDuration = 500f;
|
||||
}};
|
||||
|
||||
solarPanel = new SolarGenerator("solar-panel") {{
|
||||
solarPanel = new SolarGenerator("solar-panel"){{
|
||||
generation = 0.0045f;
|
||||
}};
|
||||
|
||||
largeSolarPanel = new SolarGenerator("solar-panel-large") {{
|
||||
largeSolarPanel = new SolarGenerator("solar-panel-large"){{
|
||||
size = 3;
|
||||
generation = 0.055f;
|
||||
}};
|
||||
|
||||
nuclearReactor = new NuclearReactor("nuclear-reactor") {{
|
||||
nuclearReactor = new NuclearReactor("nuclear-reactor"){{
|
||||
size = 3;
|
||||
health = 700;
|
||||
powerMultiplier = 0.8f;
|
||||
}};
|
||||
|
||||
fusionReactor = new FusionReactor("fusion-reactor") {{
|
||||
fusionReactor = new FusionReactor("fusion-reactor"){{
|
||||
size = 4;
|
||||
health = 600;
|
||||
}};
|
||||
|
||||
battery = new PowerDistributor("battery") {{
|
||||
battery = new PowerDistributor("battery"){{
|
||||
powerCapacity = 320f;
|
||||
}};
|
||||
|
||||
batteryLarge = new PowerDistributor("battery-large") {{
|
||||
batteryLarge = new PowerDistributor("battery-large"){{
|
||||
size = 3;
|
||||
powerCapacity = 2000f;
|
||||
}};
|
||||
|
||||
powerNode = new PowerNode("power-node") {{
|
||||
powerNode = new PowerNode("power-node"){{
|
||||
shadow = "shadow-round-1";
|
||||
}};
|
||||
|
||||
powerNodeLarge = new PowerNode("power-node-large") {{
|
||||
powerNodeLarge = new PowerNode("power-node-large"){{
|
||||
size = 2;
|
||||
powerSpeed = 1f;
|
||||
maxNodes = 5;
|
||||
|
||||
@@ -11,35 +11,35 @@ import io.anuke.mindustry.world.blocks.production.Drill;
|
||||
import io.anuke.mindustry.world.blocks.production.Fracker;
|
||||
import io.anuke.mindustry.world.blocks.production.SolidPump;
|
||||
|
||||
public class ProductionBlocks extends BlockList implements ContentList {
|
||||
public class ProductionBlocks extends BlockList implements ContentList{
|
||||
public static Block tungstenDrill, carbideDrill, laserdrill, blastdrill, plasmadrill, waterextractor, oilextractor, cultivator;
|
||||
|
||||
@Override
|
||||
public void load() {
|
||||
tungstenDrill = new Drill("tungsten-drill") {{
|
||||
public void load(){
|
||||
tungstenDrill = new Drill("tungsten-drill"){{
|
||||
tier = 2;
|
||||
drillTime = 340;
|
||||
}};
|
||||
|
||||
carbideDrill = new Drill("carbide-drill") {{
|
||||
carbideDrill = new Drill("carbide-drill"){{
|
||||
tier = 3;
|
||||
drillTime = 280;
|
||||
}};
|
||||
|
||||
laserdrill = new Drill("laser-drill") {{
|
||||
laserdrill = new Drill("laser-drill"){{
|
||||
drillTime = 180;
|
||||
size = 2;
|
||||
powerUse = 0.2f;
|
||||
hasPower = true;
|
||||
tier = 4;
|
||||
updateEffect = BlockFx.pulverizeMedium;
|
||||
drillEffect = BlockFx.mineBig;
|
||||
|
||||
consumes.power(0.2f);
|
||||
}};
|
||||
|
||||
blastdrill = new Drill("blast-drill") {{
|
||||
blastdrill = new Drill("blast-drill"){{
|
||||
drillTime = 120;
|
||||
size = 3;
|
||||
powerUse = 0.5f;
|
||||
drawRim = true;
|
||||
hasPower = true;
|
||||
tier = 5;
|
||||
@@ -48,13 +48,14 @@ public class ProductionBlocks extends BlockList implements ContentList {
|
||||
drillEffect = BlockFx.mineHuge;
|
||||
rotateSpeed = 6f;
|
||||
warmupSpeed = 0.01f;
|
||||
|
||||
consumes.power(0.5f);
|
||||
}};
|
||||
|
||||
plasmadrill = new Drill("plasma-drill") {{
|
||||
plasmadrill = new Drill("plasma-drill"){{
|
||||
heatColor = Color.valueOf("ff461b");
|
||||
drillTime = 90;
|
||||
size = 4;
|
||||
powerUse = 0.7f;
|
||||
hasLiquids = true;
|
||||
hasPower = true;
|
||||
tier = 5;
|
||||
@@ -64,38 +65,43 @@ public class ProductionBlocks extends BlockList implements ContentList {
|
||||
updateEffectChance = 0.04f;
|
||||
drillEffect = BlockFx.mineHuge;
|
||||
warmupSpeed = 0.005f;
|
||||
|
||||
consumes.power(0.7f);
|
||||
}};
|
||||
|
||||
waterextractor = new SolidPump("water-extractor") {{
|
||||
waterextractor = new SolidPump("water-extractor"){{
|
||||
result = Liquids.water;
|
||||
powerUse = 0.2f;
|
||||
pumpAmount = 0.1f;
|
||||
size = 2;
|
||||
liquidCapacity = 30f;
|
||||
rotateSpeed = 1.4f;
|
||||
|
||||
consumes.power(0.2f);
|
||||
}};
|
||||
|
||||
oilextractor = new Fracker("oil-extractor") {{
|
||||
oilextractor = new Fracker("oil-extractor"){{
|
||||
result = Liquids.oil;
|
||||
inputLiquid = Liquids.water;
|
||||
updateEffect = BlockFx.pulverize;
|
||||
liquidCapacity = 50f;
|
||||
updateEffectChance = 0.05f;
|
||||
inputLiquidUse = 0.3f;
|
||||
powerUse = 0.6f;
|
||||
pumpAmount = 0.06f;
|
||||
pumpAmount = 0.08f;
|
||||
size = 3;
|
||||
liquidCapacity = 30f;
|
||||
|
||||
consumes.item(Items.sand);
|
||||
consumes.power(0.5f);
|
||||
consumes.liquid(Liquids.water, 0.3f);
|
||||
}};
|
||||
|
||||
cultivator = new Cultivator("cultivator") {{
|
||||
cultivator = new Cultivator("cultivator"){{
|
||||
result = Items.biomatter;
|
||||
inputLiquid = Liquids.water;
|
||||
liquidUse = 0.2f;
|
||||
drillTime = 260;
|
||||
size = 2;
|
||||
hasLiquids = true;
|
||||
hasPower = true;
|
||||
|
||||
consumes.power(0.08f);
|
||||
consumes.liquid(Liquids.water, 0.2f);
|
||||
}};
|
||||
|
||||
}
|
||||
|
||||
@@ -7,25 +7,26 @@ import io.anuke.mindustry.world.blocks.storage.SortedUnloader;
|
||||
import io.anuke.mindustry.world.blocks.storage.Unloader;
|
||||
import io.anuke.mindustry.world.blocks.storage.Vault;
|
||||
|
||||
public class StorageBlocks extends BlockList implements ContentList {
|
||||
public class StorageBlocks extends BlockList implements ContentList{
|
||||
public static Block core, vault, unloader, sortedunloader;
|
||||
|
||||
@Override
|
||||
public void load() {
|
||||
core = new CoreBlock("core") {{
|
||||
public void load(){
|
||||
core = new CoreBlock("core"){{
|
||||
health = 800;
|
||||
}};
|
||||
|
||||
vault = new Vault("vault") {{
|
||||
vault = new Vault("vault"){{
|
||||
size = 3;
|
||||
health = 600;
|
||||
itemCapacity = 2000;
|
||||
}};
|
||||
|
||||
unloader = new Unloader("unloader") {{
|
||||
unloader = new Unloader("unloader"){{
|
||||
speed = 5;
|
||||
}};
|
||||
|
||||
sortedunloader = new SortedUnloader("sortedunloader") {{
|
||||
sortedunloader = new SortedUnloader("sortedunloader"){{
|
||||
speed = 5;
|
||||
}};
|
||||
}
|
||||
|
||||
@@ -12,22 +12,23 @@ import io.anuke.ucore.util.Angles;
|
||||
import io.anuke.ucore.util.Mathf;
|
||||
import io.anuke.ucore.util.Strings;
|
||||
|
||||
public class TurretBlocks extends BlockList implements ContentList {
|
||||
public static Block duo, /*scatter,*/ scorch, hail, wave, lancer, arc, swarmer, salvo, fuse, ripple, cyclone, spectre, meltdown;
|
||||
public class TurretBlocks extends BlockList implements ContentList{
|
||||
public static Block duo, /*scatter,*/
|
||||
scorch, hail, wave, lancer, arc, swarmer, salvo, fuse, ripple, cyclone, spectre, meltdown;
|
||||
|
||||
@Override
|
||||
public void load() {
|
||||
duo = new DoubleTurret("duo") {{
|
||||
ammoTypes = new AmmoType[]{AmmoTypes.bulletTungsten, AmmoTypes.bulletLead, AmmoTypes.bulletCarbide, AmmoTypes.bulletPyratite, AmmoTypes.bulletSilicon};
|
||||
reload = 25f;
|
||||
restitution = 0.03f;
|
||||
range = 90f;
|
||||
shootCone = 15f;
|
||||
ammoUseEffect = ShootFx.shellEjectSmall;
|
||||
health = 80;
|
||||
inaccuracy = 2f;
|
||||
rotatespeed = 10f;
|
||||
}};
|
||||
@Override
|
||||
public void load(){
|
||||
duo = new DoubleTurret("duo"){{
|
||||
ammoTypes = new AmmoType[]{AmmoTypes.bulletTungsten, AmmoTypes.bulletLead, AmmoTypes.bulletCarbide, AmmoTypes.bulletPyratite, AmmoTypes.bulletSilicon};
|
||||
reload = 25f;
|
||||
restitution = 0.03f;
|
||||
range = 90f;
|
||||
shootCone = 15f;
|
||||
ammoUseEffect = ShootFx.shellEjectSmall;
|
||||
health = 80;
|
||||
inaccuracy = 2f;
|
||||
rotatespeed = 10f;
|
||||
}};
|
||||
/*
|
||||
scatter = new BurstTurret("scatter") {{
|
||||
ammoTypes = new AmmoType[]{AmmoTypes.flakLead, AmmoTypes.flakExplosive, AmmoTypes.flakPlastic};
|
||||
@@ -41,165 +42,165 @@ public class TurretBlocks extends BlockList implements ContentList {
|
||||
ammoUseEffect = ShootFx.shellEjectSmall;
|
||||
}};*/
|
||||
|
||||
hail = new ArtilleryTurret("hail") {{
|
||||
ammoTypes = new AmmoType[]{AmmoTypes.artilleryCarbide, AmmoTypes.artilleryHoming, AmmoTypes.artilleryIncindiary};
|
||||
reload = 100f;
|
||||
recoil = 2f;
|
||||
range = 200f;
|
||||
inaccuracy = 5f;
|
||||
health = 120;
|
||||
}};
|
||||
hail = new ArtilleryTurret("hail"){{
|
||||
ammoTypes = new AmmoType[]{AmmoTypes.artilleryCarbide, AmmoTypes.artilleryHoming, AmmoTypes.artilleryIncindiary};
|
||||
reload = 100f;
|
||||
recoil = 2f;
|
||||
range = 200f;
|
||||
inaccuracy = 5f;
|
||||
health = 120;
|
||||
}};
|
||||
|
||||
scorch = new LiquidTurret("scorch") {{
|
||||
scorch = new LiquidTurret("scorch"){{
|
||||
ammoTypes = new AmmoType[]{AmmoTypes.basicFlame};
|
||||
recoil = 0f;
|
||||
reload = 4f;
|
||||
shootCone = 50f;
|
||||
ammoUseEffect = ShootFx.shellEjectSmall;
|
||||
health = 160;
|
||||
health = 160;
|
||||
|
||||
drawer = (tile, entity) -> Draw.rect(entity.target != null ? name + "-shoot" : name, tile.drawx() + tr2.x, tile.drawy() + tr2.y, entity.rotation - 90);
|
||||
}};
|
||||
|
||||
wave = new LiquidTurret("wave") {{
|
||||
ammoTypes = new AmmoType[]{AmmoTypes.water, AmmoTypes.lava, AmmoTypes.cryofluid, AmmoTypes.oil};
|
||||
size = 2;
|
||||
recoil = 0f;
|
||||
reload = 4f;
|
||||
inaccuracy = 5f;
|
||||
shootCone = 50f;
|
||||
shootEffect = ShootFx.shootLiquid;
|
||||
range = 70f;
|
||||
health = 360;
|
||||
wave = new LiquidTurret("wave"){{
|
||||
ammoTypes = new AmmoType[]{AmmoTypes.water, AmmoTypes.lava, AmmoTypes.cryofluid, AmmoTypes.oil};
|
||||
size = 2;
|
||||
recoil = 0f;
|
||||
reload = 4f;
|
||||
inaccuracy = 5f;
|
||||
shootCone = 50f;
|
||||
shootEffect = ShootFx.shootLiquid;
|
||||
range = 70f;
|
||||
health = 360;
|
||||
|
||||
drawer = (tile, entity) -> {
|
||||
Draw.rect(name, tile.drawx() + tr2.x, tile.drawy() + tr2.y, entity.rotation - 90);
|
||||
drawer = (tile, entity) -> {
|
||||
Draw.rect(region, tile.drawx() + tr2.x, tile.drawy() + tr2.y, entity.rotation - 90);
|
||||
|
||||
Draw.color(entity.liquids.liquid.color);
|
||||
Draw.alpha(entity.liquids.amount / liquidCapacity);
|
||||
Draw.rect(name + "-liquid", tile.drawx() + tr2.x, tile.drawy() + tr2.y, entity.rotation - 90);
|
||||
Draw.color();
|
||||
};
|
||||
}};
|
||||
Draw.color(entity.liquids.current().color);
|
||||
Draw.alpha(entity.liquids.total() / liquidCapacity);
|
||||
Draw.rect(name + "-liquid", tile.drawx() + tr2.x, tile.drawy() + tr2.y, entity.rotation - 90);
|
||||
Draw.color();
|
||||
};
|
||||
}};
|
||||
|
||||
lancer = new LaserTurret("lancer") {{
|
||||
range = 90f;
|
||||
chargeTime = 60f;
|
||||
chargeMaxDelay = 30f;
|
||||
chargeEffects = 7;
|
||||
shootType = AmmoTypes.lancerLaser;
|
||||
recoil = 2f;
|
||||
reload = 100f;
|
||||
cooldown = 0.03f;
|
||||
powerUsed = 20f;
|
||||
powerCapacity = 60f;
|
||||
shootShake = 2f;
|
||||
shootEffect = ShootFx.lancerLaserShoot;
|
||||
smokeEffect = ShootFx.lancerLaserShootSmoke;
|
||||
chargeEffect = ShootFx.lancerLaserCharge;
|
||||
chargeBeginEffect = ShootFx.lancerLaserChargeBegin;
|
||||
heatColor = Color.RED;
|
||||
size = 2;
|
||||
health = 320;
|
||||
}};
|
||||
lancer = new LaserTurret("lancer"){{
|
||||
range = 90f;
|
||||
chargeTime = 60f;
|
||||
chargeMaxDelay = 30f;
|
||||
chargeEffects = 7;
|
||||
shootType = AmmoTypes.lancerLaser;
|
||||
recoil = 2f;
|
||||
reload = 100f;
|
||||
cooldown = 0.03f;
|
||||
powerUsed = 20f;
|
||||
powerCapacity = 60f;
|
||||
shootShake = 2f;
|
||||
shootEffect = ShootFx.lancerLaserShoot;
|
||||
smokeEffect = ShootFx.lancerLaserShootSmoke;
|
||||
chargeEffect = ShootFx.lancerLaserCharge;
|
||||
chargeBeginEffect = ShootFx.lancerLaserChargeBegin;
|
||||
heatColor = Color.RED;
|
||||
size = 2;
|
||||
health = 320;
|
||||
}};
|
||||
|
||||
arc = new LaserTurret("arc") {{
|
||||
shootType = AmmoTypes.lightning;
|
||||
reload = 100f;
|
||||
chargeTime = 70f;
|
||||
shootShake = 1f;
|
||||
chargeMaxDelay = 30f;
|
||||
chargeEffects = 7;
|
||||
shootEffect = ShootFx.lightningShoot;
|
||||
chargeEffect = ShootFx.lightningCharge;
|
||||
chargeBeginEffect = ShootFx.lancerLaserChargeBegin;
|
||||
heatColor = Color.RED;
|
||||
recoil = 3f;
|
||||
size = 2;
|
||||
}};
|
||||
arc = new LaserTurret("arc"){{
|
||||
shootType = AmmoTypes.lightning;
|
||||
reload = 100f;
|
||||
chargeTime = 70f;
|
||||
shootShake = 1f;
|
||||
chargeMaxDelay = 30f;
|
||||
chargeEffects = 7;
|
||||
shootEffect = ShootFx.lightningShoot;
|
||||
chargeEffect = ShootFx.lightningCharge;
|
||||
chargeBeginEffect = ShootFx.lancerLaserChargeBegin;
|
||||
heatColor = Color.RED;
|
||||
recoil = 3f;
|
||||
size = 2;
|
||||
}};
|
||||
|
||||
swarmer = new BurstTurret("swarmer") {{
|
||||
ammoTypes = new AmmoType[]{AmmoTypes.missileExplosive, AmmoTypes.missileIncindiary/*, AmmoTypes.missileSurge*/};
|
||||
reload = 60f;
|
||||
shots = 4;
|
||||
burstSpacing = 5;
|
||||
inaccuracy = 10f;
|
||||
range = 140f;
|
||||
xRand = 6f;
|
||||
size = 2;
|
||||
health = 380;
|
||||
}};
|
||||
swarmer = new BurstTurret("swarmer"){{
|
||||
ammoTypes = new AmmoType[]{AmmoTypes.missileExplosive, AmmoTypes.missileIncindiary/*, AmmoTypes.missileSurge*/};
|
||||
reload = 60f;
|
||||
shots = 4;
|
||||
burstSpacing = 5;
|
||||
inaccuracy = 10f;
|
||||
range = 140f;
|
||||
xRand = 6f;
|
||||
size = 2;
|
||||
health = 380;
|
||||
}};
|
||||
|
||||
salvo = new BurstTurret("salvo") {{
|
||||
size = 2;
|
||||
range = 120f;
|
||||
ammoTypes = new AmmoType[]{AmmoTypes.bulletTungsten, AmmoTypes.bulletCarbide, AmmoTypes.bulletPyratite, AmmoTypes.bulletThorium, AmmoTypes.bulletSilicon};
|
||||
reload = 40f;
|
||||
restitution = 0.03f;
|
||||
ammoEjectBack = 3f;
|
||||
cooldown = 0.03f;
|
||||
recoil = 3f;
|
||||
shootShake = 2f;
|
||||
burstSpacing = 4;
|
||||
shots = 3;
|
||||
ammoUseEffect = ShootFx.shellEjectBig;
|
||||
salvo = new BurstTurret("salvo"){{
|
||||
size = 2;
|
||||
range = 120f;
|
||||
ammoTypes = new AmmoType[]{AmmoTypes.bulletTungsten, AmmoTypes.bulletCarbide, AmmoTypes.bulletPyratite, AmmoTypes.bulletThorium, AmmoTypes.bulletSilicon};
|
||||
reload = 40f;
|
||||
restitution = 0.03f;
|
||||
ammoEjectBack = 3f;
|
||||
cooldown = 0.03f;
|
||||
recoil = 3f;
|
||||
shootShake = 2f;
|
||||
burstSpacing = 4;
|
||||
shots = 3;
|
||||
ammoUseEffect = ShootFx.shellEjectBig;
|
||||
|
||||
drawer = (tile, entity) -> {
|
||||
Draw.rect(name, tile.drawx() + tr2.x, tile.drawy() + tr2.y, entity.rotation - 90);
|
||||
float offsetx = (int) (Mathf.abscurve(Mathf.curve(entity.reload / reload, 0.3f, 0.2f)) * 3f);
|
||||
float offsety = -(int) (Mathf.abscurve(Mathf.curve(entity.reload / reload, 0.3f, 0.2f)) * 2f);
|
||||
drawer = (tile, entity) -> {
|
||||
Draw.rect(region, tile.drawx() + tr2.x, tile.drawy() + tr2.y, entity.rotation - 90);
|
||||
float offsetx = (int) (Mathf.abscurve(Mathf.curve(entity.reload / reload, 0.3f, 0.2f)) * 3f);
|
||||
float offsety = -(int) (Mathf.abscurve(Mathf.curve(entity.reload / reload, 0.3f, 0.2f)) * 2f);
|
||||
|
||||
for (int i : Mathf.signs) {
|
||||
float rot = entity.rotation + 90 * i;
|
||||
Draw.rect(name + "-panel-" + Strings.dir(i),
|
||||
tile.drawx() + tr2.x + Angles.trnsx(rot, offsetx, offsety),
|
||||
tile.drawy() + tr2.y + Angles.trnsy(rot, -offsetx, offsety), entity.rotation - 90);
|
||||
}
|
||||
};
|
||||
for(int i : Mathf.signs){
|
||||
float rot = entity.rotation + 90 * i;
|
||||
Draw.rect(name + "-panel-" + Strings.dir(i),
|
||||
tile.drawx() + tr2.x + Angles.trnsx(rot, offsetx, offsety),
|
||||
tile.drawy() + tr2.y + Angles.trnsy(rot, -offsetx, offsety), entity.rotation - 90);
|
||||
}
|
||||
};
|
||||
|
||||
health = 360;
|
||||
}};
|
||||
health = 360;
|
||||
}};
|
||||
|
||||
ripple = new ArtilleryTurret("ripple") {{
|
||||
ammoTypes = new AmmoType[]{AmmoTypes.artilleryCarbide, AmmoTypes.artilleryHoming, AmmoTypes.artilleryIncindiary, AmmoTypes.artilleryExplosive, AmmoTypes.artilleryPlastic};
|
||||
size = 3;
|
||||
shots = 4;
|
||||
inaccuracy = 12f;
|
||||
reload = 60f;
|
||||
ammoEjectBack = 5f;
|
||||
ripple = new ArtilleryTurret("ripple"){{
|
||||
ammoTypes = new AmmoType[]{AmmoTypes.artilleryCarbide, AmmoTypes.artilleryHoming, AmmoTypes.artilleryIncindiary, AmmoTypes.artilleryExplosive, AmmoTypes.artilleryPlastic};
|
||||
size = 3;
|
||||
shots = 4;
|
||||
inaccuracy = 12f;
|
||||
reload = 60f;
|
||||
ammoEjectBack = 5f;
|
||||
ammoUseEffect = ShootFx.shellEjectBig;
|
||||
cooldown = 0.03f;
|
||||
velocityInaccuracy = 0.2f;
|
||||
velocityInaccuracy = 0.2f;
|
||||
restitution = 0.02f;
|
||||
recoil = 6f;
|
||||
shootShake = 2f;
|
||||
range = 300f;
|
||||
|
||||
health = 550;
|
||||
}};
|
||||
health = 550;
|
||||
}};
|
||||
|
||||
cyclone = new ItemTurret("cyclone") {{
|
||||
ammoTypes = new AmmoType[]{AmmoTypes.flakLead, AmmoTypes.flakExplosive, AmmoTypes.flakPlastic, AmmoTypes.flakSurge};
|
||||
size = 3;
|
||||
}};
|
||||
cyclone = new ItemTurret("cyclone"){{
|
||||
ammoTypes = new AmmoType[]{AmmoTypes.flakLead, AmmoTypes.flakExplosive, AmmoTypes.flakPlastic, AmmoTypes.flakSurge};
|
||||
size = 3;
|
||||
}};
|
||||
|
||||
fuse = new ItemTurret("fuse") {{
|
||||
//TODO make it use power
|
||||
ammoTypes = new AmmoType[]{AmmoTypes.fuseShotgun};
|
||||
size = 3;
|
||||
}};
|
||||
fuse = new ItemTurret("fuse"){{
|
||||
//TODO make it use power
|
||||
ammoTypes = new AmmoType[]{AmmoTypes.fuseShotgun};
|
||||
size = 3;
|
||||
}};
|
||||
|
||||
spectre = new ItemTurret("spectre") {{
|
||||
ammoTypes = new AmmoType[]{AmmoTypes.bulletTungsten, AmmoTypes.bulletLead, AmmoTypes.bulletCarbide, AmmoTypes.bulletPyratite, AmmoTypes.bulletThorium, AmmoTypes.bulletSilicon};
|
||||
reload = 25f;
|
||||
restitution = 0.03f;
|
||||
ammoUseEffect = ShootFx.shellEjectSmall;
|
||||
size = 4;
|
||||
}};
|
||||
spectre = new ItemTurret("spectre"){{
|
||||
ammoTypes = new AmmoType[]{AmmoTypes.bulletTungsten, AmmoTypes.bulletLead, AmmoTypes.bulletCarbide, AmmoTypes.bulletPyratite, AmmoTypes.bulletThorium, AmmoTypes.bulletSilicon};
|
||||
reload = 25f;
|
||||
restitution = 0.03f;
|
||||
ammoUseEffect = ShootFx.shellEjectSmall;
|
||||
size = 4;
|
||||
}};
|
||||
|
||||
meltdown = new PowerTurret("meltdown") {{
|
||||
shootType = AmmoTypes.meltdownLaser;
|
||||
size = 4;
|
||||
}};
|
||||
}
|
||||
meltdown = new PowerTurret("meltdown"){{
|
||||
shootType = AmmoTypes.meltdownLaser;
|
||||
size = 4;
|
||||
}};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,54 +7,51 @@ import io.anuke.mindustry.type.ItemStack;
|
||||
import io.anuke.mindustry.world.Block;
|
||||
import io.anuke.mindustry.world.blocks.units.*;
|
||||
|
||||
public class UnitBlocks extends BlockList implements ContentList {
|
||||
public class UnitBlocks extends BlockList implements ContentList{
|
||||
public static Block resupplyPoint, repairPoint, droneFactory, fabricatorFactory, dropPoint, reconstructor, overdriveProjector, shieldProjector;
|
||||
|
||||
@Override
|
||||
public void load() {
|
||||
droneFactory = new UnitFactory("drone-factory") {{
|
||||
public void load(){
|
||||
droneFactory = new UnitFactory("drone-factory"){{
|
||||
type = UnitTypes.drone;
|
||||
produceTime = 800;
|
||||
size = 2;
|
||||
requirements = new ItemStack[]{
|
||||
new ItemStack(Items.silicon, 30), new ItemStack(Items.lead, 30)
|
||||
};
|
||||
consumes.power(0.08f);
|
||||
consumes.items(new ItemStack[]{new ItemStack(Items.silicon, 30), new ItemStack(Items.lead, 30)});
|
||||
}};
|
||||
|
||||
fabricatorFactory = new UnitFactory("fabricator-factory") {{
|
||||
fabricatorFactory = new UnitFactory("fabricator-factory"){{
|
||||
type = UnitTypes.fabricator;
|
||||
produceTime = 1600;
|
||||
size = 2;
|
||||
powerUse = 0.2f;
|
||||
requirements = new ItemStack[]{
|
||||
new ItemStack(Items.silicon, 70), new ItemStack(Items.lead, 80), new ItemStack(Items.titanium, 80)
|
||||
};
|
||||
consumes.power(0.2f);
|
||||
consumes.items(new ItemStack[]{new ItemStack(Items.silicon, 70), new ItemStack(Items.lead, 80), new ItemStack(Items.titanium, 80)});
|
||||
}};
|
||||
|
||||
resupplyPoint = new ResupplyPoint("resupply-point") {{
|
||||
resupplyPoint = new ResupplyPoint("resupply-point"){{
|
||||
shadow = "shadow-round-1";
|
||||
itemCapacity = 30;
|
||||
}};
|
||||
|
||||
dropPoint = new DropPoint("drop-point") {{
|
||||
dropPoint = new DropPoint("drop-point"){{
|
||||
shadow = "shadow-round-1";
|
||||
itemCapacity = 40;
|
||||
}};
|
||||
|
||||
repairPoint = new RepairPoint("repair-point") {{
|
||||
repairPoint = new RepairPoint("repair-point"){{
|
||||
shadow = "shadow-round-1";
|
||||
repairSpeed = 0.1f;
|
||||
}};
|
||||
|
||||
reconstructor = new Reconstructor("reconstructor") {{
|
||||
reconstructor = new Reconstructor("reconstructor"){{
|
||||
size = 2;
|
||||
}};
|
||||
|
||||
overdriveProjector = new OverdriveProjector("overdrive-projector") {{
|
||||
overdriveProjector = new OverdriveProjector("overdrive-projector"){{
|
||||
size = 2;
|
||||
}};
|
||||
|
||||
shieldProjector = new ShieldProjector("shieldprojector") {{
|
||||
shieldProjector = new ShieldProjector("shieldprojector"){{
|
||||
size = 2;
|
||||
}};
|
||||
}
|
||||
|
||||
@@ -4,11 +4,11 @@ import io.anuke.mindustry.content.Mechs;
|
||||
import io.anuke.mindustry.world.Block;
|
||||
import io.anuke.mindustry.world.blocks.units.MechFactory;
|
||||
|
||||
public class UpgradeBlocks extends BlockList {
|
||||
public class UpgradeBlocks extends BlockList{
|
||||
public static Block deltaFactory, tauFactory, omegaFactory, dartFactory, javelinFactory, tridentFactory, halberdFactory;
|
||||
|
||||
@Override
|
||||
public void load() {
|
||||
public void load(){
|
||||
deltaFactory = new MechFactory("delta-mech-factory"){{
|
||||
mech = Mechs.delta;
|
||||
size = 2;
|
||||
|
||||
@@ -11,9 +11,9 @@ public class ArtilleryBullets extends BulletList implements ContentList{
|
||||
public static BulletType carbide, plastic, plasticFrag, homing, incindiary, explosive, surge;
|
||||
|
||||
@Override
|
||||
public void load() {
|
||||
public void load(){
|
||||
|
||||
carbide = new ArtilleryBulletType(3f, 0, "shell") {
|
||||
carbide = new ArtilleryBulletType(3f, 0, "shell"){
|
||||
{
|
||||
hiteffect = BulletFx.flakExplosion;
|
||||
knockback = 0.8f;
|
||||
@@ -25,7 +25,7 @@ public class ArtilleryBullets extends BulletList implements ContentList{
|
||||
}
|
||||
};
|
||||
|
||||
plasticFrag = new BasicBulletType(2.5f, 6, "bullet") {
|
||||
plasticFrag = new BasicBulletType(2.5f, 6, "bullet"){
|
||||
{
|
||||
bulletWidth = 10f;
|
||||
bulletHeight = 12f;
|
||||
@@ -36,7 +36,7 @@ public class ArtilleryBullets extends BulletList implements ContentList{
|
||||
}
|
||||
};
|
||||
|
||||
plastic = new ArtilleryBulletType(3.3f, 0, "shell") {
|
||||
plastic = new ArtilleryBulletType(3.3f, 0, "shell"){
|
||||
{
|
||||
hiteffect = BulletFx.plasticExplosion;
|
||||
knockback = 1f;
|
||||
@@ -52,7 +52,7 @@ public class ArtilleryBullets extends BulletList implements ContentList{
|
||||
}
|
||||
};
|
||||
|
||||
homing = new ArtilleryBulletType(3f, 0, "shell") {
|
||||
homing = new ArtilleryBulletType(3f, 0, "shell"){
|
||||
{
|
||||
hiteffect = BulletFx.flakExplosion;
|
||||
knockback = 0.8f;
|
||||
@@ -66,7 +66,7 @@ public class ArtilleryBullets extends BulletList implements ContentList{
|
||||
}
|
||||
};
|
||||
|
||||
incindiary = new ArtilleryBulletType(3f, 0, "shell") {
|
||||
incindiary = new ArtilleryBulletType(3f, 0, "shell"){
|
||||
{
|
||||
hiteffect = BulletFx.blastExplosion;
|
||||
knockback = 0.8f;
|
||||
@@ -83,7 +83,7 @@ public class ArtilleryBullets extends BulletList implements ContentList{
|
||||
}
|
||||
};
|
||||
|
||||
explosive = new ArtilleryBulletType(2f, 0, "shell") {
|
||||
explosive = new ArtilleryBulletType(2f, 0, "shell"){
|
||||
{
|
||||
hiteffect = BulletFx.blastExplosion;
|
||||
knockback = 0.8f;
|
||||
@@ -97,7 +97,7 @@ public class ArtilleryBullets extends BulletList implements ContentList{
|
||||
}
|
||||
};
|
||||
|
||||
surge = new ArtilleryBulletType(3f, 0, "shell") {
|
||||
surge = new ArtilleryBulletType(3f, 0, "shell"){
|
||||
{
|
||||
//TODO
|
||||
}
|
||||
|
||||
@@ -5,10 +5,10 @@ import io.anuke.mindustry.entities.bullet.BulletType;
|
||||
import io.anuke.mindustry.game.Content;
|
||||
import io.anuke.mindustry.type.ContentList;
|
||||
|
||||
public abstract class BulletList implements ContentList {
|
||||
public abstract class BulletList implements ContentList{
|
||||
|
||||
@Override
|
||||
public Array<? extends Content> getAll() {
|
||||
public Array<? extends Content> getAll(){
|
||||
return BulletType.all();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,34 +4,34 @@ import io.anuke.mindustry.entities.bullet.BasicBulletType;
|
||||
import io.anuke.mindustry.entities.bullet.BulletType;
|
||||
import io.anuke.mindustry.type.ContentList;
|
||||
|
||||
public class FlakBullets extends BulletList implements ContentList {
|
||||
public class FlakBullets extends BulletList implements ContentList{
|
||||
public static BulletType lead, plastic, explosive, surge;
|
||||
|
||||
@Override
|
||||
public void load() {
|
||||
public void load(){
|
||||
|
||||
lead = new BasicBulletType(3f, 5, "bullet") {
|
||||
lead = new BasicBulletType(3f, 5, "bullet"){
|
||||
{
|
||||
bulletWidth = 7f;
|
||||
bulletHeight = 9f;
|
||||
}
|
||||
};
|
||||
|
||||
plastic = new BasicBulletType(3f, 5, "bullet") {
|
||||
plastic = new BasicBulletType(3f, 5, "bullet"){
|
||||
{
|
||||
bulletWidth = 7f;
|
||||
bulletHeight = 9f;
|
||||
}
|
||||
};
|
||||
|
||||
explosive = new BasicBulletType(3f, 5, "bullet") {
|
||||
explosive = new BasicBulletType(3f, 5, "bullet"){
|
||||
{
|
||||
bulletWidth = 7f;
|
||||
bulletHeight = 9f;
|
||||
}
|
||||
};
|
||||
|
||||
surge = new BasicBulletType(3f, 5, "bullet") {
|
||||
surge = new BasicBulletType(3f, 5, "bullet"){
|
||||
{
|
||||
bulletWidth = 7f;
|
||||
bulletHeight = 9f;
|
||||
|
||||
@@ -6,13 +6,13 @@ import io.anuke.mindustry.entities.bullet.MissileBulletType;
|
||||
import io.anuke.mindustry.graphics.Palette;
|
||||
import io.anuke.mindustry.type.ContentList;
|
||||
|
||||
public class MissileBullets extends BulletList implements ContentList {
|
||||
public class MissileBullets extends BulletList implements ContentList{
|
||||
public static BulletType explosive, incindiary, surge, javelin;
|
||||
|
||||
@Override
|
||||
public void load() {
|
||||
public void load(){
|
||||
|
||||
explosive = new MissileBulletType(1.8f, 10, "missile") {
|
||||
explosive = new MissileBulletType(1.8f, 10, "missile"){
|
||||
{
|
||||
bulletWidth = 8f;
|
||||
bulletHeight = 8f;
|
||||
@@ -26,7 +26,7 @@ public class MissileBullets extends BulletList implements ContentList {
|
||||
}
|
||||
};
|
||||
|
||||
incindiary = new MissileBulletType(2f, 12, "missile") {
|
||||
incindiary = new MissileBulletType(2f, 12, "missile"){
|
||||
{
|
||||
frontColor = Palette.lightishOrange;
|
||||
backColor = Palette.lightOrange;
|
||||
@@ -44,14 +44,14 @@ public class MissileBullets extends BulletList implements ContentList {
|
||||
}
|
||||
};
|
||||
|
||||
surge = new MissileBulletType(3f, 5, "bullet") {
|
||||
surge = new MissileBulletType(3f, 5, "bullet"){
|
||||
{
|
||||
bulletWidth = 7f;
|
||||
bulletHeight = 9f;
|
||||
}
|
||||
};
|
||||
|
||||
javelin = new MissileBulletType(2.5f, 10, "missile") {
|
||||
javelin = new MissileBulletType(2.5f, 10, "missile"){
|
||||
{
|
||||
bulletWidth = 8f;
|
||||
bulletHeight = 8f;
|
||||
|
||||
@@ -5,27 +5,27 @@ import io.anuke.mindustry.entities.bullet.BulletType;
|
||||
import io.anuke.mindustry.graphics.Palette;
|
||||
import io.anuke.mindustry.type.ContentList;
|
||||
|
||||
public class StandardBullets extends BulletList implements ContentList {
|
||||
public class StandardBullets extends BulletList implements ContentList{
|
||||
public static BulletType tungsten, lead, carbide, thorium, homing, tracer;
|
||||
|
||||
@Override
|
||||
public void load() {
|
||||
public void load(){
|
||||
|
||||
tungsten = new BasicBulletType(3.2f, 10, "bullet") {
|
||||
tungsten = new BasicBulletType(3.2f, 10, "bullet"){
|
||||
{
|
||||
bulletWidth = 9f;
|
||||
bulletHeight = 11f;
|
||||
}
|
||||
};
|
||||
|
||||
lead = new BasicBulletType(2.5f, 5, "bullet") {
|
||||
lead = new BasicBulletType(2.5f, 5, "bullet"){
|
||||
{
|
||||
bulletWidth = 7f;
|
||||
bulletHeight = 9f;
|
||||
}
|
||||
};
|
||||
|
||||
carbide = new BasicBulletType(3.5f, 18, "bullet") {
|
||||
carbide = new BasicBulletType(3.5f, 18, "bullet"){
|
||||
{
|
||||
bulletWidth = 9f;
|
||||
bulletHeight = 12f;
|
||||
@@ -33,7 +33,7 @@ public class StandardBullets extends BulletList implements ContentList {
|
||||
}
|
||||
};
|
||||
|
||||
thorium = new BasicBulletType(4f, 29, "bullet") {
|
||||
thorium = new BasicBulletType(4f, 29, "bullet"){
|
||||
{
|
||||
bulletWidth = 10f;
|
||||
bulletHeight = 13f;
|
||||
@@ -41,7 +41,7 @@ public class StandardBullets extends BulletList implements ContentList {
|
||||
}
|
||||
};
|
||||
|
||||
homing = new BasicBulletType(3f, 9, "bullet") {
|
||||
homing = new BasicBulletType(3f, 9, "bullet"){
|
||||
{
|
||||
bulletWidth = 7f;
|
||||
bulletHeight = 9f;
|
||||
@@ -49,7 +49,7 @@ public class StandardBullets extends BulletList implements ContentList {
|
||||
}
|
||||
};
|
||||
|
||||
tracer = new BasicBulletType(3.2f, 11, "bullet") {
|
||||
tracer = new BasicBulletType(3.2f, 11, "bullet"){
|
||||
{
|
||||
bulletWidth = 10f;
|
||||
bulletHeight = 12f;
|
||||
|
||||
@@ -29,13 +29,13 @@ import io.anuke.ucore.util.Mathf;
|
||||
|
||||
import static io.anuke.mindustry.Vars.world;
|
||||
|
||||
public class TurretBullets extends BulletList implements ContentList {
|
||||
public class TurretBullets extends BulletList implements ContentList{
|
||||
public static BulletType fireball, basicFlame, lancerLaser, fuseShot, waterShot, cryoShot, lavaShot, oilShot, lightning, driverBolt;
|
||||
|
||||
@Override
|
||||
public void load() {
|
||||
public void load(){
|
||||
|
||||
fireball = new BulletType(1f, 4) {
|
||||
fireball = new BulletType(1f, 4){
|
||||
{
|
||||
pierce = true;
|
||||
hitTiles = false;
|
||||
@@ -45,12 +45,12 @@ public class TurretBullets extends BulletList implements ContentList {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void init(Bullet b) {
|
||||
public void init(Bullet b){
|
||||
b.getVelocity().setLength(0.6f + Mathf.random(2f));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void draw(Bullet b) {
|
||||
public void draw(Bullet b){
|
||||
//TODO add color to the bullet depending on the color of the flame it came from
|
||||
Draw.color(Palette.lightFlame, Palette.darkFlame, Color.GRAY, b.fin());
|
||||
Fill.circle(b.x, b.y, 3f * b.fout());
|
||||
@@ -58,25 +58,25 @@ public class TurretBullets extends BulletList implements ContentList {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void update(Bullet b) {
|
||||
if (Mathf.chance(0.04 * Timers.delta())) {
|
||||
public void update(Bullet b){
|
||||
if(Mathf.chance(0.04 * Timers.delta())){
|
||||
Tile tile = world.tileWorld(b.x, b.y);
|
||||
if (tile != null) {
|
||||
if(tile != null){
|
||||
Fire.create(tile);
|
||||
}
|
||||
}
|
||||
|
||||
if (Mathf.chance(0.1 * Timers.delta())) {
|
||||
if(Mathf.chance(0.1 * Timers.delta())){
|
||||
Effects.effect(EnvironmentFx.fireballsmoke, b.x, b.y);
|
||||
}
|
||||
|
||||
if (Mathf.chance(0.1 * Timers.delta())) {
|
||||
if(Mathf.chance(0.1 * Timers.delta())){
|
||||
Effects.effect(EnvironmentFx.ballfire, b.x, b.y);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
basicFlame = new BulletType(2f, 5) {
|
||||
basicFlame = new BulletType(2f, 5){
|
||||
{
|
||||
hitsize = 7f;
|
||||
lifetime = 30f;
|
||||
@@ -88,11 +88,11 @@ public class TurretBullets extends BulletList implements ContentList {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void draw(Bullet b) {
|
||||
public void draw(Bullet b){
|
||||
}
|
||||
};
|
||||
|
||||
lancerLaser = new BulletType(0.001f, 110) {
|
||||
lancerLaser = new BulletType(0.001f, 110){
|
||||
Color[] colors = {Palette.lancerLaser.cpy().mul(1f, 1f, 1f, 0.4f), Palette.lancerLaser, Color.WHITE};
|
||||
float[] tscales = {1f, 0.7f, 0.5f, 0.2f};
|
||||
float[] lenscales = {1f, 1.1f, 1.13f, 1.14f};
|
||||
@@ -107,19 +107,19 @@ public class TurretBullets extends BulletList implements ContentList {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void init(Bullet b) {
|
||||
public void init(Bullet b){
|
||||
Damage.collideLine(b, b.getTeam(), hiteffect, b.x, b.y, b.angle(), length);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void draw(Bullet b) {
|
||||
public void draw(Bullet b){
|
||||
float f = Mathf.curve(b.fin(), 0f, 0.2f);
|
||||
float baseLen = length * f;
|
||||
|
||||
Lines.lineAngle(b.x, b.y, b.angle(), baseLen);
|
||||
for (int s = 0; s < 3; s++) {
|
||||
for(int s = 0; s < 3; s++){
|
||||
Draw.color(colors[s]);
|
||||
for (int i = 0; i < tscales.length; i++) {
|
||||
for(int i = 0; i < tscales.length; i++){
|
||||
Lines.stroke(7f * b.fout() * (s == 0 ? 1.5f : s == 1 ? 1f : 0.3f) * tscales[i]);
|
||||
Lines.lineAngle(b.x, b.y, b.angle(), baseLen * lenscales[i]);
|
||||
}
|
||||
@@ -128,24 +128,24 @@ public class TurretBullets extends BulletList implements ContentList {
|
||||
}
|
||||
};
|
||||
|
||||
fuseShot = new BulletType(0.01f, 100) {
|
||||
fuseShot = new BulletType(0.01f, 100){
|
||||
//TODO
|
||||
};
|
||||
|
||||
waterShot = new LiquidBulletType(Liquids.water) {
|
||||
waterShot = new LiquidBulletType(Liquids.water){
|
||||
{
|
||||
status = StatusEffects.wet;
|
||||
statusIntensity = 0.5f;
|
||||
knockback = 0.65f;
|
||||
}
|
||||
};
|
||||
cryoShot = new LiquidBulletType(Liquids.cryofluid) {
|
||||
cryoShot = new LiquidBulletType(Liquids.cryofluid){
|
||||
{
|
||||
status = StatusEffects.freezing;
|
||||
statusIntensity = 0.5f;
|
||||
}
|
||||
};
|
||||
lavaShot = new LiquidBulletType(Liquids.lava) {
|
||||
lavaShot = new LiquidBulletType(Liquids.lava){
|
||||
{
|
||||
damage = 4;
|
||||
speed = 1.9f;
|
||||
@@ -154,7 +154,7 @@ public class TurretBullets extends BulletList implements ContentList {
|
||||
statusIntensity = 0.5f;
|
||||
}
|
||||
};
|
||||
oilShot = new LiquidBulletType(Liquids.oil) {
|
||||
oilShot = new LiquidBulletType(Liquids.oil){
|
||||
{
|
||||
speed = 2f;
|
||||
drag = 0.03f;
|
||||
@@ -162,7 +162,7 @@ public class TurretBullets extends BulletList implements ContentList {
|
||||
statusIntensity = 0.5f;
|
||||
}
|
||||
};
|
||||
lightning = new BulletType(0.001f, 10) {
|
||||
lightning = new BulletType(0.001f, 10){
|
||||
{
|
||||
lifetime = 1;
|
||||
despawneffect = Fx.none;
|
||||
@@ -170,16 +170,16 @@ public class TurretBullets extends BulletList implements ContentList {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void draw(Bullet b) {
|
||||
public void draw(Bullet b){
|
||||
}
|
||||
|
||||
@Override
|
||||
public void init(Bullet b) {
|
||||
public void init(Bullet b){
|
||||
Lightning.create(b.getTeam(), hiteffect, Palette.lancerLaser, damage, b.x, b.y, b.angle(), 30);
|
||||
}
|
||||
};
|
||||
|
||||
driverBolt = new BulletType(5f, 20) {
|
||||
driverBolt = new BulletType(5f, 20){
|
||||
{
|
||||
collidesTiles = false;
|
||||
lifetime = 200f;
|
||||
@@ -189,7 +189,7 @@ public class TurretBullets extends BulletList implements ContentList {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void draw(Bullet b) {
|
||||
public void draw(Bullet b){
|
||||
Draw.color(Color.LIGHT_GRAY);
|
||||
Fill.square(b.x, b.y, 3f, b.angle());
|
||||
|
||||
@@ -199,7 +199,7 @@ public class TurretBullets extends BulletList implements ContentList {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void update(Bullet b) {
|
||||
public void update(Bullet b){
|
||||
//data MUST be an instance of DriverBulletData
|
||||
if(!(b.getData() instanceof DriverBulletData)){
|
||||
hit(b);
|
||||
@@ -208,7 +208,7 @@ public class TurretBullets extends BulletList implements ContentList {
|
||||
|
||||
float hitDst = 7f;
|
||||
|
||||
DriverBulletData data = (DriverBulletData)b.getData();
|
||||
DriverBulletData data = (DriverBulletData) b.getData();
|
||||
|
||||
//if the target is dead, just keep flying until the bullet explodes
|
||||
if(data.to.isDead()){
|
||||
@@ -245,15 +245,15 @@ public class TurretBullets extends BulletList implements ContentList {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void despawned(Bullet b) {
|
||||
public void despawned(Bullet b){
|
||||
super.despawned(b);
|
||||
|
||||
if(!(b.getData() instanceof DriverBulletData)) return;
|
||||
|
||||
DriverBulletData data = (DriverBulletData)b.getData();
|
||||
DriverBulletData data = (DriverBulletData) b.getData();
|
||||
data.to.isRecieving = false;
|
||||
|
||||
for(int i = 0; i < data.items.length; i ++){
|
||||
for(int i = 0; i < data.items.length; i++){
|
||||
int amountDropped = Mathf.random(0, data.items[i]);
|
||||
if(amountDropped > 0){
|
||||
float angle = b.angle() + Mathf.range(100f);
|
||||
@@ -264,7 +264,7 @@ public class TurretBullets extends BulletList implements ContentList {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void hit(Bullet b, float hitx, float hity) {
|
||||
public void hit(Bullet b, float hitx, float hity){
|
||||
super.hit(b, hitx, hity);
|
||||
despawned(b);
|
||||
}
|
||||
|
||||
@@ -16,12 +16,12 @@ import io.anuke.ucore.util.Mathf;
|
||||
|
||||
import static io.anuke.mindustry.Vars.world;
|
||||
|
||||
public class WeaponBullets extends BulletList {
|
||||
public class WeaponBullets extends BulletList{
|
||||
public static BulletType tungstenShotgun, bombExplosive, bombIncendiary, bombOil, shellCarbide;
|
||||
|
||||
@Override
|
||||
public void load() {
|
||||
tungstenShotgun = new BasicBulletType(5f, 8, "bullet") {
|
||||
public void load(){
|
||||
tungstenShotgun = new BasicBulletType(5f, 8, "bullet"){
|
||||
{
|
||||
bulletWidth = 8f;
|
||||
bulletHeight = 9f;
|
||||
@@ -49,10 +49,10 @@ public class WeaponBullets extends BulletList {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void hit(Bullet b, float x, float y) {
|
||||
public void hit(Bullet b, float x, float y){
|
||||
super.hit(b, x, y);
|
||||
|
||||
for (int i = 0; i < 3; i++) {
|
||||
for(int i = 0; i < 3; i++){
|
||||
float cx = x + Mathf.range(10f);
|
||||
float cy = y + Mathf.range(10f);
|
||||
Tile tile = world.tileWorld(cx, cy);
|
||||
@@ -73,17 +73,17 @@ public class WeaponBullets extends BulletList {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void hit(Bullet b, float x, float y) {
|
||||
public void hit(Bullet b, float x, float y){
|
||||
super.hit(b, x, y);
|
||||
|
||||
for (int i = 0; i < 3; i++) {
|
||||
for(int i = 0; i < 3; i++){
|
||||
Tile tile = world.tileWorld(x + Mathf.range(8f), y + Mathf.range(8f));
|
||||
Puddle.deposit(tile, Liquids.oil, 5f);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
shellCarbide = new BasicBulletType(3.4f, 20, "bullet") {
|
||||
shellCarbide = new BasicBulletType(3.4f, 20, "bullet"){
|
||||
{
|
||||
bulletWidth = 10f;
|
||||
bulletHeight = 12f;
|
||||
|
||||
@@ -19,7 +19,7 @@ public class BlockFx extends FxList implements ContentList{
|
||||
public static Effect reactorsmoke, nuclearsmoke, nuclearcloud, redgeneratespark, generatespark, fuelburn, plasticburn, pulverize, pulverizeRed, pulverizeRedder, pulverizeSmall, pulverizeMedium, producesmoke, smeltsmoke, formsmoke, blastsmoke, lava, dooropen, doorclose, dooropenlarge, doorcloselarge, purify, purifyoil, purifystone, generate, mine, mineBig, mineHuge, smelt, teleportActivate, teleport, teleportOut, ripple, bubble;
|
||||
|
||||
@Override
|
||||
public void load() {
|
||||
public void load(){
|
||||
|
||||
reactorsmoke = new Effect(17, e -> {
|
||||
Angles.randLenVectors(e.id, 4, e.fin() * 8f, (x, y) -> {
|
||||
|
||||
@@ -10,12 +10,12 @@ import io.anuke.ucore.graphics.Lines;
|
||||
import io.anuke.ucore.util.Angles;
|
||||
import io.anuke.ucore.util.Mathf;
|
||||
|
||||
public class BulletFx extends FxList implements ContentList {
|
||||
public class BulletFx extends FxList implements ContentList{
|
||||
public static Effect hitBulletSmall, hitBulletBig, hitFlameSmall, hitLiquid, hitLancer, despawn, flakExplosion, blastExplosion, plasticExplosion,
|
||||
artilleryTrail, incendTrail, missileTrail;
|
||||
|
||||
@Override
|
||||
public void load() {
|
||||
public void load(){
|
||||
|
||||
hitBulletSmall = new Effect(14, e -> {
|
||||
Draw.color(Color.WHITE, Palette.lightOrange, e.fin());
|
||||
|
||||
@@ -10,11 +10,11 @@ import io.anuke.ucore.graphics.Fill;
|
||||
import io.anuke.ucore.util.Angles;
|
||||
import io.anuke.ucore.util.Mathf;
|
||||
|
||||
public class EnvironmentFx extends FxList implements ContentList {
|
||||
public class EnvironmentFx extends FxList implements ContentList{
|
||||
public static Effect burning, fire, smoke, steam, fireballsmoke, ballfire, freezing, melting, wet, oily;
|
||||
|
||||
@Override
|
||||
public void load() {
|
||||
public void load(){
|
||||
|
||||
burning = new Effect(35f, e -> {
|
||||
Draw.color(Palette.lightFlame, Palette.darkFlame, e.fin());
|
||||
|
||||
@@ -10,11 +10,11 @@ import io.anuke.ucore.graphics.Lines;
|
||||
import io.anuke.ucore.util.Angles;
|
||||
import io.anuke.ucore.util.Mathf;
|
||||
|
||||
public class ExplosionFx extends FxList implements ContentList {
|
||||
public class ExplosionFx extends FxList implements ContentList{
|
||||
public static Effect shockwave, bigShockwave, nuclearShockwave, explosion, blockExplosion, blockExplosionSmoke;
|
||||
|
||||
@Override
|
||||
public void load() {
|
||||
public void load(){
|
||||
|
||||
shockwave = new Effect(10f, 80f, e -> {
|
||||
Draw.color(Color.WHITE, Color.LIGHT_GRAY, e.fin());
|
||||
|
||||
@@ -11,59 +11,59 @@ import io.anuke.ucore.util.Angles;
|
||||
|
||||
import static io.anuke.mindustry.Vars.tilesize;
|
||||
|
||||
public class Fx extends FxList implements ContentList {
|
||||
public static Effect none, placeBlock, breakBlock, smoke, spawn, tapBlock, select;
|
||||
public class Fx extends FxList implements ContentList{
|
||||
public static Effect none, placeBlock, breakBlock, smoke, spawn, tapBlock, select;
|
||||
|
||||
@Override
|
||||
public void load() {
|
||||
@Override
|
||||
public void load(){
|
||||
|
||||
none = new Effect(0, 0f, e -> {
|
||||
});
|
||||
none = new Effect(0, 0f, e -> {
|
||||
});
|
||||
|
||||
placeBlock = new Effect(16, e -> {
|
||||
Draw.color(Palette.accent);
|
||||
Lines.stroke(3f - e.fin() * 2f);
|
||||
Lines.square(e.x, e.y, tilesize / 2f * e.rotation + e.fin() * 3f);
|
||||
Draw.reset();
|
||||
});
|
||||
placeBlock = new Effect(16, e -> {
|
||||
Draw.color(Palette.accent);
|
||||
Lines.stroke(3f - e.fin() * 2f);
|
||||
Lines.square(e.x, e.y, tilesize / 2f * e.rotation + e.fin() * 3f);
|
||||
Draw.reset();
|
||||
});
|
||||
|
||||
tapBlock = new Effect(12, e -> {
|
||||
Draw.color(Palette.accent);
|
||||
Lines.stroke(3f - e.fin() * 2f);
|
||||
Lines.circle(e.x, e.y, 4f + (tilesize/1.5f * e.rotation) * e.fin());
|
||||
Draw.reset();
|
||||
});
|
||||
tapBlock = new Effect(12, e -> {
|
||||
Draw.color(Palette.accent);
|
||||
Lines.stroke(3f - e.fin() * 2f);
|
||||
Lines.circle(e.x, e.y, 4f + (tilesize / 1.5f * e.rotation) * e.fin());
|
||||
Draw.reset();
|
||||
});
|
||||
|
||||
breakBlock = new Effect(12, e -> {
|
||||
Draw.color(Palette.remove);
|
||||
Lines.stroke(3f - e.fin() * 2f);
|
||||
Lines.square(e.x, e.y, tilesize / 2f * e.rotation + e.fin() * 3f);
|
||||
breakBlock = new Effect(12, e -> {
|
||||
Draw.color(Palette.remove);
|
||||
Lines.stroke(3f - e.fin() * 2f);
|
||||
Lines.square(e.x, e.y, tilesize / 2f * e.rotation + e.fin() * 3f);
|
||||
|
||||
Angles.randLenVectors(e.id, 3 + (int) (e.rotation * 3), e.rotation * 2f + (tilesize * e.rotation) * e.finpow(), (x, y) -> {
|
||||
Fill.square(e.x + x, e.y + y, 1f + e.fout() * (3f + e.rotation));
|
||||
});
|
||||
Draw.reset();
|
||||
});
|
||||
Angles.randLenVectors(e.id, 3 + (int) (e.rotation * 3), e.rotation * 2f + (tilesize * e.rotation) * e.finpow(), (x, y) -> {
|
||||
Fill.square(e.x + x, e.y + y, 1f + e.fout() * (3f + e.rotation));
|
||||
});
|
||||
Draw.reset();
|
||||
});
|
||||
|
||||
select = new Effect(23, e -> {
|
||||
Draw.color(Palette.accent);
|
||||
Lines.stroke(e.fout() * 3f);
|
||||
Lines.circle(e.x, e.y, 3f + e.fin() * 14f);
|
||||
Draw.reset();
|
||||
});
|
||||
select = new Effect(23, e -> {
|
||||
Draw.color(Palette.accent);
|
||||
Lines.stroke(e.fout() * 3f);
|
||||
Lines.circle(e.x, e.y, 3f + e.fin() * 14f);
|
||||
Draw.reset();
|
||||
});
|
||||
|
||||
smoke = new Effect(100, e -> {
|
||||
Draw.color(Color.GRAY, Palette.darkishGray, e.fin());
|
||||
float size = 7f - e.fin() * 7f;
|
||||
Draw.rect("circle", e.x, e.y, size, size);
|
||||
Draw.reset();
|
||||
});
|
||||
smoke = new Effect(100, e -> {
|
||||
Draw.color(Color.GRAY, Palette.darkishGray, e.fin());
|
||||
float size = 7f - e.fin() * 7f;
|
||||
Draw.rect("circle", e.x, e.y, size, size);
|
||||
Draw.reset();
|
||||
});
|
||||
|
||||
spawn = new Effect(23, e -> {
|
||||
Lines.stroke(2f * e.fout());
|
||||
Draw.color(Palette.accent);
|
||||
Lines.poly(e.x, e.y, 4, 3f + e.fin() * 8f);
|
||||
Draw.reset();
|
||||
});
|
||||
}
|
||||
spawn = new Effect(23, e -> {
|
||||
Lines.stroke(2f * e.fout());
|
||||
Draw.color(Palette.accent);
|
||||
Lines.poly(e.x, e.y, 4, 3f + e.fin() * 8f);
|
||||
Draw.reset();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,7 +7,7 @@ import io.anuke.mindustry.type.ContentList;
|
||||
public abstract class FxList implements ContentList{
|
||||
|
||||
@Override
|
||||
public Array<? extends Content> getAll() {
|
||||
public Array<? extends Content> getAll(){
|
||||
return Array.with();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,11 +12,11 @@ import io.anuke.ucore.graphics.Shapes;
|
||||
import io.anuke.ucore.util.Angles;
|
||||
import io.anuke.ucore.util.Mathf;
|
||||
|
||||
public class ShootFx extends FxList implements ContentList {
|
||||
public class ShootFx extends FxList implements ContentList{
|
||||
public static Effect shootSmall, shootSmallSmoke, shootBig, shootBig2, shootBigSmoke, shootBigSmoke2, shootSmallFlame, shootLiquid, shellEjectSmall, shellEjectMedium, shellEjectBig, lancerLaserShoot, lancerLaserShootSmoke, lancerLaserCharge, lancerLaserChargeBegin, lightningCharge, lightningShoot;
|
||||
|
||||
@Override
|
||||
public void load() {
|
||||
public void load(){
|
||||
|
||||
shootSmall = new Effect(8, e -> {
|
||||
Draw.color(Palette.lighterOrange, Palette.lightOrange, e.fin());
|
||||
@@ -111,7 +111,7 @@ public class ShootFx extends FxList implements ContentList {
|
||||
shellEjectMedium = new GroundEffect(34f, 400f, e -> {
|
||||
Draw.color(Palette.lightOrange, Color.LIGHT_GRAY, Palette.lightishGray, e.fin());
|
||||
float rot = e.rotation + 90f;
|
||||
for (int i : Mathf.signs) {
|
||||
for(int i : Mathf.signs){
|
||||
float len = (2f + e.finpow() * 10f) * i;
|
||||
float lr = rot + e.fin() * 20f * i;
|
||||
Draw.rect("casing",
|
||||
@@ -122,7 +122,7 @@ public class ShootFx extends FxList implements ContentList {
|
||||
|
||||
Draw.color(Color.LIGHT_GRAY, Color.GRAY, e.fin());
|
||||
|
||||
for (int i : Mathf.signs) {
|
||||
for(int i : Mathf.signs){
|
||||
Angles.randLenVectors(e.id, 4, 1f + e.finpow() * 11f, e.rotation + 90f * i, 20f, (x, y) -> {
|
||||
Fill.circle(e.x + x, e.y + y, e.fout() * 1.5f);
|
||||
});
|
||||
@@ -134,7 +134,7 @@ public class ShootFx extends FxList implements ContentList {
|
||||
shellEjectBig = new GroundEffect(22f, 400f, e -> {
|
||||
Draw.color(Palette.lightOrange, Color.LIGHT_GRAY, Palette.lightishGray, e.fin());
|
||||
float rot = e.rotation + 90f;
|
||||
for (int i : Mathf.signs) {
|
||||
for(int i : Mathf.signs){
|
||||
float len = (4f + e.finpow() * 8f) * i;
|
||||
float lr = rot + Mathf.randomSeedRange(e.id + i + 6, 20f * e.fin()) * i;
|
||||
Draw.rect("casing",
|
||||
@@ -146,7 +146,7 @@ public class ShootFx extends FxList implements ContentList {
|
||||
|
||||
Draw.color(Color.LIGHT_GRAY);
|
||||
|
||||
for (int i : Mathf.signs) {
|
||||
for(int i : Mathf.signs){
|
||||
Angles.randLenVectors(e.id, 4, -e.finpow() * 15f, e.rotation + 90f * i, 25f, (x, y) -> {
|
||||
Fill.circle(e.x + x, e.y + y, e.fout() * 2f);
|
||||
});
|
||||
@@ -158,7 +158,7 @@ public class ShootFx extends FxList implements ContentList {
|
||||
lancerLaserShoot = new Effect(21f, e -> {
|
||||
Draw.color(Palette.lancerLaser);
|
||||
|
||||
for (int i : Mathf.signs) {
|
||||
for(int i : Mathf.signs){
|
||||
Shapes.tri(e.x, e.y, 4f * e.fout(), 29f, e.rotation + 90f * i);
|
||||
}
|
||||
|
||||
|
||||