diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md
index bfdc7f59f1..22b6097ec1 100644
--- a/.github/ISSUE_TEMPLATE/bug_report.md
+++ b/.github/ISSUE_TEMPLATE/bug_report.md
@@ -1,6 +1,10 @@
---
name: Bug report
about: Create a report to help fix an issue.
+title: ''
+labels: ''
+assignees: ''
+
---
**Platform**: *Android/iOS/Mac/Windows/Linux*
diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md
index c270d78354..aeb245a20e 100644
--- a/.github/ISSUE_TEMPLATE/feature_request.md
+++ b/.github/ISSUE_TEMPLATE/feature_request.md
@@ -1,7 +1,11 @@
---
name: Feature request
-about: Do not make a new issue for feature requests! Instead, post it on FeatHub, see the README.
+about: Do not make a new issue for feature requests! Instead, post it on FeatHub,
+ see the README.
+title: ''
+labels: invalid
+assignees: ''
---
-**Do not make a new issue for feature requests!** Instead, post it on FeatHub: https://feathub.com/Anuken/Mindustry
+**Do not make a new issue for feature requests!** Instead, post it in suggestions repository: https://github.com/Anuken/Mindustry-Suggestions/issues/new/choose
diff --git a/README.md b/README.md
index 8d1e484093..03152f0cf6 100644
--- a/README.md
+++ b/README.md
@@ -51,6 +51,10 @@ If the terminal returns `Permission denied` or `Command not found` on Mac/Linux,
Gradle may take up to several minutes to download files. Be patient.
After building, the output .JAR file should be in `/desktop/build/libs/Mindustry.jar` for desktop builds, and in `/server/build/libs/server-release.jar` for server builds.
+### Feature Requests
+
+Post feature requests and feedback [here](https://github.com/Anuken/Mindustry-Suggestions/issues/new/choose).
+
### Downloads
[
](https://f-droid.org/packages/io.anuke.mindustry/)
-
-### Feature Requests
-
-[](https://feathub.com/Anuken/Mindustry)
diff --git a/core/assets/bundles/bundle.properties b/core/assets/bundles/bundle.properties
index 070873fc32..782aa54a14 100644
--- a/core/assets/bundles/bundle.properties
+++ b/core/assets/bundles/bundle.properties
@@ -64,7 +64,7 @@ stat.rank = Final Rank: [accent]{0}
launcheditems = [accent]Launched Items
launchinfo = [unlaunched][[LAUNCH] your core to obtain the items indicated in blue.
map.delete = Are you sure you want to delete the map "[accent]{0}[]"?
-level.highscore = High Score: [accent]{0}1
+level.highscore = High Score: [accent]{0}
level.select = Level Select
level.mode = Gamemode:
showagain = Don't show again next session
@@ -788,6 +788,7 @@ rules.title.unit = Units
rules.title.experimental = Experimental
rules.lighting = Lighting
rules.ambientlight = Ambient Light
+rules.solarpowermultiplier = Solar Power Multiplier
content.item.name = Items
content.liquid.name = Liquids
diff --git a/core/assets/bundles/bundle_cs.properties b/core/assets/bundles/bundle_cs.properties
index 1446544f13..b71b09aff8 100644
--- a/core/assets/bundles/bundle_cs.properties
+++ b/core/assets/bundles/bundle_cs.properties
@@ -39,7 +39,6 @@ be.check = Zkontrolovat aktualizace
schematic = Šablona
schematic.add = Uložit šablonu...
schematics = Šablony
-schematic.replace = Šablona tohoto jména již existuje. Chceš ji nahradit?
schematic.import = Importuji šablonu...
schematic.exportfile = Exportovat soubor
schematic.importfile = Importovat soubor
@@ -664,7 +663,7 @@ setting.borderlesswindow.name = Bezokrajové okno[lightgray] (může vyžadovat
setting.fps.name = Ukázat FPS a ping
setting.blockselectkeys.name = Ukázat klávesy při práci s blokem
setting.vsync.name = Vertikální synchronizace
-setting.pixelate.name = Rozpixlovat [lightgray](může snížit výkon)[]
+setting.pixelate.name = Rozpixlovat
setting.minimap.name = Ukázat mapičku
setting.position.name = Ukázat pozici hráče
setting.musicvol.name = Hlasitost hudby
diff --git a/core/assets/bundles/bundle_es.properties b/core/assets/bundles/bundle_es.properties
index adf50c6a94..2ff3ff544f 100644
--- a/core/assets/bundles/bundle_es.properties
+++ b/core/assets/bundles/bundle_es.properties
@@ -174,7 +174,7 @@ hosts.none = [lightgray]¡No se han encontrado partidas LAN!
host.invalid = [scarlet]No se ha podido conectar al anfitrión.
servers.local = Servidores Locales
-servers. remote = Servidores Remotos
+servers.remote = Servidores Remotos
servers.global = Global Servers
trace = Rastrear Jugador
diff --git a/core/assets/bundles/bundle_it.properties b/core/assets/bundles/bundle_it.properties
index 2d3e2b967f..0fdfc04e0b 100644
--- a/core/assets/bundles/bundle_it.properties
+++ b/core/assets/bundles/bundle_it.properties
@@ -39,7 +39,6 @@ be.check = Verifica aggiornamenti
schematic = Schematica
schematic.add = Salva Schematica...
schematics = Schematiche
-schematic.replace = Una schematica con questo nome esiste già. Sostituirla?
schematic.import = Importa schematica
schematic.exportfile = Esporta File
schematic.importfile = Importa File
@@ -664,7 +663,7 @@ setting.borderlesswindow.name = Finestra Senza Bordi[lightgray] (potrebbe richie
setting.fps.name = Mostra FPS e Ping
setting.blockselectkeys.name = Mostra Tasto di Selezione del Blocco
setting.vsync.name = VSync
-setting.pixelate.name = Effetto Pixel [lightgray](potrebbe ridure le prestazioni)
+setting.pixelate.name = Effetto Pixel[lightgray] (disabilita le animazioni)
setting.minimap.name = Mostra Minimappa
setting.position.name = Mostra Posizione Giocatori
setting.musicvol.name = Volume Musica
@@ -789,6 +788,7 @@ rules.title.unit = Unità
rules.title.experimental = Sperimentale
rules.lighting = Illuminazione
rules.ambientlight = Illuminazione\nAmbientale
+rules.solarpowermultiplier = Moltiplicatore Energia Solare
content.item.name = Oggetti
content.liquid.name = Liquidi
@@ -1226,7 +1226,7 @@ block.core-nucleus.description = La terza ed ultima versione del Nucleo. Estrema
block.vault.description = Immagazzina una grande quantità di oggetti. Usalo per creare zone cuscinetto quando c'è una domanda non costante di materiali. Uno [lightgray]scaricatore[] può essere utilizzato per recuperare elementi dal deposito.
block.container.description = Immagazzina una piccola quantità di oggetti. Usalo per creare zone cuscinetto quando c'è una domanda non costante di materiali. Uno [lightgray]scaricatore[] può essere utilizzato per recuperare elementi dal contenitore.
block.unloader.description = Scarica gli oggetti da un contenitore, deposito o Nucleo su un nastro trasportatore o direttamente in un blocco adiacente. L'oggetto da scaricare può essere scelto toccando lo scaricatore.
-block.launch-pad.description = Lancia oggetti nel tuo Nucleo senza necessità di un lasciare la zona.
+block.launch-pad.description = Lancia oggetti nel tuo Nucleo senza necessità di lasciare la zona.
block.launch-pad-large.description = Una versione migliore dell'Ascensore Spaziale, immagazzina più oggetti. Lancia oggetti più frequentemente.
block.duo.description = Una torretta piccola ed economica.
block.scatter.description = Una torretta antiaerea di medie dimensioni. Spara schegge di piombo o frammenti di rottami sulle unità nemiche.
diff --git a/core/assets/bundles/bundle_pl.properties b/core/assets/bundles/bundle_pl.properties
index 6d9f3d3dba..a8c6a3732a 100644
--- a/core/assets/bundles/bundle_pl.properties
+++ b/core/assets/bundles/bundle_pl.properties
@@ -59,6 +59,7 @@ stat.built = Budynki zbudowane:[accent] {0}
stat.destroyed = Budynki zniszczone:[accent] {0}
stat.deconstructed = Budynki zrekonstruowane:[accent] {0}
stat.delivered = Surowce wystrzelone:
+stat.playtime = Czas Gry:[accent] {0}
stat.rank = Ocena: [accent]{0}
launcheditems = [accent]Wystrzelone przedmioty
@@ -388,7 +389,7 @@ toolmode.fillteams.description = Wypełniaj drużyny zamiast bloków.
toolmode.drawteams = Rysuj Drużyny
toolmode.drawteams.description = Rysuj drużyny zamiast bloków.
-filters.empty = [lightgray]Brak filtrów! Dodaj jeden za pomocą przycisku poniżej.
+filters.empty = [lightgray]Brak filtrów! Dodaj jeden za pomocą przycisku poniżej.
filter.distort = Zniekształcanie
filter.noise = Szum
filter.median = Mediana
@@ -531,6 +532,8 @@ error.crashtitle = Wystąpił błąd
blocks.input = Wejście
blocks.output = Wyjście
blocks.booster = Wzmacniacz
+blocks.tiles = Wymagane Pola
+blocks.affinities = Uwydajnienie
block.unknown = [lightgray]???
blocks.powercapacity = Pojemność mocy
blocks.powershot = moc/strzał
@@ -1085,7 +1088,7 @@ item.copper.description = Przydatny materiał budowlany. Szeroko używany w praw
item.lead.description = Podstawowy materiał. Używany w przesyle przemiotów i płynów. Nie jest on przypadkiem szkodliwy?
item.metaglass.description = Wyjątkowo wytrzymały stop szkła. Szeroko używany w transporcie i przechowywaniu płynów.
item.graphite.description = Zmineralizowany węgiel, wykorzystywany do amunicji i izolacji elektrycznej.
-item.sand.description = Zwykły materiał używany pospolicie w przepalaniu, stopach i jako topnik. Dostanie piaskiem po oczach nie jest przyjemne.
+item.sand.description = Zwykły materiał używany pospolicie w przepalaniu, stopach i jako topnik. Dostanie piaskiem po oczach nie jest przyjemne.
item.coal.description = Zwykły i łatwo dostępny materiał energetyczny. Używany powszechnie jako paliwo oraz w produkcji surowców.
item.titanium.description = Rzadki i bardzo lekki materiał. Używany w bardzo zaawansowanym przewodnictwie, wiertłach i samolotach. Poczuj się jak Tytan!
item.thorium.description = Zwarty i radioaktywny materiał używany w strukturach i paliwie nuklearnym. Nie trzymaj go w rękach!
@@ -1169,13 +1172,13 @@ block.bridge-conveyor.description = Zaawansowany blok transportujący. Pozwala n
block.phase-conveyor.description = Zaawansowany blok transportowy dla przedmiotów. Używa energii do teleportacji przedmiotów do połączonego transportera fazowego na spore odległości.
block.sorter.description = Sortuje przedmioty. Jeśli przedmiot pasuje to przechodzi dalej, jeśli nie - to przechodzi na boki.
block.inverted-sorter.description = Sortuje przedmioty jak zwykły sortownik, ale odpowiednie surowce wyciągane są na boki.
-block.router.description = Akceptuje przedmioty z jednego miejsca i rozdziela je do trzech innych kierunków. Przydatne w rozdzielaniu materiałów z jednego źródła do wielu celów.
+block.router.description = Akceptuje przedmioty z jednego miejsca i rozdziela je do trzech innych kierunków. Przydatne w rozdzielaniu materiałów z jednego źródła do wielu celów.\n\n[scarlet]Nigdy nie używaj przy punkcje wejścia materiałów produkcyjnych, ponieważ zostaną one zatkane przez materiały wyjściowe.[]
block.distributor.description = Zaawansowany rozdzielacz, rozdzielający przedmioty do 7 innych kierunków.
block.overflow-gate.description = Rozdzielacz, który przerzuca przedmioty, kiedy główna droga jest przepełniona
block.mass-driver.description = Najlepszy blok do transportu przedmiotów. Zbiera wiele przedmiotów naraz a potem wystrzeliwuje je do kolejnej katapulty masy na bardzo duże odległości.
block.mechanical-pump.description = Tania pompa o niskiej wydajności. Nie wymaga prądu.
block.rotary-pump.description = Zaawansowana pompa. Pompuje więcej cieczy, ale wymaga zasilania.
-block.thermal-pump.description = Najlepsza pompa. Trzy razy szybsza od mechanicznej pompy i jedyna, która może wypompować lawę.
+block.thermal-pump.description = Najlepsza pompa.
block.conduit.description = Podstawowy blok do transportowania cieczy. Używany w połączeniu z pompami i innymi rurami.
block.pulse-conduit.description = Zaawansowany blok do transportowania cieczy. Transportuje je szybciej i magazynuje więcej niż standardowe rury.
block.plated-conduit.description = Przesyła ciecze z taką samą szybkością co rura tytanowa, ale jest bardziej odporna. Wejściami bocznymi mogą być tylko inne rury.\nWycieka z niej mniej cieczy.
@@ -1223,7 +1226,7 @@ block.lancer.description = Średniej wielkości wieżyczka, która po naładowan
block.arc.description = Mała wieża bliskiego zasięgu. Wystrzeliwuje wiązki elektryczne w kierunku wroga.
block.swarmer.description = Średniej wielkości wieżyczka, która wystrzeliwuje rakiety samonaprowadzające.
block.salvo.description = Większa, bardziej zaawansowana wersja Podwójnego Działka, strzelająca szybkimi salwami.
-block.fuse.description = Duża wieża, która strzela potężnymi wiązkami krótkiego zasięgu.
+block.fuse.description = Duża wieża bliskiego zasięgu. Wystrzeliwuje trzy przeszywające wiązki w pobliskich wrogów.
block.ripple.description = Duża wieża artyleryjska, która strzela jednocześnie kilkoma strzałami.
block.cyclone.description = Duża szybkostrzelna wieża.
block.spectre.description = Duże działo dwulufowe, które strzela potężnymi pociskami przebijającymi pancerz w jednostki naziemne i powietrzne.
@@ -1239,7 +1242,7 @@ block.dagger-factory.description = Produkuje podstawowe jednostki lądowe.
block.crawler-factory.description = Produkuje szybkie jednostki lądowe typu "kamikaze".
block.titan-factory.description = Produkuje zaawansowane, opancerzone jednostki lądowe.
block.fortress-factory.description = Produkuje naziemne jednostki ciężkiej artylerii.
-block.repair-point.description = Bez przerw ulecza najbliższą zniszczoną jednostkę w jego zasięgu.
+block.repair-point.description = Bez przerw naprawia najbliższą uszkodzoną jednostkę w jego zasięgu.
block.dart-mech-pad.description = Umożliwia transformację w podstawowego mecha bojowego.\nUżyj klikając podczas stania na nim.
block.delta-mech-pad.description = Opuść swój obecny statek i zamień go na szybki, lekko opancerzony mech stworzony do ataków typu uderz-uciekaj.\nUżyj, klikając dwukrotnie podczas stania na lądowisku.
block.tau-mech-pad.description = Opuść swój obecny statek i zamień go na mech wsparcia który może leczyć sojusznicze struktury i jednostki.\nUżyj, klikając dwukrotnie podczas stania na lądowisku.
diff --git a/core/src/mindustry/core/NetServer.java b/core/src/mindustry/core/NetServer.java
index b840cc7a40..a132727870 100644
--- a/core/src/mindustry/core/NetServer.java
+++ b/core/src/mindustry/core/NetServer.java
@@ -328,7 +328,7 @@ public class NetServer implements ApplicationListener{
votes += d;
voted.addAll(player.uuid, admins.getInfo(player.uuid).lastIP);
- Call.sendMessage(Strings.format("[orange]{0}[lightgray] has voted to kick[orange] {1}[].[accent] ({2}/{3})\n[lightgray]Type[orange] /vote [] to agree.",
+ Call.sendMessage(Strings.format("[orange]{0}[lightgray] has voted on kicking[orange] {1}[].[accent] ({2}/{3})\n[lightgray]Type[orange] /vote [] to agree.",
player.name, target.name, votes, votesRequired()));
}
diff --git a/core/src/mindustry/entities/Units.java b/core/src/mindustry/entities/Units.java
index 67fe01dc9e..30802f380d 100644
--- a/core/src/mindustry/entities/Units.java
+++ b/core/src/mindustry/entities/Units.java
@@ -26,8 +26,8 @@ public class Units{
* Validates a target.
* @param target The target to validate
* @param team The team of the thing doing tha targeting
- * @param x The X position of the thing doign the targeting
- * @param y The Y position of the thing doign the targeting
+ * @param x The X position of the thing doing the targeting
+ * @param y The Y position of the thing doing the targeting
* @param range The maximum distance from the target X/Y the targeter can be for it to be valid
* @return whether the target is invalid
*/
diff --git a/core/src/mindustry/game/Rules.java b/core/src/mindustry/game/Rules.java
index 0515d2ca60..ff946e359c 100644
--- a/core/src/mindustry/game/Rules.java
+++ b/core/src/mindustry/game/Rules.java
@@ -82,6 +82,9 @@ public class Rules{
public boolean lighting = false;
/** Ambient light color, used when lighting is enabled. */
public Color ambientLight = new Color(0.01f, 0.01f, 0.04f, 0.99f);
+ /** Multiplier for solar panel power output.
+ negative = use ambient light if lighting is enabled. */
+ public float solarPowerMultiplier = -1f;
/** team of the player by default */
public Team defaultTeam = Team.sharded;
/** team of the enemy in waves/sectors */
diff --git a/core/src/mindustry/net/Administration.java b/core/src/mindustry/net/Administration.java
index cfd3423608..e071bf7da0 100644
--- a/core/src/mindustry/net/Administration.java
+++ b/core/src/mindustry/net/Administration.java
@@ -230,7 +230,7 @@ public class Administration{
}
/**
- * Returns list of all players with admin status
+ * Returns list of all players which are banned
*/
public Array getBanned(){
Array result = new Array<>();
diff --git a/core/src/mindustry/ui/dialogs/CustomRulesDialog.java b/core/src/mindustry/ui/dialogs/CustomRulesDialog.java
index c65efdd919..42ae294123 100644
--- a/core/src/mindustry/ui/dialogs/CustomRulesDialog.java
+++ b/core/src/mindustry/ui/dialogs/CustomRulesDialog.java
@@ -172,6 +172,7 @@ public class CustomRulesDialog extends FloatingDialog{
number("$rules.enemycorebuildradius", f -> rules.enemyCoreBuildRadius = f * tilesize, () -> Math.min(rules.enemyCoreBuildRadius / tilesize, 200));
title("$rules.title.experimental");
+ number("$rules.solarpowermultiplier", f -> rules.solarPowerMultiplier = f, () -> rules.solarPowerMultiplier);
check("$rules.lighting", b -> rules.lighting = b, () -> rules.lighting);
main.addButton(b -> {
diff --git a/core/src/mindustry/world/blocks/power/SolarGenerator.java b/core/src/mindustry/world/blocks/power/SolarGenerator.java
index 75a23c9d6f..cd7efdb5ed 100644
--- a/core/src/mindustry/world/blocks/power/SolarGenerator.java
+++ b/core/src/mindustry/world/blocks/power/SolarGenerator.java
@@ -17,7 +17,7 @@ public class SolarGenerator extends PowerGenerator{
@Override
public void update(Tile tile){
- tile.ent().productionEfficiency = state.rules.lighting ? 1f - state.rules.ambientLight.a : 1f;
+ tile.ent().productionEfficiency = state.rules.solarPowerMultiplier < 0 ? (state.rules.lighting ? 1f - state.rules.ambientLight.a : 1f) : state.rules.solarPowerMultiplier;
}
@Override