Merge branch 'Anuken:master' into do-you-hear-the-voices-too
This commit is contained in:
@@ -17,8 +17,10 @@ jobs:
|
||||
java-version: 17
|
||||
- name: Setup Gradle
|
||||
uses: gradle/gradle-build-action@v2
|
||||
- name: Run unit tests
|
||||
run: ./gradlew tests:test --stacktrace --rerun
|
||||
- name: Run unit tests and build JAR
|
||||
run: ./gradlew test desktop:dist
|
||||
run: ./gradlew desktop:dist
|
||||
- name: Upload desktop JAR for testing
|
||||
uses: actions/upload-artifact@v2
|
||||
with:
|
||||
|
||||
@@ -57,4 +57,4 @@ jobs:
|
||||
git push https://Anuken:${{ secrets.API_TOKEN_GITHUB }}@github.com/Anuken/MindustryJitpack
|
||||
cd ../Mindustry
|
||||
- name: Run unit tests
|
||||
run: ./gradlew clean cleanTest test --stacktrace
|
||||
run: ./gradlew tests:test --rerun --stacktrace
|
||||
|
||||
+6
-3
@@ -18,13 +18,16 @@ You'll need to either hire some moderators, or make use of (currently non-existe
|
||||
4. **Get some good maps.** *(optional, but highly recommended)*. Add some maps to your server and set the map rotation to custom-only. You can get maps from the Steam workshop by subscribing and exporting them; using the `#maps` channel on Discord is also an option.
|
||||
5. **Check your server configuration.** *(optional)* I would recommend adding a message rate limit of 1 second (`config messageRateLimit 1`), and disabling connect/disconnect messages to reduce spam (`config showConnectMessages false`).
|
||||
6. Finally, **submit a pull request** to add your server's IP to the list.
|
||||
This should be fairly straightforward: Press the edit button on the [server file](https://github.com/Anuken/Mindustry/blob/master/servers_v7.json), then add a JSON object with a single key, indicating your server address.
|
||||
For example, if your server address is `example.com:6000`, you would add a comma after the last entry and insert:
|
||||
This should be fairly straightforward: Press the edit button on the [server file](https://github.com/Anuken/Mindustry/blob/master/servers_v7.json), then add a JSON object with the following format:
|
||||
```json
|
||||
{
|
||||
"address": "example.com:6000"
|
||||
"name": "Your Server Group Name",
|
||||
"address": ["your.server.address"]
|
||||
}
|
||||
```
|
||||
|
||||
If your group has multiple servers, simply add extra addresses inside the square brackets, separated by commas. For example: `["address1", "address2"]`
|
||||
|
||||
> Note that Mindustry also support SRV records. This allows you to use a subdomain for your server address instead of specifying the port. For example, if you want to use `play.example.com` instead of `example.com:6000`, in the dns settings of your domain, add an SRV record with `_mindustry` as the service, `tcp` as the protocol, `play` as the target and `6000` as the port. You can also setup fallback servers by modifying the weight or priority of the record. Although SRV records are very convenient, keep in mind they are slower than regular addresses. Avoid using them in the server list, but rather as an easy way to share your server address.
|
||||
|
||||
Then, press the *'submit pull request'* button and I'll take a look at your server. If I have any issues with it, I'll let you know in the PR comments.
|
||||
|
||||
+1
-1
@@ -185,7 +185,7 @@ allprojects{
|
||||
|
||||
tasks.withType(JavaCompile){
|
||||
targetCompatibility = 8
|
||||
sourceCompatibility = JavaVersion.VERSION_16
|
||||
sourceCompatibility = JavaVersion.VERSION_17
|
||||
options.encoding = "UTF-8"
|
||||
options.compilerArgs += ["-Xlint:deprecation"]
|
||||
dependsOn clearCache
|
||||
|
||||
BIN
Binary file not shown.
|
After Width: | Height: | Size: 510 B |
@@ -501,6 +501,7 @@ editor.default = [lightgray]<Default>
|
||||
details = Details...
|
||||
edit = Edit
|
||||
variables = Vars
|
||||
logic.globals = Built-in Variables
|
||||
editor.name = Name:
|
||||
editor.spawn = Spawn Unit
|
||||
editor.removeunit = Remove Unit
|
||||
@@ -613,7 +614,7 @@ filter.option.threshold2 = Secondary Threshold
|
||||
filter.option.radius = Radius
|
||||
filter.option.percentile = Percentile
|
||||
|
||||
locales.info = Here, you can add locale bundles for specific languages to your map. In locale bundles, each property has a name and a value. These properties can be used by world processors and objectives using their names. They support text formatting (replacing placeholders with actual values).\n\n[cyan]Example property:\n[]name: [accent]timer[]\nvalue: [accent]Example timer, time left: @[]\n\n[cyan]Usage:\n[]Set it as objective's text: [accent]@timer\n\n[]Print it in a world processor:\n[accent]localeprint "timer"\nformat time\n[gray](where time is a separately calculated variable)
|
||||
locales.info = Here, you can add locale bundles for specific languages to your map. In locale bundles, each property has a name and a value. These properties can be used by world processors and objectives using their names. They support text formatting (replacing placeholders with actual values).\n\n[cyan]Example property:\n[]name: [accent]timer[]\nvalue: [accent]Example timer, time left: {0}[]\n\n[cyan]Usage:\n[]Set it as objective's text: [accent]@timer\n\n[]Print it in a world processor:\n[accent]localeprint "timer"\nformat time\n[gray](where time is a separately calculated variable)
|
||||
locales.deletelocale = Are you sure you want to delete this locale bundle?
|
||||
locales.applytoall = Apply Changes To All Locales
|
||||
locales.addtoother = Add To Other Locales
|
||||
@@ -682,10 +683,11 @@ objective.commandmode.name = Command Mode
|
||||
objective.flag.name = Flag
|
||||
|
||||
marker.shapetext.name = Shape Text
|
||||
marker.minimap.name = Minimap
|
||||
marker.point.name = Point
|
||||
marker.shape.name = Shape
|
||||
marker.text.name = Text
|
||||
marker.line.name = Line
|
||||
marker.quad.name = Quad
|
||||
|
||||
marker.background = Background
|
||||
marker.outline = Outline
|
||||
@@ -773,8 +775,8 @@ sector.curlost = Sector Lost
|
||||
sector.missingresources = [scarlet]Insufficient Core Resources
|
||||
sector.attacked = Sector [accent]{0}[white] under attack!
|
||||
sector.lost = Sector [accent]{0}[white] lost!
|
||||
#note: the missing space in the line below is intentional
|
||||
sector.capture = Sector [accent]{0}[white]Captured!
|
||||
sector.capture = Sector [accent]{0}[white] Captured!
|
||||
sector.capture.current = Sector Captured!
|
||||
sector.changeicon = Change Icon
|
||||
sector.noswitch.title = Unable to Switch Sectors
|
||||
sector.noswitch = You may not switch sectors while an existing sector is under attack.\n\nSector: [accent]{0}[] on [accent]{1}[]
|
||||
@@ -1564,6 +1566,7 @@ block.inverted-sorter.name = Inverted Sorter
|
||||
block.message.name = Message
|
||||
block.reinforced-message.name = Reinforced Message
|
||||
block.world-message.name = World Message
|
||||
block.world-switch.name = World Switch
|
||||
block.illuminator.name = Illuminator
|
||||
block.overflow-gate.name = Overflow Gate
|
||||
block.underflow-gate.name = Underflow Gate
|
||||
@@ -2329,6 +2332,49 @@ lst.makemarker = Create a new logic marker in the world.\nAn ID to identify this
|
||||
lst.setmarker = Set a property for a marker.\nThe ID used must be the same as in the Make Marker instruction.\n[accent]null []values are ignored.
|
||||
lst.localeprint = Add map locale property value to the text buffer.\nTo set map locale bundles in map editor, check [accent]Map Info > Locale Bundles[].\nIf client is a mobile device, tries to print a property ending in ".mobile" first.
|
||||
|
||||
lglobal.false = 0
|
||||
lglobal.true = 1
|
||||
lglobal.null = null
|
||||
lglobal.@pi = The mathematical constant pi (3.141...)
|
||||
lglobal.@e = The mathematical constant e (2.718...)
|
||||
lglobal.@degToRad = Multiply by this number to convert degrees to radians
|
||||
lglobal.@radToDeg = Multiply by this number to convert radians to degrees
|
||||
|
||||
lglobal.@time = Playtime of current save, in milliseconds
|
||||
lglobal.@tick = Playtime of current save, in ticks (1 second = 60 ticks)
|
||||
lglobal.@second = Playtime of current save, in seconds
|
||||
lglobal.@minute = Playtime of current save, in minutes
|
||||
lglobal.@waveNumber = Current wave number, if waves are enabled
|
||||
lglobal.@waveTime = Countdown timer for waves, in seconds
|
||||
lglobal.@mapw = Map width in tiles
|
||||
lglobal.@maph = Map height in tiles
|
||||
|
||||
lglobal.sectionMap = Map
|
||||
lglobal.sectionGeneral = General
|
||||
lglobal.sectionNetwork = Network/Clientside [World Processor Only]
|
||||
lglobal.sectionProcessor = Processor
|
||||
lglobal.sectionLookup = Lookup
|
||||
|
||||
lglobal.@this = The logic block executing the code
|
||||
lglobal.@thisx = X coordinate of block executing the code
|
||||
lglobal.@thisy = Y coordinate of block executing the code
|
||||
lglobal.@links = Total number of blocks linked to this processors
|
||||
lglobal.@ipt = Execution speed of the processor in instructions per tick (60 ticks = 1 second)
|
||||
|
||||
lglobal.@unitCount = Total number of types of unit content in the game; used with the lookup instruction
|
||||
lglobal.@blockCount = Total number of types of block content in the game; used with the lookup instruction
|
||||
lglobal.@itemCount = Total number of types of item content in the game; used with the lookup instruction
|
||||
lglobal.@liquidCount = Total number of types of liquid content in the game; used with the lookup instruction
|
||||
|
||||
lglobal.@server = True if the code is running on a server or in singleplayer, false otherwise
|
||||
lglobal.@client = True if the code is running on a client connected to a server
|
||||
|
||||
lglobal.@clientLocale = Locale of the client running the code. For example: en_US
|
||||
lglobal.@clientUnit = Unit of client running the code
|
||||
lglobal.@clientName = Player name of client running the code
|
||||
lglobal.@clientTeam = Team ID of client running the code
|
||||
lglobal.@clientMobile = True if the client running the code is on mobile, false otherwise
|
||||
|
||||
logic.nounitbuild = [red]Unit building logic is not allowed here.
|
||||
|
||||
lenum.type = Type of building/unit.\ne.g. for any router, this will return [accent]@router[].\nNot a string.
|
||||
@@ -2485,3 +2531,6 @@ lenum.flushtext = Flush print buffer's content to marker, if applicable.\nIf fet
|
||||
lenum.texture = Texture name straight from game's texture atlas (using kebab-case naming style).\nIf printFlush is set to true, consumes text buffer content as text argument.
|
||||
lenum.texturesize = Size of texture in tiles. Zero value scales marker width to original texture's size.
|
||||
lenum.autoscale = Whether to scale marker corresponding to player's zoom level.
|
||||
lenum.posi = Indexed position, used for line and quad markers with index zero being the first position.
|
||||
lenum.uvi = Texture's position ranging from zero to one, used for quad markers.
|
||||
lenum.colori = Indexed color, used for line and quad markers with index zero being the first color.
|
||||
|
||||
@@ -489,6 +489,7 @@ editor.default = [lightgray]<Па змаўчанні>
|
||||
details = Падрабязнасці...
|
||||
edit = Рэдагаваць...
|
||||
variables = Пераменныя
|
||||
logic.globals = Built-in Variables
|
||||
editor.name = Назва:
|
||||
editor.spawn = Стварыць баявую адзінку
|
||||
editor.removeunit = Выдаліць баявую адзінку
|
||||
@@ -664,10 +665,11 @@ objective.destroycore.name = Знішчыць Ядро
|
||||
objective.commandmode.name = Рэжым Загадаў
|
||||
objective.flag.name = Сцяг
|
||||
marker.shapetext.name = Форма Тэксту
|
||||
marker.minimap.name = Міні-Мапа
|
||||
marker.point.name = Point
|
||||
marker.shape.name = Форма
|
||||
marker.text.name = Тэкст
|
||||
marker.line.name = Line
|
||||
marker.quad.name = Quad
|
||||
marker.background = Задні Фон
|
||||
marker.outline = Контур
|
||||
objective.research = [accent]Даследаваць:\n[]{0}[lightgray]{1}
|
||||
@@ -751,6 +753,7 @@ sector.missingresources = [scarlet]Insufficient Core Resources
|
||||
sector.attacked = Сектар [accent]{0}[white] атакуецца!
|
||||
sector.lost = Сектар [accent]{0}[white] згублены!
|
||||
sector.capture = Sector [accent]{0}[white]Captured!
|
||||
sector.capture.current = Sector Captured!
|
||||
sector.changeicon = Змяніць Іконку
|
||||
sector.noswitch.title = Немагчыма Пераключыцца на Сектар
|
||||
sector.noswitch = Вы не можаце пераключацца на сектары калі гэты сектар атакуецца.\n\nСектар: [accent]{0}[] у [accent]{1}[]
|
||||
@@ -1529,6 +1532,7 @@ block.inverted-sorter.name = Інвертаваны сартавальнік
|
||||
block.message.name = Паведамленне
|
||||
block.reinforced-message.name = Узмоцненнае Паведамленне
|
||||
block.world-message.name = Паведамленне Свету
|
||||
block.world-switch.name = World Switch
|
||||
block.illuminator.name = Асвятляльнік
|
||||
block.overflow-gate.name = Залішнi затвор
|
||||
block.underflow-gate.name = Залішнi шлюз
|
||||
@@ -2276,6 +2280,42 @@ lst.sync = Sync a variable across the network.\nOnly invoked 10 times a second a
|
||||
lst.makemarker = Create a new logic marker in the world.\nAn ID to identify this marker must be provided.\nMarkers currently limited to 20,000 per world.
|
||||
lst.setmarker = Set a property for a marker.\nThe ID used must be the same as in the Make Marker instruction.
|
||||
lst.localeprint = Add map locale property value to the text buffer.\nTo set map locale bundles in map editor, check [accent]Map Info > Locale Bundles[].\nIf client is a mobile device, tries to print a property ending in ".mobile" first.
|
||||
lglobal.false = 0
|
||||
lglobal.true = 1
|
||||
lglobal.null = null
|
||||
lglobal.@pi = The mathematical constant pi (3.141...)
|
||||
lglobal.@e = The mathematical constant e (2.718...)
|
||||
lglobal.@degToRad = Multiply by this number to convert degrees to radians
|
||||
lglobal.@radToDeg = Multiply by this number to convert radians to degrees
|
||||
lglobal.@time = Playtime of current save, in milliseconds
|
||||
lglobal.@tick = Playtime of current save, in ticks (1 second = 60 ticks)
|
||||
lglobal.@second = Playtime of current save, in seconds
|
||||
lglobal.@minute = Playtime of current save, in minutes
|
||||
lglobal.@waveNumber = Current wave number, if waves are enabled
|
||||
lglobal.@waveTime = Countdown timer for waves, in seconds
|
||||
lglobal.@mapw = Map width in tiles
|
||||
lglobal.@maph = Map height in tiles
|
||||
lglobal.sectionMap = Map
|
||||
lglobal.sectionGeneral = General
|
||||
lglobal.sectionNetwork = Network/Clientside [World Processor Only]
|
||||
lglobal.sectionProcessor = Processor
|
||||
lglobal.sectionLookup = Lookup
|
||||
lglobal.@this = The logic block executing the code
|
||||
lglobal.@thisx = X coordinate of block executing the code
|
||||
lglobal.@thisy = Y coordinate of block executing the code
|
||||
lglobal.@links = Total number of blocks linked to this processors
|
||||
lglobal.@ipt = Execution speed of the processor in instructions per tick (60 ticks = 1 second)
|
||||
lglobal.@unitCount = Total number of types of unit content in the game; used with the lookup instruction
|
||||
lglobal.@blockCount = Total number of types of block content in the game; used with the lookup instruction
|
||||
lglobal.@itemCount = Total number of types of item content in the game; used with the lookup instruction
|
||||
lglobal.@liquidCount = Total number of types of liquid content in the game; used with the lookup instruction
|
||||
lglobal.@server = True if the code is running on a server or in singleplayer, false otherwise
|
||||
lglobal.@client = True if the code is running on a client connected to a server
|
||||
lglobal.@clientLocale = Locale of the client running the code. For example: en_US
|
||||
lglobal.@clientUnit = Unit of client running the code
|
||||
lglobal.@clientName = Player name of client running the code
|
||||
lglobal.@clientTeam = Team ID of client running the code
|
||||
lglobal.@clientMobile = True is the client running the code is on mobile, false otherwise
|
||||
logic.nounitbuild = [red]Unit building logic is not allowed here.
|
||||
lenum.type = Type of building/unit.\ne.g. for any router, this will return [accent]@router[].\nNot a string.
|
||||
lenum.shoot = Shoot at a position.
|
||||
@@ -2412,3 +2452,6 @@ lenum.flushtext = Flush print buffer's content to marker, if applicable.\nIf fet
|
||||
lenum.texture = Texture name straight from game's texture atlas (using kebab-case naming style).\nIf printFlush is set to true, consumes text buffer content as text argument.
|
||||
lenum.texturesize = Size of texture in tiles. Zero value scales marker width to original texture's size.
|
||||
lenum.autoscale = Whether to scale marker corresponding to player's zoom level.
|
||||
lenum.posi = Indexed position, used for line and quad markers with index zero being the first position.
|
||||
lenum.uvi = Texture's position ranging from zero to one, used for quad markers.
|
||||
lenum.colori = Indexed position, used for line and quad markers with index zero being the first color.
|
||||
|
||||
@@ -495,6 +495,7 @@ editor.default = [lightgray]<Стандартно>
|
||||
details = Детайли...
|
||||
edit = Редактирай...
|
||||
variables = Vars
|
||||
logic.globals = Built-in Variables
|
||||
editor.name = Име:
|
||||
editor.spawn = Създай Единица
|
||||
editor.removeunit = Премахни Единица
|
||||
@@ -670,10 +671,11 @@ objective.destroycore.name = Destroy Core
|
||||
objective.commandmode.name = Command Mode
|
||||
objective.flag.name = Flag
|
||||
marker.shapetext.name = Shape Text
|
||||
marker.minimap.name = Minimap
|
||||
marker.point.name = Point
|
||||
marker.shape.name = Shape
|
||||
marker.text.name = Text
|
||||
marker.line.name = Line
|
||||
marker.quad.name = Quad
|
||||
marker.background = Background
|
||||
marker.outline = Outline
|
||||
objective.research = [accent]Research:\n[]{0}[lightgray]{1}
|
||||
@@ -758,6 +760,7 @@ sector.missingresources = [scarlet]Недостатъчни ресурси в я
|
||||
sector.attacked = Зона [accent]{0}[white] е под атака!
|
||||
sector.lost = Зона [accent]{0}[white] беше загубена!
|
||||
sector.capture = Sector [accent]{0}[white]Captured!
|
||||
sector.capture.current = Sector Captured!
|
||||
sector.changeicon = Change Icon
|
||||
sector.noswitch.title = Unable to Switch Sectors
|
||||
sector.noswitch = You may not switch sectors while an existing sector is under attack.\n\nSector: [accent]{0}[] on [accent]{1}[]
|
||||
@@ -1540,6 +1543,7 @@ block.inverted-sorter.name = Обърнат сортирач
|
||||
block.message.name = Съобщение
|
||||
block.reinforced-message.name = Reinforced Message
|
||||
block.world-message.name = World Message
|
||||
block.world-switch.name = World Switch
|
||||
block.illuminator.name = Осветител
|
||||
block.overflow-gate.name = Преливаща Порта
|
||||
block.underflow-gate.name = Обратна Преливаща Порта
|
||||
@@ -2290,6 +2294,42 @@ lst.sync = Sync a variable across the network.\nOnly invoked 10 times a second a
|
||||
lst.makemarker = Create a new logic marker in the world.\nAn ID to identify this marker must be provided.\nMarkers currently limited to 20,000 per world.
|
||||
lst.setmarker = Set a property for a marker.\nThe ID used must be the same as in the Make Marker instruction.
|
||||
lst.localeprint = Add map locale property value to the text buffer.\nTo set map locale bundles in map editor, check [accent]Map Info > Locale Bundles[].\nIf client is a mobile device, tries to print a property ending in ".mobile" first.
|
||||
lglobal.false = 0
|
||||
lglobal.true = 1
|
||||
lglobal.null = null
|
||||
lglobal.@pi = The mathematical constant pi (3.141...)
|
||||
lglobal.@e = The mathematical constant e (2.718...)
|
||||
lglobal.@degToRad = Multiply by this number to convert degrees to radians
|
||||
lglobal.@radToDeg = Multiply by this number to convert radians to degrees
|
||||
lglobal.@time = Playtime of current save, in milliseconds
|
||||
lglobal.@tick = Playtime of current save, in ticks (1 second = 60 ticks)
|
||||
lglobal.@second = Playtime of current save, in seconds
|
||||
lglobal.@minute = Playtime of current save, in minutes
|
||||
lglobal.@waveNumber = Current wave number, if waves are enabled
|
||||
lglobal.@waveTime = Countdown timer for waves, in seconds
|
||||
lglobal.@mapw = Map width in tiles
|
||||
lglobal.@maph = Map height in tiles
|
||||
lglobal.sectionMap = Map
|
||||
lglobal.sectionGeneral = General
|
||||
lglobal.sectionNetwork = Network/Clientside [World Processor Only]
|
||||
lglobal.sectionProcessor = Processor
|
||||
lglobal.sectionLookup = Lookup
|
||||
lglobal.@this = The logic block executing the code
|
||||
lglobal.@thisx = X coordinate of block executing the code
|
||||
lglobal.@thisy = Y coordinate of block executing the code
|
||||
lglobal.@links = Total number of blocks linked to this processors
|
||||
lglobal.@ipt = Execution speed of the processor in instructions per tick (60 ticks = 1 second)
|
||||
lglobal.@unitCount = Total number of types of unit content in the game; used with the lookup instruction
|
||||
lglobal.@blockCount = Total number of types of block content in the game; used with the lookup instruction
|
||||
lglobal.@itemCount = Total number of types of item content in the game; used with the lookup instruction
|
||||
lglobal.@liquidCount = Total number of types of liquid content in the game; used with the lookup instruction
|
||||
lglobal.@server = True if the code is running on a server or in singleplayer, false otherwise
|
||||
lglobal.@client = True if the code is running on a client connected to a server
|
||||
lglobal.@clientLocale = Locale of the client running the code. For example: en_US
|
||||
lglobal.@clientUnit = Unit of client running the code
|
||||
lglobal.@clientName = Player name of client running the code
|
||||
lglobal.@clientTeam = Team ID of client running the code
|
||||
lglobal.@clientMobile = True is the client running the code is on mobile, false otherwise
|
||||
|
||||
logic.nounitbuild = [red]Действия за строене на единици не са позволени тук.
|
||||
|
||||
@@ -2442,3 +2482,6 @@ lenum.flushtext = Flush print buffer's content to marker, if applicable.\nIf fet
|
||||
lenum.texture = Texture name straight from game's texture atlas (using kebab-case naming style).\nIf printFlush is set to true, consumes text buffer content as text argument.
|
||||
lenum.texturesize = Size of texture in tiles. Zero value scales marker width to original texture's size.
|
||||
lenum.autoscale = Whether to scale marker corresponding to player's zoom level.
|
||||
lenum.posi = Indexed position, used for line and quad markers with index zero being the first position.
|
||||
lenum.uvi = Texture's position ranging from zero to one, used for quad markers.
|
||||
lenum.colori = Indexed position, used for line and quad markers with index zero being the first color.
|
||||
|
||||
@@ -495,6 +495,7 @@ editor.default = [lightgray]<Per defecte>
|
||||
details = Detalls
|
||||
edit = Edita
|
||||
variables = Variables
|
||||
logic.globals = Built-in Variables
|
||||
editor.name = Nom:
|
||||
editor.spawn = Genera una unitat
|
||||
editor.removeunit = Treu una unitat
|
||||
@@ -673,10 +674,11 @@ objective.destroycore.name = Destrueix el nucli
|
||||
objective.commandmode.name = Mode de comandament
|
||||
objective.flag.name = Bandera
|
||||
marker.shapetext.name = Forma del text
|
||||
marker.minimap.name = Minimapa
|
||||
marker.point.name = Punt
|
||||
marker.shape.name = Forma
|
||||
marker.text.name = Text
|
||||
marker.line.name = Línia
|
||||
marker.quad.name = Rectangle
|
||||
marker.background = Fons
|
||||
marker.outline = Contorn
|
||||
|
||||
@@ -761,7 +763,8 @@ sector.curlost = Sector perdut
|
||||
sector.missingresources = [scarlet]Recursos insuficients al nucli
|
||||
sector.attacked = Ataquen el sector [accent]{0}[white]!
|
||||
sector.lost = Heu perdut el sector [accent]{0}[white]!
|
||||
sector.capture = Sector [accent]{0}[white]Captured!
|
||||
sector.capture = S’ha capturat el sector [accent]{0}[white]!
|
||||
sector.capture.current = Sector capturat!
|
||||
sector.changeicon = Canvia la icona
|
||||
sector.noswitch.title = Els sectors no es poden canviar.
|
||||
sector.noswitch = Potser no podeu canviar de sector perquè n’ataquen un altre.\n\nSector: [accent]{0}[] de [accent]{1}[]
|
||||
@@ -1142,7 +1145,7 @@ setting.sfxvol.name = Volums dels efectes de so
|
||||
setting.mutesound.name = Silencia el so
|
||||
setting.crashreport.name = Envia informes d’error anònims
|
||||
setting.savecreate.name = Desa automàticament la partida
|
||||
setting.steampublichost.name = Public Game Visibility
|
||||
setting.steampublichost.name = Visibilitat de la partida pública
|
||||
setting.playerlimit.name = Límit de jugadors
|
||||
setting.chatopacity.name = Opacitat del xat
|
||||
setting.lasersopacity.name = Opacitat dels làsers d’energia
|
||||
@@ -1547,6 +1550,7 @@ block.inverted-sorter.name = Classificador invers
|
||||
block.message.name = Missatge
|
||||
block.reinforced-message.name = Missatge destacat
|
||||
block.world-message.name = Missatge mundial
|
||||
block.world-switch.name = Interruptor mundial
|
||||
block.illuminator.name = Il·luminador
|
||||
block.overflow-gate.name = Porta de desbordament
|
||||
block.underflow-gate.name = Porta de subdesbordament
|
||||
@@ -1907,7 +1911,7 @@ onset.turrets = Les unitats són efectives, però les [accent]torretes[] proporc
|
||||
onset.turretammo = Subministreu [accent]munició de beril·li[] a la torreta.
|
||||
onset.walls = Els [accent]murs[] poden evitar que el dany arribi a les estructures importants.\nConstruïu alguns \uf6ee [accent]murs de beril·li[] al voltant de la torreta.
|
||||
onset.enemies = S’apropa un enemic. Prepareu la defensa.
|
||||
onset.defenses = [accent]Set up defenses:[lightgray] {0}
|
||||
onset.defenses = [accent]Establiu defenses:[lightgray] {0}
|
||||
onset.attack = L’enemic és vulnerable. Contraataqueu.
|
||||
onset.cores = Els nuclis nous es poden construir en [accent]caselles de nucli[].\nEls nuclis nous funcionen com a bases i comparteixen un inventari de recursos amb altres nuclis.\nConstruïu un \uf725 nucli.
|
||||
onset.detect = L’enemic us detectarà d’aquí 2 minuts.\nEstabliu les defenses i les explotacions mineres i de producció.
|
||||
@@ -2300,6 +2304,42 @@ lst.sync = Sincronitza una variable a través de la xarxa.\nS’invoca com a mol
|
||||
lst.makemarker = Crea una marca lògica al món.\nS’ha de donar un ID per a identificar-la.\nEs poden establir fins a 20.000 marcadors per món.
|
||||
lst.setmarker = Estableix una propietat per a la marca.\nL’ID que es faci servir ha de ser el mateix que el de la instrucció de crear la marca.
|
||||
lst.localeprint = Add map locale property value to the text buffer.\nTo set map locale bundles in map editor, check [accent]Map Info > Locale Bundles[].\nIf client is a mobile device, tries to print a property ending in ".mobile" first.
|
||||
lglobal.false = 0
|
||||
lglobal.true = 1
|
||||
lglobal.null = null
|
||||
lglobal.@pi = The mathematical constant pi (3.141...)
|
||||
lglobal.@e = The mathematical constant e (2.718...)
|
||||
lglobal.@degToRad = Multiply by this number to convert degrees to radians
|
||||
lglobal.@radToDeg = Multiply by this number to convert radians to degrees
|
||||
lglobal.@time = Playtime of current save, in milliseconds
|
||||
lglobal.@tick = Playtime of current save, in ticks (1 second = 60 ticks)
|
||||
lglobal.@second = Playtime of current save, in seconds
|
||||
lglobal.@minute = Playtime of current save, in minutes
|
||||
lglobal.@waveNumber = Current wave number, if waves are enabled
|
||||
lglobal.@waveTime = Countdown timer for waves, in seconds
|
||||
lglobal.@mapw = Map width in tiles
|
||||
lglobal.@maph = Map height in tiles
|
||||
lglobal.sectionMap = Map
|
||||
lglobal.sectionGeneral = General
|
||||
lglobal.sectionNetwork = Network/Clientside [World Processor Only]
|
||||
lglobal.sectionProcessor = Processor
|
||||
lglobal.sectionLookup = Lookup
|
||||
lglobal.@this = The logic block executing the code
|
||||
lglobal.@thisx = X coordinate of block executing the code
|
||||
lglobal.@thisy = Y coordinate of block executing the code
|
||||
lglobal.@links = Total number of blocks linked to this processors
|
||||
lglobal.@ipt = Execution speed of the processor in instructions per tick (60 ticks = 1 second)
|
||||
lglobal.@unitCount = Total number of types of unit content in the game; used with the lookup instruction
|
||||
lglobal.@blockCount = Total number of types of block content in the game; used with the lookup instruction
|
||||
lglobal.@itemCount = Total number of types of item content in the game; used with the lookup instruction
|
||||
lglobal.@liquidCount = Total number of types of liquid content in the game; used with the lookup instruction
|
||||
lglobal.@server = True if the code is running on a server or in singleplayer, false otherwise
|
||||
lglobal.@client = True if the code is running on a client connected to a server
|
||||
lglobal.@clientLocale = Locale of the client running the code. For example: en_US
|
||||
lglobal.@clientUnit = Unit of client running the code
|
||||
lglobal.@clientName = Player name of client running the code
|
||||
lglobal.@clientTeam = Team ID of client running the code
|
||||
lglobal.@clientMobile = True is the client running the code is on mobile, false otherwise
|
||||
|
||||
logic.nounitbuild = [red]Aquí no es permet construir blocs de tipus lògic.
|
||||
|
||||
@@ -2451,7 +2491,10 @@ lenum.build = Construeix una estructura.
|
||||
lenum.getblock = Obté un bloc i el seu tipus a les coordenades indicades.\nLa posició escollida ha d’estar a l’abast de la unitat.\nEls blocs que no són construccions tindran el tipus [accent]@solid[].
|
||||
lenum.within = Comprova si la unitat està a prop d’una posició.
|
||||
lenum.boost = Inicia/Detén el vol.
|
||||
lenum.flushtext = Flush print buffer's content to marker, if applicable.\nIf fetch is set to true, tries to fetch properties from map locale bundle or game's bundle.
|
||||
lenum.texture = Texture name straight from game's texture atlas (using kebab-case naming style).\nIf printFlush is set to true, consumes text buffer content as text argument.
|
||||
lenum.texturesize = Size of texture in tiles. Zero value scales marker width to original texture's size.
|
||||
lenum.autoscale = Whether to scale marker corresponding to player's zoom level.
|
||||
lenum.flushtext = Passa el contingut de la cua d’impressió al marcador, si es pot.\nSi s’estableix «fetch» a vertader, s’intentarà carregar les propietats de la traducció del mapa o del joc.
|
||||
lenum.texture = Nom de la textura directa de l’atles de textures del joc (amb l’estil de noms kebab-case).\nSi «printFlush» s’estableix a vertader, consumeix el contingut de la cua d’impressió com a argument de text.
|
||||
lenum.texturesize = Mida de la textura a les caselles. Un valor de zero indica que s’ha d'escalar l’amplada del marcador a la mida original de la textura.
|
||||
lenum.autoscale = Indica si cal escalar el marcador segons el nivell de zoom del jugador.
|
||||
lenum.posi = Posició indexada que es fa servir per a marcadors de línia i de rectangles on l’índex zero és la primera posició.
|
||||
lenum.uvi = Posició de la textura que va de zero a u i que es fa servir per a marcadors de tipus rectangle.
|
||||
lenum.colori = Posició indexada que es fa servir per a marcadors de línies i rectangles on l’índex zero és el primer color.
|
||||
|
||||
@@ -153,12 +153,12 @@ mod.unmetdependencies = [red]Nesplněné Dependencies
|
||||
mod.erroredcontent = [scarlet]V obsahu jsou chyby[]
|
||||
mod.circulardependencies = [red]Kruhové Dependencies
|
||||
mod.incompletedependencies = [red]Nedokončené Dependencies
|
||||
mod.requiresversion.details = Requires game version: [accent]{0}[]\nYour game is outdated. This mod requires a newer version of the game (possibly a beta/alpha release) to function.
|
||||
mod.outdatedv7.details = This mod is incompatible with the latest version of the game. The author must update it, and add [accent]minGameVersion: 136[] to its [accent]mod.json[] file.
|
||||
mod.blacklisted.details = This mod has been manually blacklisted for causing crashes or other issues with this version of the game. Do not use it.
|
||||
mod.missingdependencies.details = This mod is missing dependencies: {0}
|
||||
mod.erroredcontent.details = This game caused errors when loading. Ask the mod author to fix them.
|
||||
mod.circulardependencies.details = This mod has dependencies that depends on each other.
|
||||
mod.requiresversion.details = Vyžaduje verzi hry: [accent]{0}[]\nVaše hra je zastaralá. Tento mod vyžaduje novější verzi hry (možná beta/alfa verze) aby fungoval.
|
||||
mod.outdatedv7.details = Tento mod není kompatibilní s nejnovější verzí hry. Autor ho musí aktualizovat a přidat [accent]minGameVersion: 136[] ho do [accent]mod.json[] složky.
|
||||
mod.blacklisted.details = Tento mod byl ručně zařazen na černou listinu, protože způsobuje pády nebo jiné problémy s touto verzí hry. Nepoužívejte jej.
|
||||
mod.missingdependencies.details = Tomuto módu chybí závislosti: {0}
|
||||
mod.erroredcontent.details = Tato hra způsobovala chyby při načítání. Požádejte autora módu o jejich opravu.
|
||||
mod.circulardependencies.details = Tento mod má závislosti, které na sobě navzájem závisí.
|
||||
mod.incompletedependencies.details = This mod is unable to be loaded due to invalid or missing dependencies: {0}.
|
||||
mod.requiresversion = Requires game version: [red]{0}
|
||||
mod.errors = Při načítání obsahu hry se vyskytly problémy.
|
||||
@@ -261,13 +261,13 @@ trace.modclient = Upravený klient hry: [accent]{0}[]
|
||||
trace.times.joined = Krát Připojen: [accent]{0}
|
||||
trace.times.kicked = Krát Vyhozen: [accent]{0}
|
||||
trace.ips = IPs:
|
||||
trace.names = Names:
|
||||
trace.names = Jména:
|
||||
invalidid = Neplatná adresa IP klienta! Zašli prosím zprávu o chybě.
|
||||
player.ban = Ban
|
||||
player.kick = Kick
|
||||
player.kick = Vyhodit
|
||||
player.trace = Trace
|
||||
player.admin = Toggle Admin
|
||||
player.team = Change Team
|
||||
player.admin = Přepínání správce
|
||||
player.team = Změnit tým
|
||||
server.bans = Zákazy
|
||||
server.bans.none = Žádní hráči se zákazem nebyli nalezeni.
|
||||
server.admins = Správci
|
||||
@@ -340,13 +340,14 @@ ok = OK
|
||||
open = Otevřít
|
||||
customize = Přizpůsobit pravidla
|
||||
cancel = Zrušit
|
||||
command = Command
|
||||
command.queue = [lightgray][Queuing]
|
||||
command.mine = Mine
|
||||
command.repair = Repair
|
||||
command.rebuild = Rebuild
|
||||
command.assist = Assist Player
|
||||
command.move = Move
|
||||
command = Velet
|
||||
command.queue = Queue
|
||||
command.mine = Těžit
|
||||
command.repair = Opravovat
|
||||
command.rebuild = Přestavět
|
||||
command.assist = Asistovat hráči
|
||||
command.move = Pohyb
|
||||
|
||||
command.boost = Boost
|
||||
command.enterPayload = Enter Payload Block
|
||||
command.loadUnits = Load Units
|
||||
@@ -362,7 +363,7 @@ openlink = Otevřít odkaz
|
||||
copylink = Zkopírovat odkaz
|
||||
back = Zpět
|
||||
max = Max
|
||||
objective = Map Objective
|
||||
objective = Úkol mapy
|
||||
crash.export = Exportovat záznamy o zhroucení hry
|
||||
crash.none = Záznamy o zhroucení hry nebyly nalezeny.
|
||||
crash.exported = Záznamy o zhroucení hry byly exportovány.
|
||||
@@ -383,7 +384,7 @@ pausebuilding = [accent][[{0}][] zastaví stavění
|
||||
resumebuilding = [scarlet][[{0}][] bude pokračovat ve stavění
|
||||
enablebuilding = [scarlet][[{0}][] povolí stavení
|
||||
showui = UI je skryto.\nZmáčkni [accent][[{0}][] pro jeho zobrazení.
|
||||
commandmode.name = [accent]Command Mode
|
||||
commandmode.name = [accent]Velící zežim
|
||||
commandmode.nounits = [no units]
|
||||
wave = [accent]Vlna číslo {0}[]
|
||||
wave.cap = [accent]Vlna {0} z {1}[]
|
||||
@@ -495,6 +496,7 @@ editor.default = [lightgray]<Výchozí>[]
|
||||
details = Podrobnosti...
|
||||
edit = Upravit...
|
||||
variables = Hodnoty
|
||||
logic.globals = Built-in Variables
|
||||
editor.name = Jméno:
|
||||
editor.spawn = Zrodit jednotku
|
||||
editor.removeunit = Odstranit jednotku
|
||||
@@ -671,10 +673,11 @@ objective.destroycore.name = Zničit Jádro
|
||||
objective.commandmode.name = Příkazovy Režim
|
||||
objective.flag.name = Vlajka
|
||||
marker.shapetext.name = Shape Text
|
||||
marker.minimap.name = Minimapa
|
||||
marker.point.name = Point
|
||||
marker.shape.name = Tvar
|
||||
marker.text.name = Text
|
||||
marker.line.name = Line
|
||||
marker.quad.name = Quad
|
||||
marker.background = Pozadí
|
||||
marker.outline = Outline
|
||||
objective.research = [accent]Research:\n[]{0}[lightgray]{1}
|
||||
@@ -704,7 +707,7 @@ bannedunits.whitelist = Banned Units As Whitelist
|
||||
bannedblocks.whitelist = Banned Blocks As Whitelist
|
||||
addall = Přidat vše
|
||||
launch.from = Vysláno z: [accent]{0}
|
||||
launch.capacity = Launching Item Capacity: [accent]{0}
|
||||
launch.capacity = Odpalovací kapacita: [accent]{0}
|
||||
launch.destination = Cíl: {0}
|
||||
configure.invalid = Hodnota musí být číslo mezi 0 a {0}.
|
||||
add = Přidat...
|
||||
@@ -734,8 +737,8 @@ sectorlist.attacked = {0} pod útokem
|
||||
sectors.unexplored = [lightgray]Neprozkoumáno
|
||||
sectors.resources = Zdroje:
|
||||
sectors.production = Výroba:
|
||||
sectors.export = Export:
|
||||
sectors.import = Import:
|
||||
sectors.export = Exportovat:
|
||||
sectors.import = Importovat:
|
||||
sectors.time = Čas:
|
||||
sectors.threat = Ohrožení:
|
||||
sectors.wave = Vlna:
|
||||
@@ -759,6 +762,7 @@ sector.missingresources = [scarlet]Nedostatečné zdroje v jádře
|
||||
sector.attacked = Sektor [accent]{0}[white] pod útokem!
|
||||
sector.lost = Sektor [accent]{0}[white] ztracen! :(
|
||||
sector.capture = Sector [accent]{0}[white]Captured!
|
||||
sector.capture.current = Sector Captured!
|
||||
sector.changeicon = Změnit Ikonu
|
||||
sector.noswitch.title = Nelze Vyměnit Sektor
|
||||
sector.noswitch = Sektory nelze přepnut, pokud je stávající sektor pod útokem.\n\nSektor: [accent]{0}[] na [accent]{1}[]
|
||||
@@ -811,43 +815,43 @@ sector.windsweptIslands.description = Vzdálen od pevniny je tento řetízek ost
|
||||
sector.extractionOutpost.description = Vzdálená pevnost, postavená nepřítelem za účelem vysílání zdrojů do okolních sektorů.\n\nDoprava položek napříč sektory je nezbytná pro lapení dalších sektorů. Znič základnu. Vyzkoumej jejich Vysílací plošiny.
|
||||
sector.impact0078.description = Zde leží zbytky mezihvězdné lodi, která vstoupila do tohoto systému.\n\nZachraň z vraku vše, co se dá. Vyzkoumej nepoškozenou technologii.
|
||||
sector.planetaryTerminal.description = Konečný cíl.\n\nTato pobřežní základna obsahuje konstrukce schopné vyslat jádra na okolní planety. Je mimořádně dobře opevněna.\n\nVyrob námořní jednotky. Odstraň nepřítele tak rychle, jak umíš. Vyzkoumej vysílací konstrukci.
|
||||
sector.coastline.description = Remnants of naval unit technology have been detected at this location. Repel the enemy attacks, capture this sector, and acquire the technology.
|
||||
sector.navalFortress.description = The enemy has established a base on a remote, naturally-fortified island. Destroy this outpost. Acquire their advanced naval craft technology, and research it.
|
||||
sector.onset.name = The Onset
|
||||
sector.coastline.description = V této lokaci byly objeveny pozůstatky techniky námořních jednotek. Odražte nepřátelské útoky, dobijte tento sektor a získejte technologii.
|
||||
sector.navalFortress.description = Nepřítel si vybudoval základnu na odlehlém, přírodou opevněném ostrově. Zničte tuto základnu. Získejte jejich pokročilou technologii námořních plavidel a vyzkoumejte ji.
|
||||
sector.onset.name = Nástup
|
||||
sector.aegis.name = Aegis
|
||||
sector.lake.name = Lake
|
||||
sector.intersect.name = Intersect
|
||||
sector.lake.name = Jezero
|
||||
sector.intersect.name = Průsečík
|
||||
sector.atlas.name = Atlas
|
||||
sector.split.name = Split
|
||||
sector.basin.name = Basin
|
||||
sector.marsh.name = Marsh
|
||||
sector.peaks.name = Peaks
|
||||
sector.ravine.name = Ravine
|
||||
sector.caldera-erekir.name = Caldera
|
||||
sector.stronghold.name = Stronghold
|
||||
sector.crevice.name = Crevice
|
||||
sector.siege.name = Siege
|
||||
sector.crossroads.name = Crossroads
|
||||
sector.karst.name = Karst
|
||||
sector.origin.name = Origin
|
||||
sector.onset.description = Commence the conquest of Erekir. Gather resources, produce units, and begin researching technology.
|
||||
sector.split.name = Rozdělení
|
||||
sector.basin.name = Povodí
|
||||
sector.marsh.name = Marš
|
||||
sector.peaks.name = Vrcholy
|
||||
sector.ravine.name = Rokle
|
||||
sector.caldera-erekir.name = Kaldera
|
||||
sector.stronghold.name = Pevnost
|
||||
sector.crevice.name = Štěrbina
|
||||
sector.siege.name = Obléhání
|
||||
sector.crossroads.name = Křižovatka
|
||||
sector.karst.name = Kras
|
||||
sector.origin.name = Původ
|
||||
sector.onset.description = Zahajte dobývání Erekiru. Shromážděte zdroje, vyrobte jednotky a začněte zkoumat technologie.
|
||||
|
||||
sector.aegis.description = This sector contains deposits of tungsten.\nResearch the [accent]Impact Drill[] to mine this resource, and destroy the enemy base in the area.
|
||||
sector.lake.description = This sector's slag lake greatly limits viable units. A hover unit is the only option.\nResearch the [accent]ship fabricator[] and produce an [accent]elude[] unit as soon as possible.
|
||||
sector.intersect.description = Scans suggest that this sector will be attacked from multiple sides soon after landing.\nSet up defenses quickly and expand as soon as possible.\n[accent]Mech[] units will be required for the area's rough terrain.
|
||||
sector.atlas.description = This sector contains varied terrain and will require a variety of units to attack effectively.\nUpgraded units may also be necessary to get past some of the tougher enemy bases detected here.\nResearch the [accent]Electrolyzer[] and the [accent]Tank Refabricator[].
|
||||
sector.split.description = The minimal enemy presence in this sector makes it perfect for testing new transport tech.
|
||||
sector.basin.description = Large enemy presence detected in this sector.\nBuild units quickly and capture enemy cores to gain a foothold.
|
||||
sector.marsh.description = This sector has an abundance of arkycite, but has limited vents.\nBuild [accent]Chemical Combustion Chambers[] to generate power.
|
||||
sector.peaks.description = The mountainous terrain in this sector make most units useless. Flying units will be required.\nBe aware of enemy anti-air installations. It may be possible to disable some of these installations by targeting their supporting buildings.
|
||||
sector.ravine.description = No enemy cores detected in the sector, although it's an important transportation route for the enemy. Expect variety of enemy forces.\nProduce [accent]surge alloy[]. Construct [accent]Afflict[] turrets.
|
||||
sector.caldera-erekir.description = The resources detected in this sector are scattered across several islands.\nResearch and deploy drone-based transportation.
|
||||
sector.stronghold.description = The large enemy encampment in this sector guards significant deposits of [accent]thorium[].\nUse it to develop higher tier units and turrets.
|
||||
sector.crevice.description = The enemy will send fierce attack forces to take out your base in this sector.\nDeveloping [accent]carbide[] and the [accent]Pyrolysis Generator[] may be imperative for survival.
|
||||
sector.siege.description = This sector features two parallel canyons that will force a two-pronged attack.\nResearch [accent]cyanogen[] to gain the capability to create even stronger tank units.\nCaution: enemy long-range missiles have been detected. The missiles may be shot down before impact.
|
||||
sector.crossroads.description = The enemy bases in this sector have been established in varying terrain. Research different units to adapt.\nAdditionally, some bases are protected by shields. Figure out how they are powered.
|
||||
sector.karst.description = This sector is rich in resources, but will be attacked by the enemy once a new core lands.\nTake advantage of the resources and research [accent]phase fabric[].
|
||||
sector.origin.description = The final sector with a significant enemy presence.\nNo probable research opportunities remain - focus solely on destroying all enemy cores.
|
||||
sector.aegis.description = Tento sektor obsahuje ložiska wolframu.\nVyzkoumej [accent]Nárazový vrták[] k vytěžení této suroviny, a znič nepřátelskou základnu.
|
||||
sector.lake.description = Struskové jezero v tomto sektoru značně omezuje použitelné jednotky. Jedinou možností je vznášecí jednotka.\nVyzkoumej [accent]továrna na výrobu lodí[] a vyrob [accent]elude[] jednotku co nejdříve
|
||||
sector.intersect.description = Podle průzkumů bude tento sektor brzy po přistání napaden z více stran.\nRychle vytvořte obranu a co nejdříve expandujte.\n[accent]Mech[] jednotky budou zapotřebí pro překročení teréu v oblasti.
|
||||
sector.atlas.description = Tento sektor obsahuje rozmanitý terén a pro efektivní útok bude vyžadovat různé jednotky.\nPro překonání některých těžších nepřátelských základen zde mohou být nutné i vylepšené jednotky.\nVyzkoumej [accent]Electrolyzér[] a [accent]Přestavovač tanků[].
|
||||
sector.split.description = Minimální přítomnost nepřátel v tomto sektoru je ideální pro testování nových dopravních technologií.
|
||||
sector.basin.description = V tomto sektoru byla zjištěna velká přítomnost nepřátel.\nRychle postavte jednotky a získejte nepřátelská jádra, abyste se prosadili.
|
||||
sector.marsh.description = Tento sektor má hojnost arkycitu, ale má omezené průduchy.\nPostav [accent]Chemické spalovací komory[] k výrobě energie.
|
||||
sector.peaks.description = Hornatý terén v tomto sektoru činí většinu jednotek nepoužitelnými. Bude zapotřebí létajících jednotek.\nDejte si pozor na nepřátelská protiletecká zařízení. Některá z těchto zařízení je možné vyřadit zaměřením jejich podpůrných budov.
|
||||
sector.ravine.description = V sektoru nebyla zjištěna žádná nepřátelská jádra, ačkoli se jedná o důležitou dopravní trasu pro nepřítele. Očekávejte rozmanitost nepřátelských sil.\nVyrob [accent]rázová slitina[]. Postav [accent]Aflict[] věže.
|
||||
sector.caldera-erekir.description = Zdroje zjištěné v tomto sektoru jsou rozptýleny na několika ostrovech. \nVyzkoumejte a nasaďte dopravu pomocí dronů.
|
||||
sector.stronghold.description = Rozsáhlé nepřátelské ležení v tomto sektoru střeží významná ložiska [accent]thoria[].\nPoužijte ho na vývoj jednotek a věží vyšší úrovně.
|
||||
sector.crevice.description = Nepřítel vyšle ostré útočné síly, aby zničily vaši základnu v tomto sektoru.\nVývoj [accent]karbid[] a [accent]Pyrolytický generátor[] může být nezbytný pro přežití.
|
||||
sector.siege.description = V tomto sektoru se nacházejí dva paralelní kaňony, které si vynutí útok dvěma směry.\nVyzkoumej [accent]kyan[] pro získání schopnosti vytvářet ještě silnější tankové jednotky.\nPozor: byly detekovány nepřátelské rakety dlouhého doletu. Rakety mohou být sestřeleny před dopadem.
|
||||
sector.crossroads.description = Nepřátelské základny v tomto sektoru jsou rozmístěny v různém terénu. Výzkumem různých jednotek se jim přizpůsobíte.\nNěkteré základny jsou navíc chráněny štíty. Zjistěte, jak jsou napájeny.
|
||||
sector.karst.description = Tento sektor je bohatý na zdroje, ale jakmile se zde objeví nové jádro, bude napaden nepřítelem.\nVyužijte zdroje a vyzkoumej [accent]fázová tkanina[].
|
||||
sector.origin.description = Poslední sektor s výrazným výskytem nepřátel.\nŽádné pravděpodobné možnosti výzkumu nezbývají - soustřeďte se výhradně na zničení všech nepřátelských jader.
|
||||
|
||||
status.burning.name = Hořící
|
||||
status.freezing.name = Mrazící
|
||||
@@ -1543,6 +1547,7 @@ block.inverted-sorter.name = Obrácená třídička
|
||||
block.message.name = Zpráva
|
||||
block.reinforced-message.name = Posílená Zpráva
|
||||
block.world-message.name = Světová Zpráva
|
||||
block.world-switch.name = World Switch
|
||||
block.illuminator.name = Osvětlovač
|
||||
block.overflow-gate.name = Brána s přepadem
|
||||
block.underflow-gate.name = Brána s podtokem
|
||||
@@ -2294,6 +2299,42 @@ lst.sync = Sync a variable across the network.\nOnly invoked 10 times a second a
|
||||
lst.makemarker = Create a new logic marker in the world.\nAn ID to identify this marker must be provided.\nMarkers currently limited to 20,000 per world.
|
||||
lst.setmarker = Set a property for a marker.\nThe ID used must be the same as in the Make Marker instruction.
|
||||
lst.localeprint = Add map locale property value to the text buffer.\nTo set map locale bundles in map editor, check [accent]Map Info > Locale Bundles[].\nIf client is a mobile device, tries to print a property ending in ".mobile" first.
|
||||
lglobal.false = 0
|
||||
lglobal.true = 1
|
||||
lglobal.null = null
|
||||
lglobal.@pi = The mathematical constant pi (3.141...)
|
||||
lglobal.@e = The mathematical constant e (2.718...)
|
||||
lglobal.@degToRad = Multiply by this number to convert degrees to radians
|
||||
lglobal.@radToDeg = Multiply by this number to convert radians to degrees
|
||||
lglobal.@time = Playtime of current save, in milliseconds
|
||||
lglobal.@tick = Playtime of current save, in ticks (1 second = 60 ticks)
|
||||
lglobal.@second = Playtime of current save, in seconds
|
||||
lglobal.@minute = Playtime of current save, in minutes
|
||||
lglobal.@waveNumber = Current wave number, if waves are enabled
|
||||
lglobal.@waveTime = Countdown timer for waves, in seconds
|
||||
lglobal.@mapw = Map width in tiles
|
||||
lglobal.@maph = Map height in tiles
|
||||
lglobal.sectionMap = Map
|
||||
lglobal.sectionGeneral = General
|
||||
lglobal.sectionNetwork = Network/Clientside [World Processor Only]
|
||||
lglobal.sectionProcessor = Processor
|
||||
lglobal.sectionLookup = Lookup
|
||||
lglobal.@this = The logic block executing the code
|
||||
lglobal.@thisx = X coordinate of block executing the code
|
||||
lglobal.@thisy = Y coordinate of block executing the code
|
||||
lglobal.@links = Total number of blocks linked to this processors
|
||||
lglobal.@ipt = Execution speed of the processor in instructions per tick (60 ticks = 1 second)
|
||||
lglobal.@unitCount = Total number of types of unit content in the game; used with the lookup instruction
|
||||
lglobal.@blockCount = Total number of types of block content in the game; used with the lookup instruction
|
||||
lglobal.@itemCount = Total number of types of item content in the game; used with the lookup instruction
|
||||
lglobal.@liquidCount = Total number of types of liquid content in the game; used with the lookup instruction
|
||||
lglobal.@server = True if the code is running on a server or in singleplayer, false otherwise
|
||||
lglobal.@client = True if the code is running on a client connected to a server
|
||||
lglobal.@clientLocale = Locale of the client running the code. For example: en_US
|
||||
lglobal.@clientUnit = Unit of client running the code
|
||||
lglobal.@clientName = Player name of client running the code
|
||||
lglobal.@clientTeam = Team ID of client running the code
|
||||
lglobal.@clientMobile = True is the client running the code is on mobile, false otherwise
|
||||
|
||||
logic.nounitbuild = [red]Stavba budov pomoci jednotek kontrolované procesorem neni povolené.
|
||||
|
||||
@@ -2449,3 +2490,6 @@ lenum.flushtext = Flush print buffer's content to marker, if applicable.\nIf fet
|
||||
lenum.texture = Texture name straight from game's texture atlas (using kebab-case naming style).\nIf printFlush is set to true, consumes text buffer content as text argument.
|
||||
lenum.texturesize = Size of texture in tiles. Zero value scales marker width to original texture's size.
|
||||
lenum.autoscale = Whether to scale marker corresponding to player's zoom level.
|
||||
lenum.posi = Indexed position, used for line and quad markers with index zero being the first position.
|
||||
lenum.uvi = Texture's position ranging from zero to one, used for quad markers.
|
||||
lenum.colori = Indexed position, used for line and quad markers with index zero being the first color.
|
||||
|
||||
@@ -490,6 +490,7 @@ editor.default = [lightgray]<standard>
|
||||
details = Detaljer...
|
||||
edit = Rediger...
|
||||
variables = Vars
|
||||
logic.globals = Built-in Variables
|
||||
editor.name = Navn:
|
||||
editor.spawn = Påkald enhed
|
||||
editor.removeunit = Fjern enhed
|
||||
@@ -665,10 +666,11 @@ objective.destroycore.name = Destroy Core
|
||||
objective.commandmode.name = Command Mode
|
||||
objective.flag.name = Flag
|
||||
marker.shapetext.name = Shape Text
|
||||
marker.minimap.name = Minimap
|
||||
marker.point.name = Point
|
||||
marker.shape.name = Shape
|
||||
marker.text.name = Text
|
||||
marker.line.name = Line
|
||||
marker.quad.name = Quad
|
||||
marker.background = Background
|
||||
marker.outline = Outline
|
||||
objective.research = [accent]Research:\n[]{0}[lightgray]{1}
|
||||
@@ -752,6 +754,7 @@ sector.missingresources = [scarlet]Ikke nok resurser i kernen.
|
||||
sector.attacked = Sector [accent]{0}[white] under attack!
|
||||
sector.lost = Sector [accent]{0}[white] lost!
|
||||
sector.capture = Sector [accent]{0}[white]Captured!
|
||||
sector.capture.current = Sector Captured!
|
||||
sector.changeicon = Change Icon
|
||||
sector.noswitch.title = Unable to Switch Sectors
|
||||
sector.noswitch = You may not switch sectors while an existing sector is under attack.\n\nSector: [accent]{0}[] on [accent]{1}[]
|
||||
@@ -1531,6 +1534,7 @@ block.inverted-sorter.name = Omvendt Filter
|
||||
block.message.name = Besked
|
||||
block.reinforced-message.name = Reinforced Message
|
||||
block.world-message.name = World Message
|
||||
block.world-switch.name = World Switch
|
||||
block.illuminator.name = Lyskilde
|
||||
block.overflow-gate.name = Overflods-låge
|
||||
block.underflow-gate.name = Underflods-låge
|
||||
@@ -2276,6 +2280,42 @@ lst.sync = Sync a variable across the network.\nOnly invoked 10 times a second a
|
||||
lst.makemarker = Create a new logic marker in the world.\nAn ID to identify this marker must be provided.\nMarkers currently limited to 20,000 per world.
|
||||
lst.setmarker = Set a property for a marker.\nThe ID used must be the same as in the Make Marker instruction.
|
||||
lst.localeprint = Add map locale property value to the text buffer.\nTo set map locale bundles in map editor, check [accent]Map Info > Locale Bundles[].\nIf client is a mobile device, tries to print a property ending in ".mobile" first.
|
||||
lglobal.false = 0
|
||||
lglobal.true = 1
|
||||
lglobal.null = null
|
||||
lglobal.@pi = The mathematical constant pi (3.141...)
|
||||
lglobal.@e = The mathematical constant e (2.718...)
|
||||
lglobal.@degToRad = Multiply by this number to convert degrees to radians
|
||||
lglobal.@radToDeg = Multiply by this number to convert radians to degrees
|
||||
lglobal.@time = Playtime of current save, in milliseconds
|
||||
lglobal.@tick = Playtime of current save, in ticks (1 second = 60 ticks)
|
||||
lglobal.@second = Playtime of current save, in seconds
|
||||
lglobal.@minute = Playtime of current save, in minutes
|
||||
lglobal.@waveNumber = Current wave number, if waves are enabled
|
||||
lglobal.@waveTime = Countdown timer for waves, in seconds
|
||||
lglobal.@mapw = Map width in tiles
|
||||
lglobal.@maph = Map height in tiles
|
||||
lglobal.sectionMap = Map
|
||||
lglobal.sectionGeneral = General
|
||||
lglobal.sectionNetwork = Network/Clientside [World Processor Only]
|
||||
lglobal.sectionProcessor = Processor
|
||||
lglobal.sectionLookup = Lookup
|
||||
lglobal.@this = The logic block executing the code
|
||||
lglobal.@thisx = X coordinate of block executing the code
|
||||
lglobal.@thisy = Y coordinate of block executing the code
|
||||
lglobal.@links = Total number of blocks linked to this processors
|
||||
lglobal.@ipt = Execution speed of the processor in instructions per tick (60 ticks = 1 second)
|
||||
lglobal.@unitCount = Total number of types of unit content in the game; used with the lookup instruction
|
||||
lglobal.@blockCount = Total number of types of block content in the game; used with the lookup instruction
|
||||
lglobal.@itemCount = Total number of types of item content in the game; used with the lookup instruction
|
||||
lglobal.@liquidCount = Total number of types of liquid content in the game; used with the lookup instruction
|
||||
lglobal.@server = True if the code is running on a server or in singleplayer, false otherwise
|
||||
lglobal.@client = True if the code is running on a client connected to a server
|
||||
lglobal.@clientLocale = Locale of the client running the code. For example: en_US
|
||||
lglobal.@clientUnit = Unit of client running the code
|
||||
lglobal.@clientName = Player name of client running the code
|
||||
lglobal.@clientTeam = Team ID of client running the code
|
||||
lglobal.@clientMobile = True is the client running the code is on mobile, false otherwise
|
||||
logic.nounitbuild = [red]Unit building logic is not allowed here.
|
||||
lenum.type = Type of building/unit.\ne.g. for any router, this will return [accent]@router[].\nNot a string.
|
||||
lenum.shoot = Shoot at a position.
|
||||
@@ -2412,3 +2452,6 @@ lenum.flushtext = Flush print buffer's content to marker, if applicable.\nIf fet
|
||||
lenum.texture = Texture name straight from game's texture atlas (using kebab-case naming style).\nIf printFlush is set to true, consumes text buffer content as text argument.
|
||||
lenum.texturesize = Size of texture in tiles. Zero value scales marker width to original texture's size.
|
||||
lenum.autoscale = Whether to scale marker corresponding to player's zoom level.
|
||||
lenum.posi = Indexed position, used for line and quad markers with index zero being the first position.
|
||||
lenum.uvi = Texture's position ranging from zero to one, used for quad markers.
|
||||
lenum.colori = Indexed position, used for line and quad markers with index zero being the first color.
|
||||
|
||||
@@ -498,6 +498,7 @@ editor.default = [lightgray]<Standard>
|
||||
details = Details
|
||||
edit = Bearbeiten
|
||||
variables = Variablen
|
||||
logic.globals = Built-in Variables
|
||||
editor.name = Name:
|
||||
editor.spawn = Spawnbereich
|
||||
editor.removeunit = Bereich entfernen
|
||||
@@ -678,10 +679,11 @@ objective.commandmode.name = Steuerungsmodus
|
||||
objective.flag.name = Flag
|
||||
|
||||
marker.shapetext.name = Geformter Text
|
||||
marker.minimap.name = Minimap
|
||||
marker.point.name = Point
|
||||
marker.shape.name = Form
|
||||
marker.text.name = Text
|
||||
marker.line.name = Line
|
||||
marker.quad.name = Quad
|
||||
|
||||
marker.background = Hintergrund
|
||||
marker.outline = Umriss
|
||||
@@ -770,6 +772,7 @@ sector.missingresources = [scarlet]Fehlende Kernressourcen
|
||||
sector.attacked = Sektor [accent]{0}[white] wird angegriffen!
|
||||
sector.lost = Sektor [accent]{0}[white] verloren!
|
||||
sector.capture = Sector [accent]{0}[white]Captured!
|
||||
sector.capture.current = Sector Captured!
|
||||
sector.changeicon = Bild ändern
|
||||
sector.noswitch.title = Kann Sektoren nicht wechseln
|
||||
sector.noswitch = Du kannst nicht zwischen Sektoren wechseln, wenn ein anderer angegriffen wird.\n\nSektor: [accent]{0}[] auf [accent]{1}[]
|
||||
@@ -1557,6 +1560,7 @@ block.inverted-sorter.name = Invertierter Sortierer
|
||||
block.message.name = Nachricht
|
||||
block.reinforced-message.name = Verstärkte Nachricht
|
||||
block.world-message.name = Weltnachricht
|
||||
block.world-switch.name = World Switch
|
||||
block.illuminator.name = Illuminierer
|
||||
block.overflow-gate.name = Überlauftor
|
||||
block.underflow-gate.name = Unterlauftor
|
||||
@@ -2325,6 +2329,42 @@ lst.sync = Sync a variable across the network.\nOnly invoked 10 times a second a
|
||||
lst.makemarker = Create a new logic marker in the world.\nAn ID to identify this marker must be provided.\nMarkers currently limited to 20,000 per world.
|
||||
lst.setmarker = Set a property for a marker.\nThe ID used must be the same as in the Make Marker instruction.
|
||||
lst.localeprint = Add map locale property value to the text buffer.\nTo set map locale bundles in map editor, check [accent]Map Info > Locale Bundles[].\nIf client is a mobile device, tries to print a property ending in ".mobile" first.
|
||||
lglobal.false = 0
|
||||
lglobal.true = 1
|
||||
lglobal.null = null
|
||||
lglobal.@pi = The mathematical constant pi (3.141...)
|
||||
lglobal.@e = The mathematical constant e (2.718...)
|
||||
lglobal.@degToRad = Multiply by this number to convert degrees to radians
|
||||
lglobal.@radToDeg = Multiply by this number to convert radians to degrees
|
||||
lglobal.@time = Playtime of current save, in milliseconds
|
||||
lglobal.@tick = Playtime of current save, in ticks (1 second = 60 ticks)
|
||||
lglobal.@second = Playtime of current save, in seconds
|
||||
lglobal.@minute = Playtime of current save, in minutes
|
||||
lglobal.@waveNumber = Current wave number, if waves are enabled
|
||||
lglobal.@waveTime = Countdown timer for waves, in seconds
|
||||
lglobal.@mapw = Map width in tiles
|
||||
lglobal.@maph = Map height in tiles
|
||||
lglobal.sectionMap = Map
|
||||
lglobal.sectionGeneral = General
|
||||
lglobal.sectionNetwork = Network/Clientside [World Processor Only]
|
||||
lglobal.sectionProcessor = Processor
|
||||
lglobal.sectionLookup = Lookup
|
||||
lglobal.@this = The logic block executing the code
|
||||
lglobal.@thisx = X coordinate of block executing the code
|
||||
lglobal.@thisy = Y coordinate of block executing the code
|
||||
lglobal.@links = Total number of blocks linked to this processors
|
||||
lglobal.@ipt = Execution speed of the processor in instructions per tick (60 ticks = 1 second)
|
||||
lglobal.@unitCount = Total number of types of unit content in the game; used with the lookup instruction
|
||||
lglobal.@blockCount = Total number of types of block content in the game; used with the lookup instruction
|
||||
lglobal.@itemCount = Total number of types of item content in the game; used with the lookup instruction
|
||||
lglobal.@liquidCount = Total number of types of liquid content in the game; used with the lookup instruction
|
||||
lglobal.@server = True if the code is running on a server or in singleplayer, false otherwise
|
||||
lglobal.@client = True if the code is running on a client connected to a server
|
||||
lglobal.@clientLocale = Locale of the client running the code. For example: en_US
|
||||
lglobal.@clientUnit = Unit of client running the code
|
||||
lglobal.@clientName = Player name of client running the code
|
||||
lglobal.@clientTeam = Team ID of client running the code
|
||||
lglobal.@clientMobile = True is the client running the code is on mobile, false otherwise
|
||||
|
||||
logic.nounitbuild = [red]Logik, die Blöcke baut, ist hier nicht erlaubt.
|
||||
|
||||
@@ -2481,3 +2521,6 @@ lenum.flushtext = Flush print buffer's content to marker, if applicable.\nIf fet
|
||||
lenum.texture = Texture name straight from game's texture atlas (using kebab-case naming style).\nIf printFlush is set to true, consumes text buffer content as text argument.
|
||||
lenum.texturesize = Size of texture in tiles. Zero value scales marker width to original texture's size.
|
||||
lenum.autoscale = Whether to scale marker corresponding to player's zoom level.
|
||||
lenum.posi = Indexed position, used for line and quad markers with index zero being the first position.
|
||||
lenum.uvi = Texture's position ranging from zero to one, used for quad markers.
|
||||
lenum.colori = Indexed position, used for line and quad markers with index zero being the first color.
|
||||
|
||||
@@ -495,6 +495,7 @@ editor.default = [lightgray]<Por defecto>
|
||||
details = Detalles...
|
||||
edit = Editar...
|
||||
variables = Variables
|
||||
logic.globals = Built-in Variables
|
||||
editor.name = Nombre:
|
||||
editor.spawn = Generar unidad
|
||||
editor.removeunit = Eliminar unidad
|
||||
@@ -675,10 +676,11 @@ objective.commandmode.name = Modo comando
|
||||
objective.flag.name = Bandera
|
||||
|
||||
marker.shapetext.name = Forma del texto
|
||||
marker.minimap.name = Minimapa
|
||||
marker.point.name = Point
|
||||
marker.shape.name = Forma
|
||||
marker.text.name = Texto
|
||||
marker.line.name = Line
|
||||
marker.quad.name = Quad
|
||||
|
||||
marker.background = Fondo
|
||||
marker.outline = Bordes
|
||||
@@ -766,6 +768,7 @@ sector.missingresources = [scarlet]Recursos insuficientes en el núcleo
|
||||
sector.attacked = ¡Sector [accent]{0}[white] bajo ataque!
|
||||
sector.lost = ¡Sector [accent]{0}[white] perdido!
|
||||
sector.capture = Sector [accent]{0}[white]Captured!
|
||||
sector.capture.current = Sector Captured!
|
||||
sector.changeicon = Cambiar icono
|
||||
sector.noswitch.title = No se pueden cambiar los sectores
|
||||
sector.noswitch = Tal vez no puedas cambiar de sector mientras se encuentre bajo ataque.\n\nSector: [accent]{0}[] en [accent]{1}[]
|
||||
@@ -1553,6 +1556,7 @@ block.inverted-sorter.name = Clasificador invertido
|
||||
block.message.name = Mensaje
|
||||
block.reinforced-message.name = Mensaje reforzado
|
||||
block.world-message.name = Mensaje estático
|
||||
block.world-switch.name = World Switch
|
||||
block.illuminator.name = Iluminador
|
||||
block.overflow-gate.name = Compuerta de desborde
|
||||
block.underflow-gate.name = Compuerta de subdesbordamiento
|
||||
@@ -2318,6 +2322,42 @@ lst.sync = Sync a variable across the network.\nOnly invoked 10 times a second a
|
||||
lst.makemarker = Create a new logic marker in the world.\nAn ID to identify this marker must be provided.\nMarkers currently limited to 20,000 per world.
|
||||
lst.setmarker = Set a property for a marker.\nThe ID used must be the same as in the Make Marker instruction.
|
||||
lst.localeprint = Add map locale property value to the text buffer.\nTo set map locale bundles in map editor, check [accent]Map Info > Locale Bundles[].\nIf client is a mobile device, tries to print a property ending in ".mobile" first.
|
||||
lglobal.false = 0
|
||||
lglobal.true = 1
|
||||
lglobal.null = null
|
||||
lglobal.@pi = The mathematical constant pi (3.141...)
|
||||
lglobal.@e = The mathematical constant e (2.718...)
|
||||
lglobal.@degToRad = Multiply by this number to convert degrees to radians
|
||||
lglobal.@radToDeg = Multiply by this number to convert radians to degrees
|
||||
lglobal.@time = Playtime of current save, in milliseconds
|
||||
lglobal.@tick = Playtime of current save, in ticks (1 second = 60 ticks)
|
||||
lglobal.@second = Playtime of current save, in seconds
|
||||
lglobal.@minute = Playtime of current save, in minutes
|
||||
lglobal.@waveNumber = Current wave number, if waves are enabled
|
||||
lglobal.@waveTime = Countdown timer for waves, in seconds
|
||||
lglobal.@mapw = Map width in tiles
|
||||
lglobal.@maph = Map height in tiles
|
||||
lglobal.sectionMap = Map
|
||||
lglobal.sectionGeneral = General
|
||||
lglobal.sectionNetwork = Network/Clientside [World Processor Only]
|
||||
lglobal.sectionProcessor = Processor
|
||||
lglobal.sectionLookup = Lookup
|
||||
lglobal.@this = The logic block executing the code
|
||||
lglobal.@thisx = X coordinate of block executing the code
|
||||
lglobal.@thisy = Y coordinate of block executing the code
|
||||
lglobal.@links = Total number of blocks linked to this processors
|
||||
lglobal.@ipt = Execution speed of the processor in instructions per tick (60 ticks = 1 second)
|
||||
lglobal.@unitCount = Total number of types of unit content in the game; used with the lookup instruction
|
||||
lglobal.@blockCount = Total number of types of block content in the game; used with the lookup instruction
|
||||
lglobal.@itemCount = Total number of types of item content in the game; used with the lookup instruction
|
||||
lglobal.@liquidCount = Total number of types of liquid content in the game; used with the lookup instruction
|
||||
lglobal.@server = True if the code is running on a server or in singleplayer, false otherwise
|
||||
lglobal.@client = True if the code is running on a client connected to a server
|
||||
lglobal.@clientLocale = Locale of the client running the code. For example: en_US
|
||||
lglobal.@clientUnit = Unit of client running the code
|
||||
lglobal.@clientName = Player name of client running the code
|
||||
lglobal.@clientTeam = Team ID of client running the code
|
||||
lglobal.@clientMobile = True is the client running the code is on mobile, false otherwise
|
||||
|
||||
logic.nounitbuild = [red]No se permite construir bloques de categoría lógica.
|
||||
|
||||
@@ -2474,3 +2514,6 @@ lenum.flushtext = Flush print buffer's content to marker, if applicable.\nIf fet
|
||||
lenum.texture = Texture name straight from game's texture atlas (using kebab-case naming style).\nIf printFlush is set to true, consumes text buffer content as text argument.
|
||||
lenum.texturesize = Size of texture in tiles. Zero value scales marker width to original texture's size.
|
||||
lenum.autoscale = Whether to scale marker corresponding to player's zoom level.
|
||||
lenum.posi = Indexed position, used for line and quad markers with index zero being the first position.
|
||||
lenum.uvi = Texture's position ranging from zero to one, used for quad markers.
|
||||
lenum.colori = Indexed position, used for line and quad markers with index zero being the first color.
|
||||
|
||||
@@ -490,6 +490,7 @@ editor.default = [lightgray]<Vaikimisi>
|
||||
details = Üksikasjad...
|
||||
edit = Muuda...
|
||||
variables = Vars
|
||||
logic.globals = Built-in Variables
|
||||
editor.name = Nimi:
|
||||
editor.spawn = Tekita väeüksus
|
||||
editor.removeunit = Eemalda väeüksus
|
||||
@@ -665,10 +666,11 @@ objective.destroycore.name = Destroy Core
|
||||
objective.commandmode.name = Command Mode
|
||||
objective.flag.name = Flag
|
||||
marker.shapetext.name = Shape Text
|
||||
marker.minimap.name = Minimap
|
||||
marker.point.name = Point
|
||||
marker.shape.name = Shape
|
||||
marker.text.name = Text
|
||||
marker.line.name = Line
|
||||
marker.quad.name = Quad
|
||||
marker.background = Background
|
||||
marker.outline = Outline
|
||||
objective.research = [accent]Research:\n[]{0}[lightgray]{1}
|
||||
@@ -752,6 +754,7 @@ sector.missingresources = [scarlet]Insufficient Core Resources
|
||||
sector.attacked = Sector [accent]{0}[white] under attack!
|
||||
sector.lost = Sector [accent]{0}[white] lost!
|
||||
sector.capture = Sector [accent]{0}[white]Captured!
|
||||
sector.capture.current = Sector Captured!
|
||||
sector.changeicon = Change Icon
|
||||
sector.noswitch.title = Unable to Switch Sectors
|
||||
sector.noswitch = You may not switch sectors while an existing sector is under attack.\n\nSector: [accent]{0}[] on [accent]{1}[]
|
||||
@@ -1531,6 +1534,7 @@ block.inverted-sorter.name = Inverted Sorter
|
||||
block.message.name = Sõnum
|
||||
block.reinforced-message.name = Reinforced Message
|
||||
block.world-message.name = World Message
|
||||
block.world-switch.name = World Switch
|
||||
block.illuminator.name = Illuminator
|
||||
block.overflow-gate.name = Ülevooluvärav
|
||||
block.underflow-gate.name = Underflow Gate
|
||||
@@ -2278,6 +2282,42 @@ lst.sync = Sync a variable across the network.\nOnly invoked 10 times a second a
|
||||
lst.makemarker = Create a new logic marker in the world.\nAn ID to identify this marker must be provided.\nMarkers currently limited to 20,000 per world.
|
||||
lst.setmarker = Set a property for a marker.\nThe ID used must be the same as in the Make Marker instruction.
|
||||
lst.localeprint = Add map locale property value to the text buffer.\nTo set map locale bundles in map editor, check [accent]Map Info > Locale Bundles[].\nIf client is a mobile device, tries to print a property ending in ".mobile" first.
|
||||
lglobal.false = 0
|
||||
lglobal.true = 1
|
||||
lglobal.null = null
|
||||
lglobal.@pi = The mathematical constant pi (3.141...)
|
||||
lglobal.@e = The mathematical constant e (2.718...)
|
||||
lglobal.@degToRad = Multiply by this number to convert degrees to radians
|
||||
lglobal.@radToDeg = Multiply by this number to convert radians to degrees
|
||||
lglobal.@time = Playtime of current save, in milliseconds
|
||||
lglobal.@tick = Playtime of current save, in ticks (1 second = 60 ticks)
|
||||
lglobal.@second = Playtime of current save, in seconds
|
||||
lglobal.@minute = Playtime of current save, in minutes
|
||||
lglobal.@waveNumber = Current wave number, if waves are enabled
|
||||
lglobal.@waveTime = Countdown timer for waves, in seconds
|
||||
lglobal.@mapw = Map width in tiles
|
||||
lglobal.@maph = Map height in tiles
|
||||
lglobal.sectionMap = Map
|
||||
lglobal.sectionGeneral = General
|
||||
lglobal.sectionNetwork = Network/Clientside [World Processor Only]
|
||||
lglobal.sectionProcessor = Processor
|
||||
lglobal.sectionLookup = Lookup
|
||||
lglobal.@this = The logic block executing the code
|
||||
lglobal.@thisx = X coordinate of block executing the code
|
||||
lglobal.@thisy = Y coordinate of block executing the code
|
||||
lglobal.@links = Total number of blocks linked to this processors
|
||||
lglobal.@ipt = Execution speed of the processor in instructions per tick (60 ticks = 1 second)
|
||||
lglobal.@unitCount = Total number of types of unit content in the game; used with the lookup instruction
|
||||
lglobal.@blockCount = Total number of types of block content in the game; used with the lookup instruction
|
||||
lglobal.@itemCount = Total number of types of item content in the game; used with the lookup instruction
|
||||
lglobal.@liquidCount = Total number of types of liquid content in the game; used with the lookup instruction
|
||||
lglobal.@server = True if the code is running on a server or in singleplayer, false otherwise
|
||||
lglobal.@client = True if the code is running on a client connected to a server
|
||||
lglobal.@clientLocale = Locale of the client running the code. For example: en_US
|
||||
lglobal.@clientUnit = Unit of client running the code
|
||||
lglobal.@clientName = Player name of client running the code
|
||||
lglobal.@clientTeam = Team ID of client running the code
|
||||
lglobal.@clientMobile = True is the client running the code is on mobile, false otherwise
|
||||
logic.nounitbuild = [red]Unit building logic is not allowed here.
|
||||
lenum.type = Type of building/unit.\ne.g. for any router, this will return [accent]@router[].\nNot a string.
|
||||
lenum.shoot = Shoot at a position.
|
||||
@@ -2414,3 +2454,6 @@ lenum.flushtext = Flush print buffer's content to marker, if applicable.\nIf fet
|
||||
lenum.texture = Texture name straight from game's texture atlas (using kebab-case naming style).\nIf printFlush is set to true, consumes text buffer content as text argument.
|
||||
lenum.texturesize = Size of texture in tiles. Zero value scales marker width to original texture's size.
|
||||
lenum.autoscale = Whether to scale marker corresponding to player's zoom level.
|
||||
lenum.posi = Indexed position, used for line and quad markers with index zero being the first position.
|
||||
lenum.uvi = Texture's position ranging from zero to one, used for quad markers.
|
||||
lenum.colori = Indexed position, used for line and quad markers with index zero being the first color.
|
||||
|
||||
@@ -492,6 +492,7 @@ editor.default = [lightgray]<Lehenetsia>
|
||||
details = Xehetasunak...
|
||||
edit = Editatu...
|
||||
variables = Vars
|
||||
logic.globals = Built-in Variables
|
||||
editor.name = Izena:
|
||||
editor.spawn = Sortu unitatea
|
||||
editor.removeunit = Kendu unitatea
|
||||
@@ -667,10 +668,11 @@ objective.destroycore.name = Destroy Core
|
||||
objective.commandmode.name = Command Mode
|
||||
objective.flag.name = Flag
|
||||
marker.shapetext.name = Shape Text
|
||||
marker.minimap.name = Minimap
|
||||
marker.point.name = Point
|
||||
marker.shape.name = Shape
|
||||
marker.text.name = Text
|
||||
marker.line.name = Line
|
||||
marker.quad.name = Quad
|
||||
marker.background = Background
|
||||
marker.outline = Outline
|
||||
objective.research = [accent]Research:\n[]{0}[lightgray]{1}
|
||||
@@ -754,6 +756,7 @@ sector.missingresources = [scarlet]Insufficient Core Resources
|
||||
sector.attacked = Sector [accent]{0}[white] under attack!
|
||||
sector.lost = Sector [accent]{0}[white] lost!
|
||||
sector.capture = Sector [accent]{0}[white]Captured!
|
||||
sector.capture.current = Sector Captured!
|
||||
sector.changeicon = Change Icon
|
||||
sector.noswitch.title = Unable to Switch Sectors
|
||||
sector.noswitch = You may not switch sectors while an existing sector is under attack.\n\nSector: [accent]{0}[] on [accent]{1}[]
|
||||
@@ -1533,6 +1536,7 @@ block.inverted-sorter.name = Alderantzizko antolatzailea
|
||||
block.message.name = Mezua
|
||||
block.reinforced-message.name = Reinforced Message
|
||||
block.world-message.name = World Message
|
||||
block.world-switch.name = World Switch
|
||||
block.illuminator.name = Illuminator
|
||||
block.overflow-gate.name = Gainezkatze atea
|
||||
block.underflow-gate.name = Underflow Gate
|
||||
@@ -2280,6 +2284,42 @@ lst.sync = Sync a variable across the network.\nOnly invoked 10 times a second a
|
||||
lst.makemarker = Create a new logic marker in the world.\nAn ID to identify this marker must be provided.\nMarkers currently limited to 20,000 per world.
|
||||
lst.setmarker = Set a property for a marker.\nThe ID used must be the same as in the Make Marker instruction.
|
||||
lst.localeprint = Add map locale property value to the text buffer.\nTo set map locale bundles in map editor, check [accent]Map Info > Locale Bundles[].\nIf client is a mobile device, tries to print a property ending in ".mobile" first.
|
||||
lglobal.false = 0
|
||||
lglobal.true = 1
|
||||
lglobal.null = null
|
||||
lglobal.@pi = The mathematical constant pi (3.141...)
|
||||
lglobal.@e = The mathematical constant e (2.718...)
|
||||
lglobal.@degToRad = Multiply by this number to convert degrees to radians
|
||||
lglobal.@radToDeg = Multiply by this number to convert radians to degrees
|
||||
lglobal.@time = Playtime of current save, in milliseconds
|
||||
lglobal.@tick = Playtime of current save, in ticks (1 second = 60 ticks)
|
||||
lglobal.@second = Playtime of current save, in seconds
|
||||
lglobal.@minute = Playtime of current save, in minutes
|
||||
lglobal.@waveNumber = Current wave number, if waves are enabled
|
||||
lglobal.@waveTime = Countdown timer for waves, in seconds
|
||||
lglobal.@mapw = Map width in tiles
|
||||
lglobal.@maph = Map height in tiles
|
||||
lglobal.sectionMap = Map
|
||||
lglobal.sectionGeneral = General
|
||||
lglobal.sectionNetwork = Network/Clientside [World Processor Only]
|
||||
lglobal.sectionProcessor = Processor
|
||||
lglobal.sectionLookup = Lookup
|
||||
lglobal.@this = The logic block executing the code
|
||||
lglobal.@thisx = X coordinate of block executing the code
|
||||
lglobal.@thisy = Y coordinate of block executing the code
|
||||
lglobal.@links = Total number of blocks linked to this processors
|
||||
lglobal.@ipt = Execution speed of the processor in instructions per tick (60 ticks = 1 second)
|
||||
lglobal.@unitCount = Total number of types of unit content in the game; used with the lookup instruction
|
||||
lglobal.@blockCount = Total number of types of block content in the game; used with the lookup instruction
|
||||
lglobal.@itemCount = Total number of types of item content in the game; used with the lookup instruction
|
||||
lglobal.@liquidCount = Total number of types of liquid content in the game; used with the lookup instruction
|
||||
lglobal.@server = True if the code is running on a server or in singleplayer, false otherwise
|
||||
lglobal.@client = True if the code is running on a client connected to a server
|
||||
lglobal.@clientLocale = Locale of the client running the code. For example: en_US
|
||||
lglobal.@clientUnit = Unit of client running the code
|
||||
lglobal.@clientName = Player name of client running the code
|
||||
lglobal.@clientTeam = Team ID of client running the code
|
||||
lglobal.@clientMobile = True is the client running the code is on mobile, false otherwise
|
||||
logic.nounitbuild = [red]Unit building logic is not allowed here.
|
||||
lenum.type = Type of building/unit.\ne.g. for any router, this will return [accent]@router[].\nNot a string.
|
||||
lenum.shoot = Shoot at a position.
|
||||
@@ -2416,3 +2456,6 @@ lenum.flushtext = Flush print buffer's content to marker, if applicable.\nIf fet
|
||||
lenum.texture = Texture name straight from game's texture atlas (using kebab-case naming style).\nIf printFlush is set to true, consumes text buffer content as text argument.
|
||||
lenum.texturesize = Size of texture in tiles. Zero value scales marker width to original texture's size.
|
||||
lenum.autoscale = Whether to scale marker corresponding to player's zoom level.
|
||||
lenum.posi = Indexed position, used for line and quad markers with index zero being the first position.
|
||||
lenum.uvi = Texture's position ranging from zero to one, used for quad markers.
|
||||
lenum.colori = Indexed position, used for line and quad markers with index zero being the first color.
|
||||
|
||||
@@ -490,6 +490,7 @@ editor.default = [lightgray]<Oletus>
|
||||
details = Yksityiskohdat...
|
||||
edit = Muokkaa...
|
||||
variables = Muuttujat
|
||||
logic.globals = Built-in Variables
|
||||
editor.name = Nimi:
|
||||
editor.spawn = Luo yksikkö
|
||||
editor.removeunit = Poista yksikkö
|
||||
@@ -665,10 +666,11 @@ objective.destroycore.name = Destroy Core
|
||||
objective.commandmode.name = Command Mode
|
||||
objective.flag.name = Flag
|
||||
marker.shapetext.name = Shape Text
|
||||
marker.minimap.name = Pikkukartta
|
||||
marker.point.name = Point
|
||||
marker.shape.name = Shape
|
||||
marker.text.name = Teksti
|
||||
marker.line.name = Line
|
||||
marker.quad.name = Quad
|
||||
marker.background = Background
|
||||
marker.outline = Outline
|
||||
objective.research = [accent]Tutki:\n[]{0}[lightgray]{1}
|
||||
@@ -752,6 +754,7 @@ sector.missingresources = [scarlet]Sinulla ei ole tarpeeksi resursseja.
|
||||
sector.attacked = Sektori [accent]{0}[white] on hyökkäyksen kohteena!
|
||||
sector.lost = Sektori [accent]{0}[white] menetetty!
|
||||
sector.capture = Sector [accent]{0}[white]Captured!
|
||||
sector.capture.current = Sector Captured!
|
||||
sector.changeicon = Vaihda kuvaketta
|
||||
sector.noswitch.title = Sektoria ei voida vaihtaa
|
||||
sector.noswitch = Et voi vaihtaa sektoria, kun olemassaoleva sektori on hyökkäyksen kohteena.\n\nSektori: [accent]{0}[] planeetalla [accent]{1}[]
|
||||
@@ -1532,6 +1535,7 @@ block.inverted-sorter.name = Käänteinen Lajittelija
|
||||
block.message.name = Viesti
|
||||
block.reinforced-message.name = Reinforced Message
|
||||
block.world-message.name = World Message
|
||||
block.world-switch.name = World Switch
|
||||
block.illuminator.name = Lamppu
|
||||
block.overflow-gate.name = Ylivuotoportti
|
||||
block.underflow-gate.name = Alivuotoportti
|
||||
@@ -2281,6 +2285,42 @@ lst.sync = Sync a variable across the network.\nOnly invoked 10 times a second a
|
||||
lst.makemarker = Create a new logic marker in the world.\nAn ID to identify this marker must be provided.\nMarkers currently limited to 20,000 per world.
|
||||
lst.setmarker = Set a property for a marker.\nThe ID used must be the same as in the Make Marker instruction.
|
||||
lst.localeprint = Add map locale property value to the text buffer.\nTo set map locale bundles in map editor, check [accent]Map Info > Locale Bundles[].\nIf client is a mobile device, tries to print a property ending in ".mobile" first.
|
||||
lglobal.false = 0
|
||||
lglobal.true = 1
|
||||
lglobal.null = null
|
||||
lglobal.@pi = The mathematical constant pi (3.141...)
|
||||
lglobal.@e = The mathematical constant e (2.718...)
|
||||
lglobal.@degToRad = Multiply by this number to convert degrees to radians
|
||||
lglobal.@radToDeg = Multiply by this number to convert radians to degrees
|
||||
lglobal.@time = Playtime of current save, in milliseconds
|
||||
lglobal.@tick = Playtime of current save, in ticks (1 second = 60 ticks)
|
||||
lglobal.@second = Playtime of current save, in seconds
|
||||
lglobal.@minute = Playtime of current save, in minutes
|
||||
lglobal.@waveNumber = Current wave number, if waves are enabled
|
||||
lglobal.@waveTime = Countdown timer for waves, in seconds
|
||||
lglobal.@mapw = Map width in tiles
|
||||
lglobal.@maph = Map height in tiles
|
||||
lglobal.sectionMap = Map
|
||||
lglobal.sectionGeneral = General
|
||||
lglobal.sectionNetwork = Network/Clientside [World Processor Only]
|
||||
lglobal.sectionProcessor = Processor
|
||||
lglobal.sectionLookup = Lookup
|
||||
lglobal.@this = The logic block executing the code
|
||||
lglobal.@thisx = X coordinate of block executing the code
|
||||
lglobal.@thisy = Y coordinate of block executing the code
|
||||
lglobal.@links = Total number of blocks linked to this processors
|
||||
lglobal.@ipt = Execution speed of the processor in instructions per tick (60 ticks = 1 second)
|
||||
lglobal.@unitCount = Total number of types of unit content in the game; used with the lookup instruction
|
||||
lglobal.@blockCount = Total number of types of block content in the game; used with the lookup instruction
|
||||
lglobal.@itemCount = Total number of types of item content in the game; used with the lookup instruction
|
||||
lglobal.@liquidCount = Total number of types of liquid content in the game; used with the lookup instruction
|
||||
lglobal.@server = True if the code is running on a server or in singleplayer, false otherwise
|
||||
lglobal.@client = True if the code is running on a client connected to a server
|
||||
lglobal.@clientLocale = Locale of the client running the code. For example: en_US
|
||||
lglobal.@clientUnit = Unit of client running the code
|
||||
lglobal.@clientName = Player name of client running the code
|
||||
lglobal.@clientTeam = Team ID of client running the code
|
||||
lglobal.@clientMobile = True is the client running the code is on mobile, false otherwise
|
||||
logic.nounitbuild = [red]Logiikan käyttö ei täällä ole sallittu yksikköjen tuottamisessa.
|
||||
lenum.type = Rakennuksen/Yksikön tyyppi.\nEsim. jokaisesta reitittimestä tämä palauttaa [accent]@router[].\nEi ole merkkijono.
|
||||
lenum.shoot = Ammu tiettyä sijaintia.
|
||||
@@ -2417,3 +2457,6 @@ lenum.flushtext = Flush print buffer's content to marker, if applicable.\nIf fet
|
||||
lenum.texture = Texture name straight from game's texture atlas (using kebab-case naming style).\nIf printFlush is set to true, consumes text buffer content as text argument.
|
||||
lenum.texturesize = Size of texture in tiles. Zero value scales marker width to original texture's size.
|
||||
lenum.autoscale = Whether to scale marker corresponding to player's zoom level.
|
||||
lenum.posi = Indexed position, used for line and quad markers with index zero being the first position.
|
||||
lenum.uvi = Texture's position ranging from zero to one, used for quad markers.
|
||||
lenum.colori = Indexed position, used for line and quad markers with index zero being the first color.
|
||||
|
||||
@@ -490,6 +490,7 @@ editor.default = [lightgray]<Default>
|
||||
details = Details...
|
||||
edit = Edit...
|
||||
variables = Vars
|
||||
logic.globals = Built-in Variables
|
||||
editor.name = Name:
|
||||
editor.spawn = Spawn Unit
|
||||
editor.removeunit = Remove Unit
|
||||
@@ -665,10 +666,11 @@ objective.destroycore.name = Destroy Core
|
||||
objective.commandmode.name = Command Mode
|
||||
objective.flag.name = Flag
|
||||
marker.shapetext.name = Shape Text
|
||||
marker.minimap.name = Minimap
|
||||
marker.point.name = Point
|
||||
marker.shape.name = Shape
|
||||
marker.text.name = Text
|
||||
marker.line.name = Line
|
||||
marker.quad.name = Quad
|
||||
marker.background = Background
|
||||
marker.outline = Outline
|
||||
objective.research = [accent]Research:\n[]{0}[lightgray]{1}
|
||||
@@ -752,6 +754,7 @@ sector.missingresources = [scarlet]Kulang ang mga Core Resources
|
||||
sector.attacked = Ang sector [accent]{0}[white] ay inaatake!
|
||||
sector.lost = Ang sector [accent]{0}[white] ay nawala!
|
||||
sector.capture = Sector [accent]{0}[white]Captured!
|
||||
sector.capture.current = Sector Captured!
|
||||
sector.changeicon = Change Icon
|
||||
sector.noswitch.title = Unable to Switch Sectors
|
||||
sector.noswitch = You may not switch sectors while an existing sector is under attack.\n\nSector: [accent]{0}[] on [accent]{1}[]
|
||||
@@ -1530,6 +1533,7 @@ block.inverted-sorter.name = Inverted Sorter
|
||||
block.message.name = Message
|
||||
block.reinforced-message.name = Reinforced Message
|
||||
block.world-message.name = World Message
|
||||
block.world-switch.name = World Switch
|
||||
block.illuminator.name = Illuminator
|
||||
block.overflow-gate.name = Overflow Gate
|
||||
block.underflow-gate.name = Underflow Gate
|
||||
@@ -2277,6 +2281,42 @@ lst.sync = Sync a variable across the network.\nOnly invoked 10 times a second a
|
||||
lst.makemarker = Create a new logic marker in the world.\nAn ID to identify this marker must be provided.\nMarkers currently limited to 20,000 per world.
|
||||
lst.setmarker = Set a property for a marker.\nThe ID used must be the same as in the Make Marker instruction.
|
||||
lst.localeprint = Add map locale property value to the text buffer.\nTo set map locale bundles in map editor, check [accent]Map Info > Locale Bundles[].\nIf client is a mobile device, tries to print a property ending in ".mobile" first.
|
||||
lglobal.false = 0
|
||||
lglobal.true = 1
|
||||
lglobal.null = null
|
||||
lglobal.@pi = The mathematical constant pi (3.141...)
|
||||
lglobal.@e = The mathematical constant e (2.718...)
|
||||
lglobal.@degToRad = Multiply by this number to convert degrees to radians
|
||||
lglobal.@radToDeg = Multiply by this number to convert radians to degrees
|
||||
lglobal.@time = Playtime of current save, in milliseconds
|
||||
lglobal.@tick = Playtime of current save, in ticks (1 second = 60 ticks)
|
||||
lglobal.@second = Playtime of current save, in seconds
|
||||
lglobal.@minute = Playtime of current save, in minutes
|
||||
lglobal.@waveNumber = Current wave number, if waves are enabled
|
||||
lglobal.@waveTime = Countdown timer for waves, in seconds
|
||||
lglobal.@mapw = Map width in tiles
|
||||
lglobal.@maph = Map height in tiles
|
||||
lglobal.sectionMap = Map
|
||||
lglobal.sectionGeneral = General
|
||||
lglobal.sectionNetwork = Network/Clientside [World Processor Only]
|
||||
lglobal.sectionProcessor = Processor
|
||||
lglobal.sectionLookup = Lookup
|
||||
lglobal.@this = The logic block executing the code
|
||||
lglobal.@thisx = X coordinate of block executing the code
|
||||
lglobal.@thisy = Y coordinate of block executing the code
|
||||
lglobal.@links = Total number of blocks linked to this processors
|
||||
lglobal.@ipt = Execution speed of the processor in instructions per tick (60 ticks = 1 second)
|
||||
lglobal.@unitCount = Total number of types of unit content in the game; used with the lookup instruction
|
||||
lglobal.@blockCount = Total number of types of block content in the game; used with the lookup instruction
|
||||
lglobal.@itemCount = Total number of types of item content in the game; used with the lookup instruction
|
||||
lglobal.@liquidCount = Total number of types of liquid content in the game; used with the lookup instruction
|
||||
lglobal.@server = True if the code is running on a server or in singleplayer, false otherwise
|
||||
lglobal.@client = True if the code is running on a client connected to a server
|
||||
lglobal.@clientLocale = Locale of the client running the code. For example: en_US
|
||||
lglobal.@clientUnit = Unit of client running the code
|
||||
lglobal.@clientName = Player name of client running the code
|
||||
lglobal.@clientTeam = Team ID of client running the code
|
||||
lglobal.@clientMobile = True is the client running the code is on mobile, false otherwise
|
||||
logic.nounitbuild = [red]Unit building logic is not allowed here.
|
||||
lenum.type = Type of building/unit.\ne.g. for any router, this will return [accent]@router[].\nNot a string.
|
||||
lenum.shoot = Shoot at a position.
|
||||
@@ -2413,3 +2453,6 @@ lenum.flushtext = Flush print buffer's content to marker, if applicable.\nIf fet
|
||||
lenum.texture = Texture name straight from game's texture atlas (using kebab-case naming style).\nIf printFlush is set to true, consumes text buffer content as text argument.
|
||||
lenum.texturesize = Size of texture in tiles. Zero value scales marker width to original texture's size.
|
||||
lenum.autoscale = Whether to scale marker corresponding to player's zoom level.
|
||||
lenum.posi = Indexed position, used for line and quad markers with index zero being the first position.
|
||||
lenum.uvi = Texture's position ranging from zero to one, used for quad markers.
|
||||
lenum.colori = Indexed position, used for line and quad markers with index zero being the first color.
|
||||
|
||||
@@ -501,6 +501,7 @@ editor.default = [lightgray]<par défaut>
|
||||
details = Détails...
|
||||
edit = Modifier...
|
||||
variables = Variables
|
||||
logic.globals = Built-in Variables
|
||||
editor.name = Nom :
|
||||
editor.spawn = Ajouter une unité
|
||||
editor.removeunit = Retirer l'unité
|
||||
@@ -681,10 +682,11 @@ objective.commandmode.name = Mode « Commande »
|
||||
objective.flag.name = Drapeau
|
||||
|
||||
marker.shapetext.name = Forme de Texte
|
||||
marker.minimap.name = Minicarte
|
||||
marker.point.name = Point
|
||||
marker.shape.name = Forme
|
||||
marker.text.name = Texte
|
||||
marker.line.name = Ligne
|
||||
marker.quad.name = Quad
|
||||
|
||||
marker.background = Fond
|
||||
marker.outline = Contour
|
||||
@@ -773,6 +775,7 @@ sector.missingresources = [scarlet]Ressources du Noyau insuffisantes !
|
||||
sector.attacked = Secteur [accent]{0}[white] attaqué !
|
||||
sector.lost = Secteur [accent]{0}[white] perdu !
|
||||
sector.capture = Sector [accent]{0}[white]Captured!
|
||||
sector.capture.current = Sector Captured!
|
||||
sector.changeicon = Changer l'Icône
|
||||
sector.noswitch.title = Impossible de changer de Secteur
|
||||
sector.noswitch = Vous ne pouvez pas changer de secteur pendant qu’un autre est attaqué.\n\nSecteur: [accent]{0}[] sur [accent]{1}[]
|
||||
@@ -1562,6 +1565,7 @@ block.inverted-sorter.name = Trieur Inversé
|
||||
block.message.name = Bloc de Message
|
||||
block.reinforced-message.name = Bloc de Message Renforcé
|
||||
block.world-message.name = Bloc de Message Global
|
||||
block.world-switch.name = World Switch
|
||||
block.illuminator.name = Illuminateur
|
||||
block.overflow-gate.name = Barrière de Débordement
|
||||
block.underflow-gate.name = Barrière de Refoulement
|
||||
@@ -2326,6 +2330,42 @@ lst.sync = Synchronise une variable dans le réseau.\nLimité à 20 fois par sec
|
||||
lst.makemarker = Crée un marqueur dans le monde.\nUn ID pour identifier le marqueur doit être donné.\nLes marqueurs sont limités à 20,000 par monde.
|
||||
lst.setmarker = Change une propriété d'un marqueur.\nL'ID utilisé doit être le même que celui de l'instruction "Make Marker".
|
||||
lst.localeprint = Add map locale property value to the text buffer.\nTo set map locale bundles in map editor, check [accent]Map Info > Locale Bundles[].\nIf client is a mobile device, tries to print a property ending in ".mobile" first.
|
||||
lglobal.false = 0
|
||||
lglobal.true = 1
|
||||
lglobal.null = null
|
||||
lglobal.@pi = The mathematical constant pi (3.141...)
|
||||
lglobal.@e = The mathematical constant e (2.718...)
|
||||
lglobal.@degToRad = Multiply by this number to convert degrees to radians
|
||||
lglobal.@radToDeg = Multiply by this number to convert radians to degrees
|
||||
lglobal.@time = Playtime of current save, in milliseconds
|
||||
lglobal.@tick = Playtime of current save, in ticks (1 second = 60 ticks)
|
||||
lglobal.@second = Playtime of current save, in seconds
|
||||
lglobal.@minute = Playtime of current save, in minutes
|
||||
lglobal.@waveNumber = Current wave number, if waves are enabled
|
||||
lglobal.@waveTime = Countdown timer for waves, in seconds
|
||||
lglobal.@mapw = Map width in tiles
|
||||
lglobal.@maph = Map height in tiles
|
||||
lglobal.sectionMap = Map
|
||||
lglobal.sectionGeneral = General
|
||||
lglobal.sectionNetwork = Network/Clientside [World Processor Only]
|
||||
lglobal.sectionProcessor = Processor
|
||||
lglobal.sectionLookup = Lookup
|
||||
lglobal.@this = The logic block executing the code
|
||||
lglobal.@thisx = X coordinate of block executing the code
|
||||
lglobal.@thisy = Y coordinate of block executing the code
|
||||
lglobal.@links = Total number of blocks linked to this processors
|
||||
lglobal.@ipt = Execution speed of the processor in instructions per tick (60 ticks = 1 second)
|
||||
lglobal.@unitCount = Total number of types of unit content in the game; used with the lookup instruction
|
||||
lglobal.@blockCount = Total number of types of block content in the game; used with the lookup instruction
|
||||
lglobal.@itemCount = Total number of types of item content in the game; used with the lookup instruction
|
||||
lglobal.@liquidCount = Total number of types of liquid content in the game; used with the lookup instruction
|
||||
lglobal.@server = True if the code is running on a server or in singleplayer, false otherwise
|
||||
lglobal.@client = True if the code is running on a client connected to a server
|
||||
lglobal.@clientLocale = Locale of the client running the code. For example: en_US
|
||||
lglobal.@clientUnit = Unit of client running the code
|
||||
lglobal.@clientName = Player name of client running the code
|
||||
lglobal.@clientTeam = Team ID of client running the code
|
||||
lglobal.@clientMobile = True is the client running the code is on mobile, false otherwise
|
||||
|
||||
logic.nounitbuild = [red]Les unités contrôlées par des processeurs ne peuvent pas construire ici.
|
||||
|
||||
@@ -2482,3 +2522,6 @@ lenum.flushtext = Flush print buffer's content to marker, if applicable.\nIf fet
|
||||
lenum.texture = Texture name straight from game's texture atlas (using kebab-case naming style).\nIf printFlush is set to true, consumes text buffer content as text argument.
|
||||
lenum.texturesize = Size of texture in tiles. Zero value scales marker width to original texture's size.
|
||||
lenum.autoscale = Whether to scale marker corresponding to player's zoom level.
|
||||
lenum.posi = Indexed position, used for line and quad markers with index zero being the first position.
|
||||
lenum.uvi = Texture's position ranging from zero to one, used for quad markers.
|
||||
lenum.colori = Indexed position, used for line and quad markers with index zero being the first color.
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -495,6 +495,7 @@ editor.default = [lightgray]<Standar>
|
||||
details = Detail...
|
||||
edit = Sunting...
|
||||
variables = Vars
|
||||
logic.globals = Built-in Variables
|
||||
editor.name = Nama:
|
||||
editor.spawn = Munculkan Unit
|
||||
editor.removeunit = Hapus Unit
|
||||
@@ -675,10 +676,11 @@ objective.commandmode.name = Mode Perintah
|
||||
objective.flag.name = Bendera
|
||||
|
||||
marker.shapetext.name = Teks Berbentuk
|
||||
marker.minimap.name = Peta Kecil
|
||||
marker.point.name = Point
|
||||
marker.shape.name = Bentuk
|
||||
marker.text.name = Teks
|
||||
marker.line.name = Line
|
||||
marker.quad.name = Quad
|
||||
|
||||
marker.background = Latar Belakang
|
||||
marker.outline = Garis Luar
|
||||
@@ -766,6 +768,7 @@ sector.missingresources = [scarlet]Sumber Daya Inti Tidak Cukup
|
||||
sector.attacked = Sektor [accent]{0}[white] sedang diserang!
|
||||
sector.lost = Sektor [accent]{0}[white] telah dihancurkan!
|
||||
sector.capture = Sector [accent]{0}[white]Captured!
|
||||
sector.capture.current = Sector Captured!
|
||||
sector.changeicon = Ubah Ikon
|
||||
sector.noswitch.title = Tidak Dapat beralih Sektor
|
||||
sector.noswitch = Andak tidak boleh berpindah sektor jika salah satu sektor terkena serangan.\nSektor: [accent]{0}[] di [accent]{1}[]
|
||||
@@ -1553,6 +1556,7 @@ block.inverted-sorter.name = Penyortir Terbalik
|
||||
block.message.name = Pesan
|
||||
block.reinforced-message.name = Reinforced Message
|
||||
block.world-message.name = World Message
|
||||
block.world-switch.name = World Switch
|
||||
block.illuminator.name = Lampu
|
||||
block.overflow-gate.name = Gerbang Luap
|
||||
block.underflow-gate.name = Gerbang Luap Terbalik
|
||||
@@ -2316,6 +2320,42 @@ lst.sync = Sync a variable across the network.\nOnly invoked 10 times a second a
|
||||
lst.makemarker = Create a new logic marker in the world.\nAn ID to identify this marker must be provided.\nMarkers currently limited to 20,000 per world.
|
||||
lst.setmarker = Set a property for a marker.\nThe ID used must be the same as in the Make Marker instruction.
|
||||
lst.localeprint = Add map locale property value to the text buffer.\nTo set map locale bundles in map editor, check [accent]Map Info > Locale Bundles[].\nIf client is a mobile device, tries to print a property ending in ".mobile" first.
|
||||
lglobal.false = 0
|
||||
lglobal.true = 1
|
||||
lglobal.null = null
|
||||
lglobal.@pi = The mathematical constant pi (3.141...)
|
||||
lglobal.@e = The mathematical constant e (2.718...)
|
||||
lglobal.@degToRad = Multiply by this number to convert degrees to radians
|
||||
lglobal.@radToDeg = Multiply by this number to convert radians to degrees
|
||||
lglobal.@time = Playtime of current save, in milliseconds
|
||||
lglobal.@tick = Playtime of current save, in ticks (1 second = 60 ticks)
|
||||
lglobal.@second = Playtime of current save, in seconds
|
||||
lglobal.@minute = Playtime of current save, in minutes
|
||||
lglobal.@waveNumber = Current wave number, if waves are enabled
|
||||
lglobal.@waveTime = Countdown timer for waves, in seconds
|
||||
lglobal.@mapw = Map width in tiles
|
||||
lglobal.@maph = Map height in tiles
|
||||
lglobal.sectionMap = Map
|
||||
lglobal.sectionGeneral = General
|
||||
lglobal.sectionNetwork = Network/Clientside [World Processor Only]
|
||||
lglobal.sectionProcessor = Processor
|
||||
lglobal.sectionLookup = Lookup
|
||||
lglobal.@this = The logic block executing the code
|
||||
lglobal.@thisx = X coordinate of block executing the code
|
||||
lglobal.@thisy = Y coordinate of block executing the code
|
||||
lglobal.@links = Total number of blocks linked to this processors
|
||||
lglobal.@ipt = Execution speed of the processor in instructions per tick (60 ticks = 1 second)
|
||||
lglobal.@unitCount = Total number of types of unit content in the game; used with the lookup instruction
|
||||
lglobal.@blockCount = Total number of types of block content in the game; used with the lookup instruction
|
||||
lglobal.@itemCount = Total number of types of item content in the game; used with the lookup instruction
|
||||
lglobal.@liquidCount = Total number of types of liquid content in the game; used with the lookup instruction
|
||||
lglobal.@server = True if the code is running on a server or in singleplayer, false otherwise
|
||||
lglobal.@client = True if the code is running on a client connected to a server
|
||||
lglobal.@clientLocale = Locale of the client running the code. For example: en_US
|
||||
lglobal.@clientUnit = Unit of client running the code
|
||||
lglobal.@clientName = Player name of client running the code
|
||||
lglobal.@clientTeam = Team ID of client running the code
|
||||
lglobal.@clientMobile = True is the client running the code is on mobile, false otherwise
|
||||
|
||||
logic.nounitbuild = [red]Logika unit membangun tidak diperbolehkan di sini.
|
||||
|
||||
@@ -2472,3 +2512,6 @@ lenum.flushtext = Flush print buffer's content to marker, if applicable.\nIf fet
|
||||
lenum.texture = Texture name straight from game's texture atlas (using kebab-case naming style).\nIf printFlush is set to true, consumes text buffer content as text argument.
|
||||
lenum.texturesize = Size of texture in tiles. Zero value scales marker width to original texture's size.
|
||||
lenum.autoscale = Whether to scale marker corresponding to player's zoom level.
|
||||
lenum.posi = Indexed position, used for line and quad markers with index zero being the first position.
|
||||
lenum.uvi = Texture's position ranging from zero to one, used for quad markers.
|
||||
lenum.colori = Indexed position, used for line and quad markers with index zero being the first color.
|
||||
|
||||
@@ -493,6 +493,7 @@ editor.default = [lightgray]<Predefinito>
|
||||
details = Dettagli...
|
||||
edit = Modifica...
|
||||
variables = Vars
|
||||
logic.globals = Built-in Variables
|
||||
editor.name = Nome:
|
||||
editor.spawn = Piazza un'Unità
|
||||
editor.removeunit = Rimuovi un'Unità
|
||||
@@ -668,10 +669,11 @@ objective.destroycore.name = Distruggi nuclei
|
||||
objective.commandmode.name = Modalità comando
|
||||
objective.flag.name = Flag
|
||||
marker.shapetext.name = Shape Text
|
||||
marker.minimap.name = Minimappa
|
||||
marker.point.name = Point
|
||||
marker.shape.name = Forma
|
||||
marker.text.name = Testo
|
||||
marker.line.name = Line
|
||||
marker.quad.name = Quad
|
||||
marker.background = Sfondo
|
||||
marker.outline = Outline
|
||||
objective.research = [accent]Ricerca:\n[]{0}[lightgray]{1}
|
||||
@@ -756,6 +758,7 @@ sector.missingresources = [scarlet]Risorse del Nucleo Insufficienti
|
||||
sector.attacked = Settore [accent]{0}[white] sotto attacco!
|
||||
sector.lost = Settore [accent]{0}[white] perso!
|
||||
sector.capture = Sector [accent]{0}[white]Captured!
|
||||
sector.capture.current = Sector Captured!
|
||||
sector.changeicon = Cambia icona
|
||||
sector.noswitch.title = Impossibile cambiare settore
|
||||
sector.noswitch = Non puoi cambiare settore mentre sei sotto attacco.\n\nSectore: [accent]{0}[] on [accent]{1}[]
|
||||
@@ -1541,6 +1544,7 @@ block.inverted-sorter.name = Filtro Inverso
|
||||
block.message.name = Messaggio
|
||||
block.reinforced-message.name = Reinforced Message
|
||||
block.world-message.name = World Message
|
||||
block.world-switch.name = World Switch
|
||||
block.illuminator.name = Lanterna
|
||||
block.overflow-gate.name = Separatore per Eccesso
|
||||
block.underflow-gate.name = Separatore per Eccesso Inverso
|
||||
@@ -2290,6 +2294,42 @@ lst.sync = Sync a variable across the network.\nOnly invoked 10 times a second a
|
||||
lst.makemarker = Create a new logic marker in the world.\nAn ID to identify this marker must be provided.\nMarkers currently limited to 20,000 per world.
|
||||
lst.setmarker = Set a property for a marker.\nThe ID used must be the same as in the Make Marker instruction.
|
||||
lst.localeprint = Add map locale property value to the text buffer.\nTo set map locale bundles in map editor, check [accent]Map Info > Locale Bundles[].\nIf client is a mobile device, tries to print a property ending in ".mobile" first.
|
||||
lglobal.false = 0
|
||||
lglobal.true = 1
|
||||
lglobal.null = null
|
||||
lglobal.@pi = The mathematical constant pi (3.141...)
|
||||
lglobal.@e = The mathematical constant e (2.718...)
|
||||
lglobal.@degToRad = Multiply by this number to convert degrees to radians
|
||||
lglobal.@radToDeg = Multiply by this number to convert radians to degrees
|
||||
lglobal.@time = Playtime of current save, in milliseconds
|
||||
lglobal.@tick = Playtime of current save, in ticks (1 second = 60 ticks)
|
||||
lglobal.@second = Playtime of current save, in seconds
|
||||
lglobal.@minute = Playtime of current save, in minutes
|
||||
lglobal.@waveNumber = Current wave number, if waves are enabled
|
||||
lglobal.@waveTime = Countdown timer for waves, in seconds
|
||||
lglobal.@mapw = Map width in tiles
|
||||
lglobal.@maph = Map height in tiles
|
||||
lglobal.sectionMap = Map
|
||||
lglobal.sectionGeneral = General
|
||||
lglobal.sectionNetwork = Network/Clientside [World Processor Only]
|
||||
lglobal.sectionProcessor = Processor
|
||||
lglobal.sectionLookup = Lookup
|
||||
lglobal.@this = The logic block executing the code
|
||||
lglobal.@thisx = X coordinate of block executing the code
|
||||
lglobal.@thisy = Y coordinate of block executing the code
|
||||
lglobal.@links = Total number of blocks linked to this processors
|
||||
lglobal.@ipt = Execution speed of the processor in instructions per tick (60 ticks = 1 second)
|
||||
lglobal.@unitCount = Total number of types of unit content in the game; used with the lookup instruction
|
||||
lglobal.@blockCount = Total number of types of block content in the game; used with the lookup instruction
|
||||
lglobal.@itemCount = Total number of types of item content in the game; used with the lookup instruction
|
||||
lglobal.@liquidCount = Total number of types of liquid content in the game; used with the lookup instruction
|
||||
lglobal.@server = True if the code is running on a server or in singleplayer, false otherwise
|
||||
lglobal.@client = True if the code is running on a client connected to a server
|
||||
lglobal.@clientLocale = Locale of the client running the code. For example: en_US
|
||||
lglobal.@clientUnit = Unit of client running the code
|
||||
lglobal.@clientName = Player name of client running the code
|
||||
lglobal.@clientTeam = Team ID of client running the code
|
||||
lglobal.@clientMobile = True is the client running the code is on mobile, false otherwise
|
||||
logic.nounitbuild = [red]Unit building logic is not allowed here.
|
||||
lenum.type = Type of building/unit.\ne.g. for any router, this will return [accent]@router[].\nNot a string.
|
||||
lenum.shoot = Shoot at a position.
|
||||
@@ -2426,3 +2466,6 @@ lenum.flushtext = Flush print buffer's content to marker, if applicable.\nIf fet
|
||||
lenum.texture = Texture name straight from game's texture atlas (using kebab-case naming style).\nIf printFlush is set to true, consumes text buffer content as text argument.
|
||||
lenum.texturesize = Size of texture in tiles. Zero value scales marker width to original texture's size.
|
||||
lenum.autoscale = Whether to scale marker corresponding to player's zoom level.
|
||||
lenum.posi = Indexed position, used for line and quad markers with index zero being the first position.
|
||||
lenum.uvi = Texture's position ranging from zero to one, used for quad markers.
|
||||
lenum.colori = Indexed position, used for line and quad markers with index zero being the first color.
|
||||
|
||||
@@ -495,6 +495,7 @@ editor.default = [lightgray]<デフォルト>
|
||||
details = 詳細...
|
||||
edit = 編集...
|
||||
variables = 変数
|
||||
logic.globals = Built-in Variables
|
||||
editor.name = 名前:
|
||||
editor.spawn = ユニットを出す
|
||||
editor.removeunit = ユニットを消す
|
||||
@@ -672,10 +673,11 @@ objective.destroycore.name = コアを破壊する
|
||||
objective.commandmode.name = コマンドモード
|
||||
objective.flag.name = フラグ
|
||||
marker.shapetext.name = テキストの形
|
||||
marker.minimap.name = ミニマップ
|
||||
marker.point.name = Point
|
||||
marker.shape.name = 図形
|
||||
marker.text.name = 文章
|
||||
marker.line.name = Line
|
||||
marker.quad.name = Quad
|
||||
marker.background = 背景
|
||||
marker.outline = 輪郭
|
||||
objective.research = [accent]Research:\n[]{0}[lightgray]{1}
|
||||
@@ -760,6 +762,7 @@ sector.missingresources = [scarlet]資源が足りません
|
||||
sector.attacked = セクター [accent]{0}[white] が攻撃を受けています!
|
||||
sector.lost = セクター [accent]{0}[white] 喪失!
|
||||
sector.capture = Sector [accent]{0}[white]Captured!
|
||||
sector.capture.current = Sector Captured!
|
||||
sector.changeicon = アイコンを変更
|
||||
sector.noswitch.title = セクターを切り替えることができません
|
||||
sector.noswitch = 既存のセクターが攻撃を受けている間は、セクターを切り替えることはできません。\n\nセクター: [accent]{0}[] on [accent]{1}[]
|
||||
@@ -1544,6 +1547,7 @@ block.inverted-sorter.name = 反転ソーター
|
||||
block.message.name = メッセージブロック
|
||||
block.reinforced-message.name = 強化されたメッセージブロック
|
||||
block.world-message.name = ワールドメッセージブロック
|
||||
block.world-switch.name = World Switch
|
||||
block.illuminator.name = イルミネーター
|
||||
block.overflow-gate.name = オーバーフローゲート
|
||||
block.underflow-gate.name = アンダーフローゲート
|
||||
@@ -2294,6 +2298,42 @@ lst.sync = Sync a variable across the network.\nOnly invoked 10 times a second a
|
||||
lst.makemarker = Create a new logic marker in the world.\nAn ID to identify this marker must be provided.\nMarkers currently limited to 20,000 per world.
|
||||
lst.setmarker = Set a property for a marker.\nThe ID used must be the same as in the Make Marker instruction.
|
||||
lst.localeprint = Add map locale property value to the text buffer.\nTo set map locale bundles in map editor, check [accent]Map Info > Locale Bundles[].\nIf client is a mobile device, tries to print a property ending in ".mobile" first.
|
||||
lglobal.false = 0
|
||||
lglobal.true = 1
|
||||
lglobal.null = null
|
||||
lglobal.@pi = The mathematical constant pi (3.141...)
|
||||
lglobal.@e = The mathematical constant e (2.718...)
|
||||
lglobal.@degToRad = Multiply by this number to convert degrees to radians
|
||||
lglobal.@radToDeg = Multiply by this number to convert radians to degrees
|
||||
lglobal.@time = Playtime of current save, in milliseconds
|
||||
lglobal.@tick = Playtime of current save, in ticks (1 second = 60 ticks)
|
||||
lglobal.@second = Playtime of current save, in seconds
|
||||
lglobal.@minute = Playtime of current save, in minutes
|
||||
lglobal.@waveNumber = Current wave number, if waves are enabled
|
||||
lglobal.@waveTime = Countdown timer for waves, in seconds
|
||||
lglobal.@mapw = Map width in tiles
|
||||
lglobal.@maph = Map height in tiles
|
||||
lglobal.sectionMap = Map
|
||||
lglobal.sectionGeneral = General
|
||||
lglobal.sectionNetwork = Network/Clientside [World Processor Only]
|
||||
lglobal.sectionProcessor = Processor
|
||||
lglobal.sectionLookup = Lookup
|
||||
lglobal.@this = The logic block executing the code
|
||||
lglobal.@thisx = X coordinate of block executing the code
|
||||
lglobal.@thisy = Y coordinate of block executing the code
|
||||
lglobal.@links = Total number of blocks linked to this processors
|
||||
lglobal.@ipt = Execution speed of the processor in instructions per tick (60 ticks = 1 second)
|
||||
lglobal.@unitCount = Total number of types of unit content in the game; used with the lookup instruction
|
||||
lglobal.@blockCount = Total number of types of block content in the game; used with the lookup instruction
|
||||
lglobal.@itemCount = Total number of types of item content in the game; used with the lookup instruction
|
||||
lglobal.@liquidCount = Total number of types of liquid content in the game; used with the lookup instruction
|
||||
lglobal.@server = True if the code is running on a server or in singleplayer, false otherwise
|
||||
lglobal.@client = True if the code is running on a client connected to a server
|
||||
lglobal.@clientLocale = Locale of the client running the code. For example: en_US
|
||||
lglobal.@clientUnit = Unit of client running the code
|
||||
lglobal.@clientName = Player name of client running the code
|
||||
lglobal.@clientTeam = Team ID of client running the code
|
||||
lglobal.@clientMobile = True is the client running the code is on mobile, false otherwise
|
||||
logic.nounitbuild = [red]ここではユニット構築ロジックは使用できません。
|
||||
lenum.type = ユニットや建物の種類を取得します。\n例:任意のルーターに対して、 [accent]@router[] を返します。\n文字列ではありません。
|
||||
lenum.shoot = 指定した座標に向かって撃ちます。
|
||||
@@ -2430,3 +2470,6 @@ lenum.flushtext = Flush print buffer's content to marker, if applicable.\nIf fet
|
||||
lenum.texture = Texture name straight from game's texture atlas (using kebab-case naming style).\nIf printFlush is set to true, consumes text buffer content as text argument.
|
||||
lenum.texturesize = Size of texture in tiles. Zero value scales marker width to original texture's size.
|
||||
lenum.autoscale = Whether to scale marker corresponding to player's zoom level.
|
||||
lenum.posi = Indexed position, used for line and quad markers with index zero being the first position.
|
||||
lenum.uvi = Texture's position ranging from zero to one, used for quad markers.
|
||||
lenum.colori = Indexed position, used for line and quad markers with index zero being the first color.
|
||||
|
||||
@@ -494,6 +494,7 @@ editor.default = [lightgray]<기본값>
|
||||
details = 설명...
|
||||
edit = 편집...
|
||||
variables = 변수
|
||||
logic.globals = Built-in Variables
|
||||
editor.name = 이름:
|
||||
editor.spawn = 기체 생성
|
||||
editor.removeunit = 기체 삭제
|
||||
@@ -672,10 +673,11 @@ objective.destroycore.name = 코어 파괴
|
||||
objective.commandmode.name = 명령 모드
|
||||
objective.flag.name = 플래그
|
||||
marker.shapetext.name = 도형과 문자
|
||||
marker.minimap.name = 미니맵
|
||||
marker.point.name = Point
|
||||
marker.shape.name = 도형
|
||||
marker.text.name = 문자
|
||||
marker.line.name = Line
|
||||
marker.quad.name = Quad
|
||||
marker.background = 배경
|
||||
marker.outline = 외곽선
|
||||
|
||||
@@ -761,6 +763,7 @@ sector.missingresources = [scarlet]코어 자원 부족[]
|
||||
sector.attacked = [accent]{0}[white] 지역이 공격받고 있습니다![]
|
||||
sector.lost = [accent]{0}[white] 지역을 잃었습니다![]
|
||||
sector.capture = Sector [accent]{0}[white]Captured!
|
||||
sector.capture.current = Sector Captured!
|
||||
sector.changeicon = 아이콘 바꾸기
|
||||
sector.noswitch.title = 지역 전환 불가능
|
||||
sector.noswitch = 기존 지역이 공격받는 동안은 지역을 전환할 수 없습니다.\n\n지역: [accent]{0}[] 중 [accent]{1}[]
|
||||
@@ -1543,6 +1546,7 @@ block.inverted-sorter.name = 반전 필터
|
||||
block.message.name = 메모 블록
|
||||
block.reinforced-message.name = 보강된 메모 블록
|
||||
block.world-message.name = 월드 메모 블록
|
||||
block.world-switch.name = World Switch
|
||||
block.illuminator.name = 조명
|
||||
block.overflow-gate.name = 포화 필터
|
||||
block.underflow-gate.name = 불포화 필터
|
||||
@@ -2293,6 +2297,42 @@ lst.sync = Sync a variable across the network.\nOnly invoked 10 times a second a
|
||||
lst.makemarker = Create a new logic marker in the world.\nAn ID to identify this marker must be provided.\nMarkers currently limited to 20,000 per world.
|
||||
lst.setmarker = Set a property for a marker.\nThe ID used must be the same as in the Make Marker instruction.
|
||||
lst.localeprint = Add map locale property value to the text buffer.\nTo set map locale bundles in map editor, check [accent]Map Info > Locale Bundles[].\nIf client is a mobile device, tries to print a property ending in ".mobile" first.
|
||||
lglobal.false = 0
|
||||
lglobal.true = 1
|
||||
lglobal.null = null
|
||||
lglobal.@pi = The mathematical constant pi (3.141...)
|
||||
lglobal.@e = The mathematical constant e (2.718...)
|
||||
lglobal.@degToRad = Multiply by this number to convert degrees to radians
|
||||
lglobal.@radToDeg = Multiply by this number to convert radians to degrees
|
||||
lglobal.@time = Playtime of current save, in milliseconds
|
||||
lglobal.@tick = Playtime of current save, in ticks (1 second = 60 ticks)
|
||||
lglobal.@second = Playtime of current save, in seconds
|
||||
lglobal.@minute = Playtime of current save, in minutes
|
||||
lglobal.@waveNumber = Current wave number, if waves are enabled
|
||||
lglobal.@waveTime = Countdown timer for waves, in seconds
|
||||
lglobal.@mapw = Map width in tiles
|
||||
lglobal.@maph = Map height in tiles
|
||||
lglobal.sectionMap = Map
|
||||
lglobal.sectionGeneral = General
|
||||
lglobal.sectionNetwork = Network/Clientside [World Processor Only]
|
||||
lglobal.sectionProcessor = Processor
|
||||
lglobal.sectionLookup = Lookup
|
||||
lglobal.@this = The logic block executing the code
|
||||
lglobal.@thisx = X coordinate of block executing the code
|
||||
lglobal.@thisy = Y coordinate of block executing the code
|
||||
lglobal.@links = Total number of blocks linked to this processors
|
||||
lglobal.@ipt = Execution speed of the processor in instructions per tick (60 ticks = 1 second)
|
||||
lglobal.@unitCount = Total number of types of unit content in the game; used with the lookup instruction
|
||||
lglobal.@blockCount = Total number of types of block content in the game; used with the lookup instruction
|
||||
lglobal.@itemCount = Total number of types of item content in the game; used with the lookup instruction
|
||||
lglobal.@liquidCount = Total number of types of liquid content in the game; used with the lookup instruction
|
||||
lglobal.@server = True if the code is running on a server or in singleplayer, false otherwise
|
||||
lglobal.@client = True if the code is running on a client connected to a server
|
||||
lglobal.@clientLocale = Locale of the client running the code. For example: en_US
|
||||
lglobal.@clientUnit = Unit of client running the code
|
||||
lglobal.@clientName = Player name of client running the code
|
||||
lglobal.@clientTeam = Team ID of client running the code
|
||||
lglobal.@clientMobile = True is the client running the code is on mobile, false otherwise
|
||||
|
||||
logic.nounitbuild = [red]기체의 건설 로직은 여기서 허용되지 않습니다.
|
||||
|
||||
@@ -2448,3 +2488,6 @@ lenum.flushtext = Flush print buffer's content to marker, if applicable.\nIf fet
|
||||
lenum.texture = Texture name straight from game's texture atlas (using kebab-case naming style).\nIf printFlush is set to true, consumes text buffer content as text argument.
|
||||
lenum.texturesize = Size of texture in tiles. Zero value scales marker width to original texture's size.
|
||||
lenum.autoscale = Whether to scale marker corresponding to player's zoom level.
|
||||
lenum.posi = Indexed position, used for line and quad markers with index zero being the first position.
|
||||
lenum.uvi = Texture's position ranging from zero to one, used for quad markers.
|
||||
lenum.colori = Indexed position, used for line and quad markers with index zero being the first color.
|
||||
|
||||
@@ -490,6 +490,7 @@ editor.default = [lightgray]<Numatytasis>
|
||||
details = Detaliau...
|
||||
edit = Redaguoti...
|
||||
variables = Vars
|
||||
logic.globals = Built-in Variables
|
||||
editor.name = Pavadinimas:
|
||||
editor.spawn = Atradinti vienetą
|
||||
editor.removeunit = Panaikinti vienetą
|
||||
@@ -665,10 +666,11 @@ objective.destroycore.name = Destroy Core
|
||||
objective.commandmode.name = Command Mode
|
||||
objective.flag.name = Flag
|
||||
marker.shapetext.name = Shape Text
|
||||
marker.minimap.name = Minimap
|
||||
marker.point.name = Point
|
||||
marker.shape.name = Shape
|
||||
marker.text.name = Text
|
||||
marker.line.name = Line
|
||||
marker.quad.name = Quad
|
||||
marker.background = Background
|
||||
marker.outline = Outline
|
||||
objective.research = [accent]Research:\n[]{0}[lightgray]{1}
|
||||
@@ -752,6 +754,7 @@ sector.missingresources = [scarlet]Insufficient Core Resources
|
||||
sector.attacked = Sector [accent]{0}[white] under attack!
|
||||
sector.lost = Sector [accent]{0}[white] lost!
|
||||
sector.capture = Sector [accent]{0}[white]Captured!
|
||||
sector.capture.current = Sector Captured!
|
||||
sector.changeicon = Change Icon
|
||||
sector.noswitch.title = Unable to Switch Sectors
|
||||
sector.noswitch = You may not switch sectors while an existing sector is under attack.\n\nSector: [accent]{0}[] on [accent]{1}[]
|
||||
@@ -1531,6 +1534,7 @@ block.inverted-sorter.name = Atbulinis Rūšiuotojas
|
||||
block.message.name = Žinutė
|
||||
block.reinforced-message.name = Reinforced Message
|
||||
block.world-message.name = World Message
|
||||
block.world-switch.name = World Switch
|
||||
block.illuminator.name = Šviestuvas
|
||||
block.overflow-gate.name = Perpildymo Užtvara
|
||||
block.underflow-gate.name = Neperpildymo Užtvara
|
||||
@@ -2278,6 +2282,42 @@ lst.sync = Sync a variable across the network.\nOnly invoked 10 times a second a
|
||||
lst.makemarker = Create a new logic marker in the world.\nAn ID to identify this marker must be provided.\nMarkers currently limited to 20,000 per world.
|
||||
lst.setmarker = Set a property for a marker.\nThe ID used must be the same as in the Make Marker instruction.
|
||||
lst.localeprint = Add map locale property value to the text buffer.\nTo set map locale bundles in map editor, check [accent]Map Info > Locale Bundles[].\nIf client is a mobile device, tries to print a property ending in ".mobile" first.
|
||||
lglobal.false = 0
|
||||
lglobal.true = 1
|
||||
lglobal.null = null
|
||||
lglobal.@pi = The mathematical constant pi (3.141...)
|
||||
lglobal.@e = The mathematical constant e (2.718...)
|
||||
lglobal.@degToRad = Multiply by this number to convert degrees to radians
|
||||
lglobal.@radToDeg = Multiply by this number to convert radians to degrees
|
||||
lglobal.@time = Playtime of current save, in milliseconds
|
||||
lglobal.@tick = Playtime of current save, in ticks (1 second = 60 ticks)
|
||||
lglobal.@second = Playtime of current save, in seconds
|
||||
lglobal.@minute = Playtime of current save, in minutes
|
||||
lglobal.@waveNumber = Current wave number, if waves are enabled
|
||||
lglobal.@waveTime = Countdown timer for waves, in seconds
|
||||
lglobal.@mapw = Map width in tiles
|
||||
lglobal.@maph = Map height in tiles
|
||||
lglobal.sectionMap = Map
|
||||
lglobal.sectionGeneral = General
|
||||
lglobal.sectionNetwork = Network/Clientside [World Processor Only]
|
||||
lglobal.sectionProcessor = Processor
|
||||
lglobal.sectionLookup = Lookup
|
||||
lglobal.@this = The logic block executing the code
|
||||
lglobal.@thisx = X coordinate of block executing the code
|
||||
lglobal.@thisy = Y coordinate of block executing the code
|
||||
lglobal.@links = Total number of blocks linked to this processors
|
||||
lglobal.@ipt = Execution speed of the processor in instructions per tick (60 ticks = 1 second)
|
||||
lglobal.@unitCount = Total number of types of unit content in the game; used with the lookup instruction
|
||||
lglobal.@blockCount = Total number of types of block content in the game; used with the lookup instruction
|
||||
lglobal.@itemCount = Total number of types of item content in the game; used with the lookup instruction
|
||||
lglobal.@liquidCount = Total number of types of liquid content in the game; used with the lookup instruction
|
||||
lglobal.@server = True if the code is running on a server or in singleplayer, false otherwise
|
||||
lglobal.@client = True if the code is running on a client connected to a server
|
||||
lglobal.@clientLocale = Locale of the client running the code. For example: en_US
|
||||
lglobal.@clientUnit = Unit of client running the code
|
||||
lglobal.@clientName = Player name of client running the code
|
||||
lglobal.@clientTeam = Team ID of client running the code
|
||||
lglobal.@clientMobile = True is the client running the code is on mobile, false otherwise
|
||||
logic.nounitbuild = [red]Unit building logic is not allowed here.
|
||||
lenum.type = Type of building/unit.\ne.g. for any router, this will return [accent]@router[].\nNot a string.
|
||||
lenum.shoot = Shoot at a position.
|
||||
@@ -2414,3 +2454,6 @@ lenum.flushtext = Flush print buffer's content to marker, if applicable.\nIf fet
|
||||
lenum.texture = Texture name straight from game's texture atlas (using kebab-case naming style).\nIf printFlush is set to true, consumes text buffer content as text argument.
|
||||
lenum.texturesize = Size of texture in tiles. Zero value scales marker width to original texture's size.
|
||||
lenum.autoscale = Whether to scale marker corresponding to player's zoom level.
|
||||
lenum.posi = Indexed position, used for line and quad markers with index zero being the first position.
|
||||
lenum.uvi = Texture's position ranging from zero to one, used for quad markers.
|
||||
lenum.colori = Indexed position, used for line and quad markers with index zero being the first color.
|
||||
|
||||
@@ -498,6 +498,7 @@ editor.default = [lightgray]<Standaard>
|
||||
details = Details...
|
||||
edit = Bewerk...
|
||||
variables = Vars
|
||||
logic.globals = Built-in Variables
|
||||
editor.name = Naam:
|
||||
editor.spawn = Voeg Eenheid toe
|
||||
editor.removeunit = Verwijder Eenheid
|
||||
@@ -676,10 +677,11 @@ objective.destroycore.name = Vernietig Core
|
||||
objective.commandmode.name = Commando Modus
|
||||
objective.flag.name = Vlag
|
||||
marker.shapetext.name = Vorm Tekst
|
||||
marker.minimap.name = Minimap
|
||||
marker.point.name = Point
|
||||
marker.shape.name = Vorm
|
||||
marker.text.name = Tekst
|
||||
marker.line.name = Line
|
||||
marker.quad.name = Quad
|
||||
marker.background = Achtergrond
|
||||
marker.outline = Omtrek
|
||||
objective.research = [accent]Onderzoek:\n[]{0}[lightgray]{1}
|
||||
@@ -763,6 +765,7 @@ sector.missingresources = [scarlet]Onvoeldoende Materialen in Core
|
||||
sector.attacked = Sector [accent]{0}[white] onder vuur!
|
||||
sector.lost = Sector [accent]{0}[white] verloren!
|
||||
sector.capture = Sector [accent]{0}[white]Captured!
|
||||
sector.capture.current = Sector Captured!
|
||||
sector.changeicon = Verander icoon
|
||||
sector.noswitch.title = Kan niet van sector wisselen
|
||||
sector.noswitch = Je mag niet van sector wisselen terwijl een bestaande sector wordt aangevallen.\n\nSector: [accent]{0}[] op [accent]{1}[]
|
||||
@@ -1543,6 +1546,7 @@ block.inverted-sorter.name = Omgekeerder Sorteerder
|
||||
block.message.name = Bericht
|
||||
block.reinforced-message.name = Gepansterd Bericht
|
||||
block.world-message.name = Wereldbericht
|
||||
block.world-switch.name = World Switch
|
||||
block.illuminator.name = Lamp
|
||||
block.overflow-gate.name = Overstroom Poort
|
||||
block.underflow-gate.name = Onderstroom Poort
|
||||
@@ -2291,6 +2295,42 @@ lst.sync = Sync a variable across the network.\nOnly invoked 10 times a second a
|
||||
lst.makemarker = Create a new logic marker in the world.\nAn ID to identify this marker must be provided.\nMarkers currently limited to 20,000 per world.
|
||||
lst.setmarker = Set a property for a marker.\nThe ID used must be the same as in the Make Marker instruction.
|
||||
lst.localeprint = Add map locale property value to the text buffer.\nTo set map locale bundles in map editor, check [accent]Map Info > Locale Bundles[].\nIf client is a mobile device, tries to print a property ending in ".mobile" first.
|
||||
lglobal.false = 0
|
||||
lglobal.true = 1
|
||||
lglobal.null = null
|
||||
lglobal.@pi = The mathematical constant pi (3.141...)
|
||||
lglobal.@e = The mathematical constant e (2.718...)
|
||||
lglobal.@degToRad = Multiply by this number to convert degrees to radians
|
||||
lglobal.@radToDeg = Multiply by this number to convert radians to degrees
|
||||
lglobal.@time = Playtime of current save, in milliseconds
|
||||
lglobal.@tick = Playtime of current save, in ticks (1 second = 60 ticks)
|
||||
lglobal.@second = Playtime of current save, in seconds
|
||||
lglobal.@minute = Playtime of current save, in minutes
|
||||
lglobal.@waveNumber = Current wave number, if waves are enabled
|
||||
lglobal.@waveTime = Countdown timer for waves, in seconds
|
||||
lglobal.@mapw = Map width in tiles
|
||||
lglobal.@maph = Map height in tiles
|
||||
lglobal.sectionMap = Map
|
||||
lglobal.sectionGeneral = General
|
||||
lglobal.sectionNetwork = Network/Clientside [World Processor Only]
|
||||
lglobal.sectionProcessor = Processor
|
||||
lglobal.sectionLookup = Lookup
|
||||
lglobal.@this = The logic block executing the code
|
||||
lglobal.@thisx = X coordinate of block executing the code
|
||||
lglobal.@thisy = Y coordinate of block executing the code
|
||||
lglobal.@links = Total number of blocks linked to this processors
|
||||
lglobal.@ipt = Execution speed of the processor in instructions per tick (60 ticks = 1 second)
|
||||
lglobal.@unitCount = Total number of types of unit content in the game; used with the lookup instruction
|
||||
lglobal.@blockCount = Total number of types of block content in the game; used with the lookup instruction
|
||||
lglobal.@itemCount = Total number of types of item content in the game; used with the lookup instruction
|
||||
lglobal.@liquidCount = Total number of types of liquid content in the game; used with the lookup instruction
|
||||
lglobal.@server = True if the code is running on a server or in singleplayer, false otherwise
|
||||
lglobal.@client = True if the code is running on a client connected to a server
|
||||
lglobal.@clientLocale = Locale of the client running the code. For example: en_US
|
||||
lglobal.@clientUnit = Unit of client running the code
|
||||
lglobal.@clientName = Player name of client running the code
|
||||
lglobal.@clientTeam = Team ID of client running the code
|
||||
lglobal.@clientMobile = True is the client running the code is on mobile, false otherwise
|
||||
logic.nounitbuild = [red]Unit building logic is not allowed here.
|
||||
lenum.type = Type of building/unit.\ne.g. for any router, this will return [accent]@router[].\nNot a string.
|
||||
lenum.shoot = Shoot at a position.
|
||||
@@ -2427,3 +2467,6 @@ lenum.flushtext = Flush print buffer's content to marker, if applicable.\nIf fet
|
||||
lenum.texture = Texture name straight from game's texture atlas (using kebab-case naming style).\nIf printFlush is set to true, consumes text buffer content as text argument.
|
||||
lenum.texturesize = Size of texture in tiles. Zero value scales marker width to original texture's size.
|
||||
lenum.autoscale = Whether to scale marker corresponding to player's zoom level.
|
||||
lenum.posi = Indexed position, used for line and quad markers with index zero being the first position.
|
||||
lenum.uvi = Texture's position ranging from zero to one, used for quad markers.
|
||||
lenum.colori = Indexed position, used for line and quad markers with index zero being the first color.
|
||||
|
||||
@@ -490,6 +490,7 @@ editor.default = [lightgray]<Default>
|
||||
details = Details...
|
||||
edit = Edit...
|
||||
variables = Vars
|
||||
logic.globals = Built-in Variables
|
||||
editor.name = Name:
|
||||
editor.spawn = Spawn Unit
|
||||
editor.removeunit = Remove Unit
|
||||
@@ -665,10 +666,11 @@ objective.destroycore.name = Destroy Core
|
||||
objective.commandmode.name = Command Mode
|
||||
objective.flag.name = Flag
|
||||
marker.shapetext.name = Shape Text
|
||||
marker.minimap.name = Minimap
|
||||
marker.point.name = Point
|
||||
marker.shape.name = Shape
|
||||
marker.text.name = Text
|
||||
marker.line.name = Line
|
||||
marker.quad.name = Quad
|
||||
marker.background = Background
|
||||
marker.outline = Outline
|
||||
objective.research = [accent]Research:\n[]{0}[lightgray]{1}
|
||||
@@ -752,6 +754,7 @@ sector.missingresources = [scarlet]Insufficient Core Resources
|
||||
sector.attacked = Sector [accent]{0}[white] under attack!
|
||||
sector.lost = Sector [accent]{0}[white] lost!
|
||||
sector.capture = Sector [accent]{0}[white]Captured!
|
||||
sector.capture.current = Sector Captured!
|
||||
sector.changeicon = Change Icon
|
||||
sector.noswitch.title = Unable to Switch Sectors
|
||||
sector.noswitch = You may not switch sectors while an existing sector is under attack.\n\nSector: [accent]{0}[] on [accent]{1}[]
|
||||
@@ -1531,6 +1534,7 @@ block.inverted-sorter.name = Inverted Sorter
|
||||
block.message.name = Message
|
||||
block.reinforced-message.name = Reinforced Message
|
||||
block.world-message.name = World Message
|
||||
block.world-switch.name = World Switch
|
||||
block.illuminator.name = Illuminator
|
||||
block.overflow-gate.name = Overflow Gate
|
||||
block.underflow-gate.name = Underflow Gate
|
||||
@@ -2278,6 +2282,42 @@ lst.sync = Sync a variable across the network.\nOnly invoked 10 times a second a
|
||||
lst.makemarker = Create a new logic marker in the world.\nAn ID to identify this marker must be provided.\nMarkers currently limited to 20,000 per world.
|
||||
lst.setmarker = Set a property for a marker.\nThe ID used must be the same as in the Make Marker instruction.
|
||||
lst.localeprint = Add map locale property value to the text buffer.\nTo set map locale bundles in map editor, check [accent]Map Info > Locale Bundles[].\nIf client is a mobile device, tries to print a property ending in ".mobile" first.
|
||||
lglobal.false = 0
|
||||
lglobal.true = 1
|
||||
lglobal.null = null
|
||||
lglobal.@pi = The mathematical constant pi (3.141...)
|
||||
lglobal.@e = The mathematical constant e (2.718...)
|
||||
lglobal.@degToRad = Multiply by this number to convert degrees to radians
|
||||
lglobal.@radToDeg = Multiply by this number to convert radians to degrees
|
||||
lglobal.@time = Playtime of current save, in milliseconds
|
||||
lglobal.@tick = Playtime of current save, in ticks (1 second = 60 ticks)
|
||||
lglobal.@second = Playtime of current save, in seconds
|
||||
lglobal.@minute = Playtime of current save, in minutes
|
||||
lglobal.@waveNumber = Current wave number, if waves are enabled
|
||||
lglobal.@waveTime = Countdown timer for waves, in seconds
|
||||
lglobal.@mapw = Map width in tiles
|
||||
lglobal.@maph = Map height in tiles
|
||||
lglobal.sectionMap = Map
|
||||
lglobal.sectionGeneral = General
|
||||
lglobal.sectionNetwork = Network/Clientside [World Processor Only]
|
||||
lglobal.sectionProcessor = Processor
|
||||
lglobal.sectionLookup = Lookup
|
||||
lglobal.@this = The logic block executing the code
|
||||
lglobal.@thisx = X coordinate of block executing the code
|
||||
lglobal.@thisy = Y coordinate of block executing the code
|
||||
lglobal.@links = Total number of blocks linked to this processors
|
||||
lglobal.@ipt = Execution speed of the processor in instructions per tick (60 ticks = 1 second)
|
||||
lglobal.@unitCount = Total number of types of unit content in the game; used with the lookup instruction
|
||||
lglobal.@blockCount = Total number of types of block content in the game; used with the lookup instruction
|
||||
lglobal.@itemCount = Total number of types of item content in the game; used with the lookup instruction
|
||||
lglobal.@liquidCount = Total number of types of liquid content in the game; used with the lookup instruction
|
||||
lglobal.@server = True if the code is running on a server or in singleplayer, false otherwise
|
||||
lglobal.@client = True if the code is running on a client connected to a server
|
||||
lglobal.@clientLocale = Locale of the client running the code. For example: en_US
|
||||
lglobal.@clientUnit = Unit of client running the code
|
||||
lglobal.@clientName = Player name of client running the code
|
||||
lglobal.@clientTeam = Team ID of client running the code
|
||||
lglobal.@clientMobile = True is the client running the code is on mobile, false otherwise
|
||||
logic.nounitbuild = [red]Unit building logic is not allowed here.
|
||||
lenum.type = Type of building/unit.\ne.g. for any router, this will return [accent]@router[].\nNot a string.
|
||||
lenum.shoot = Shoot at a position.
|
||||
@@ -2414,3 +2454,6 @@ lenum.flushtext = Flush print buffer's content to marker, if applicable.\nIf fet
|
||||
lenum.texture = Texture name straight from game's texture atlas (using kebab-case naming style).\nIf printFlush is set to true, consumes text buffer content as text argument.
|
||||
lenum.texturesize = Size of texture in tiles. Zero value scales marker width to original texture's size.
|
||||
lenum.autoscale = Whether to scale marker corresponding to player's zoom level.
|
||||
lenum.posi = Indexed position, used for line and quad markers with index zero being the first position.
|
||||
lenum.uvi = Texture's position ranging from zero to one, used for quad markers.
|
||||
lenum.colori = Indexed position, used for line and quad markers with index zero being the first color.
|
||||
|
||||
@@ -495,6 +495,7 @@ editor.default = [lightgray]<Domyślne>
|
||||
details = Detale...
|
||||
edit = Edytuj...
|
||||
variables = Zmienne
|
||||
logic.globals = Built-in Variables
|
||||
editor.name = Nazwa:
|
||||
editor.spawn = Stwórz Jednostkę
|
||||
editor.removeunit = Usuń Jednostkę
|
||||
@@ -670,10 +671,11 @@ objective.destroycore.name = Zniszcz Rdzeń
|
||||
objective.commandmode.name = Tryb Poleceń
|
||||
objective.flag.name = Oznaczenie
|
||||
marker.shapetext.name = Dostosuj Tekst
|
||||
marker.minimap.name = Minimapa
|
||||
marker.point.name = Point
|
||||
marker.shape.name = Figura
|
||||
marker.text.name = Tekst
|
||||
marker.line.name = Line
|
||||
marker.quad.name = Quad
|
||||
marker.background = Tło
|
||||
marker.outline = Kontur
|
||||
objective.research = [accent]Zbadaj:\n[]{0}[lightgray]{1}
|
||||
@@ -758,6 +760,7 @@ sector.missingresources = [scarlet]Niewystarczające Zasoby Rdzenia
|
||||
sector.attacked = Sektor [accent]{0}[white] jest atakowany!
|
||||
sector.lost = Sektor [accent]{0}[white] został stracony!
|
||||
sector.capture = Sector [accent]{0}[white]Captured!
|
||||
sector.capture.current = Sector Captured!
|
||||
sector.changeicon = Zmień Ikonę
|
||||
sector.noswitch.title = Nie można zmienić sektorów
|
||||
sector.noswitch = Nie możesz zmieniać sektorów, gdy istniejący sektor jest atakowany.\n\nSektor: [accent]{0}[] na [accent]{1}[]
|
||||
@@ -1550,6 +1553,7 @@ block.inverted-sorter.name = Odwrotny Sortownik
|
||||
block.message.name = Wiadomość
|
||||
block.reinforced-message.name = Wzmocniona Wiadomość
|
||||
block.world-message.name = World Message
|
||||
block.world-switch.name = World Switch
|
||||
block.illuminator.name = Rozświetlacz
|
||||
block.overflow-gate.name = Brama Przepełnieniowa
|
||||
block.underflow-gate.name = Brama Niedomiaru
|
||||
@@ -2312,6 +2316,42 @@ lst.sync = Synchronizuje zmienną poprzez sieć.\nWywoływane maksymalnie 10 raz
|
||||
lst.makemarker = Stwórz nowy marker logiki.\nMusisz podać ID, aby móc go później zidentyfikować.\nLimit markerów to 20,000.
|
||||
lst.setmarker = Ustaw właściwości markera.\nID markera musi być takie samo jak podczas jego tworzenia.
|
||||
lst.localeprint = Add map locale property value to the text buffer.\nTo set map locale bundles in map editor, check [accent]Map Info > Locale Bundles[].\nIf client is a mobile device, tries to print a property ending in ".mobile" first.
|
||||
lglobal.false = 0
|
||||
lglobal.true = 1
|
||||
lglobal.null = null
|
||||
lglobal.@pi = The mathematical constant pi (3.141...)
|
||||
lglobal.@e = The mathematical constant e (2.718...)
|
||||
lglobal.@degToRad = Multiply by this number to convert degrees to radians
|
||||
lglobal.@radToDeg = Multiply by this number to convert radians to degrees
|
||||
lglobal.@time = Playtime of current save, in milliseconds
|
||||
lglobal.@tick = Playtime of current save, in ticks (1 second = 60 ticks)
|
||||
lglobal.@second = Playtime of current save, in seconds
|
||||
lglobal.@minute = Playtime of current save, in minutes
|
||||
lglobal.@waveNumber = Current wave number, if waves are enabled
|
||||
lglobal.@waveTime = Countdown timer for waves, in seconds
|
||||
lglobal.@mapw = Map width in tiles
|
||||
lglobal.@maph = Map height in tiles
|
||||
lglobal.sectionMap = Map
|
||||
lglobal.sectionGeneral = General
|
||||
lglobal.sectionNetwork = Network/Clientside [World Processor Only]
|
||||
lglobal.sectionProcessor = Processor
|
||||
lglobal.sectionLookup = Lookup
|
||||
lglobal.@this = The logic block executing the code
|
||||
lglobal.@thisx = X coordinate of block executing the code
|
||||
lglobal.@thisy = Y coordinate of block executing the code
|
||||
lglobal.@links = Total number of blocks linked to this processors
|
||||
lglobal.@ipt = Execution speed of the processor in instructions per tick (60 ticks = 1 second)
|
||||
lglobal.@unitCount = Total number of types of unit content in the game; used with the lookup instruction
|
||||
lglobal.@blockCount = Total number of types of block content in the game; used with the lookup instruction
|
||||
lglobal.@itemCount = Total number of types of item content in the game; used with the lookup instruction
|
||||
lglobal.@liquidCount = Total number of types of liquid content in the game; used with the lookup instruction
|
||||
lglobal.@server = True if the code is running on a server or in singleplayer, false otherwise
|
||||
lglobal.@client = True if the code is running on a client connected to a server
|
||||
lglobal.@clientLocale = Locale of the client running the code. For example: en_US
|
||||
lglobal.@clientUnit = Unit of client running the code
|
||||
lglobal.@clientName = Player name of client running the code
|
||||
lglobal.@clientTeam = Team ID of client running the code
|
||||
lglobal.@clientMobile = True is the client running the code is on mobile, false otherwise
|
||||
|
||||
logic.nounitbuild = [red]Logika budowania jednostek nie jest tu dozwolona.
|
||||
|
||||
@@ -2467,3 +2507,6 @@ lenum.flushtext = Flush print buffer's content to marker, if applicable.\nIf fet
|
||||
lenum.texture = Texture name straight from game's texture atlas (using kebab-case naming style).\nIf printFlush is set to true, consumes text buffer content as text argument.
|
||||
lenum.texturesize = Size of texture in tiles. Zero value scales marker width to original texture's size.
|
||||
lenum.autoscale = Whether to scale marker corresponding to player's zoom level.
|
||||
lenum.posi = Indexed position, used for line and quad markers with index zero being the first position.
|
||||
lenum.uvi = Texture's position ranging from zero to one, used for quad markers.
|
||||
lenum.colori = Indexed position, used for line and quad markers with index zero being the first color.
|
||||
|
||||
@@ -495,6 +495,7 @@ editor.default = [lightgray]<padrão>
|
||||
details = Detalhes...
|
||||
edit = Editar...
|
||||
variables = Variáveis
|
||||
logic.globals = Built-in Variables
|
||||
editor.name = Nome:
|
||||
editor.spawn = Spawnar unidade
|
||||
editor.removeunit = Remover unidade
|
||||
@@ -675,10 +676,11 @@ objective.commandmode.name = Modo de Comando
|
||||
objective.flag.name = Flag
|
||||
|
||||
marker.shapetext.name = Shape Text
|
||||
marker.minimap.name = Minimapa
|
||||
marker.point.name = Point
|
||||
marker.shape.name = Shape
|
||||
marker.text.name = Texto
|
||||
marker.line.name = Line
|
||||
marker.quad.name = Quad
|
||||
|
||||
marker.background = Fundo
|
||||
marker.outline = Contorno
|
||||
@@ -766,6 +768,7 @@ sector.missingresources = [scarlet]Recursos Insuficientes no Núcleo
|
||||
sector.attacked = Setor [accent]{0}[white] sob ataque!
|
||||
sector.lost = Setor [accent]{0}[white] perdido!
|
||||
sector.capture = Sector [accent]{0}[white]Captured!
|
||||
sector.capture.current = Sector Captured!
|
||||
sector.changeicon = Trocar Ícone
|
||||
sector.noswitch.title = Incapaz de Mudar de Setores
|
||||
sector.noswitch = Você não pode trocar de setor enquanto um setor existente estiver sob ataque.\n\nSetor: [accent]{0}[] em [accent]{1}[]
|
||||
@@ -1550,6 +1553,7 @@ block.inverted-sorter.name = Ordenador invertido
|
||||
block.message.name = Mensagem
|
||||
block.reinforced-message.name = Reinforced Message
|
||||
block.world-message.name = World Message
|
||||
block.world-switch.name = World Switch
|
||||
block.illuminator.name = Iluminador
|
||||
block.overflow-gate.name = Portão de Sobrecarga
|
||||
block.underflow-gate.name = Portão de Sobrecarga Invertido
|
||||
@@ -2311,6 +2315,42 @@ lst.sync = Sync a variable across the network.\nOnly invoked 10 times a second a
|
||||
lst.makemarker = Create a new logic marker in the world.\nAn ID to identify this marker must be provided.\nMarkers currently limited to 20,000 per world.
|
||||
lst.setmarker = Set a property for a marker.\nThe ID used must be the same as in the Make Marker instruction.
|
||||
lst.localeprint = Add map locale property value to the text buffer.\nTo set map locale bundles in map editor, check [accent]Map Info > Locale Bundles[].\nIf client is a mobile device, tries to print a property ending in ".mobile" first.
|
||||
lglobal.false = 0
|
||||
lglobal.true = 1
|
||||
lglobal.null = null
|
||||
lglobal.@pi = The mathematical constant pi (3.141...)
|
||||
lglobal.@e = The mathematical constant e (2.718...)
|
||||
lglobal.@degToRad = Multiply by this number to convert degrees to radians
|
||||
lglobal.@radToDeg = Multiply by this number to convert radians to degrees
|
||||
lglobal.@time = Playtime of current save, in milliseconds
|
||||
lglobal.@tick = Playtime of current save, in ticks (1 second = 60 ticks)
|
||||
lglobal.@second = Playtime of current save, in seconds
|
||||
lglobal.@minute = Playtime of current save, in minutes
|
||||
lglobal.@waveNumber = Current wave number, if waves are enabled
|
||||
lglobal.@waveTime = Countdown timer for waves, in seconds
|
||||
lglobal.@mapw = Map width in tiles
|
||||
lglobal.@maph = Map height in tiles
|
||||
lglobal.sectionMap = Map
|
||||
lglobal.sectionGeneral = General
|
||||
lglobal.sectionNetwork = Network/Clientside [World Processor Only]
|
||||
lglobal.sectionProcessor = Processor
|
||||
lglobal.sectionLookup = Lookup
|
||||
lglobal.@this = The logic block executing the code
|
||||
lglobal.@thisx = X coordinate of block executing the code
|
||||
lglobal.@thisy = Y coordinate of block executing the code
|
||||
lglobal.@links = Total number of blocks linked to this processors
|
||||
lglobal.@ipt = Execution speed of the processor in instructions per tick (60 ticks = 1 second)
|
||||
lglobal.@unitCount = Total number of types of unit content in the game; used with the lookup instruction
|
||||
lglobal.@blockCount = Total number of types of block content in the game; used with the lookup instruction
|
||||
lglobal.@itemCount = Total number of types of item content in the game; used with the lookup instruction
|
||||
lglobal.@liquidCount = Total number of types of liquid content in the game; used with the lookup instruction
|
||||
lglobal.@server = True if the code is running on a server or in singleplayer, false otherwise
|
||||
lglobal.@client = True if the code is running on a client connected to a server
|
||||
lglobal.@clientLocale = Locale of the client running the code. For example: en_US
|
||||
lglobal.@clientUnit = Unit of client running the code
|
||||
lglobal.@clientName = Player name of client running the code
|
||||
lglobal.@clientTeam = Team ID of client running the code
|
||||
lglobal.@clientMobile = True is the client running the code is on mobile, false otherwise
|
||||
|
||||
logic.nounitbuild = [red]Lógica de construção de unidades não é permitida aqui.
|
||||
|
||||
@@ -2465,3 +2505,6 @@ lenum.flushtext = Flush print buffer's content to marker, if applicable.\nIf fet
|
||||
lenum.texture = Texture name straight from game's texture atlas (using kebab-case naming style).\nIf printFlush is set to true, consumes text buffer content as text argument.
|
||||
lenum.texturesize = Size of texture in tiles. Zero value scales marker width to original texture's size.
|
||||
lenum.autoscale = Whether to scale marker corresponding to player's zoom level.
|
||||
lenum.posi = Indexed position, used for line and quad markers with index zero being the first position.
|
||||
lenum.uvi = Texture's position ranging from zero to one, used for quad markers.
|
||||
lenum.colori = Indexed position, used for line and quad markers with index zero being the first color.
|
||||
|
||||
@@ -490,6 +490,7 @@ editor.default = [lightgray]<padrão>
|
||||
details = Detalhes...
|
||||
edit = Editar...
|
||||
variables = Vars
|
||||
logic.globals = Built-in Variables
|
||||
editor.name = Nome:
|
||||
editor.spawn = Criar unidade
|
||||
editor.removeunit = Remover unidade
|
||||
@@ -665,10 +666,11 @@ objective.destroycore.name = Destroy Core
|
||||
objective.commandmode.name = Command Mode
|
||||
objective.flag.name = Flag
|
||||
marker.shapetext.name = Shape Text
|
||||
marker.minimap.name = Minimap
|
||||
marker.point.name = Point
|
||||
marker.shape.name = Shape
|
||||
marker.text.name = Text
|
||||
marker.line.name = Line
|
||||
marker.quad.name = Quad
|
||||
marker.background = Background
|
||||
marker.outline = Outline
|
||||
objective.research = [accent]Research:\n[]{0}[lightgray]{1}
|
||||
@@ -752,6 +754,7 @@ sector.missingresources = [scarlet]Insufficient Core Resources
|
||||
sector.attacked = Sector [accent]{0}[white] under attack!
|
||||
sector.lost = Sector [accent]{0}[white] lost!
|
||||
sector.capture = Sector [accent]{0}[white]Captured!
|
||||
sector.capture.current = Sector Captured!
|
||||
sector.changeicon = Change Icon
|
||||
sector.noswitch.title = Unable to Switch Sectors
|
||||
sector.noswitch = You may not switch sectors while an existing sector is under attack.\n\nSector: [accent]{0}[] on [accent]{1}[]
|
||||
@@ -1531,6 +1534,7 @@ block.inverted-sorter.name = Inverted Sorter
|
||||
block.message.name = Mensagem
|
||||
block.reinforced-message.name = Reinforced Message
|
||||
block.world-message.name = World Message
|
||||
block.world-switch.name = World Switch
|
||||
block.illuminator.name = Illuminator
|
||||
block.overflow-gate.name = Portão Sobrecarregado
|
||||
block.underflow-gate.name = Portão Desobrecarregado
|
||||
@@ -2278,6 +2282,42 @@ lst.sync = Sync a variable across the network.\nOnly invoked 10 times a second a
|
||||
lst.makemarker = Create a new logic marker in the world.\nAn ID to identify this marker must be provided.\nMarkers currently limited to 20,000 per world.
|
||||
lst.setmarker = Set a property for a marker.\nThe ID used must be the same as in the Make Marker instruction.
|
||||
lst.localeprint = Add map locale property value to the text buffer.\nTo set map locale bundles in map editor, check [accent]Map Info > Locale Bundles[].\nIf client is a mobile device, tries to print a property ending in ".mobile" first.
|
||||
lglobal.false = 0
|
||||
lglobal.true = 1
|
||||
lglobal.null = null
|
||||
lglobal.@pi = The mathematical constant pi (3.141...)
|
||||
lglobal.@e = The mathematical constant e (2.718...)
|
||||
lglobal.@degToRad = Multiply by this number to convert degrees to radians
|
||||
lglobal.@radToDeg = Multiply by this number to convert radians to degrees
|
||||
lglobal.@time = Playtime of current save, in milliseconds
|
||||
lglobal.@tick = Playtime of current save, in ticks (1 second = 60 ticks)
|
||||
lglobal.@second = Playtime of current save, in seconds
|
||||
lglobal.@minute = Playtime of current save, in minutes
|
||||
lglobal.@waveNumber = Current wave number, if waves are enabled
|
||||
lglobal.@waveTime = Countdown timer for waves, in seconds
|
||||
lglobal.@mapw = Map width in tiles
|
||||
lglobal.@maph = Map height in tiles
|
||||
lglobal.sectionMap = Map
|
||||
lglobal.sectionGeneral = General
|
||||
lglobal.sectionNetwork = Network/Clientside [World Processor Only]
|
||||
lglobal.sectionProcessor = Processor
|
||||
lglobal.sectionLookup = Lookup
|
||||
lglobal.@this = The logic block executing the code
|
||||
lglobal.@thisx = X coordinate of block executing the code
|
||||
lglobal.@thisy = Y coordinate of block executing the code
|
||||
lglobal.@links = Total number of blocks linked to this processors
|
||||
lglobal.@ipt = Execution speed of the processor in instructions per tick (60 ticks = 1 second)
|
||||
lglobal.@unitCount = Total number of types of unit content in the game; used with the lookup instruction
|
||||
lglobal.@blockCount = Total number of types of block content in the game; used with the lookup instruction
|
||||
lglobal.@itemCount = Total number of types of item content in the game; used with the lookup instruction
|
||||
lglobal.@liquidCount = Total number of types of liquid content in the game; used with the lookup instruction
|
||||
lglobal.@server = True if the code is running on a server or in singleplayer, false otherwise
|
||||
lglobal.@client = True if the code is running on a client connected to a server
|
||||
lglobal.@clientLocale = Locale of the client running the code. For example: en_US
|
||||
lglobal.@clientUnit = Unit of client running the code
|
||||
lglobal.@clientName = Player name of client running the code
|
||||
lglobal.@clientTeam = Team ID of client running the code
|
||||
lglobal.@clientMobile = True is the client running the code is on mobile, false otherwise
|
||||
logic.nounitbuild = [red]Unit building logic is not allowed here.
|
||||
lenum.type = Type of building/unit.\ne.g. for any router, this will return [accent]@router[].\nNot a string.
|
||||
lenum.shoot = Shoot at a position.
|
||||
@@ -2414,3 +2454,6 @@ lenum.flushtext = Flush print buffer's content to marker, if applicable.\nIf fet
|
||||
lenum.texture = Texture name straight from game's texture atlas (using kebab-case naming style).\nIf printFlush is set to true, consumes text buffer content as text argument.
|
||||
lenum.texturesize = Size of texture in tiles. Zero value scales marker width to original texture's size.
|
||||
lenum.autoscale = Whether to scale marker corresponding to player's zoom level.
|
||||
lenum.posi = Indexed position, used for line and quad markers with index zero being the first position.
|
||||
lenum.uvi = Texture's position ranging from zero to one, used for quad markers.
|
||||
lenum.colori = Indexed position, used for line and quad markers with index zero being the first color.
|
||||
|
||||
@@ -495,6 +495,7 @@ editor.default = [lightgray]<Prestabilit>
|
||||
details = Detalii...
|
||||
edit = Editează...
|
||||
variables = Vars
|
||||
logic.globals = Built-in Variables
|
||||
editor.name = Nume:
|
||||
editor.spawn = Adaugă Unitate
|
||||
editor.removeunit = Înlătură Unitate
|
||||
@@ -672,10 +673,11 @@ objective.destroycore.name = Destroy Core
|
||||
objective.commandmode.name = Command Mode
|
||||
objective.flag.name = Flag
|
||||
marker.shapetext.name = Shape Text
|
||||
marker.minimap.name = Minimap
|
||||
marker.point.name = Point
|
||||
marker.shape.name = Shape
|
||||
marker.text.name = Text
|
||||
marker.line.name = Line
|
||||
marker.quad.name = Quad
|
||||
marker.background = Background
|
||||
marker.outline = Outline
|
||||
objective.research = [accent]Research:\n[]{0}[lightgray]{1}
|
||||
@@ -760,6 +762,7 @@ sector.missingresources = [scarlet]Resurse din Nucleu Insuficiente
|
||||
sector.attacked = Sectorul [accent]{0}[white] este atacat!
|
||||
sector.lost = Ai pierdut sectorul [accent]{0}[white]!
|
||||
sector.capture = Sector [accent]{0}[white]Captured!
|
||||
sector.capture.current = Sector Captured!
|
||||
sector.changeicon = Schimbă Iconița
|
||||
sector.noswitch.title = Unable to Switch Sectors
|
||||
sector.noswitch = You may not switch sectors while an existing sector is under attack.\n\nSector: [accent]{0}[] on [accent]{1}[]
|
||||
@@ -1544,6 +1547,7 @@ block.inverted-sorter.name = Sortator Invers
|
||||
block.message.name = Mesaj
|
||||
block.reinforced-message.name = Reinforced Message
|
||||
block.world-message.name = World Message
|
||||
block.world-switch.name = World Switch
|
||||
block.illuminator.name = Iluminator
|
||||
block.overflow-gate.name = Poartă de Revărsare
|
||||
block.underflow-gate.name = Poartă de Subversare
|
||||
@@ -2295,6 +2299,42 @@ lst.sync = Sync a variable across the network.\nOnly invoked 10 times a second a
|
||||
lst.makemarker = Create a new logic marker in the world.\nAn ID to identify this marker must be provided.\nMarkers currently limited to 20,000 per world.
|
||||
lst.setmarker = Set a property for a marker.\nThe ID used must be the same as in the Make Marker instruction.
|
||||
lst.localeprint = Add map locale property value to the text buffer.\nTo set map locale bundles in map editor, check [accent]Map Info > Locale Bundles[].\nIf client is a mobile device, tries to print a property ending in ".mobile" first.
|
||||
lglobal.false = 0
|
||||
lglobal.true = 1
|
||||
lglobal.null = null
|
||||
lglobal.@pi = The mathematical constant pi (3.141...)
|
||||
lglobal.@e = The mathematical constant e (2.718...)
|
||||
lglobal.@degToRad = Multiply by this number to convert degrees to radians
|
||||
lglobal.@radToDeg = Multiply by this number to convert radians to degrees
|
||||
lglobal.@time = Playtime of current save, in milliseconds
|
||||
lglobal.@tick = Playtime of current save, in ticks (1 second = 60 ticks)
|
||||
lglobal.@second = Playtime of current save, in seconds
|
||||
lglobal.@minute = Playtime of current save, in minutes
|
||||
lglobal.@waveNumber = Current wave number, if waves are enabled
|
||||
lglobal.@waveTime = Countdown timer for waves, in seconds
|
||||
lglobal.@mapw = Map width in tiles
|
||||
lglobal.@maph = Map height in tiles
|
||||
lglobal.sectionMap = Map
|
||||
lglobal.sectionGeneral = General
|
||||
lglobal.sectionNetwork = Network/Clientside [World Processor Only]
|
||||
lglobal.sectionProcessor = Processor
|
||||
lglobal.sectionLookup = Lookup
|
||||
lglobal.@this = The logic block executing the code
|
||||
lglobal.@thisx = X coordinate of block executing the code
|
||||
lglobal.@thisy = Y coordinate of block executing the code
|
||||
lglobal.@links = Total number of blocks linked to this processors
|
||||
lglobal.@ipt = Execution speed of the processor in instructions per tick (60 ticks = 1 second)
|
||||
lglobal.@unitCount = Total number of types of unit content in the game; used with the lookup instruction
|
||||
lglobal.@blockCount = Total number of types of block content in the game; used with the lookup instruction
|
||||
lglobal.@itemCount = Total number of types of item content in the game; used with the lookup instruction
|
||||
lglobal.@liquidCount = Total number of types of liquid content in the game; used with the lookup instruction
|
||||
lglobal.@server = True if the code is running on a server or in singleplayer, false otherwise
|
||||
lglobal.@client = True if the code is running on a client connected to a server
|
||||
lglobal.@clientLocale = Locale of the client running the code. For example: en_US
|
||||
lglobal.@clientUnit = Unit of client running the code
|
||||
lglobal.@clientName = Player name of client running the code
|
||||
lglobal.@clientTeam = Team ID of client running the code
|
||||
lglobal.@clientMobile = True is the client running the code is on mobile, false otherwise
|
||||
|
||||
logic.nounitbuild = [red]Nu ai voie să construiești cu unitățile folosind procesoare.
|
||||
|
||||
@@ -2450,3 +2490,6 @@ lenum.flushtext = Flush print buffer's content to marker, if applicable.\nIf fet
|
||||
lenum.texture = Texture name straight from game's texture atlas (using kebab-case naming style).\nIf printFlush is set to true, consumes text buffer content as text argument.
|
||||
lenum.texturesize = Size of texture in tiles. Zero value scales marker width to original texture's size.
|
||||
lenum.autoscale = Whether to scale marker corresponding to player's zoom level.
|
||||
lenum.posi = Indexed position, used for line and quad markers with index zero being the first position.
|
||||
lenum.uvi = Texture's position ranging from zero to one, used for quad markers.
|
||||
lenum.colori = Indexed position, used for line and quad markers with index zero being the first color.
|
||||
|
||||
@@ -495,6 +495,7 @@ editor.default = [lightgray]<По умолчанию>
|
||||
details = Подробности…
|
||||
edit = Редактировать…
|
||||
variables = Переменные
|
||||
logic.globals = Built-in Variables
|
||||
editor.name = Название:
|
||||
editor.spawn = Создать боевую единицу
|
||||
editor.removeunit = Удалить боевую единицу
|
||||
@@ -672,10 +673,11 @@ objective.destroycore.name = Уничтожить ядро
|
||||
objective.commandmode.name = Командовать единицей
|
||||
objective.flag.name = Флаг
|
||||
marker.shapetext.name = Фигура с текстом
|
||||
marker.minimap.name = Миникарта
|
||||
marker.point.name = Point
|
||||
marker.shape.name = Фигура
|
||||
marker.text.name = Текст
|
||||
marker.line.name = Line
|
||||
marker.quad.name = Quad
|
||||
marker.background = Фон
|
||||
marker.outline = Контур
|
||||
objective.research = [accent]Исследуйте:\n[]{0}[lightgray]{1}
|
||||
@@ -761,6 +763,7 @@ sector.missingresources = [scarlet]Недостаточно ресурсов д
|
||||
sector.attacked = Сектор [accent]{0}[white] атакован!
|
||||
sector.lost = Сектор [accent]{0}[white] потерян!
|
||||
sector.capture = Sector [accent]{0}[white]Captured!
|
||||
sector.capture.current = Sector Captured!
|
||||
sector.changeicon = Изменить иконку
|
||||
sector.noswitch.title = Перемещение между секторами
|
||||
sector.noswitch = Вы не можете переключаться между секторами, пока существующий сектор находится под атакой.\n\nСектор: [accent]{0}[] на [accent]{1}[]
|
||||
@@ -1544,6 +1547,7 @@ block.inverted-sorter.name = Инвертированный сортировщи
|
||||
block.message.name = Сообщение
|
||||
block.reinforced-message.name = Усиленное сообщение
|
||||
block.world-message.name = Мировое сообщение
|
||||
block.world-switch.name = World Switch
|
||||
block.illuminator.name = Осветитель
|
||||
block.overflow-gate.name = Избыточный затвор
|
||||
block.underflow-gate.name = Избыточный шлюз
|
||||
@@ -1903,13 +1907,13 @@ onset.turrets = Боевые единицы эффективны, но [accent]
|
||||
onset.turretammo = Снабдите турель [accent]бериллиевыми боеприпасами.[]
|
||||
onset.walls = [accent]Стены[] могут предотвратить повреждение близлежащих построек.\nПоставьте \uf6ee [accent]бериллиевые стены[] вокруг турели.
|
||||
onset.enemies = Враг на подходе, приготовьтесь защищаться.
|
||||
onset.defenses = [accent]Set up defenses:[lightgray] {0}
|
||||
onset.defenses = [accent]Приготовьте оборону:[lightgray] {0}
|
||||
onset.attack = Враг уязвим. Начните контратаку.
|
||||
onset.cores = Новые ядра могут быть поставлены на [accent]зоны ядра[].\nНовые ядра функционируют как передовые базы и имеют общий инвентарь между другими ядрами.\nПоставьте \uf725 ядро.
|
||||
onset.detect = Враг обнаружит вас через 2 минуты.\nПриготовьте оборону, добычу и производство.
|
||||
onset.commandmode = Удерживайте [accent]shift[], чтобы войти в [accent]режим командования[].\n[accent]Щелкните левой кнопкой мыши и выделите область[] для выбора боевых единиц.\n[accent]Щелкните правой кнопкой мыши[], чтобы приказать выбранным единицам двигаться или атаковать.
|
||||
onset.commandmode.mobile = Нажмите [accent]Командовать[], чтобы войти в [accent]режим командования[].\nЗажмите палец, затем [accent]выделите область[] для выбора боевых единиц.\n[accent]Нажмите[], чтобы приказать выбранным единицам двигаться или атаковать.
|
||||
aegis.tungsten = Tungsten can be mined using an [accent]impact drill[].\nThis structure requires [accent]water[] and [accent]power[].
|
||||
aegis.tungsten = Вольфрам может быть добыт [accent]ударной дрелью[].\nЭта постройка требует [accent]воду[] и [accent]энергию[].
|
||||
|
||||
split.pickup = Некоторые блоки можно подобрать боевой единицей ядра.\nВозьмите этот [accent]контейнер[] и поставьте его на [accent]грузовой загрузчик[].\n(Клавиши по умолчанию - [ и ] для поднятия и разгрузки)
|
||||
split.pickup.mobile = Некоторые блоки можно подобрать боевой единицей ядра.\nВозьмите этот [accent]контейнер[] и поставьте его на [accent]грузовой загрузчик[].\n(Чтобы поднять или разгрузить что-либо, удерживайте палец.)
|
||||
@@ -2297,6 +2301,42 @@ lst.sync = Sync a variable across the network.\nOnly invoked 10 times a second a
|
||||
lst.makemarker = Create a new logic marker in the world.\nAn ID to identify this marker must be provided.\nMarkers currently limited to 20,000 per world.
|
||||
lst.setmarker = Set a property for a marker.\nThe ID used must be the same as in the Make Marker instruction.
|
||||
lst.localeprint = Add map locale property value to the text buffer.\nTo set map locale bundles in map editor, check [accent]Map Info > Locale Bundles[].\nIf client is a mobile device, tries to print a property ending in ".mobile" first.
|
||||
lglobal.false = 0
|
||||
lglobal.true = 1
|
||||
lglobal.null = null
|
||||
lglobal.@pi = The mathematical constant pi (3.141...)
|
||||
lglobal.@e = The mathematical constant e (2.718...)
|
||||
lglobal.@degToRad = Multiply by this number to convert degrees to radians
|
||||
lglobal.@radToDeg = Multiply by this number to convert radians to degrees
|
||||
lglobal.@time = Playtime of current save, in milliseconds
|
||||
lglobal.@tick = Playtime of current save, in ticks (1 second = 60 ticks)
|
||||
lglobal.@second = Playtime of current save, in seconds
|
||||
lglobal.@minute = Playtime of current save, in minutes
|
||||
lglobal.@waveNumber = Current wave number, if waves are enabled
|
||||
lglobal.@waveTime = Countdown timer for waves, in seconds
|
||||
lglobal.@mapw = Map width in tiles
|
||||
lglobal.@maph = Map height in tiles
|
||||
lglobal.sectionMap = Map
|
||||
lglobal.sectionGeneral = General
|
||||
lglobal.sectionNetwork = Network/Clientside [World Processor Only]
|
||||
lglobal.sectionProcessor = Processor
|
||||
lglobal.sectionLookup = Lookup
|
||||
lglobal.@this = The logic block executing the code
|
||||
lglobal.@thisx = X coordinate of block executing the code
|
||||
lglobal.@thisy = Y coordinate of block executing the code
|
||||
lglobal.@links = Total number of blocks linked to this processors
|
||||
lglobal.@ipt = Execution speed of the processor in instructions per tick (60 ticks = 1 second)
|
||||
lglobal.@unitCount = Total number of types of unit content in the game; used with the lookup instruction
|
||||
lglobal.@blockCount = Total number of types of block content in the game; used with the lookup instruction
|
||||
lglobal.@itemCount = Total number of types of item content in the game; used with the lookup instruction
|
||||
lglobal.@liquidCount = Total number of types of liquid content in the game; used with the lookup instruction
|
||||
lglobal.@server = True if the code is running on a server or in singleplayer, false otherwise
|
||||
lglobal.@client = True if the code is running on a client connected to a server
|
||||
lglobal.@clientLocale = Locale of the client running the code. For example: en_US
|
||||
lglobal.@clientUnit = Unit of client running the code
|
||||
lglobal.@clientName = Player name of client running the code
|
||||
lglobal.@clientTeam = Team ID of client running the code
|
||||
lglobal.@clientMobile = True is the client running the code is on mobile, false otherwise
|
||||
|
||||
logic.nounitbuild = [red]Строительство с помощью процессоров здесь запрещено.
|
||||
|
||||
@@ -2452,3 +2492,6 @@ lenum.flushtext = Flush print buffer's content to marker, if applicable.\nIf fet
|
||||
lenum.texture = Texture name straight from game's texture atlas (using kebab-case naming style).\nIf printFlush is set to true, consumes text buffer content as text argument.
|
||||
lenum.texturesize = Size of texture in tiles. Zero value scales marker width to original texture's size.
|
||||
lenum.autoscale = Whether to scale marker corresponding to player's zoom level.
|
||||
lenum.posi = Indexed position, used for line and quad markers with index zero being the first position.
|
||||
lenum.uvi = Texture's position ranging from zero to one, used for quad markers.
|
||||
lenum.colori = Indexed position, used for line and quad markers with index zero being the first color.
|
||||
|
||||
@@ -495,6 +495,7 @@ editor.default = [lightgray]<Default>
|
||||
details = Detalji...
|
||||
edit = Izmeni...
|
||||
variables = Varijabla
|
||||
logic.globals = Built-in Variables
|
||||
editor.name = Ime:
|
||||
editor.spawn = Prizovi Jedinicu
|
||||
editor.removeunit = Ukloni Jedinicu
|
||||
@@ -672,10 +673,11 @@ objective.destroycore.name = Uništi Jezgro
|
||||
objective.commandmode.name = Upravljački Mod
|
||||
objective.flag.name = Zastava
|
||||
marker.shapetext.name = Tekst i Oblik
|
||||
marker.minimap.name = Minimapa
|
||||
marker.point.name = Point
|
||||
marker.shape.name = Oblik
|
||||
marker.text.name = Tekst
|
||||
marker.line.name = Line
|
||||
marker.quad.name = Quad
|
||||
marker.background = Pozadina
|
||||
marker.outline = Outline
|
||||
objective.research = [accent]Izuči:\n[]{0}[lightgray]{1}
|
||||
@@ -761,6 +763,7 @@ sector.missingresources = [scarlet]Nedovoljnema Resursa u Jezgru
|
||||
sector.attacked = Sektor [accent]{0}[white] je napadnut!
|
||||
sector.lost = Sektor [accent]{0}[white] je izgubljen!
|
||||
sector.capture = Sector [accent]{0}[white]Captured!
|
||||
sector.capture.current = Sector Captured!
|
||||
sector.changeicon = Promeni Ikonicu
|
||||
sector.noswitch.title = Nije Moguće Promeniti Sektor
|
||||
sector.noswitch = Ne možete promeniti sektor dok je drugi napadnut.\n\nSektor: [accent]{0}[] na [accent]{1}[]
|
||||
@@ -1546,6 +1549,7 @@ block.inverted-sorter.name = Naopaki Sorter
|
||||
block.message.name = Poruka
|
||||
block.reinforced-message.name = Armirana Poruka
|
||||
block.world-message.name = Svetovna Poruka
|
||||
block.world-switch.name = World Switch
|
||||
block.illuminator.name = Svetlo
|
||||
block.overflow-gate.name = Prelivna Kapija
|
||||
block.underflow-gate.name = Podlivna Kapija
|
||||
@@ -2298,6 +2302,42 @@ lst.sync = Sync a variable across the network.\nOnly invoked 10 times a second a
|
||||
lst.makemarker = Create a new logic marker in the world.\nAn ID to identify this marker must be provided.\nMarkers currently limited to 20,000 per world.
|
||||
lst.setmarker = Set a property for a marker.\nThe ID used must be the same as in the Make Marker instruction.
|
||||
lst.localeprint = Add map locale property value to the text buffer.\nTo set map locale bundles in map editor, check [accent]Map Info > Locale Bundles[].\nIf client is a mobile device, tries to print a property ending in ".mobile" first.
|
||||
lglobal.false = 0
|
||||
lglobal.true = 1
|
||||
lglobal.null = null
|
||||
lglobal.@pi = The mathematical constant pi (3.141...)
|
||||
lglobal.@e = The mathematical constant e (2.718...)
|
||||
lglobal.@degToRad = Multiply by this number to convert degrees to radians
|
||||
lglobal.@radToDeg = Multiply by this number to convert radians to degrees
|
||||
lglobal.@time = Playtime of current save, in milliseconds
|
||||
lglobal.@tick = Playtime of current save, in ticks (1 second = 60 ticks)
|
||||
lglobal.@second = Playtime of current save, in seconds
|
||||
lglobal.@minute = Playtime of current save, in minutes
|
||||
lglobal.@waveNumber = Current wave number, if waves are enabled
|
||||
lglobal.@waveTime = Countdown timer for waves, in seconds
|
||||
lglobal.@mapw = Map width in tiles
|
||||
lglobal.@maph = Map height in tiles
|
||||
lglobal.sectionMap = Map
|
||||
lglobal.sectionGeneral = General
|
||||
lglobal.sectionNetwork = Network/Clientside [World Processor Only]
|
||||
lglobal.sectionProcessor = Processor
|
||||
lglobal.sectionLookup = Lookup
|
||||
lglobal.@this = The logic block executing the code
|
||||
lglobal.@thisx = X coordinate of block executing the code
|
||||
lglobal.@thisy = Y coordinate of block executing the code
|
||||
lglobal.@links = Total number of blocks linked to this processors
|
||||
lglobal.@ipt = Execution speed of the processor in instructions per tick (60 ticks = 1 second)
|
||||
lglobal.@unitCount = Total number of types of unit content in the game; used with the lookup instruction
|
||||
lglobal.@blockCount = Total number of types of block content in the game; used with the lookup instruction
|
||||
lglobal.@itemCount = Total number of types of item content in the game; used with the lookup instruction
|
||||
lglobal.@liquidCount = Total number of types of liquid content in the game; used with the lookup instruction
|
||||
lglobal.@server = True if the code is running on a server or in singleplayer, false otherwise
|
||||
lglobal.@client = True if the code is running on a client connected to a server
|
||||
lglobal.@clientLocale = Locale of the client running the code. For example: en_US
|
||||
lglobal.@clientUnit = Unit of client running the code
|
||||
lglobal.@clientName = Player name of client running the code
|
||||
lglobal.@clientTeam = Team ID of client running the code
|
||||
lglobal.@clientMobile = True is the client running the code is on mobile, false otherwise
|
||||
|
||||
logic.nounitbuild = [red]Unit building logic is not allowed here.
|
||||
|
||||
@@ -2453,3 +2493,6 @@ lenum.flushtext = Flush print buffer's content to marker, if applicable.\nIf fet
|
||||
lenum.texture = Texture name straight from game's texture atlas (using kebab-case naming style).\nIf printFlush is set to true, consumes text buffer content as text argument.
|
||||
lenum.texturesize = Size of texture in tiles. Zero value scales marker width to original texture's size.
|
||||
lenum.autoscale = Whether to scale marker corresponding to player's zoom level.
|
||||
lenum.posi = Indexed position, used for line and quad markers with index zero being the first position.
|
||||
lenum.uvi = Texture's position ranging from zero to one, used for quad markers.
|
||||
lenum.colori = Indexed position, used for line and quad markers with index zero being the first color.
|
||||
|
||||
@@ -490,6 +490,7 @@ editor.default = [lightgray]<Default>
|
||||
details = Details...
|
||||
edit = Redigera...
|
||||
variables = Vars
|
||||
logic.globals = Built-in Variables
|
||||
editor.name = Namn:
|
||||
editor.spawn = Spawn Unit
|
||||
editor.removeunit = Remove Unit
|
||||
@@ -665,10 +666,11 @@ objective.destroycore.name = Destroy Core
|
||||
objective.commandmode.name = Command Mode
|
||||
objective.flag.name = Flag
|
||||
marker.shapetext.name = Shape Text
|
||||
marker.minimap.name = Minimap
|
||||
marker.point.name = Point
|
||||
marker.shape.name = Shape
|
||||
marker.text.name = Text
|
||||
marker.line.name = Line
|
||||
marker.quad.name = Quad
|
||||
marker.background = Background
|
||||
marker.outline = Outline
|
||||
objective.research = [accent]Research:\n[]{0}[lightgray]{1}
|
||||
@@ -752,6 +754,7 @@ sector.missingresources = [scarlet]Insufficient Core Resources
|
||||
sector.attacked = Sector [accent]{0}[white] under attack!
|
||||
sector.lost = Sector [accent]{0}[white] lost!
|
||||
sector.capture = Sector [accent]{0}[white]Captured!
|
||||
sector.capture.current = Sector Captured!
|
||||
sector.changeicon = Change Icon
|
||||
sector.noswitch.title = Unable to Switch Sectors
|
||||
sector.noswitch = You may not switch sectors while an existing sector is under attack.\n\nSector: [accent]{0}[] on [accent]{1}[]
|
||||
@@ -1531,6 +1534,7 @@ block.inverted-sorter.name = Inverted Sorter
|
||||
block.message.name = Meddelande
|
||||
block.reinforced-message.name = Reinforced Message
|
||||
block.world-message.name = World Message
|
||||
block.world-switch.name = World Switch
|
||||
block.illuminator.name = Illuminator
|
||||
block.overflow-gate.name = Överflödesgrind
|
||||
block.underflow-gate.name = Underflow Gate
|
||||
@@ -2278,6 +2282,42 @@ lst.sync = Sync a variable across the network.\nOnly invoked 10 times a second a
|
||||
lst.makemarker = Create a new logic marker in the world.\nAn ID to identify this marker must be provided.\nMarkers currently limited to 20,000 per world.
|
||||
lst.setmarker = Set a property for a marker.\nThe ID used must be the same as in the Make Marker instruction.
|
||||
lst.localeprint = Add map locale property value to the text buffer.\nTo set map locale bundles in map editor, check [accent]Map Info > Locale Bundles[].\nIf client is a mobile device, tries to print a property ending in ".mobile" first.
|
||||
lglobal.false = 0
|
||||
lglobal.true = 1
|
||||
lglobal.null = null
|
||||
lglobal.@pi = The mathematical constant pi (3.141...)
|
||||
lglobal.@e = The mathematical constant e (2.718...)
|
||||
lglobal.@degToRad = Multiply by this number to convert degrees to radians
|
||||
lglobal.@radToDeg = Multiply by this number to convert radians to degrees
|
||||
lglobal.@time = Playtime of current save, in milliseconds
|
||||
lglobal.@tick = Playtime of current save, in ticks (1 second = 60 ticks)
|
||||
lglobal.@second = Playtime of current save, in seconds
|
||||
lglobal.@minute = Playtime of current save, in minutes
|
||||
lglobal.@waveNumber = Current wave number, if waves are enabled
|
||||
lglobal.@waveTime = Countdown timer for waves, in seconds
|
||||
lglobal.@mapw = Map width in tiles
|
||||
lglobal.@maph = Map height in tiles
|
||||
lglobal.sectionMap = Map
|
||||
lglobal.sectionGeneral = General
|
||||
lglobal.sectionNetwork = Network/Clientside [World Processor Only]
|
||||
lglobal.sectionProcessor = Processor
|
||||
lglobal.sectionLookup = Lookup
|
||||
lglobal.@this = The logic block executing the code
|
||||
lglobal.@thisx = X coordinate of block executing the code
|
||||
lglobal.@thisy = Y coordinate of block executing the code
|
||||
lglobal.@links = Total number of blocks linked to this processors
|
||||
lglobal.@ipt = Execution speed of the processor in instructions per tick (60 ticks = 1 second)
|
||||
lglobal.@unitCount = Total number of types of unit content in the game; used with the lookup instruction
|
||||
lglobal.@blockCount = Total number of types of block content in the game; used with the lookup instruction
|
||||
lglobal.@itemCount = Total number of types of item content in the game; used with the lookup instruction
|
||||
lglobal.@liquidCount = Total number of types of liquid content in the game; used with the lookup instruction
|
||||
lglobal.@server = True if the code is running on a server or in singleplayer, false otherwise
|
||||
lglobal.@client = True if the code is running on a client connected to a server
|
||||
lglobal.@clientLocale = Locale of the client running the code. For example: en_US
|
||||
lglobal.@clientUnit = Unit of client running the code
|
||||
lglobal.@clientName = Player name of client running the code
|
||||
lglobal.@clientTeam = Team ID of client running the code
|
||||
lglobal.@clientMobile = True is the client running the code is on mobile, false otherwise
|
||||
logic.nounitbuild = [red]Unit building logic is not allowed here.
|
||||
lenum.type = Type of building/unit.\ne.g. for any router, this will return [accent]@router[].\nNot a string.
|
||||
lenum.shoot = Shoot at a position.
|
||||
@@ -2414,3 +2454,6 @@ lenum.flushtext = Flush print buffer's content to marker, if applicable.\nIf fet
|
||||
lenum.texture = Texture name straight from game's texture atlas (using kebab-case naming style).\nIf printFlush is set to true, consumes text buffer content as text argument.
|
||||
lenum.texturesize = Size of texture in tiles. Zero value scales marker width to original texture's size.
|
||||
lenum.autoscale = Whether to scale marker corresponding to player's zoom level.
|
||||
lenum.posi = Indexed position, used for line and quad markers with index zero being the first position.
|
||||
lenum.uvi = Texture's position ranging from zero to one, used for quad markers.
|
||||
lenum.colori = Indexed position, used for line and quad markers with index zero being the first color.
|
||||
|
||||
@@ -495,6 +495,7 @@ editor.default = [lightgray]<ค่าเริ่มต้น>
|
||||
details = รายละเอียด...
|
||||
edit = แก้ไข...
|
||||
variables = ตัวแปร
|
||||
logic.globals = Built-in Variables
|
||||
editor.name = ชื่อ:
|
||||
editor.spawn = สร้างยูนิต
|
||||
editor.removeunit = ลบยูนิต
|
||||
@@ -672,10 +673,11 @@ objective.destroycore.name = ทำลายแกนกลาง
|
||||
objective.commandmode.name = โหมดสั่งการ
|
||||
objective.flag.name = ธง
|
||||
marker.shapetext.name = ข้อความในรูปทรง
|
||||
marker.minimap.name = มินิแมพ
|
||||
marker.point.name = Point
|
||||
marker.shape.name = รูปทรง
|
||||
marker.text.name = ข้อความ
|
||||
marker.line.name = Line
|
||||
marker.quad.name = Quad
|
||||
marker.background = พื้นหลัง
|
||||
marker.outline = โครงร่าง
|
||||
objective.research = [accent]วิจัย:\n[]{0}[lightgray]{1}
|
||||
@@ -761,6 +763,7 @@ sector.missingresources = [scarlet]ขาดทรัพยากรในกา
|
||||
sector.attacked = เซ็กเตอร์ [accent]{0}[white] ถูกโจมตี!
|
||||
sector.lost = เราเสียเซ็กเตอร์ [accent]{0}[white]!
|
||||
sector.capture = Sector [accent]{0}[white]Captured!
|
||||
sector.capture.current = Sector Captured!
|
||||
sector.changeicon = เปลี่ยนไอคอน
|
||||
sector.noswitch.title = ไม่สามารถเปลี่ยนเซ็กเตอร์ได้
|
||||
sector.noswitch = คุณไม่สามารถเปลี่ยนเซ็กเตอร์ได้ระหว่างที่อีกเซ็กเตอร์กำลังถูกโจมตีอยู่\n\nเซ็กเตอร์: [accent]{0}[] บนดาว [accent]{1}[]
|
||||
@@ -1551,6 +1554,7 @@ block.inverted-sorter.name = เครื่องคัดแยกกลับ
|
||||
block.message.name = กล่องข้อความ
|
||||
block.reinforced-message.name = กล่องข้อความเสริมกำลัง
|
||||
block.world-message.name = กล่องข้อความโลก
|
||||
block.world-switch.name = World Switch
|
||||
block.illuminator.name = ตัวเปล่งแสง
|
||||
block.overflow-gate.name = ประตูระบาย
|
||||
block.underflow-gate.name = ประตูระบายข้าง
|
||||
@@ -2315,6 +2319,42 @@ lst.sync = Sync a variable across the network.\nOnly invoked 10 times a second a
|
||||
lst.makemarker = Create a new logic marker in the world.\nAn ID to identify this marker must be provided.\nMarkers currently limited to 20,000 per world.
|
||||
lst.setmarker = Set a property for a marker.\nThe ID used must be the same as in the Make Marker instruction.
|
||||
lst.localeprint = Add map locale property value to the text buffer.\nTo set map locale bundles in map editor, check [accent]Map Info > Locale Bundles[].\nIf client is a mobile device, tries to print a property ending in ".mobile" first.
|
||||
lglobal.false = 0
|
||||
lglobal.true = 1
|
||||
lglobal.null = null
|
||||
lglobal.@pi = The mathematical constant pi (3.141...)
|
||||
lglobal.@e = The mathematical constant e (2.718...)
|
||||
lglobal.@degToRad = Multiply by this number to convert degrees to radians
|
||||
lglobal.@radToDeg = Multiply by this number to convert radians to degrees
|
||||
lglobal.@time = Playtime of current save, in milliseconds
|
||||
lglobal.@tick = Playtime of current save, in ticks (1 second = 60 ticks)
|
||||
lglobal.@second = Playtime of current save, in seconds
|
||||
lglobal.@minute = Playtime of current save, in minutes
|
||||
lglobal.@waveNumber = Current wave number, if waves are enabled
|
||||
lglobal.@waveTime = Countdown timer for waves, in seconds
|
||||
lglobal.@mapw = Map width in tiles
|
||||
lglobal.@maph = Map height in tiles
|
||||
lglobal.sectionMap = Map
|
||||
lglobal.sectionGeneral = General
|
||||
lglobal.sectionNetwork = Network/Clientside [World Processor Only]
|
||||
lglobal.sectionProcessor = Processor
|
||||
lglobal.sectionLookup = Lookup
|
||||
lglobal.@this = The logic block executing the code
|
||||
lglobal.@thisx = X coordinate of block executing the code
|
||||
lglobal.@thisy = Y coordinate of block executing the code
|
||||
lglobal.@links = Total number of blocks linked to this processors
|
||||
lglobal.@ipt = Execution speed of the processor in instructions per tick (60 ticks = 1 second)
|
||||
lglobal.@unitCount = Total number of types of unit content in the game; used with the lookup instruction
|
||||
lglobal.@blockCount = Total number of types of block content in the game; used with the lookup instruction
|
||||
lglobal.@itemCount = Total number of types of item content in the game; used with the lookup instruction
|
||||
lglobal.@liquidCount = Total number of types of liquid content in the game; used with the lookup instruction
|
||||
lglobal.@server = True if the code is running on a server or in singleplayer, false otherwise
|
||||
lglobal.@client = True if the code is running on a client connected to a server
|
||||
lglobal.@clientLocale = Locale of the client running the code. For example: en_US
|
||||
lglobal.@clientUnit = Unit of client running the code
|
||||
lglobal.@clientName = Player name of client running the code
|
||||
lglobal.@clientTeam = Team ID of client running the code
|
||||
lglobal.@clientMobile = True is the client running the code is on mobile, false otherwise
|
||||
|
||||
logic.nounitbuild = [red]ไม่อนุญาตให้ใช้ลอจิกควบคุมให้ยูนิตสร้างที่นี่
|
||||
|
||||
@@ -2471,3 +2511,6 @@ lenum.flushtext = Flush print buffer's content to marker, if applicable.\nIf fet
|
||||
lenum.texture = Texture name straight from game's texture atlas (using kebab-case naming style).\nIf printFlush is set to true, consumes text buffer content as text argument.
|
||||
lenum.texturesize = Size of texture in tiles. Zero value scales marker width to original texture's size.
|
||||
lenum.autoscale = Whether to scale marker corresponding to player's zoom level.
|
||||
lenum.posi = Indexed position, used for line and quad markers with index zero being the first position.
|
||||
lenum.uvi = Texture's position ranging from zero to one, used for quad markers.
|
||||
lenum.colori = Indexed position, used for line and quad markers with index zero being the first color.
|
||||
|
||||
@@ -490,6 +490,7 @@ editor.default = [lightgray]<Default>
|
||||
details = Details...
|
||||
edit = Edit...
|
||||
variables = Vars
|
||||
logic.globals = Built-in Variables
|
||||
editor.name = isim:
|
||||
editor.spawn = Spawn Unit
|
||||
editor.removeunit = Remove Unit
|
||||
@@ -665,10 +666,11 @@ objective.destroycore.name = Destroy Core
|
||||
objective.commandmode.name = Command Mode
|
||||
objective.flag.name = Flag
|
||||
marker.shapetext.name = Shape Text
|
||||
marker.minimap.name = Minimap
|
||||
marker.point.name = Point
|
||||
marker.shape.name = Shape
|
||||
marker.text.name = Text
|
||||
marker.line.name = Line
|
||||
marker.quad.name = Quad
|
||||
marker.background = Background
|
||||
marker.outline = Outline
|
||||
objective.research = [accent]Research:\n[]{0}[lightgray]{1}
|
||||
@@ -752,6 +754,7 @@ sector.missingresources = [scarlet]Insufficient Core Resources
|
||||
sector.attacked = Sector [accent]{0}[white] under attack!
|
||||
sector.lost = Sector [accent]{0}[white] lost!
|
||||
sector.capture = Sector [accent]{0}[white]Captured!
|
||||
sector.capture.current = Sector Captured!
|
||||
sector.changeicon = Change Icon
|
||||
sector.noswitch.title = Unable to Switch Sectors
|
||||
sector.noswitch = You may not switch sectors while an existing sector is under attack.\n\nSector: [accent]{0}[] on [accent]{1}[]
|
||||
@@ -1531,6 +1534,7 @@ block.inverted-sorter.name = Inverted Sorter
|
||||
block.message.name = Message
|
||||
block.reinforced-message.name = Reinforced Message
|
||||
block.world-message.name = World Message
|
||||
block.world-switch.name = World Switch
|
||||
block.illuminator.name = Illuminator
|
||||
block.overflow-gate.name = Kapali dagatici
|
||||
block.underflow-gate.name = Underflow Gate
|
||||
@@ -2278,6 +2282,42 @@ lst.sync = Sync a variable across the network.\nOnly invoked 10 times a second a
|
||||
lst.makemarker = Create a new logic marker in the world.\nAn ID to identify this marker must be provided.\nMarkers currently limited to 20,000 per world.
|
||||
lst.setmarker = Set a property for a marker.\nThe ID used must be the same as in the Make Marker instruction.
|
||||
lst.localeprint = Add map locale property value to the text buffer.\nTo set map locale bundles in map editor, check [accent]Map Info > Locale Bundles[].\nIf client is a mobile device, tries to print a property ending in ".mobile" first.
|
||||
lglobal.false = 0
|
||||
lglobal.true = 1
|
||||
lglobal.null = null
|
||||
lglobal.@pi = The mathematical constant pi (3.141...)
|
||||
lglobal.@e = The mathematical constant e (2.718...)
|
||||
lglobal.@degToRad = Multiply by this number to convert degrees to radians
|
||||
lglobal.@radToDeg = Multiply by this number to convert radians to degrees
|
||||
lglobal.@time = Playtime of current save, in milliseconds
|
||||
lglobal.@tick = Playtime of current save, in ticks (1 second = 60 ticks)
|
||||
lglobal.@second = Playtime of current save, in seconds
|
||||
lglobal.@minute = Playtime of current save, in minutes
|
||||
lglobal.@waveNumber = Current wave number, if waves are enabled
|
||||
lglobal.@waveTime = Countdown timer for waves, in seconds
|
||||
lglobal.@mapw = Map width in tiles
|
||||
lglobal.@maph = Map height in tiles
|
||||
lglobal.sectionMap = Map
|
||||
lglobal.sectionGeneral = General
|
||||
lglobal.sectionNetwork = Network/Clientside [World Processor Only]
|
||||
lglobal.sectionProcessor = Processor
|
||||
lglobal.sectionLookup = Lookup
|
||||
lglobal.@this = The logic block executing the code
|
||||
lglobal.@thisx = X coordinate of block executing the code
|
||||
lglobal.@thisy = Y coordinate of block executing the code
|
||||
lglobal.@links = Total number of blocks linked to this processors
|
||||
lglobal.@ipt = Execution speed of the processor in instructions per tick (60 ticks = 1 second)
|
||||
lglobal.@unitCount = Total number of types of unit content in the game; used with the lookup instruction
|
||||
lglobal.@blockCount = Total number of types of block content in the game; used with the lookup instruction
|
||||
lglobal.@itemCount = Total number of types of item content in the game; used with the lookup instruction
|
||||
lglobal.@liquidCount = Total number of types of liquid content in the game; used with the lookup instruction
|
||||
lglobal.@server = True if the code is running on a server or in singleplayer, false otherwise
|
||||
lglobal.@client = True if the code is running on a client connected to a server
|
||||
lglobal.@clientLocale = Locale of the client running the code. For example: en_US
|
||||
lglobal.@clientUnit = Unit of client running the code
|
||||
lglobal.@clientName = Player name of client running the code
|
||||
lglobal.@clientTeam = Team ID of client running the code
|
||||
lglobal.@clientMobile = True is the client running the code is on mobile, false otherwise
|
||||
logic.nounitbuild = [red]Unit building logic is not allowed here.
|
||||
lenum.type = Type of building/unit.\ne.g. for any router, this will return [accent]@router[].\nNot a string.
|
||||
lenum.shoot = Shoot at a position.
|
||||
@@ -2414,3 +2454,6 @@ lenum.flushtext = Flush print buffer's content to marker, if applicable.\nIf fet
|
||||
lenum.texture = Texture name straight from game's texture atlas (using kebab-case naming style).\nIf printFlush is set to true, consumes text buffer content as text argument.
|
||||
lenum.texturesize = Size of texture in tiles. Zero value scales marker width to original texture's size.
|
||||
lenum.autoscale = Whether to scale marker corresponding to player's zoom level.
|
||||
lenum.posi = Indexed position, used for line and quad markers with index zero being the first position.
|
||||
lenum.uvi = Texture's position ranging from zero to one, used for quad markers.
|
||||
lenum.colori = Indexed position, used for line and quad markers with index zero being the first color.
|
||||
|
||||
@@ -495,6 +495,7 @@ editor.default = [lightgray]<Varsayılan>
|
||||
details = Detaylar...
|
||||
edit = Düzenle...
|
||||
variables = Değişkenler
|
||||
logic.globals = Built-in Variables
|
||||
editor.name = İsim:
|
||||
editor.spawn = Birim Oluştur
|
||||
editor.removeunit = Birim Kaldır
|
||||
@@ -672,10 +673,11 @@ objective.destroycore.name = Merkezi Yok Et
|
||||
objective.commandmode.name = Komuta Et
|
||||
objective.flag.name = Bayrak
|
||||
marker.shapetext.name = Şekilli Yazı
|
||||
marker.minimap.name = Harita
|
||||
marker.point.name = Point
|
||||
marker.shape.name = Şekil
|
||||
marker.text.name = Yazı
|
||||
marker.line.name = Line
|
||||
marker.quad.name = Quad
|
||||
marker.background = Arkaplan
|
||||
marker.outline = Anahat
|
||||
objective.research = [accent]Araştır:\n[]{0}[lightgray]{1}
|
||||
@@ -760,6 +762,7 @@ sector.missingresources = [scarlet]Yetersiz Merkez Kaynakları
|
||||
sector.attacked = Sektör [accent]{0}[white] saldırı altında!
|
||||
sector.lost = Sektör [accent]{0}[white] kaybedildi!
|
||||
sector.capture = Sector [accent]{0}[white]Captured!
|
||||
sector.capture.current = Sector Captured!
|
||||
sector.changeicon = İkon Değiştir
|
||||
sector.noswitch.title = Sektör Değiştirilemiyor
|
||||
sector.noswitch = Bir Sektör saldırı altındayken başka bir sektöre geçemezsin.\n\nSektör: [accent]{1}[] deki [accent]{0}[]
|
||||
@@ -1542,6 +1545,7 @@ block.inverted-sorter.name = Ters Ayıklayıcı
|
||||
block.message.name = Mesaj Bloğu
|
||||
block.reinforced-message.name = Güçlendirilmiş Mesaj Bloğu
|
||||
block.world-message.name = Evrensel Mesaj Bloğu
|
||||
block.world-switch.name = World Switch
|
||||
block.illuminator.name = Aydınlatıcı
|
||||
block.overflow-gate.name = Taşma Geçidi
|
||||
block.underflow-gate.name = Yana Taşma Geçidi
|
||||
@@ -2295,6 +2299,42 @@ lst.sync = Ağ boyunca bir değişkeni senkronize et.\nSaniyede en fazla 10 kere
|
||||
lst.makemarker = Dünyada yeni bir İşlemci İşareti koy.\nBu İşarete bir Kimlik adamalısın.\nDünya başına 20.000 limit bulunmakta.
|
||||
lst.setmarker = Bir İşlemci İşareti için bir arazi seç.\nKimlik, İşaret Koyucudaki ile aynı olmalı.
|
||||
lst.localeprint = Add map locale property value to the text buffer.\nTo set map locale bundles in map editor, check [accent]Map Info > Locale Bundles[].\nIf client is a mobile device, tries to print a property ending in ".mobile" first.
|
||||
lglobal.false = 0
|
||||
lglobal.true = 1
|
||||
lglobal.null = null
|
||||
lglobal.@pi = The mathematical constant pi (3.141...)
|
||||
lglobal.@e = The mathematical constant e (2.718...)
|
||||
lglobal.@degToRad = Multiply by this number to convert degrees to radians
|
||||
lglobal.@radToDeg = Multiply by this number to convert radians to degrees
|
||||
lglobal.@time = Playtime of current save, in milliseconds
|
||||
lglobal.@tick = Playtime of current save, in ticks (1 second = 60 ticks)
|
||||
lglobal.@second = Playtime of current save, in seconds
|
||||
lglobal.@minute = Playtime of current save, in minutes
|
||||
lglobal.@waveNumber = Current wave number, if waves are enabled
|
||||
lglobal.@waveTime = Countdown timer for waves, in seconds
|
||||
lglobal.@mapw = Map width in tiles
|
||||
lglobal.@maph = Map height in tiles
|
||||
lglobal.sectionMap = Map
|
||||
lglobal.sectionGeneral = General
|
||||
lglobal.sectionNetwork = Network/Clientside [World Processor Only]
|
||||
lglobal.sectionProcessor = Processor
|
||||
lglobal.sectionLookup = Lookup
|
||||
lglobal.@this = The logic block executing the code
|
||||
lglobal.@thisx = X coordinate of block executing the code
|
||||
lglobal.@thisy = Y coordinate of block executing the code
|
||||
lglobal.@links = Total number of blocks linked to this processors
|
||||
lglobal.@ipt = Execution speed of the processor in instructions per tick (60 ticks = 1 second)
|
||||
lglobal.@unitCount = Total number of types of unit content in the game; used with the lookup instruction
|
||||
lglobal.@blockCount = Total number of types of block content in the game; used with the lookup instruction
|
||||
lglobal.@itemCount = Total number of types of item content in the game; used with the lookup instruction
|
||||
lglobal.@liquidCount = Total number of types of liquid content in the game; used with the lookup instruction
|
||||
lglobal.@server = True if the code is running on a server or in singleplayer, false otherwise
|
||||
lglobal.@client = True if the code is running on a client connected to a server
|
||||
lglobal.@clientLocale = Locale of the client running the code. For example: en_US
|
||||
lglobal.@clientUnit = Unit of client running the code
|
||||
lglobal.@clientName = Player name of client running the code
|
||||
lglobal.@clientTeam = Team ID of client running the code
|
||||
lglobal.@clientMobile = True is the client running the code is on mobile, false otherwise
|
||||
|
||||
logic.nounitbuild = [red]Birim İnşası Yasak!
|
||||
|
||||
@@ -2450,3 +2490,6 @@ lenum.flushtext = Flush print buffer's content to marker, if applicable.\nIf fet
|
||||
lenum.texture = Texture name straight from game's texture atlas (using kebab-case naming style).\nIf printFlush is set to true, consumes text buffer content as text argument.
|
||||
lenum.texturesize = Size of texture in tiles. Zero value scales marker width to original texture's size.
|
||||
lenum.autoscale = Whether to scale marker corresponding to player's zoom level.
|
||||
lenum.posi = Indexed position, used for line and quad markers with index zero being the first position.
|
||||
lenum.uvi = Texture's position ranging from zero to one, used for quad markers.
|
||||
lenum.colori = Indexed position, used for line and quad markers with index zero being the first color.
|
||||
|
||||
@@ -497,6 +497,7 @@ editor.default = [lightgray]<За замовчуванням>
|
||||
details = Подробиці…
|
||||
edit = Змінити…
|
||||
variables = Змінні
|
||||
logic.globals = Built-in Variables
|
||||
editor.name = Ім’я:
|
||||
editor.spawn = Створити бойову одиницю
|
||||
editor.removeunit = Видалити бойову одиницю
|
||||
@@ -677,10 +678,11 @@ objective.commandmode.name = Режим командування
|
||||
objective.flag.name = Прапорець
|
||||
|
||||
marker.shapetext.name = Форма тексту
|
||||
marker.minimap.name = Мінімапа
|
||||
marker.point.name = Point
|
||||
marker.shape.name = Форма
|
||||
marker.text.name = Текст
|
||||
marker.line.name = Line
|
||||
marker.quad.name = Quad
|
||||
|
||||
marker.background = Фон
|
||||
marker.outline = Контур
|
||||
@@ -769,6 +771,7 @@ sector.missingresources = [scarlet]Недостатньо ресурсів у я
|
||||
sector.attacked = Сектор [accent]{0}[white] під атакою!
|
||||
sector.lost = Сектор [accent]{0}[white] втрачено!
|
||||
sector.capture = Sector [accent]{0}[white]Captured!
|
||||
sector.capture.current = Sector Captured!
|
||||
sector.changeicon = Змінити значок
|
||||
sector.noswitch.title = Неможливо переключити сектори
|
||||
sector.noswitch = Ви не можете змінювати сектори, поки поточний сектор піддається атаці.\n\nСектор: [accent]{0}[] на [accent]{1}[]
|
||||
@@ -1555,6 +1558,7 @@ block.inverted-sorter.name = Зворотний сортувальник
|
||||
block.message.name = Повідомлення
|
||||
block.reinforced-message.name = Посилене повідомлення
|
||||
block.world-message.name = Світове повідомлення
|
||||
block.world-switch.name = World Switch
|
||||
block.illuminator.name = Освітлювач
|
||||
block.overflow-gate.name = Надмірний затвор
|
||||
block.underflow-gate.name = Недостатній затвор
|
||||
@@ -2322,6 +2326,42 @@ lst.sync = Sync a variable across the network.\nOnly invoked 10 times a second a
|
||||
lst.makemarker = Create a new logic marker in the world.\nAn ID to identify this marker must be provided.\nMarkers currently limited to 20,000 per world.
|
||||
lst.setmarker = Set a property for a marker.\nThe ID used must be the same as in the Make Marker instruction.
|
||||
lst.localeprint = Add map locale property value to the text buffer.\nTo set map locale bundles in map editor, check [accent]Map Info > Locale Bundles[].\nIf client is a mobile device, tries to print a property ending in ".mobile" first.
|
||||
lglobal.false = 0
|
||||
lglobal.true = 1
|
||||
lglobal.null = null
|
||||
lglobal.@pi = The mathematical constant pi (3.141...)
|
||||
lglobal.@e = The mathematical constant e (2.718...)
|
||||
lglobal.@degToRad = Multiply by this number to convert degrees to radians
|
||||
lglobal.@radToDeg = Multiply by this number to convert radians to degrees
|
||||
lglobal.@time = Playtime of current save, in milliseconds
|
||||
lglobal.@tick = Playtime of current save, in ticks (1 second = 60 ticks)
|
||||
lglobal.@second = Playtime of current save, in seconds
|
||||
lglobal.@minute = Playtime of current save, in minutes
|
||||
lglobal.@waveNumber = Current wave number, if waves are enabled
|
||||
lglobal.@waveTime = Countdown timer for waves, in seconds
|
||||
lglobal.@mapw = Map width in tiles
|
||||
lglobal.@maph = Map height in tiles
|
||||
lglobal.sectionMap = Map
|
||||
lglobal.sectionGeneral = General
|
||||
lglobal.sectionNetwork = Network/Clientside [World Processor Only]
|
||||
lglobal.sectionProcessor = Processor
|
||||
lglobal.sectionLookup = Lookup
|
||||
lglobal.@this = The logic block executing the code
|
||||
lglobal.@thisx = X coordinate of block executing the code
|
||||
lglobal.@thisy = Y coordinate of block executing the code
|
||||
lglobal.@links = Total number of blocks linked to this processors
|
||||
lglobal.@ipt = Execution speed of the processor in instructions per tick (60 ticks = 1 second)
|
||||
lglobal.@unitCount = Total number of types of unit content in the game; used with the lookup instruction
|
||||
lglobal.@blockCount = Total number of types of block content in the game; used with the lookup instruction
|
||||
lglobal.@itemCount = Total number of types of item content in the game; used with the lookup instruction
|
||||
lglobal.@liquidCount = Total number of types of liquid content in the game; used with the lookup instruction
|
||||
lglobal.@server = True if the code is running on a server or in singleplayer, false otherwise
|
||||
lglobal.@client = True if the code is running on a client connected to a server
|
||||
lglobal.@clientLocale = Locale of the client running the code. For example: en_US
|
||||
lglobal.@clientUnit = Unit of client running the code
|
||||
lglobal.@clientName = Player name of client running the code
|
||||
lglobal.@clientTeam = Team ID of client running the code
|
||||
lglobal.@clientMobile = True is the client running the code is on mobile, false otherwise
|
||||
|
||||
logic.nounitbuild = [red]Будування за допомогою процесорів заборено.
|
||||
|
||||
@@ -2478,3 +2518,6 @@ lenum.flushtext = Flush print buffer's content to marker, if applicable.\nIf fet
|
||||
lenum.texture = Texture name straight from game's texture atlas (using kebab-case naming style).\nIf printFlush is set to true, consumes text buffer content as text argument.
|
||||
lenum.texturesize = Size of texture in tiles. Zero value scales marker width to original texture's size.
|
||||
lenum.autoscale = Whether to scale marker corresponding to player's zoom level.
|
||||
lenum.posi = Indexed position, used for line and quad markers with index zero being the first position.
|
||||
lenum.uvi = Texture's position ranging from zero to one, used for quad markers.
|
||||
lenum.colori = Indexed position, used for line and quad markers with index zero being the first color.
|
||||
|
||||
@@ -496,6 +496,7 @@ editor.default = [lightgray]<Mặc định>
|
||||
details = Chi tiết...
|
||||
edit = Chỉnh sửa...
|
||||
variables = Thông số
|
||||
logic.globals = Built-in Variables
|
||||
editor.name = Tên:
|
||||
editor.spawn = Thêm kẻ địch
|
||||
editor.removeunit = Xóa kẻ địch
|
||||
@@ -673,10 +674,11 @@ objective.destroycore.name = Phá huỷ căn cứ
|
||||
objective.commandmode.name = Chế độ ra lệnh
|
||||
objective.flag.name = Cờ
|
||||
marker.shapetext.name = Hình dạng văn bản
|
||||
marker.minimap.name = Bản đồ nhỏ
|
||||
marker.point.name = Point
|
||||
marker.shape.name = Hình dạng
|
||||
marker.text.name = Văn bản
|
||||
marker.line.name = Line
|
||||
marker.quad.name = Quad
|
||||
marker.background = Nền
|
||||
marker.outline = Đường viền
|
||||
objective.research = [accent]Nghiên cứu:\n[]{0}[lightgray]{1}
|
||||
@@ -761,6 +763,7 @@ sector.missingresources = [scarlet]Không đủ tài nguyên căn cứ
|
||||
sector.attacked = Khu vực [accent]{0}[white] đang bị tấn công!
|
||||
sector.lost = Khu vực [accent]{0}[white] đã mất!
|
||||
sector.capture = Sector [accent]{0}[white]Captured!
|
||||
sector.capture.current = Sector Captured!
|
||||
sector.changeicon = Thay đổi biểu tượng
|
||||
sector.noswitch.title = Không thể thay đổi sang khu vực khác
|
||||
sector.noswitch = Bạn không thể đổi sang khu vực khác khi một khu vực đang bị tấn công.\n\nKhu vực: [accent]{0}[] ở [accent]{1}[]
|
||||
@@ -1546,6 +1549,7 @@ block.inverted-sorter.name = Bộ lọc ngược
|
||||
block.message.name = Thông điệp
|
||||
block.reinforced-message.name = Thông điệp [Gia cố]
|
||||
block.world-message.name = Thông điệp thế giới
|
||||
block.world-switch.name = World Switch
|
||||
block.illuminator.name = Đèn
|
||||
block.overflow-gate.name = Cổng tràn
|
||||
block.underflow-gate.name = Cổng tràn ngược
|
||||
@@ -2296,6 +2300,42 @@ lst.sync = Đồng bộ giá trị biến qua mạng.\nChỉ gọi tối đa 10
|
||||
lst.makemarker = Create a new logic marker in the world.\nAn ID to identify this marker must be provided.\nMarkers currently limited to 20,000 per world.
|
||||
lst.setmarker = Set a property for a marker.\nThe ID used must be the same as in the Make Marker instruction.
|
||||
lst.localeprint = Add map locale property value to the text buffer.\nTo set map locale bundles in map editor, check [accent]Map Info > Locale Bundles[].\nIf client is a mobile device, tries to print a property ending in ".mobile" first.
|
||||
lglobal.false = 0
|
||||
lglobal.true = 1
|
||||
lglobal.null = null
|
||||
lglobal.@pi = The mathematical constant pi (3.141...)
|
||||
lglobal.@e = The mathematical constant e (2.718...)
|
||||
lglobal.@degToRad = Multiply by this number to convert degrees to radians
|
||||
lglobal.@radToDeg = Multiply by this number to convert radians to degrees
|
||||
lglobal.@time = Playtime of current save, in milliseconds
|
||||
lglobal.@tick = Playtime of current save, in ticks (1 second = 60 ticks)
|
||||
lglobal.@second = Playtime of current save, in seconds
|
||||
lglobal.@minute = Playtime of current save, in minutes
|
||||
lglobal.@waveNumber = Current wave number, if waves are enabled
|
||||
lglobal.@waveTime = Countdown timer for waves, in seconds
|
||||
lglobal.@mapw = Map width in tiles
|
||||
lglobal.@maph = Map height in tiles
|
||||
lglobal.sectionMap = Map
|
||||
lglobal.sectionGeneral = General
|
||||
lglobal.sectionNetwork = Network/Clientside [World Processor Only]
|
||||
lglobal.sectionProcessor = Processor
|
||||
lglobal.sectionLookup = Lookup
|
||||
lglobal.@this = The logic block executing the code
|
||||
lglobal.@thisx = X coordinate of block executing the code
|
||||
lglobal.@thisy = Y coordinate of block executing the code
|
||||
lglobal.@links = Total number of blocks linked to this processors
|
||||
lglobal.@ipt = Execution speed of the processor in instructions per tick (60 ticks = 1 second)
|
||||
lglobal.@unitCount = Total number of types of unit content in the game; used with the lookup instruction
|
||||
lglobal.@blockCount = Total number of types of block content in the game; used with the lookup instruction
|
||||
lglobal.@itemCount = Total number of types of item content in the game; used with the lookup instruction
|
||||
lglobal.@liquidCount = Total number of types of liquid content in the game; used with the lookup instruction
|
||||
lglobal.@server = True if the code is running on a server or in singleplayer, false otherwise
|
||||
lglobal.@client = True if the code is running on a client connected to a server
|
||||
lglobal.@clientLocale = Locale of the client running the code. For example: en_US
|
||||
lglobal.@clientUnit = Unit of client running the code
|
||||
lglobal.@clientName = Player name of client running the code
|
||||
lglobal.@clientTeam = Team ID of client running the code
|
||||
lglobal.@clientMobile = True is the client running the code is on mobile, false otherwise
|
||||
|
||||
logic.nounitbuild = [red]Lô-gíc xây dựng đơn vị không được phép ở đây.
|
||||
|
||||
@@ -2451,3 +2491,6 @@ lenum.flushtext = Flush print buffer's content to marker, if applicable.\nIf fet
|
||||
lenum.texture = Texture name straight from game's texture atlas (using kebab-case naming style).\nIf printFlush is set to true, consumes text buffer content as text argument.
|
||||
lenum.texturesize = Size of texture in tiles. Zero value scales marker width to original texture's size.
|
||||
lenum.autoscale = Whether to scale marker corresponding to player's zoom level.
|
||||
lenum.posi = Indexed position, used for line and quad markers with index zero being the first position.
|
||||
lenum.uvi = Texture's position ranging from zero to one, used for quad markers.
|
||||
lenum.colori = Indexed position, used for line and quad markers with index zero being the first color.
|
||||
|
||||
@@ -498,6 +498,7 @@ editor.default = [lightgray]<默认>
|
||||
details = 详情…
|
||||
edit = 编辑…
|
||||
variables = 变量
|
||||
logic.globals = Built-in Variables
|
||||
editor.name = 名称:
|
||||
editor.spawn = 生成单位
|
||||
editor.removeunit = 移除单位
|
||||
@@ -678,10 +679,11 @@ objective.commandmode.name = 指挥模式
|
||||
objective.flag.name = 标签
|
||||
|
||||
marker.shapetext.name = 带形状文本
|
||||
marker.minimap.name = 小地图
|
||||
marker.point.name = Point
|
||||
marker.shape.name = 形状
|
||||
marker.text.name = 文本
|
||||
marker.line.name = Line
|
||||
marker.quad.name = Quad
|
||||
|
||||
marker.background = 背景
|
||||
marker.outline = 轮廓
|
||||
@@ -770,6 +772,7 @@ sector.missingresources = [scarlet]建造核心所需资源不足
|
||||
sector.attacked = 区块[accent]{0}[white]受到攻击!
|
||||
sector.lost = 区块[accent]{0}[white]已丢失!
|
||||
sector.capture = Sector [accent]{0}[white]Captured!
|
||||
sector.capture.current = Sector Captured!
|
||||
sector.changeicon = 更改图标
|
||||
sector.noswitch.title = 无法切换区块
|
||||
sector.noswitch = 你无法在当前区块遭受攻击时切换区块。\n\n区块:[accent]{0}[]位于[accent]{1}[]
|
||||
@@ -1556,6 +1559,7 @@ block.inverted-sorter.name = 反向分类器
|
||||
block.message.name = 信息板
|
||||
block.reinforced-message.name = 强化信息板
|
||||
block.world-message.name = 世界信息板
|
||||
block.world-switch.name = World Switch
|
||||
block.illuminator.name = 照明器
|
||||
block.overflow-gate.name = 溢流门
|
||||
block.underflow-gate.name = 反向溢流门
|
||||
@@ -1927,7 +1931,7 @@ onset.commandmode = 按住[accent]shift[]键进入[accent]指挥模式[]。\n按
|
||||
onset.commandmode.mobile = 点击左下角的[accent]指挥[]进入[accent]指挥模式[]。\n按住屏幕,[accent]拖动[]框选单位。\n[accent]点击[]指挥所选单位移动或攻击。
|
||||
aegis.tungsten = Tungsten can be mined using an [accent]impact drill[].\nThis structure requires [accent]water[] and [accent]power[].
|
||||
|
||||
split.pickup = 核心单位可以拾取一些方块。\n拾取这个[accent]强化容器[]并将其放到[accent]载荷装载器[]中。\n(默认使用[拾取,]放下载荷)
|
||||
split.pickup = 核心单位可以拾取一些方块。\n拾取这个[accent]强化容器[]并将其放到[accent]载荷装载器[]中。\n(默认使用快捷键“[”拾取载荷,“]“放下载荷)
|
||||
split.pickup.mobile = 核心单位可以拾取一些方块。\n拾取这个[accent]强化容器[]并将其放到[accent]载荷装载器[]中。\n(长按以拾取或放下载荷)
|
||||
split.acquire = 你需要获取钨来生产单位。
|
||||
split.build = 单位必须被运输到墙的另一侧。\n在墙壁两侧各放置一个[accent]载荷质量驱动器[]。\n点击其中一个,然后点击另一个以连接它们。
|
||||
@@ -2321,6 +2325,42 @@ lst.sync = Sync a variable across the network.\nOnly invoked 10 times a second a
|
||||
lst.makemarker = Create a new logic marker in the world.\nAn ID to identify this marker must be provided.\nMarkers currently limited to 20,000 per world.
|
||||
lst.setmarker = Set a property for a marker.\nThe ID used must be the same as in the Make Marker instruction.
|
||||
lst.localeprint = Add map locale property value to the text buffer.\nTo set map locale bundles in map editor, check [accent]Map Info > Locale Bundles[].\nIf client is a mobile device, tries to print a property ending in ".mobile" first.
|
||||
lglobal.false = 0
|
||||
lglobal.true = 1
|
||||
lglobal.null = null
|
||||
lglobal.@pi = The mathematical constant pi (3.141...)
|
||||
lglobal.@e = The mathematical constant e (2.718...)
|
||||
lglobal.@degToRad = Multiply by this number to convert degrees to radians
|
||||
lglobal.@radToDeg = Multiply by this number to convert radians to degrees
|
||||
lglobal.@time = Playtime of current save, in milliseconds
|
||||
lglobal.@tick = Playtime of current save, in ticks (1 second = 60 ticks)
|
||||
lglobal.@second = Playtime of current save, in seconds
|
||||
lglobal.@minute = Playtime of current save, in minutes
|
||||
lglobal.@waveNumber = Current wave number, if waves are enabled
|
||||
lglobal.@waveTime = Countdown timer for waves, in seconds
|
||||
lglobal.@mapw = Map width in tiles
|
||||
lglobal.@maph = Map height in tiles
|
||||
lglobal.sectionMap = Map
|
||||
lglobal.sectionGeneral = General
|
||||
lglobal.sectionNetwork = Network/Clientside [World Processor Only]
|
||||
lglobal.sectionProcessor = Processor
|
||||
lglobal.sectionLookup = Lookup
|
||||
lglobal.@this = The logic block executing the code
|
||||
lglobal.@thisx = X coordinate of block executing the code
|
||||
lglobal.@thisy = Y coordinate of block executing the code
|
||||
lglobal.@links = Total number of blocks linked to this processors
|
||||
lglobal.@ipt = Execution speed of the processor in instructions per tick (60 ticks = 1 second)
|
||||
lglobal.@unitCount = Total number of types of unit content in the game; used with the lookup instruction
|
||||
lglobal.@blockCount = Total number of types of block content in the game; used with the lookup instruction
|
||||
lglobal.@itemCount = Total number of types of item content in the game; used with the lookup instruction
|
||||
lglobal.@liquidCount = Total number of types of liquid content in the game; used with the lookup instruction
|
||||
lglobal.@server = True if the code is running on a server or in singleplayer, false otherwise
|
||||
lglobal.@client = True if the code is running on a client connected to a server
|
||||
lglobal.@clientLocale = Locale of the client running the code. For example: en_US
|
||||
lglobal.@clientUnit = Unit of client running the code
|
||||
lglobal.@clientName = Player name of client running the code
|
||||
lglobal.@clientTeam = Team ID of client running the code
|
||||
lglobal.@clientMobile = True is the client running the code is on mobile, false otherwise
|
||||
|
||||
logic.nounitbuild = [red]此处不允许处理器操控单位去建设
|
||||
|
||||
@@ -2477,3 +2517,6 @@ lenum.flushtext = Flush print buffer's content to marker, if applicable.\nIf fet
|
||||
lenum.texture = Texture name straight from game's texture atlas (using kebab-case naming style).\nIf printFlush is set to true, consumes text buffer content as text argument.
|
||||
lenum.texturesize = Size of texture in tiles. Zero value scales marker width to original texture's size.
|
||||
lenum.autoscale = Whether to scale marker corresponding to player's zoom level.
|
||||
lenum.posi = Indexed position, used for line and quad markers with index zero being the first position.
|
||||
lenum.uvi = Texture's position ranging from zero to one, used for quad markers.
|
||||
lenum.colori = Indexed position, used for line and quad markers with index zero being the first color.
|
||||
|
||||
@@ -495,6 +495,7 @@ editor.default = [lightgray](預設)
|
||||
details = 詳細資訊……
|
||||
edit = 編輯……
|
||||
variables = 變數
|
||||
logic.globals = Built-in Variables
|
||||
editor.name = 名稱:
|
||||
editor.spawn = 重生單位
|
||||
editor.removeunit = 移除單位
|
||||
@@ -675,10 +676,11 @@ objective.commandmode.name = 指揮模式
|
||||
objective.flag.name = 全局Flag
|
||||
|
||||
marker.shapetext.name = 稜框+文字標示
|
||||
marker.minimap.name = 小地圖標示
|
||||
marker.point.name = Point
|
||||
marker.shape.name = 稜框標示
|
||||
marker.text.name = 文字標示
|
||||
marker.line.name = Line
|
||||
marker.quad.name = Quad
|
||||
|
||||
marker.background = 反黑背景
|
||||
marker.outline = 描邊
|
||||
@@ -766,6 +768,7 @@ sector.missingresources = [scarlet]核心資源不足
|
||||
sector.attacked = 地區 [accent]{0}[white] 遭受攻擊!
|
||||
sector.lost = 地區 [accent]{0}[white] 戰敗!
|
||||
sector.capture = Sector [accent]{0}[white]Captured!
|
||||
sector.capture.current = Sector Captured!
|
||||
sector.changeicon = 更改圖標
|
||||
sector.noswitch.title = 無法切換地區
|
||||
sector.noswitch = 當前地區遭受攻擊時,無法切換地區\n\n地區: [accent]{0}[] 於 [accent]{1}[]
|
||||
@@ -1552,6 +1555,7 @@ block.inverted-sorter.name = 反向分類器
|
||||
block.message.name = 訊息板
|
||||
block.reinforced-message.name = Reinforced Message
|
||||
block.world-message.name = World Message
|
||||
block.world-switch.name = World Switch
|
||||
block.illuminator.name = 照明燈
|
||||
block.overflow-gate.name = 溢流器
|
||||
block.underflow-gate.name = 反向溢流器
|
||||
@@ -2307,6 +2311,42 @@ lst.sync = Sync a variable across the network.\nOnly invoked 10 times a second a
|
||||
lst.makemarker = Create a new logic marker in the world.\nAn ID to identify this marker must be provided.\nMarkers currently limited to 20,000 per world.
|
||||
lst.setmarker = Set a property for a marker.\nThe ID used must be the same as in the Make Marker instruction.
|
||||
lst.localeprint = Add map locale property value to the text buffer.\nTo set map locale bundles in map editor, check [accent]Map Info > Locale Bundles[].\nIf client is a mobile device, tries to print a property ending in ".mobile" first.
|
||||
lglobal.false = 0
|
||||
lglobal.true = 1
|
||||
lglobal.null = null
|
||||
lglobal.@pi = The mathematical constant pi (3.141...)
|
||||
lglobal.@e = The mathematical constant e (2.718...)
|
||||
lglobal.@degToRad = Multiply by this number to convert degrees to radians
|
||||
lglobal.@radToDeg = Multiply by this number to convert radians to degrees
|
||||
lglobal.@time = Playtime of current save, in milliseconds
|
||||
lglobal.@tick = Playtime of current save, in ticks (1 second = 60 ticks)
|
||||
lglobal.@second = Playtime of current save, in seconds
|
||||
lglobal.@minute = Playtime of current save, in minutes
|
||||
lglobal.@waveNumber = Current wave number, if waves are enabled
|
||||
lglobal.@waveTime = Countdown timer for waves, in seconds
|
||||
lglobal.@mapw = Map width in tiles
|
||||
lglobal.@maph = Map height in tiles
|
||||
lglobal.sectionMap = Map
|
||||
lglobal.sectionGeneral = General
|
||||
lglobal.sectionNetwork = Network/Clientside [World Processor Only]
|
||||
lglobal.sectionProcessor = Processor
|
||||
lglobal.sectionLookup = Lookup
|
||||
lglobal.@this = The logic block executing the code
|
||||
lglobal.@thisx = X coordinate of block executing the code
|
||||
lglobal.@thisy = Y coordinate of block executing the code
|
||||
lglobal.@links = Total number of blocks linked to this processors
|
||||
lglobal.@ipt = Execution speed of the processor in instructions per tick (60 ticks = 1 second)
|
||||
lglobal.@unitCount = Total number of types of unit content in the game; used with the lookup instruction
|
||||
lglobal.@blockCount = Total number of types of block content in the game; used with the lookup instruction
|
||||
lglobal.@itemCount = Total number of types of item content in the game; used with the lookup instruction
|
||||
lglobal.@liquidCount = Total number of types of liquid content in the game; used with the lookup instruction
|
||||
lglobal.@server = True if the code is running on a server or in singleplayer, false otherwise
|
||||
lglobal.@client = True if the code is running on a client connected to a server
|
||||
lglobal.@clientLocale = Locale of the client running the code. For example: en_US
|
||||
lglobal.@clientUnit = Unit of client running the code
|
||||
lglobal.@clientName = Player name of client running the code
|
||||
lglobal.@clientTeam = Team ID of client running the code
|
||||
lglobal.@clientMobile = True is the client running the code is on mobile, false otherwise
|
||||
|
||||
logic.nounitbuild = [red]單位建造邏輯已被禁止。
|
||||
|
||||
@@ -2463,3 +2503,6 @@ lenum.flushtext = Flush print buffer's content to marker, if applicable.\nIf fet
|
||||
lenum.texture = Texture name straight from game's texture atlas (using kebab-case naming style).\nIf printFlush is set to true, consumes text buffer content as text argument.
|
||||
lenum.texturesize = Size of texture in tiles. Zero value scales marker width to original texture's size.
|
||||
lenum.autoscale = Whether to scale marker corresponding to player's zoom level.
|
||||
lenum.posi = Indexed position, used for line and quad markers with index zero being the first position.
|
||||
lenum.uvi = Texture's position ranging from zero to one, used for quad markers.
|
||||
lenum.colori = Indexed position, used for line and quad markers with index zero being the first color.
|
||||
|
||||
@@ -164,3 +164,4 @@ summoner
|
||||
OpalSoPL
|
||||
BalaM314
|
||||
Redstonneur1256
|
||||
ApsZoldat
|
||||
|
||||
Binary file not shown.
@@ -2,7 +2,6 @@ uniform sampler2D u_texture;
|
||||
|
||||
uniform float u_time;
|
||||
uniform float u_progress;
|
||||
uniform vec4 u_color;
|
||||
uniform vec2 u_uv;
|
||||
uniform vec2 u_uv2;
|
||||
uniform vec2 u_texsize;
|
||||
@@ -14,8 +13,7 @@ void main(){
|
||||
vec2 coords = (v_texCoords - u_uv) / (u_uv2 - u_uv);
|
||||
vec2 v = vec2(1.0/u_texsize.x, 1.0/u_texsize.y);
|
||||
|
||||
vec4 c = texture2D(u_texture, v_texCoords);
|
||||
|
||||
vec4 c = texture2D(u_texture, v_texCoords);
|
||||
c.a *= u_progress;
|
||||
c.a *= step(abs(sin(coords.y*3.0 + u_time)), 0.9);
|
||||
|
||||
|
||||
@@ -69,6 +69,7 @@ public abstract class ClientLauncher extends ApplicationCore implements Platform
|
||||
return (Float.isNaN(result) || Float.isInfinite(result)) ? 1f : Mathf.clamp(result, 0.0001f, 60f / 10f);
|
||||
});
|
||||
|
||||
UI.loadColors();
|
||||
batch = new SortedSpriteBatch();
|
||||
assets = new AssetManager();
|
||||
assets.setLoader(Texture.class, "." + mapExtension, new MapPreviewLoader());
|
||||
|
||||
@@ -19,8 +19,24 @@ public class UnitGroup{
|
||||
public int collisionLayer;
|
||||
public volatile float[] positions, originalPositions;
|
||||
public volatile boolean valid;
|
||||
public long lastSpeedUpdate = -1;
|
||||
public float minSpeed = 999999f;
|
||||
|
||||
public void updateMinSpeed(){
|
||||
if(lastSpeedUpdate == Vars.state.updateId) return;
|
||||
|
||||
lastSpeedUpdate = Vars.state.updateId;
|
||||
minSpeed = 999999f;
|
||||
|
||||
for(Unit unit : units){
|
||||
//don't factor in the floor speed multiplier
|
||||
Floor on = unit.isFlying() ? Blocks.air.asFloor() : unit.floorOn();
|
||||
minSpeed = Math.min(unit.speed() / on.speedMultiplier, minSpeed);
|
||||
}
|
||||
|
||||
if(Float.isInfinite(minSpeed) || Float.isNaN(minSpeed)) minSpeed = 999999f;
|
||||
}
|
||||
|
||||
public void calculateFormation(Vec2 dest, int collisionLayer){
|
||||
this.collisionLayer = collisionLayer;
|
||||
|
||||
@@ -33,19 +49,16 @@ public class UnitGroup{
|
||||
cy /= units.size;
|
||||
positions = new float[units.size * 2];
|
||||
|
||||
|
||||
//all positions are relative to the center
|
||||
for(int i = 0; i < units.size; i ++){
|
||||
Unit unit = units.get(i);
|
||||
positions[i * 2] = unit.x - cx;
|
||||
positions[i * 2 + 1] = unit.y - cy;
|
||||
unit.command().groupIndex = i;
|
||||
|
||||
//don't factor in the floor speed multiplier
|
||||
Floor on = unit.isFlying() ? Blocks.air.asFloor() : unit.floorOn();
|
||||
minSpeed = Math.min(unit.speed() / on.speedMultiplier, minSpeed);
|
||||
}
|
||||
|
||||
if(Float.isInfinite(minSpeed) || Float.isNaN(minSpeed)) minSpeed = 999999f;
|
||||
updateMinSpeed();
|
||||
|
||||
//run on new thread to prevent stutter
|
||||
Vars.mainExecutor.submit(() -> {
|
||||
|
||||
@@ -148,6 +148,10 @@ public class CommandAI extends AIController{
|
||||
}
|
||||
}
|
||||
|
||||
if(group != null){
|
||||
group.updateMinSpeed();
|
||||
}
|
||||
|
||||
if(!net.client() && command == UnitCommand.enterPayloadCommand && unit.buildOn() != null && (targetPos == null || (world.buildWorld(targetPos.x, targetPos.y) != null && world.buildWorld(targetPos.x, targetPos.y) == unit.buildOn()))){
|
||||
var build = unit.buildOn();
|
||||
tmpPayload.unit = unit;
|
||||
|
||||
@@ -2,6 +2,8 @@ package mindustry.ai.types;
|
||||
|
||||
import arc.math.*;
|
||||
import arc.util.*;
|
||||
import mindustry.*;
|
||||
import mindustry.entities.*;
|
||||
import mindustry.entities.units.*;
|
||||
import mindustry.gen.*;
|
||||
|
||||
@@ -29,6 +31,11 @@ public class MissileAI extends AIController{
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Teamc target(float x, float y, float range, boolean air, boolean ground){
|
||||
return Units.closestTarget(unit.team, x, y, range, u -> u.checkTarget(air, ground), t -> ground && (!t.block.underBullets || (shooter != null && t == Vars.world.buildWorld(shooter.aimX, shooter.aimY))));
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean retarget(){
|
||||
//more frequent retarget due to high speed. TODO won't this lag?
|
||||
|
||||
@@ -2433,6 +2433,7 @@ public class Blocks{
|
||||
itemDuration = 140f;
|
||||
ambientSound = Sounds.pulse;
|
||||
ambientSoundVolume = 0.07f;
|
||||
liquidCapacity = 60f;
|
||||
|
||||
consumePower(25f);
|
||||
consumeItem(Items.blastCompound);
|
||||
@@ -4566,6 +4567,7 @@ public class Blocks{
|
||||
loopSoundVolume = 0.6f;
|
||||
deathSound = Sounds.largeExplosion;
|
||||
targetAir = false;
|
||||
targetUnderBlocks = false;
|
||||
|
||||
fogRadius = 6f;
|
||||
|
||||
@@ -5500,23 +5502,6 @@ public class Blocks{
|
||||
);
|
||||
}};
|
||||
|
||||
mechRefabricator = new Reconstructor("mech-refabricator"){{
|
||||
requirements(Category.units, with(Items.beryllium, 250, Items.tungsten, 120, Items.silicon, 150));
|
||||
regionSuffix = "-dark";
|
||||
|
||||
size = 3;
|
||||
consumePower(2.5f);
|
||||
consumeLiquid(Liquids.hydrogen, 3f / 60f);
|
||||
consumeItems(with(Items.silicon, 50, Items.tungsten, 40));
|
||||
|
||||
constructTime = 60f * 45f;
|
||||
researchCostMultiplier = 0.75f;
|
||||
|
||||
upgrades.addAll(
|
||||
new UnitType[]{UnitTypes.merui, UnitTypes.cleroi}
|
||||
);
|
||||
}};
|
||||
|
||||
shipRefabricator = new Reconstructor("ship-refabricator"){{
|
||||
requirements(Category.units, with(Items.beryllium, 200, Items.tungsten, 100, Items.silicon, 150, Items.oxide, 40));
|
||||
regionSuffix = "-dark";
|
||||
@@ -5535,6 +5520,23 @@ public class Blocks{
|
||||
researchCost = with(Items.beryllium, 500, Items.tungsten, 200, Items.silicon, 300, Items.oxide, 80);
|
||||
}};
|
||||
|
||||
mechRefabricator = new Reconstructor("mech-refabricator"){{
|
||||
requirements(Category.units, with(Items.beryllium, 250, Items.tungsten, 120, Items.silicon, 150));
|
||||
regionSuffix = "-dark";
|
||||
|
||||
size = 3;
|
||||
consumePower(2.5f);
|
||||
consumeLiquid(Liquids.hydrogen, 3f / 60f);
|
||||
consumeItems(with(Items.silicon, 50, Items.tungsten, 40));
|
||||
|
||||
constructTime = 60f * 45f;
|
||||
researchCostMultiplier = 0.75f;
|
||||
|
||||
upgrades.addAll(
|
||||
new UnitType[]{UnitTypes.merui, UnitTypes.cleroi}
|
||||
);
|
||||
}};
|
||||
|
||||
//yes very silly name
|
||||
primeRefabricator = new Reconstructor("prime-refabricator"){{
|
||||
requirements(Category.units, with(Items.thorium, 250, Items.oxide, 200, Items.tungsten, 200, Items.silicon, 400));
|
||||
|
||||
@@ -4063,6 +4063,8 @@ public class UnitTypes{
|
||||
isEnemy = false;
|
||||
envDisabled = 0;
|
||||
|
||||
range = 60f;
|
||||
faceTarget = true;
|
||||
targetPriority = -2;
|
||||
lowAltitude = false;
|
||||
mineWalls = true;
|
||||
@@ -4127,8 +4129,10 @@ public class UnitTypes{
|
||||
isEnemy = false;
|
||||
envDisabled = 0;
|
||||
|
||||
range = 60f;
|
||||
targetPriority = -2;
|
||||
lowAltitude = false;
|
||||
faceTarget = true;
|
||||
mineWalls = true;
|
||||
mineFloor = false;
|
||||
mineHardnessScaling = false;
|
||||
@@ -4204,6 +4208,8 @@ public class UnitTypes{
|
||||
isEnemy = false;
|
||||
envDisabled = 0;
|
||||
|
||||
range = 65f;
|
||||
faceTarget = true;
|
||||
targetPriority = -2;
|
||||
lowAltitude = false;
|
||||
mineWalls = true;
|
||||
|
||||
@@ -86,11 +86,12 @@ public class GameState{
|
||||
}
|
||||
|
||||
public boolean isPaused(){
|
||||
return is(State.paused);
|
||||
return state == State.paused;
|
||||
}
|
||||
|
||||
/** @return whether there is an unpaused game in progress. */
|
||||
public boolean isPlaying(){
|
||||
return (state == State.playing) || (state == State.paused && !isPaused());
|
||||
return state == State.playing;
|
||||
}
|
||||
|
||||
/** @return whether the current state is *not* the menu. */
|
||||
|
||||
@@ -357,7 +357,8 @@ public class Logic implements ApplicationListener{
|
||||
|
||||
//map is over, no more world processor objective stuff
|
||||
state.rules.disableWorldProcessors = true;
|
||||
state.rules.objectives.clear();
|
||||
|
||||
Call.clearObjectives();
|
||||
|
||||
//save, just in case
|
||||
if(!headless && !net.client()){
|
||||
@@ -460,9 +461,6 @@ public class Logic implements ApplicationListener{
|
||||
|
||||
if(!state.isEditor()){
|
||||
state.rules.objectives.update();
|
||||
if(state.rules.objectives.checkChanged() && net.server()){
|
||||
Call.setObjectives(state.rules.objectives);
|
||||
}
|
||||
}
|
||||
|
||||
if(state.rules.waves && state.rules.waveTimer && !state.gameOver){
|
||||
|
||||
@@ -340,15 +340,23 @@ public class NetClient implements ApplicationListener{
|
||||
state.rules = rules;
|
||||
}
|
||||
|
||||
//NOTE: avoid using this, runs into packet/buffer size limitations
|
||||
@Remote(variants = Variant.both)
|
||||
public static void setObjectives(MapObjectives executor){
|
||||
state.rules.objectives = executor;
|
||||
}
|
||||
|
||||
@Remote(called = Loc.server)
|
||||
public static void objectiveCompleted(String[] flagsRemoved, String[] flagsAdded){
|
||||
state.rules.objectiveFlags.removeAll(flagsRemoved);
|
||||
state.rules.objectiveFlags.addAll(flagsAdded);
|
||||
@Remote(variants = Variant.both, called = Loc.server)
|
||||
public static void clearObjectives(){
|
||||
state.rules.objectives.clear();
|
||||
}
|
||||
|
||||
@Remote(variants = Variant.both, called = Loc.server)
|
||||
public static void completeObjective(int index){
|
||||
var obj = state.rules.objectives.get(index);
|
||||
if(obj != null){
|
||||
obj.done();
|
||||
}
|
||||
}
|
||||
|
||||
@Remote(variants = Variant.both)
|
||||
|
||||
@@ -372,18 +372,20 @@ public class Renderer implements ApplicationListener{
|
||||
});
|
||||
}
|
||||
|
||||
float scaleFactor = 4f / renderer.getDisplayScale();
|
||||
|
||||
//draw objective markers
|
||||
state.rules.objectives.eachRunning(obj -> {
|
||||
for(var marker : obj.markers){
|
||||
if(!marker.minimap){
|
||||
marker.drawWorld();
|
||||
if(marker.world){
|
||||
marker.draw(marker.autoscale ? scaleFactor : 1);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
for(var marker : state.markers){
|
||||
if(!marker.isHidden() && !marker.minimap){
|
||||
marker.drawWorld();
|
||||
if(marker.world){
|
||||
marker.draw(marker.autoscale ? scaleFactor : 1);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -101,8 +101,6 @@ public class UI implements ApplicationListener, Loadable{
|
||||
|
||||
@Override
|
||||
public void loadSync(){
|
||||
loadColors();
|
||||
|
||||
Fonts.outline.getData().markupEnabled = true;
|
||||
Fonts.def.getData().markupEnabled = true;
|
||||
Fonts.def.setOwnsTexture(false);
|
||||
@@ -281,7 +279,7 @@ public class UI implements ApplicationListener, Loadable{
|
||||
|
||||
public void showTextInput(String titleText, String text, int textLength, String def, boolean numbers, boolean allowEmpty, Cons<String> confirmed, Runnable closed){
|
||||
if(mobile){
|
||||
var description = text;
|
||||
var description = (text.startsWith("@") ? Core.bundle.get(text.substring(1)) : text);
|
||||
var empty = allowEmpty;
|
||||
Core.input.getTextInput(new TextInput(){{
|
||||
this.title = (titleText.startsWith("@") ? Core.bundle.get(titleText.substring(1)) : titleText);
|
||||
|
||||
@@ -115,6 +115,7 @@ public abstract class UnlockableContent extends MappableContent{
|
||||
var result = Pixmaps.outline(base, outlineColor, outlineRadius);
|
||||
Drawf.checkBleed(result);
|
||||
packer.add(page, regName, result);
|
||||
result.dispose();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -126,6 +127,7 @@ public abstract class UnlockableContent extends MappableContent{
|
||||
var result = Pixmaps.outline(base, outlineColor, outlineRadius);
|
||||
Drawf.checkBleed(result);
|
||||
packer.add(PageType.main, name, result);
|
||||
result.dispose();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -301,6 +301,14 @@ public class MapEditor{
|
||||
if(previous.in(px, py)){
|
||||
tiles.set(x, y, previous.getn(px, py));
|
||||
Tile tile = tiles.getn(x, y);
|
||||
|
||||
Object config = null;
|
||||
|
||||
//fetch the old config first, configs can be relative to block position (tileX/tileY) before those are reassigned
|
||||
if(tile.build != null && tile.isCenter()){
|
||||
config = tile.build.config();
|
||||
}
|
||||
|
||||
tile.x = (short)x;
|
||||
tile.y = (short)y;
|
||||
|
||||
@@ -309,9 +317,12 @@ public class MapEditor{
|
||||
tile.build.y = y * tilesize + tile.block().offset;
|
||||
|
||||
//shift links to account for map resize
|
||||
Object config = tile.build.config();
|
||||
if(config != null){
|
||||
Object out = BuildPlan.pointConfig(tile.block(), config, p -> p.sub(offsetX, offsetY));
|
||||
Object out = BuildPlan.pointConfig(tile.block(), config, p -> {
|
||||
if(!tile.build.block.ignoreResizeConfig){
|
||||
p.sub(offsetX, offsetY);
|
||||
}
|
||||
});
|
||||
if(out != config){
|
||||
tile.build.configureAny(out);
|
||||
}
|
||||
|
||||
@@ -91,6 +91,8 @@ public class MapLocalesDialog extends BaseDialog{
|
||||
t.button("@edit", Icon.edit, this::editDialog).size(210f, 64f);
|
||||
}).growX();
|
||||
|
||||
resized(this::buildMain);
|
||||
|
||||
buttons.button("?", () -> ui.showInfo("@locales.info")).size(60f, 64f).uniform();
|
||||
|
||||
shown(this::setup);
|
||||
@@ -158,7 +160,7 @@ public class MapLocalesDialog extends BaseDialog{
|
||||
|
||||
saved = false;
|
||||
buildMain();
|
||||
}).padTop(10f).size(400f, 50f).fillX().row();
|
||||
}).padTop(10f).size(cardWidth, 50f).fillX().row();
|
||||
}).right();
|
||||
}
|
||||
|
||||
@@ -184,7 +186,7 @@ public class MapLocalesDialog extends BaseDialog{
|
||||
|
||||
selectedLocale = name;
|
||||
buildTables();
|
||||
}).update(b -> b.setChecked(selectedLocale.equals(name))).size(300f, 50f);
|
||||
}).update(b -> b.setChecked(selectedLocale.equals(name))).width(200f).minHeight(50f);
|
||||
p.button(Icon.edit, Styles.flati, () -> localeEditDialog(name)).size(50f);
|
||||
p.button(Icon.trash, Styles.flati, () -> ui.showConfirm("@confirm", "@locales.deletelocale", () -> {
|
||||
locales.remove(name);
|
||||
@@ -196,7 +198,7 @@ public class MapLocalesDialog extends BaseDialog{
|
||||
}
|
||||
}
|
||||
}).row();
|
||||
langs.button("@add", Icon.add, this::addLocaleDialog).padTop(10f).width(400f);
|
||||
langs.button("@add", Icon.add, this::addLocaleDialog).padTop(10f).width(250f);
|
||||
}
|
||||
|
||||
private void buildMain(){
|
||||
@@ -206,7 +208,7 @@ public class MapLocalesDialog extends BaseDialog{
|
||||
|
||||
main.image().color(Pal.gray).height(3f).growX().expandY().top().row();
|
||||
main.pane(p -> {
|
||||
int cols = Math.max(1, (Core.graphics.getWidth() - 630) / ((int)cardWidth + 10));
|
||||
int cols = Math.max(1, (int)((Core.graphics.getWidth() / Scl.scl() - 410f) / cardWidth) - 1);
|
||||
if(props.size == 0){
|
||||
main.add("@empty").center().row();
|
||||
return;
|
||||
@@ -512,7 +514,7 @@ public class MapLocalesDialog extends BaseDialog{
|
||||
|
||||
propView.image().color(Pal.gray).height(3f).fillX().top().row();
|
||||
propView.pane(p -> {
|
||||
int cols = (Core.graphics.getWidth() - 100) / ((int)cardWidth + 10);
|
||||
int cols = Math.max(1, (int)((Core.graphics.getWidth() / Scl.scl() - 100f) / cardWidth));
|
||||
if(cols == 0){
|
||||
propView.add("@empty").center().row();
|
||||
return;
|
||||
@@ -720,7 +722,9 @@ public class MapLocalesDialog extends BaseDialog{
|
||||
if(!locales.containsKey(key)) return "";
|
||||
|
||||
for(var prop : locales.get(key).entries()){
|
||||
data.append(prop.key).append(" = ").append(prop.value).append("\n");
|
||||
// Convert \n in plain text to \\n, then convert newlines to \n
|
||||
data.append(prop.key).append(" = ").append(prop.value
|
||||
.replace("\\n", "\\\\n").replace("\n", "\\n")).append("\n");
|
||||
}
|
||||
|
||||
return data.toString();
|
||||
@@ -738,7 +742,9 @@ public class MapLocalesDialog extends BaseDialog{
|
||||
}else{
|
||||
int sepIndex = line.indexOf(" = ");
|
||||
if(sepIndex != -1 && !currentLocale.isEmpty()){
|
||||
bundles.get(currentLocale).put(line.substring(0, sepIndex), line.substring(sepIndex + 3));
|
||||
// Convert \n in file to newlines in text, then revert newlines with escape characters
|
||||
bundles.get(currentLocale).put(line.substring(0, sepIndex), line.substring(sepIndex + 3)
|
||||
.replace("\\n", "\n").replace("\\\n", "\\n"));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -752,7 +758,9 @@ public class MapLocalesDialog extends BaseDialog{
|
||||
for(var line : data.split("\\r?\\n|\\r")){
|
||||
int sepIndex = line.indexOf(" = ");
|
||||
if(sepIndex != -1){
|
||||
map.put(line.substring(0, sepIndex), line.substring(sepIndex + 3));
|
||||
// Convert \n in file to newlines in text, then revert newlines with escape characters
|
||||
map.put(line.substring(0, sepIndex), line.substring(sepIndex + 3)
|
||||
.replace("\\n", "\n").replace("\\\n", "\\n"));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -246,6 +246,38 @@ public class MapObjectivesDialog extends BaseDialog{
|
||||
show();
|
||||
}});
|
||||
|
||||
setInterpreter(Vertices.class, float[].class, (cont, name, type, field, remover, indexer, get, set) -> cont.table(main -> {
|
||||
float[] data = get.get();
|
||||
|
||||
name(cont, name, remover, indexer);
|
||||
cont.table(t -> {
|
||||
t.left().defaults().left();
|
||||
|
||||
String[] names = {"x", "y", "color", "u", "v"};
|
||||
int stride = 6;
|
||||
int vertices = data.length / stride;
|
||||
|
||||
for(int i = 0; i < vertices; i++){
|
||||
int offset = i * stride;
|
||||
|
||||
t.table(row -> {
|
||||
for(int j = 0; j < names.length; j++){
|
||||
int index = offset + j;
|
||||
|
||||
if("color".equals(names[j])) {
|
||||
getInterpreter(Color.class).build(row, names[j], new TypeInfo(Color.class), null, null, null, () -> new Color().abgr8888(data[index]), value -> data[index] = value.toFloatBits());
|
||||
}else{
|
||||
float scale = j <= 1 ? tilesize : 1;
|
||||
getInterpreter(float.class).build(row, names[j], new TypeInfo(float.class), null, null, null, () -> data[index] / scale, value -> data[index] = value * scale);
|
||||
}
|
||||
|
||||
row.add().pad(4);
|
||||
}
|
||||
}).row();
|
||||
}
|
||||
});
|
||||
}));
|
||||
|
||||
// Types that use the default interpreter. It would be nice if all types could use it, but I don't know how to reliably prevent classes like [? extends Content] from using it.
|
||||
for(var obj : MapObjectives.allObjectiveTypes) setInterpreter(obj.get().getClass(), defaultInterpreter());
|
||||
for(var mark : MapObjectives.allMarkerTypes) setInterpreter(mark.get().getClass(), defaultInterpreter());
|
||||
@@ -290,10 +322,12 @@ public class MapObjectivesDialog extends BaseDialog{
|
||||
t.button(Icon.downOpen, Styles.emptyi, () -> indexer.get(false)).fill().padRight(4f);
|
||||
}
|
||||
|
||||
t.button(Icon.add, Styles.emptyi, () -> getProvider(type.element.raw).get(type.element, res -> {
|
||||
arr.add(res);
|
||||
rebuild[0].run();
|
||||
})).fill();
|
||||
if(!field.isAnnotationPresent(Immutable.class)) {
|
||||
t.button(Icon.add, Styles.emptyi, () -> getProvider(type.element.raw).get(type.element, res -> {
|
||||
arr.add(res);
|
||||
rebuild[0].run();
|
||||
})).fill();
|
||||
}
|
||||
}).growX().height(46f).pad(0f, -10f, 0f, -10f).get();
|
||||
|
||||
main.row().table(Tex.button, t -> rebuild[0] = () -> {
|
||||
@@ -312,10 +346,10 @@ public class MapObjectivesDialog extends BaseDialog{
|
||||
|
||||
getInterpreter((Class<Object>)arr.get(index).getClass()).build(
|
||||
t, "", new TypeInfo(arr.get(index).getClass()),
|
||||
field, () -> {
|
||||
field, field == null || !field.isAnnotationPresent(Immutable.class) ? () -> {
|
||||
arr.remove(index);
|
||||
rebuild[0].run();
|
||||
}, field == null || !field.isAnnotationPresent(Unordered.class) ? in -> {
|
||||
} : null, field == null || !field.isAnnotationPresent(Unordered.class) ? in -> {
|
||||
if(in && index > 0){
|
||||
arr.swap(index, index - 1);
|
||||
rebuild[0].run();
|
||||
|
||||
@@ -192,8 +192,18 @@ public class Units{
|
||||
|
||||
/** Returns the nearest enemy tile in a range. */
|
||||
public static Building findEnemyTile(Team team, float x, float y, float range, Boolf<Building> pred){
|
||||
return findEnemyTile(team, x, y, range, false, pred);
|
||||
}
|
||||
|
||||
/** Returns the nearest enemy tile in a range. */
|
||||
public static Building findEnemyTile(Team team, float x, float y, float range, boolean checkUnder, Boolf<Building> pred){
|
||||
if(team == Team.derelict) return null;
|
||||
|
||||
if(checkUnder){
|
||||
Building target = indexer.findEnemyTile(team, x, y, range, build -> !build.block.underBullets && pred.get(build));
|
||||
if(target != null) return target;
|
||||
}
|
||||
|
||||
return indexer.findEnemyTile(team, x, y, range, pred);
|
||||
}
|
||||
|
||||
@@ -243,7 +253,7 @@ public class Units{
|
||||
if(unit != null){
|
||||
return unit;
|
||||
}else{
|
||||
return findEnemyTile(team, x, y, range, tilePred);
|
||||
return findEnemyTile(team, x, y, range, true, tilePred);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -255,7 +265,7 @@ public class Units{
|
||||
if(unit != null){
|
||||
return unit;
|
||||
}else{
|
||||
return findEnemyTile(team, x, y, range, tilePred);
|
||||
return findEnemyTile(team, x, y, range, true, tilePred);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -12,10 +12,20 @@ import mindustry.world.meta.*;
|
||||
|
||||
public class ArmorPlateAbility extends Ability{
|
||||
public TextureRegion plateRegion;
|
||||
public Color color = Color.valueOf("d1efff");
|
||||
public TextureRegion shineRegion;
|
||||
public String plateSuffix = "-armor";
|
||||
public String shineSuffix = "-shine";
|
||||
/** Color of the shine. If null, uses team color. */
|
||||
public @Nullable Color color = null;
|
||||
public float shineSpeed = 1f;
|
||||
public float z = -1;
|
||||
|
||||
/** Whether to draw the plate region. */
|
||||
public boolean drawPlate = true;
|
||||
/** Whether to draw the shine over the plate region. */
|
||||
public boolean drawShine = true;
|
||||
|
||||
public float healthMultiplier = 0.2f;
|
||||
public float z = Layer.effect;
|
||||
|
||||
protected float warmup;
|
||||
|
||||
@@ -34,24 +44,39 @@ public class ArmorPlateAbility extends Ability{
|
||||
|
||||
@Override
|
||||
public void draw(Unit unit){
|
||||
if(!drawPlate && !drawShine) return;
|
||||
|
||||
if(warmup > 0.001f){
|
||||
if(plateRegion == null){
|
||||
plateRegion = Core.atlas.find(unit.type.name + "-armor", unit.type.region);
|
||||
plateRegion = Core.atlas.find(unit.type.name + plateSuffix, unit.type.region);
|
||||
shineRegion = Core.atlas.find(unit.type.name + shineSuffix, plateRegion);
|
||||
}
|
||||
|
||||
Draw.draw(z <= 0 ? Draw.z() : z, () -> {
|
||||
Shaders.armor.region = plateRegion;
|
||||
Shaders.armor.progress = warmup;
|
||||
Shaders.armor.time = -Time.time / 20f;
|
||||
float pz = Draw.z();
|
||||
if(z > 0) Draw.z(z);
|
||||
|
||||
Draw.rect(Shaders.armor.region, unit.x, unit.y, unit.rotation - 90f);
|
||||
Draw.color(color);
|
||||
Draw.shader(Shaders.armor);
|
||||
Draw.rect(Shaders.armor.region, unit.x, unit.y, unit.rotation - 90f);
|
||||
Draw.shader();
|
||||
if(drawPlate){
|
||||
Draw.alpha(warmup);
|
||||
Draw.rect(plateRegion, unit.x, unit.y, unit.rotation - 90f);
|
||||
Draw.alpha(1f);
|
||||
}
|
||||
|
||||
Draw.reset();
|
||||
});
|
||||
if(drawShine){
|
||||
Draw.draw(Draw.z(), () -> {
|
||||
Shaders.armor.region = shineRegion;
|
||||
Shaders.armor.progress = warmup;
|
||||
Shaders.armor.time = -Time.time / 20f * shineSpeed;
|
||||
|
||||
Draw.color(color == null ? unit.team.color : color);
|
||||
Draw.shader(Shaders.armor);
|
||||
Draw.rect(shineRegion, unit.x, unit.y, unit.rotation - 90f);
|
||||
Draw.shader();
|
||||
|
||||
Draw.reset();
|
||||
});
|
||||
}
|
||||
|
||||
Draw.z(pz);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -174,6 +174,8 @@ public class BulletType extends Content implements Cloneable{
|
||||
public float fragVelocityMin = 0.2f, fragVelocityMax = 1f;
|
||||
/** Random range of frag lifetime as a multiplier. */
|
||||
public float fragLifeMin = 1f, fragLifeMax = 1f;
|
||||
/** Random offset of frag bullets from the parent bullet. */
|
||||
public float fragOffsetMin = 1f, fragOffsetMax = 7f;
|
||||
|
||||
/** Bullet that is created at a fixed interval. */
|
||||
public @Nullable BulletType intervalBullet;
|
||||
@@ -387,14 +389,14 @@ public class BulletType extends Content implements Cloneable{
|
||||
|
||||
if(entity instanceof Healthc h){
|
||||
float damage = b.damage;
|
||||
float shield = entity instanceof Shieldc s ? Math.max(s.shield(), 0f) : 0f;
|
||||
if(maxDamageFraction > 0){
|
||||
float cap = h.maxHealth() * maxDamageFraction;
|
||||
if(entity instanceof Shieldc s){
|
||||
cap += Math.max(s.shield(), 0f);
|
||||
}
|
||||
float cap = h.maxHealth() * maxDamageFraction + shield;
|
||||
damage = Math.min(damage, cap);
|
||||
//cap health to effective health for handlePierce to handle it properly
|
||||
health = Math.min(health, cap);
|
||||
}else{
|
||||
health += shield;
|
||||
}
|
||||
if(pierceArmor){
|
||||
h.damagePierce(damage);
|
||||
@@ -509,7 +511,7 @@ public class BulletType extends Content implements Cloneable{
|
||||
public void createFrags(Bullet b, float x, float y){
|
||||
if(fragBullet != null && (fragOnAbsorb || !b.absorbed)){
|
||||
for(int i = 0; i < fragBullets; i++){
|
||||
float len = Mathf.random(1f, 7f);
|
||||
float len = Mathf.random(fragOffsetMin, fragOffsetMax);
|
||||
float a = b.rotation() + Mathf.range(fragRandomSpread / 2) + fragAngle + ((i - fragBullets/2) * fragSpread);
|
||||
fragBullet.create(b, x + Angles.trnsx(a, len), y + Angles.trnsy(a, len), a, Mathf.random(fragVelocityMin, fragVelocityMax), Mathf.random(fragLifeMin, fragLifeMax));
|
||||
}
|
||||
|
||||
@@ -86,9 +86,9 @@ abstract class BuilderComp implements Posc, Statusc, Teamc, Rotc{
|
||||
buildAlpha = Mathf.lerpDelta(buildAlpha, activelyBuilding() ? 1f : 0f, 0.15f);
|
||||
}
|
||||
|
||||
//validate regardless of whether building is enabled.
|
||||
validatePlans();
|
||||
|
||||
if(!updateBuilding || !canBuild()){
|
||||
validatePlans();
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -99,19 +99,18 @@ abstract class BuilderComp implements Posc, Statusc, Teamc, Rotc{
|
||||
if(Float.isNaN(buildCounter) || Float.isInfinite(buildCounter)) buildCounter = 0f;
|
||||
buildCounter = Math.min(buildCounter, 10f);
|
||||
|
||||
boolean instant = state.rules.instantBuild && state.rules.infiniteResources;
|
||||
|
||||
//random attempt to fix a freeze that only occurs on Android
|
||||
int maxPerFrame = 10, count = 0;
|
||||
int maxPerFrame = instant ? plans.size : 10, count = 0;
|
||||
|
||||
while(buildCounter >= 1 && count++ < maxPerFrame){
|
||||
var core = core();
|
||||
|
||||
if((core == null && !infinite)) return;
|
||||
|
||||
while((buildCounter >= 1 || instant) && count++ < maxPerFrame && plans.size > 0){
|
||||
buildCounter -= 1f;
|
||||
|
||||
validatePlans();
|
||||
|
||||
var core = core();
|
||||
|
||||
//nothing to build, or core doesn't exist
|
||||
if(buildPlan() == null || (core == null && !infinite)) return;
|
||||
|
||||
//find the next build plan
|
||||
if(plans.size > 1){
|
||||
int total = 0;
|
||||
|
||||
@@ -127,10 +127,10 @@ abstract class StatusComp implements Posc, Flyingc{
|
||||
return entry;
|
||||
}
|
||||
|
||||
/** Uses a dynamic status effect to override speed. */
|
||||
/** Uses a dynamic status effect to override speed (in tiles/second). */
|
||||
public void statusSpeed(float speed){
|
||||
//type.speed should never be 0
|
||||
applyDynamicStatus().speedMultiplier = speed / type.speed;
|
||||
applyDynamicStatus().speedMultiplier = speed / (type.speed * 60f / tilesize);
|
||||
}
|
||||
|
||||
/** Uses a dynamic status effect to change damage. */
|
||||
|
||||
@@ -21,18 +21,32 @@ public class SoundEffect extends Effect{
|
||||
public Effect effect;
|
||||
|
||||
public SoundEffect(){
|
||||
startDelay = -1;
|
||||
}
|
||||
|
||||
public SoundEffect(Sound sound, Effect effect){
|
||||
this();
|
||||
this.sound = sound;
|
||||
this.effect = effect;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void init(){
|
||||
if(startDelay < 0){
|
||||
startDelay = effect.startDelay;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void create(float x, float y, float rotation, Color color, Object data){
|
||||
if(!shouldCreate()) return;
|
||||
|
||||
sound.at(x, y, Mathf.random(minPitch, maxPitch), Mathf.random(minVolume, maxVolume));
|
||||
if(startDelay > 0){
|
||||
Time.run(startDelay, () -> sound.at(x, y, Mathf.random(minPitch, maxPitch), Mathf.random(minVolume, maxVolume)));
|
||||
}else{
|
||||
sound.at(x, y, Mathf.random(minPitch, maxPitch), Mathf.random(minVolume, maxVolume));
|
||||
}
|
||||
|
||||
effect.create(x, y, rotation, color, data);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -85,7 +85,9 @@ public abstract class DrawPart{
|
||||
/** Weapon heat, 1 when just fired, 0, when it has cooled down (duration depends on weapon) */
|
||||
heat = p -> p.heat,
|
||||
/** Lifetime fraction, 0 to 1. Only for missiles. */
|
||||
life = p -> p.life;
|
||||
life = p -> p.life,
|
||||
/** Current unscaled value of Time.time. */
|
||||
time = p -> Time.time;
|
||||
|
||||
float get(PartParams p);
|
||||
|
||||
@@ -168,6 +170,14 @@ public abstract class DrawPart{
|
||||
return p -> get(p) + Mathf.absin(scl, mag);
|
||||
}
|
||||
|
||||
default PartProgress mod(float amount){
|
||||
return p -> Mathf.mod(get(p), amount);
|
||||
}
|
||||
|
||||
default PartProgress loop(float time){
|
||||
return p -> Mathf.mod(get(p)/time, 1);
|
||||
}
|
||||
|
||||
default PartProgress apply(PartProgress other, PartFunc func){
|
||||
return p -> func.get(get(p), other.get(p));
|
||||
}
|
||||
|
||||
@@ -227,7 +227,7 @@ public class AIController implements UnitController{
|
||||
}
|
||||
|
||||
public Teamc target(float x, float y, float range, boolean air, boolean ground){
|
||||
return Units.closestTarget(unit.team, x, y, range, u -> u.checkTarget(air, ground), t -> ground);
|
||||
return Units.closestTarget(unit.team, x, y, range, u -> u.checkTarget(air, ground), t -> ground && (unit.type.targetUnderBlocks || !t.block.underBullets));
|
||||
}
|
||||
|
||||
public boolean retarget(){
|
||||
|
||||
@@ -35,6 +35,7 @@ public enum Gamemode{
|
||||
}, map -> map.teams.size > 1),
|
||||
editor(true, rules -> {
|
||||
rules.infiniteResources = true;
|
||||
rules.instantBuild = true;
|
||||
rules.editor = true;
|
||||
rules.waves = false;
|
||||
rules.waveTimer = false;
|
||||
|
||||
@@ -39,8 +39,6 @@ public class MapObjectives implements Iterable<MapObjective>, Eachable<MapObject
|
||||
* @see #eachRunning(Cons)
|
||||
*/
|
||||
public Seq<MapObjective> all = new Seq<>(4);
|
||||
/** @see #checkChanged() */
|
||||
protected transient boolean changed;
|
||||
|
||||
static{
|
||||
registerObjective(
|
||||
@@ -61,12 +59,15 @@ public class MapObjectives implements Iterable<MapObjective>, Eachable<MapObject
|
||||
|
||||
registerMarker(
|
||||
ShapeTextMarker::new,
|
||||
MinimapMarker::new,
|
||||
PointMarker::new,
|
||||
ShapeMarker::new,
|
||||
TextMarker::new,
|
||||
LineMarker::new,
|
||||
TextureMarker::new
|
||||
TextureMarker::new,
|
||||
QuadMarker::new
|
||||
);
|
||||
|
||||
registerLegacyMarker("Minimap", PointMarker::new);
|
||||
}
|
||||
|
||||
@SafeVarargs
|
||||
@@ -96,6 +97,15 @@ public class MapObjectives implements Iterable<MapObjective>, Eachable<MapObject
|
||||
}
|
||||
}
|
||||
|
||||
public static void registerLegacyMarker(String name, Prov<? extends ObjectiveMarker> prov) {
|
||||
Class<?> type = prov.get().getClass();
|
||||
|
||||
markerNameToType.put(name, prov);
|
||||
markerNameToType.put(Strings.camelize(name), prov);
|
||||
JsonIO.classTag(Strings.camelize(name), type);
|
||||
JsonIO.classTag(name, type);
|
||||
}
|
||||
|
||||
/** Adds all given objectives to the executor as root objectives. */
|
||||
public void add(MapObjective... objectives){
|
||||
for(var objective : objectives) flatten(objective);
|
||||
@@ -114,21 +124,13 @@ public class MapObjectives implements Iterable<MapObjective>, Eachable<MapObject
|
||||
eachRunning(obj -> {
|
||||
//objectives cannot get completed on the client, but they do try to update for timers and such
|
||||
if(obj.update() && !net.client()){
|
||||
obj.completed = true;
|
||||
obj.done();
|
||||
Call.completeObjective(all.indexOf(obj));
|
||||
}
|
||||
|
||||
changed |= obj.changed;
|
||||
obj.changed = false;
|
||||
});
|
||||
}
|
||||
|
||||
/** @return True if map rules should be synced. Reserved for {@link Vars#logic}; do not invoke directly! */
|
||||
public boolean checkChanged(){
|
||||
boolean has = changed;
|
||||
changed = false;
|
||||
|
||||
return has;
|
||||
public @Nullable MapObjective get(int index){
|
||||
return index < 0 || index >= all.size ? null : all.get(index);
|
||||
}
|
||||
|
||||
/** @return Whether there are any qualified objectives at all. */
|
||||
@@ -137,7 +139,6 @@ public class MapObjectives implements Iterable<MapObjective>, Eachable<MapObject
|
||||
}
|
||||
|
||||
public void clear(){
|
||||
if(all.size > 0) changed = true;
|
||||
all.clear();
|
||||
}
|
||||
|
||||
@@ -179,7 +180,7 @@ public class MapObjectives implements Iterable<MapObjective>, Eachable<MapObject
|
||||
/** Whether this objective has been done yet. This is internally set. */
|
||||
private boolean completed;
|
||||
/** Internal value. Do not modify! */
|
||||
private transient boolean depFinished, changed;
|
||||
private transient boolean depFinished;
|
||||
|
||||
/** @return True if this objective is done and should be removed from the executor. */
|
||||
public abstract boolean update();
|
||||
@@ -189,13 +190,9 @@ public class MapObjectives implements Iterable<MapObjective>, Eachable<MapObject
|
||||
|
||||
/** Called once after {@link #update()} returns true, before this objective is removed. */
|
||||
public void done(){
|
||||
changed();
|
||||
Call.objectiveCompleted(flagsRemoved, flagsAdded);
|
||||
}
|
||||
|
||||
/** Notifies the executor that map rules should be synced. */
|
||||
protected void changed(){
|
||||
changed = true;
|
||||
state.rules.objectiveFlags.removeAll(flagsRemoved);
|
||||
state.rules.objectiveFlags.addAll(flagsAdded);
|
||||
completed = true;
|
||||
}
|
||||
|
||||
/** @return True if all {@link #parents} are completed, rendering this objective able to execute. */
|
||||
@@ -617,38 +614,26 @@ public class MapObjectives implements Iterable<MapObjective>, Eachable<MapObject
|
||||
/** Internal use only! Do not access. */
|
||||
public transient int arrayIndex;
|
||||
|
||||
/** Whether to display marker on minimap instead of world. {@link MinimapMarker} ignores this value. */
|
||||
/** Whether to display marker in the world. */
|
||||
public boolean world = true;
|
||||
/** Whether to display marker on minimap. */
|
||||
public boolean minimap = false;
|
||||
/** Whether to scale marker corresponding to player's zoom level. {@link MinimapMarker} ignores this value. */
|
||||
/** Whether to scale marker corresponding to player's zoom level. */
|
||||
public boolean autoscale = false;
|
||||
/** Hides the marker, used by world processors. */
|
||||
protected boolean hidden = false;
|
||||
/** On which z-sorting layer is marker drawn. */
|
||||
protected float drawLayer = Layer.overlayUI;
|
||||
|
||||
/** Draws the marker. Actual marker position and scale are calculated in {@link #drawWorld()} and {@link #drawMinimap(MinimapRenderer)}. */
|
||||
public void baseDraw(float x, float y, float scaleFactor){}
|
||||
|
||||
/** Called in the main renderer. */
|
||||
public void drawWorld(){}
|
||||
|
||||
/** Called in the small and large map. */
|
||||
public void drawMinimap(MinimapRenderer minimap){}
|
||||
|
||||
/** Whether the marker is hidden */
|
||||
public boolean isHidden(){
|
||||
return hidden;
|
||||
}
|
||||
public void draw(float scaleFactor){}
|
||||
|
||||
/** Control marker with world processor code. Ignores NaN (null) values. */
|
||||
public void control(LMarkerControl type, double p1, double p2, double p3){
|
||||
if(Double.isNaN(p1)) return;
|
||||
|
||||
switch(type){
|
||||
case visibility -> hidden = Mathf.equal((float)p1, 0f);
|
||||
case drawLayer -> drawLayer = (float)p1;
|
||||
case world -> world = !Mathf.equal((float)p1, 0f);
|
||||
case minimap -> minimap = !Mathf.equal((float)p1, 0f);
|
||||
case autoscale -> autoscale = !Mathf.equal((float)p1, 0f);
|
||||
case drawLayer -> drawLayer = (float)p1;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -688,34 +673,19 @@ public class MapObjectives implements Iterable<MapObjective>, Eachable<MapObject
|
||||
/** Position of marker, in world coordinates */
|
||||
public @TilePos Vec2 pos = new Vec2();
|
||||
|
||||
/** Called in the main renderer. */
|
||||
@Override
|
||||
public void drawWorld(){
|
||||
baseDraw(pos.x, pos.y, autoscale ? 4f / renderer.getDisplayScale() : 1f);
|
||||
}
|
||||
|
||||
/** Called in the small and large map. */
|
||||
@Override
|
||||
public void drawMinimap(MinimapRenderer minimap){
|
||||
minimap.transform(Tmp.v1.set(pos.x + 4f, pos.y + 4f));
|
||||
baseDraw(Tmp.v1.x, Tmp.v1.y, minimap.getScaleFactor(autoscale));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void control(LMarkerControl type, double p1, double p2, double p3){
|
||||
super.control(type, p1, p2, p3);
|
||||
|
||||
if(!Double.isNaN(p1)){
|
||||
if(type == LMarkerControl.pos){
|
||||
pos.x = (float)p1 * tilesize;
|
||||
}else{
|
||||
super.control(type, p1, p2, p3);
|
||||
}
|
||||
}
|
||||
|
||||
if(!Double.isNaN(p2)){
|
||||
if(type == LMarkerControl.pos){
|
||||
pos.y = (float)p2 * tilesize;
|
||||
}else{
|
||||
super.control(type, p1, p2, p3);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -763,15 +733,15 @@ public class MapObjectives implements Iterable<MapObjective>, Eachable<MapObject
|
||||
public ShapeTextMarker(){}
|
||||
|
||||
@Override
|
||||
public void baseDraw(float x, float y, float scaleFactor){
|
||||
public void draw(float scaleFactor){
|
||||
//in case some idiot decides to make 9999999 sides and freeze the game
|
||||
int sides = Math.min(this.sides, 300);
|
||||
|
||||
Draw.z(drawLayer);
|
||||
Lines.stroke(3f * scaleFactor, Pal.gray);
|
||||
Lines.poly(x, y, sides, (radius + 1f) * scaleFactor, rotation);
|
||||
Lines.poly(pos.x, pos.y, sides, (radius + 1f) * scaleFactor, rotation);
|
||||
Lines.stroke(scaleFactor, color);
|
||||
Lines.poly(x, y, sides, (radius + 1f) * scaleFactor, rotation);
|
||||
Lines.poly(pos.x, pos.y, sides, (radius + 1f) * scaleFactor, rotation);
|
||||
Draw.reset();
|
||||
|
||||
if(fetchedText == null){
|
||||
@@ -781,11 +751,13 @@ public class MapObjectives implements Iterable<MapObjective>, Eachable<MapObject
|
||||
// font size cannot be 0
|
||||
if(Mathf.equal(fontSize, 0f)) return;
|
||||
|
||||
WorldLabel.drawAt(fetchedText, x, y + radius * scaleFactor + textHeight * scaleFactor, drawLayer, flags, fontSize * scaleFactor);
|
||||
WorldLabel.drawAt(fetchedText, pos.x, pos.y + radius * scaleFactor + textHeight * scaleFactor, drawLayer, flags, fontSize * scaleFactor);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void control(LMarkerControl type, double p1, double p2, double p3){
|
||||
super.control(type, p1, p2, p3);
|
||||
|
||||
if(!Double.isNaN(p1)){
|
||||
switch(type){
|
||||
case fontSize -> fontSize = (float)p1;
|
||||
@@ -799,9 +771,8 @@ public class MapObjectives implements Iterable<MapObjective>, Eachable<MapObject
|
||||
}
|
||||
case radius -> radius = (float)p1;
|
||||
case rotation -> rotation = (float)p1;
|
||||
case color -> color.set(Tmp.c1.fromDouble(p1));
|
||||
case color -> color.fromDouble(p1);
|
||||
case shape -> sides = (int)p1;
|
||||
default -> super.control(type, p1, p2, p3);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -814,7 +785,6 @@ public class MapObjectives implements Iterable<MapObjective>, Eachable<MapObject
|
||||
flags &= ~WorldLabel.flagOutline;
|
||||
}
|
||||
}
|
||||
default -> super.control(type, p1, p2, p3);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -830,73 +800,50 @@ public class MapObjectives implements Iterable<MapObjective>, Eachable<MapObject
|
||||
}
|
||||
}
|
||||
|
||||
/** Displays a circle on the minimap. */
|
||||
public static class MinimapMarker extends ObjectiveMarker{
|
||||
public Point2 pos = new Point2();
|
||||
/** Displays a circle in the world. */
|
||||
public static class PointMarker extends PosMarker{
|
||||
public float radius = 5f, stroke = 11f;
|
||||
public Color color = Color.valueOf("f25555");
|
||||
|
||||
public MinimapMarker(int x, int y){
|
||||
public PointMarker(int x, int y){
|
||||
this.pos.set(x, y);
|
||||
}
|
||||
|
||||
public MinimapMarker(int x, int y, Color color){
|
||||
public PointMarker(int x, int y, Color color){
|
||||
this.pos.set(x, y);
|
||||
this.color = color;
|
||||
minimap = true;
|
||||
}
|
||||
|
||||
public MinimapMarker(int x, int y, float radius, float stroke, Color color){
|
||||
public PointMarker(int x, int y, float radius, float stroke, Color color){
|
||||
this.pos.set(x, y);
|
||||
this.stroke = stroke;
|
||||
this.radius = radius;
|
||||
this.color = color;
|
||||
minimap = true;
|
||||
}
|
||||
|
||||
public MinimapMarker(){}
|
||||
public PointMarker(){}
|
||||
|
||||
@Override
|
||||
public void baseDraw(float x, float y, float scaleFactor){
|
||||
public void draw(float scaleFactor){
|
||||
float rad = radius * tilesize * scaleFactor;
|
||||
float fin = Interp.pow2Out.apply((Time.globalTime / 100f) % 1f);
|
||||
|
||||
Draw.z(drawLayer);
|
||||
Lines.stroke(Scl.scl((1f - fin) * stroke + 0.1f), color);
|
||||
Lines.circle(x, y, rad * fin);
|
||||
Lines.circle(pos.x, pos.y, rad * fin);
|
||||
|
||||
Draw.reset();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void drawWorld(){
|
||||
minimap = true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void drawMinimap(MinimapRenderer minimap){
|
||||
minimap.transform(Tmp.v1.set(pos.x * tilesize, pos.y * tilesize));
|
||||
baseDraw(Tmp.v1.x, Tmp.v1.y, minimap.getScaleFactor(autoscale));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void control(LMarkerControl type, double p1, double p2, double p3){
|
||||
super.control(type, p1, p2, p3);
|
||||
|
||||
if(!Double.isNaN(p1)){
|
||||
switch(type){
|
||||
case pos -> pos.x = (int)p1;
|
||||
case radius -> radius = (float)p1;
|
||||
case stroke -> stroke = (float)p1;
|
||||
case color -> color.set(Tmp.c1.fromDouble(p1));
|
||||
case minimap -> minimap = true;
|
||||
default -> super.control(type, p1, p2, p3);
|
||||
}
|
||||
}
|
||||
|
||||
if(!Double.isNaN(p2)){
|
||||
if(type == LMarkerControl.pos){
|
||||
pos.y = (int)p2;
|
||||
}else{
|
||||
super.control(type, p1, p2, p3);
|
||||
case color -> color.fromDouble(p1);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -922,7 +869,7 @@ public class MapObjectives implements Iterable<MapObjective>, Eachable<MapObject
|
||||
public ShapeMarker(){}
|
||||
|
||||
@Override
|
||||
public void baseDraw(float x, float y, float scaleFactor){
|
||||
public void draw(float scaleFactor){
|
||||
//in case some idiot decides to make 9999999 sides and freeze the game
|
||||
int sides = Math.min(this.sides, 200);
|
||||
|
||||
@@ -930,14 +877,14 @@ public class MapObjectives implements Iterable<MapObjective>, Eachable<MapObject
|
||||
if(!fill){
|
||||
if(outline){
|
||||
Lines.stroke((stroke + 2f) * scaleFactor, Pal.gray);
|
||||
Lines.poly(x, y, sides, (radius + 1f) * scaleFactor, rotation);
|
||||
Lines.poly(pos.x, pos.y, sides, (radius + 1f) * scaleFactor, rotation);
|
||||
}
|
||||
|
||||
Lines.stroke(stroke * scaleFactor, color);
|
||||
Lines.poly(x, y, sides, (radius + 1f) * scaleFactor, rotation);
|
||||
Lines.poly(pos.x, pos.y, sides, (radius + 1f) * scaleFactor, rotation);
|
||||
}else{
|
||||
Draw.color(color);
|
||||
Fill.poly(x, y, sides, radius * scaleFactor, rotation);
|
||||
Fill.poly(pos.x, pos.y, sides, radius * scaleFactor, rotation);
|
||||
}
|
||||
|
||||
Draw.reset();
|
||||
@@ -945,29 +892,27 @@ public class MapObjectives implements Iterable<MapObjective>, Eachable<MapObject
|
||||
|
||||
@Override
|
||||
public void control(LMarkerControl type, double p1, double p2, double p3){
|
||||
super.control(type, p1, p2, p3);
|
||||
|
||||
if(!Double.isNaN(p1)){
|
||||
switch(type){
|
||||
case radius -> radius = (float)p1;
|
||||
case stroke -> stroke = (float)p1;
|
||||
case rotation -> rotation = (float)p1;
|
||||
case color -> color.set(Tmp.c1.fromDouble(p1));
|
||||
case color -> color.fromDouble(p1);
|
||||
case shape -> sides = (int)p1;
|
||||
default -> super.control(type, p1, p2, p3);
|
||||
}
|
||||
}
|
||||
|
||||
if(!Double.isNaN(p2)){
|
||||
switch(type){
|
||||
case shape -> fill = !Mathf.equal((float)p2, 0f);
|
||||
default -> super.control(type, p1, p2, p3);
|
||||
}
|
||||
}
|
||||
|
||||
if(!Double.isNaN(p3)){
|
||||
if(type == LMarkerControl.shape){
|
||||
outline = !Mathf.equal((float)p3, 0f);
|
||||
}else{
|
||||
super.control(type, p1, p2, p3);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -996,7 +941,7 @@ public class MapObjectives implements Iterable<MapObjective>, Eachable<MapObject
|
||||
public TextMarker(){}
|
||||
|
||||
@Override
|
||||
public void baseDraw(float x, float y, float scaleFactor){
|
||||
public void draw(float scaleFactor){
|
||||
// font size cannot be 0
|
||||
if(Mathf.equal(fontSize, 0f)) return;
|
||||
|
||||
@@ -1004,11 +949,13 @@ public class MapObjectives implements Iterable<MapObjective>, Eachable<MapObject
|
||||
fetchedText = fetchText(text);
|
||||
}
|
||||
|
||||
WorldLabel.drawAt(fetchedText, x, y, drawLayer, flags, fontSize * scaleFactor);
|
||||
WorldLabel.drawAt(fetchedText, pos.x, pos.y, drawLayer, flags, fontSize * scaleFactor);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void control(LMarkerControl type, double p1, double p2, double p3){
|
||||
super.control(type, p1, p2, p3);
|
||||
|
||||
if(!Double.isNaN(p1)){
|
||||
switch(type){
|
||||
case fontSize -> fontSize = (float)p1;
|
||||
@@ -1019,7 +966,6 @@ public class MapObjectives implements Iterable<MapObjective>, Eachable<MapObject
|
||||
flags &= ~WorldLabel.flagBackground;
|
||||
}
|
||||
}
|
||||
default -> super.control(type, p1, p2, p3);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1032,7 +978,6 @@ public class MapObjectives implements Iterable<MapObjective>, Eachable<MapObject
|
||||
flags &= ~WorldLabel.flagOutline;
|
||||
}
|
||||
}
|
||||
default -> super.control(type, p1, p2, p3);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1053,7 +998,8 @@ public class MapObjectives implements Iterable<MapObjective>, Eachable<MapObject
|
||||
public @TilePos Vec2 endPos = new Vec2();
|
||||
public float stroke = 1f;
|
||||
public boolean outline = true;
|
||||
public Color color = Color.valueOf("ffd37f");
|
||||
public Color color1 = Color.valueOf("ffd37f");
|
||||
public Color color2 = Color.valueOf("ffd37f");
|
||||
|
||||
public LineMarker(float x1, float y1, float x2, float y2, float stroke){
|
||||
this.stroke = stroke;
|
||||
@@ -1068,44 +1014,46 @@ public class MapObjectives implements Iterable<MapObjective>, Eachable<MapObject
|
||||
|
||||
public LineMarker(){}
|
||||
|
||||
public void baseLineDraw(float x1, float y1, float x2, float y2, float scaleFactor){
|
||||
@Override
|
||||
public void draw(float scaleFactor){
|
||||
Draw.z(drawLayer);
|
||||
if(outline){
|
||||
Lines.stroke((stroke + 2f) * scaleFactor, Pal.gray);
|
||||
Lines.line(x1, y1, x2, y2);
|
||||
Lines.line(pos.x, pos.y, endPos.x, endPos.y);
|
||||
}
|
||||
|
||||
Lines.stroke(stroke * scaleFactor, color);
|
||||
Lines.line(x1, y1, x2, y2);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void drawWorld(){
|
||||
baseLineDraw(pos.x, pos.y, endPos.x, endPos.y, autoscale ? 4f / renderer.getDisplayScale() : 1f);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void drawMinimap(MinimapRenderer minimap){
|
||||
minimap.transform(Tmp.v1.set(pos.x + 4f, pos.y + 4f));
|
||||
minimap.transform(Tmp.v2.set(endPos.x + 4f, endPos.y + 4f));
|
||||
baseLineDraw(Tmp.v1.x, Tmp.v1.y, Tmp.v2.x, Tmp.v2.y, minimap.getScaleFactor(autoscale));
|
||||
Lines.stroke(stroke * scaleFactor, Color.white);
|
||||
Lines.line(pos.x, pos.y, color1, endPos.x, endPos.y, color2);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void control(LMarkerControl type, double p1, double p2, double p3){
|
||||
super.control(type, p1, p2, p3);
|
||||
|
||||
if(!Double.isNaN(p1)){
|
||||
switch(type){
|
||||
case endPos -> endPos.x = (float)p1 * tilesize;
|
||||
case stroke -> stroke = (float)p1;
|
||||
case color -> color.set(Tmp.c1.fromDouble(p1));
|
||||
default -> super.control(type, p1, p2, p3);
|
||||
case color -> color1.set(color2.fromDouble(p1));
|
||||
}
|
||||
}
|
||||
|
||||
if(!Double.isNaN(p2)){
|
||||
switch(type){
|
||||
case endPos -> endPos.y = (float)p2 * tilesize;
|
||||
default -> super.control(type, p1, p2, p3);
|
||||
}
|
||||
}
|
||||
|
||||
if(!Double.isNaN(p1) && !Double.isNaN(p2)){
|
||||
switch (type){
|
||||
case posi -> ((int)p1 == 0 ? pos : (int)p1 == 1 ? endPos : Tmp.v1).x = (float)p2 * tilesize;
|
||||
case colori -> ((int)p1 == 0 ? color1 : (int)p1 == 1 ? color2 : Tmp.c1).fromDouble(p2);
|
||||
}
|
||||
}
|
||||
|
||||
if(!Double.isNaN(p1) && !Double.isNaN(p3)){
|
||||
switch(type){
|
||||
case posi -> ((int)p1 == 0 ? pos : (int)p1 == 1 ? endPos : Tmp.v1).y = (float)p3 * tilesize;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1135,25 +1083,25 @@ public class MapObjectives implements Iterable<MapObjective>, Eachable<MapObject
|
||||
|
||||
@Override
|
||||
public void control(LMarkerControl type, double p1, double p2, double p3){
|
||||
super.control(type, p1, p2, p3);
|
||||
|
||||
if(!Double.isNaN(p1)){
|
||||
switch(type){
|
||||
case rotation -> rotation = (float)p1;
|
||||
case textureSize -> width = (float)p1 * tilesize;
|
||||
case color -> color.set(Tmp.c1.fromDouble(p1));
|
||||
default -> super.control(type, p1, p2, p3);
|
||||
case color -> color.fromDouble(p1);
|
||||
}
|
||||
}
|
||||
|
||||
if(!Double.isNaN(p2)){
|
||||
switch(type){
|
||||
case textureSize -> height = (float)p2 * tilesize;
|
||||
default -> super.control(type, p1, p2, p3);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void baseDraw(float x, float y, float scaleFactor){
|
||||
public void draw(float scaleFactor){
|
||||
if(textureName.isEmpty()) return;
|
||||
|
||||
if(fetchedRegion == null) setTexture(textureName);
|
||||
@@ -1164,7 +1112,7 @@ public class MapObjectives implements Iterable<MapObjective>, Eachable<MapObject
|
||||
|
||||
Draw.z(drawLayer);
|
||||
Draw.color(color);
|
||||
Draw.rect(fetchedRegion, x, y, width * scaleFactor, height * scaleFactor, rotation);
|
||||
Draw.rect(fetchedRegion, pos.x, pos.y, width * scaleFactor, height * scaleFactor, rotation);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -1172,19 +1120,126 @@ public class MapObjectives implements Iterable<MapObjective>, Eachable<MapObject
|
||||
this.textureName = textureName;
|
||||
|
||||
if(fetchedRegion == null) fetchedRegion = new TextureRegion();
|
||||
lookupRegion(textureName, fetchedRegion);
|
||||
}
|
||||
|
||||
TextureRegion region = Core.atlas.find(textureName);
|
||||
if(region.found()){
|
||||
fetchedRegion.set(region);
|
||||
}else{
|
||||
if(Core.assets.isLoaded(textureName, Texture.class)){
|
||||
fetchedRegion.set(Core.assets.get(textureName, Texture.class));
|
||||
}else{
|
||||
fetchedRegion.set(Core.atlas.find("error"));
|
||||
}
|
||||
|
||||
public static class QuadMarker extends ObjectiveMarker{
|
||||
public String textureName = "white";
|
||||
public @Vertices float[] vertices = new float[24];
|
||||
private boolean mapRegion = true;
|
||||
|
||||
private transient TextureRegion fetchedRegion;
|
||||
|
||||
public QuadMarker() {
|
||||
for(int i = 0; i < 4; i++){
|
||||
vertices[i * 6 + 2] = Color.white.toFloatBits();
|
||||
vertices[i * 6 + 5] = Color.clearFloatBits;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void draw(float scaleFactor){
|
||||
if(fetchedRegion == null) setTexture(textureName);
|
||||
|
||||
Draw.z(drawLayer);
|
||||
Draw.vert(fetchedRegion.texture, vertices, 0, vertices.length);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void control(LMarkerControl type, double p1, double p2, double p3){
|
||||
super.control(type, p1, p2, p3);
|
||||
|
||||
if(!Double.isNaN(p1)){
|
||||
switch(type){
|
||||
case color -> {
|
||||
float col = Tmp.c1.fromDouble(p1).toFloatBits();
|
||||
for(int i = 0; i < 4; i++) vertices[i * 6 + 2] = col;
|
||||
}
|
||||
case pos -> vertices[0] = (float)p1 * tilesize;
|
||||
case posi -> setPos((int)p1, p2, p3);
|
||||
case uvi -> setUv((int)p1, p2, p3);
|
||||
}
|
||||
}
|
||||
|
||||
if(!Double.isNaN(p2)){
|
||||
switch(type){
|
||||
case pos -> vertices[1] = (float)p1 * tilesize;
|
||||
}
|
||||
}
|
||||
|
||||
if(!Double.isNaN(p1) && !Double.isNaN(p2)){
|
||||
switch(type){
|
||||
case colori -> setColor((int)p1, p2);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setTexture(String textureName){
|
||||
this.textureName = textureName;
|
||||
|
||||
boolean firstUpdate = fetchedRegion == null;
|
||||
|
||||
if(fetchedRegion == null) fetchedRegion = new TextureRegion();
|
||||
Tmp.tr1.set(fetchedRegion);
|
||||
|
||||
lookupRegion(textureName, fetchedRegion);
|
||||
|
||||
if(firstUpdate){
|
||||
if(mapRegion){
|
||||
mapRegion = false;
|
||||
|
||||
// possibly from the editor, we need to clamp the values
|
||||
for(int i = 0; i < 4; i++){
|
||||
vertices[i * 6 + 3] = Mathf.map(Mathf.clamp(vertices[i * 6 + 3]), fetchedRegion.u, fetchedRegion.u2);
|
||||
vertices[i * 6 + 4] = Mathf.map(1 - Mathf.clamp(vertices[i * 6 + 4]), fetchedRegion.v, fetchedRegion.v2);
|
||||
}
|
||||
}
|
||||
}else{
|
||||
for(int i = 0; i < 4; i++){
|
||||
vertices[i * 6 + 3] = Mathf.map(vertices[i * 6 + 3], Tmp.tr1.u, Tmp.tr1.u2, fetchedRegion.u, fetchedRegion.u2);
|
||||
vertices[i * 6 + 4] = Mathf.map(vertices[i * 6 + 4], Tmp.tr1.v, Tmp.tr1.v2, fetchedRegion.v, fetchedRegion.v2);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void setPos(int i, double x, double y){
|
||||
if(i >= 0 && i < 4){
|
||||
if(!Double.isNaN(x)) vertices[i * 6] = (float)x * tilesize;
|
||||
if(!Double.isNaN(y)) vertices[i * 6 + 1] = (float)y * tilesize;
|
||||
}
|
||||
}
|
||||
|
||||
private void setColor(int i, double c){
|
||||
if(i >= 0 && i < 4){
|
||||
vertices[i * 6 + 2] = Tmp.c1.fromDouble(c).toFloatBits();
|
||||
}
|
||||
}
|
||||
|
||||
private void setUv(int i, double u, double v){
|
||||
if(i >= 0 && i < 4){
|
||||
if(fetchedRegion == null) setTexture(textureName);
|
||||
|
||||
if(!Double.isNaN(u)) vertices[i * 6 + 3] = Mathf.map(Mathf.clamp((float)u), fetchedRegion.u, fetchedRegion.u2);
|
||||
if(!Double.isNaN(v)) vertices[i * 6 + 4] = Mathf.map(1 - Mathf.clamp((float)v), fetchedRegion.v, fetchedRegion.v2);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private static void lookupRegion(String name, TextureRegion out){
|
||||
TextureRegion region = Core.atlas.find(name);
|
||||
if(region.found()){
|
||||
out.set(region);
|
||||
}else{
|
||||
if(Core.assets.isLoaded(name, Texture.class)){
|
||||
out.set(Core.assets.get(name, Texture.class));
|
||||
}else{
|
||||
out.set(Core.atlas.find("error"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/** For arrays or {@link Seq}s; does not create element rearrangement buttons. */
|
||||
@@ -1192,6 +1247,16 @@ public class MapObjectives implements Iterable<MapObjective>, Eachable<MapObject
|
||||
@Retention(RUNTIME)
|
||||
public @interface Unordered{}
|
||||
|
||||
/** For arrays or {@link Seq}s; does not add the new and delete buttons */
|
||||
@Target(FIELD)
|
||||
@Retention(RUNTIME)
|
||||
public @interface Immutable{}
|
||||
|
||||
/** For {@code float[]}; treats it as an array of vertices. */
|
||||
@Target(FIELD)
|
||||
@Retention(RUNTIME)
|
||||
public @interface Vertices{}
|
||||
|
||||
/** For {@code byte}; treats it as a world label flag. */
|
||||
@Target(FIELD)
|
||||
@Retention(RUNTIME)
|
||||
|
||||
@@ -105,6 +105,10 @@ public class Rules{
|
||||
public boolean coreDestroyClear = false;
|
||||
/** If true, banned blocks are hidden from the build menu. */
|
||||
public boolean hideBannedBlocks = false;
|
||||
/** If true, most blocks (including environmental walls) can be deconstructed. This is only meant to be used internally in sandbox/test maps. */
|
||||
public boolean allowEnvironmentDeconstruct = false;
|
||||
/** If true, buildings will be constructed instantly, with no limit on blocks placed per second. This is highly experimental and may cause lag! */
|
||||
public boolean instantBuild = false;
|
||||
/** If true, bannedBlocks becomes a whitelist. */
|
||||
public boolean blockWhitelist = false;
|
||||
/** If true, bannedUnits becomes a whitelist. */
|
||||
|
||||
@@ -31,7 +31,7 @@ public class Schematic implements Publishable, Comparable<Schematic>{
|
||||
}
|
||||
|
||||
public float powerProduction(){
|
||||
return tiles.sumf(s -> s.block instanceof PowerGenerator p ? p.powerProduction : 0f);
|
||||
return tiles.sumf(s -> s.block instanceof PowerGenerator p ? p.getDisplayedPowerProduction() : 0f);
|
||||
}
|
||||
|
||||
public float powerConsumption(){
|
||||
|
||||
@@ -31,7 +31,7 @@ public class Team implements Comparable<Team>{
|
||||
derelict = new Team(0, "derelict", Color.valueOf("4d4e58")),
|
||||
sharded = new Team(1, "sharded", Pal.accent.cpy(), Color.valueOf("ffd37f"), Color.valueOf("eab678"), Color.valueOf("d4816b")),
|
||||
crux = new Team(2, "crux", Color.valueOf("f25555"), Color.valueOf("fc8e6c"), Color.valueOf("f25555"), Color.valueOf("a04553")),
|
||||
malis = new Team(3, "malis", Color.valueOf("a27ce5"), Color.valueOf("c195fb"), Color.valueOf("665c9f"), Color.valueOf("484988")),
|
||||
malis = new Team(3, "malis", Color.valueOf("a27ce5"), Color.valueOf("c7a4f5"), Color.valueOf("896fd6"), Color.valueOf("504cba")),
|
||||
|
||||
//TODO temporarily no palettes for these teams.
|
||||
green = new Team(4, "green", Color.valueOf("54d67d")),//Color.valueOf("96f58c"), Color.valueOf("54d67d"), Color.valueOf("28785c")),
|
||||
|
||||
@@ -146,16 +146,30 @@ public class MinimapRenderer{
|
||||
|
||||
rect.set((dx - sz) * tilesize, (dy - sz) * tilesize, sz * 2 * tilesize, sz * 2 * tilesize);
|
||||
|
||||
Tmp.m2.set(Draw.trans());
|
||||
|
||||
float scaleFactor;
|
||||
var trans = Tmp.m1.idt();
|
||||
trans.translate(lastX, lastY);
|
||||
if(!worldSpace){
|
||||
trans.scl(Tmp.v1.set(scaleFactor = lastW / rect.width, lastH / rect.height));
|
||||
trans.translate(-rect.x, -rect.y);
|
||||
}else{
|
||||
trans.scl(Tmp.v1.set(scaleFactor = lastW / world.unitWidth(), lastH / world.unitHeight()));
|
||||
}
|
||||
trans.translate(tilesize / 2f, tilesize / 2f);
|
||||
Draw.trans(trans);
|
||||
|
||||
scaleFactor = 1f / scaleFactor;
|
||||
|
||||
for(Unit unit : units){
|
||||
if(unit.inFogTo(player.team()) || !unit.type.drawMinimap) continue;
|
||||
|
||||
float rx = !fullView ? (unit.x - rect.x) / rect.width * w : unit.x / (world.width() * tilesize) * w;
|
||||
float ry = !fullView ? (unit.y - rect.y) / rect.width * h : unit.y / (world.height() * tilesize) * h;
|
||||
float scale = Scl.scl(1f) * tilesize * 3;
|
||||
var region = unit.icon();
|
||||
|
||||
Draw.mixcol(unit.team.color, 1f);
|
||||
float scale = Scl.scl(1f) / 2f * scaling * 32f;
|
||||
var region = unit.icon();
|
||||
Draw.rect(region, x + rx, y + ry, scale, scale * (float)region.height / region.width, unit.rotation() - 90);
|
||||
Draw.rect(region, unit.x, unit.y, scale, scale * (float)region.height / region.width, unit.rotation() - 90);
|
||||
Draw.reset();
|
||||
}
|
||||
|
||||
@@ -186,15 +200,14 @@ public class MinimapRenderer{
|
||||
//crisp pixels
|
||||
dynamicTex.setFilter(TextureFilter.nearest);
|
||||
|
||||
if(worldSpace){
|
||||
region.set(0f, 0f, 1f, 1f);
|
||||
}
|
||||
|
||||
Tmp.tr1.set(dynamicTex);
|
||||
Tmp.tr1.set(region.u, 1f - region.v, region.u2, 1f - region.v2);
|
||||
Tmp.tr1.set(0f, 1f, 1f, 0f);
|
||||
|
||||
float wf = world.width() * tilesize;
|
||||
float hf = world.height() * tilesize;
|
||||
|
||||
Draw.color(state.rules.dynamicColor, 0.5f);
|
||||
Draw.rect(Tmp.tr1, x + w/2f, y + h/2f, w, h);
|
||||
Draw.rect(Tmp.tr1, wf / 2, hf / 2, wf, hf);
|
||||
|
||||
if(state.rules.staticFog){
|
||||
staticTex.setFilter(TextureFilter.nearest);
|
||||
@@ -202,7 +215,7 @@ public class MinimapRenderer{
|
||||
Tmp.tr1.texture = staticTex;
|
||||
//must be black to fit with borders
|
||||
Draw.color(0f, 0f, 0f, 1f);
|
||||
Draw.rect(Tmp.tr1, x + w/2f, y + h/2f, w, h);
|
||||
Draw.rect(Tmp.tr1, wf / 2, hf / 2, wf, hf);
|
||||
}
|
||||
|
||||
Draw.color();
|
||||
@@ -211,23 +224,21 @@ public class MinimapRenderer{
|
||||
|
||||
//TODO might be useful in the standard minimap too
|
||||
if(fullView){
|
||||
drawSpawns(x, y, w, h, scaling);
|
||||
drawSpawns();
|
||||
|
||||
if(!mobile){
|
||||
//draw bounds for camera - not drawn on mobile because you can't shift it by tapping anyway
|
||||
Rect r = Core.camera.bounds(Tmp.r1);
|
||||
Vec2 bot = transform(Tmp.v1.set(r.x, r.y));
|
||||
Vec2 top = transform(Tmp.v2.set(r.x + r.width, r.y + r.height));
|
||||
Lines.stroke(Scl.scl(3f));
|
||||
Lines.stroke(Scl.scl(3f) * scaleFactor);
|
||||
Draw.color(Pal.accent);
|
||||
Lines.rect(bot.x,bot.y, top.x - bot.x, top.y - bot.y);
|
||||
Lines.rect(r.x, r.y, r.width, r.height);
|
||||
Draw.reset();
|
||||
}
|
||||
}
|
||||
|
||||
LongSeq indicators = control.indicators.list();
|
||||
float fin = ((Time.globalTime / 30f) % 1f);
|
||||
float rad = scale(fin * 5f + tilesize - 2f);
|
||||
float rad = fin * 5f + tilesize - 2f;
|
||||
Lines.stroke(Scl.scl((1f - fin) * 4f + 0.5f));
|
||||
|
||||
for(int i = 0; i < indicators.size; i++){
|
||||
@@ -244,31 +255,32 @@ public class MinimapRenderer{
|
||||
offset = build.block.offset / tilesize;
|
||||
}
|
||||
|
||||
Vec2 v = transform(Tmp.v1.set((ix + 0.5f + offset) * tilesize, (iy + 0.5f + offset) * tilesize));
|
||||
|
||||
Draw.color(Color.orange, Color.scarlet, Mathf.clamp(time / 70f));
|
||||
|
||||
Lines.square(v.x, v.y, rad);
|
||||
Lines.square((ix + 0.5f + offset) * tilesize, (iy + 0.5f + offset) * tilesize, rad);
|
||||
}
|
||||
|
||||
Draw.reset();
|
||||
|
||||
//TODO autoscale markers
|
||||
state.rules.objectives.eachRunning(obj -> {
|
||||
for(var marker : obj.markers){
|
||||
if(marker.minimap){
|
||||
marker.drawMinimap(this);
|
||||
marker.draw(1);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
for(var marker : state.markers){
|
||||
if(!marker.isHidden() && marker.minimap){
|
||||
marker.drawMinimap(this);
|
||||
if(marker.minimap){
|
||||
marker.draw(1);
|
||||
}
|
||||
}
|
||||
|
||||
Draw.trans(Tmp.m2);
|
||||
}
|
||||
|
||||
public void drawSpawns(float x, float y, float w, float h, float scaling){
|
||||
public void drawSpawns(){
|
||||
if(!state.rules.showSpawns || !state.hasSpawns() || !state.rules.waves) return;
|
||||
|
||||
TextureRegion icon = Icon.units.getRegion();
|
||||
@@ -277,44 +289,21 @@ public class MinimapRenderer{
|
||||
|
||||
Draw.color(state.rules.waveTeam.color, Tmp.c2.set(state.rules.waveTeam.color).value(1.2f), Mathf.absin(Time.time, 16f, 1f));
|
||||
|
||||
float rad = scale(state.rules.dropZoneRadius);
|
||||
float rad = state.rules.dropZoneRadius;
|
||||
float curve = Mathf.curve(Time.time % 240f, 120f, 240f);
|
||||
|
||||
for(Tile tile : spawner.getSpawns()){
|
||||
float tx = ((tile.x + 0.5f) / world.width()) * w;
|
||||
float ty = ((tile.y + 0.5f) / world.height()) * h;
|
||||
float tx = tile.worldx();
|
||||
float ty = tile.worldy();
|
||||
|
||||
Draw.rect(icon, x + tx, y + ty, icon.width, icon.height);
|
||||
Lines.circle(x + tx, y + ty, rad);
|
||||
if(curve > 0f) Lines.circle(x + tx, y + ty, rad * Interp.pow3Out.apply(curve));
|
||||
Draw.rect(icon, tx, ty, icon.width, icon.height);
|
||||
Lines.circle(tx, ty, rad);
|
||||
if(curve > 0f) Lines.circle(tx, ty, rad * Interp.pow3Out.apply(curve));
|
||||
}
|
||||
|
||||
Draw.reset();
|
||||
}
|
||||
|
||||
//TODO horrible code, everywhere.
|
||||
public Vec2 transform(Vec2 position){
|
||||
if(!worldSpace){
|
||||
position.sub(rect.x, rect.y).scl(lastW / rect.width, lastH / rect.height);
|
||||
}else{
|
||||
position.scl(lastW / world.unitWidth(), lastH / world.unitHeight());
|
||||
}
|
||||
|
||||
return position.add(lastX, lastY);
|
||||
}
|
||||
|
||||
public float scale(float radius){
|
||||
return worldSpace ? (radius / (baseSize / 2f)) * 5f * lastScl : lastW / rect.width * radius;
|
||||
}
|
||||
|
||||
public float getScaleFactor(boolean zoomAutoScale){
|
||||
if(!zoomAutoScale){
|
||||
return worldSpace ? (1 / (baseSize / 2f)) * 5f * lastScl : lastW / rect.width;
|
||||
}else{
|
||||
return worldSpace ? (1 / (baseSize / 2f)) * 5f : lastW / 256f;
|
||||
}
|
||||
}
|
||||
|
||||
public @Nullable TextureRegion getRegion(){
|
||||
if(texture == null) return null;
|
||||
|
||||
|
||||
@@ -97,8 +97,12 @@ public class MultiPacker implements Disposable{
|
||||
|
||||
@Override
|
||||
public void dispose(){
|
||||
for(PixmapPacker packer : packers){
|
||||
packer.dispose();
|
||||
for(int i = 0; i < PageType.all.length; i ++){
|
||||
var packer = packers[i];
|
||||
//the UI packer's image is later used when merging with the font, don't dispose it
|
||||
if(i != PageType.ui.ordinal()){
|
||||
packer.forceDispose();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -474,6 +474,6 @@ public class Shaders{
|
||||
}
|
||||
|
||||
public static Fi getShaderFi(String file){
|
||||
return Core.files.internal("shaders/" + file);
|
||||
return tree.get("shaders/" + file);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -203,17 +203,7 @@ public class PlanetRenderer implements Disposable{
|
||||
}
|
||||
|
||||
public void setPlane(Sector sector){
|
||||
float rotation = -sector.planet.getRotation();
|
||||
float length = 0.01f;
|
||||
|
||||
projector.setPlane(
|
||||
//origin on sector position
|
||||
Tmp.v33.set(sector.tile.v).setLength((outlineRad + length) * sector.planet.radius).rotate(Vec3.Y, rotation).add(sector.planet.position),
|
||||
//face up
|
||||
sector.plane.project(Tmp.v32.set(sector.tile.v).add(Vec3.Y)).sub(sector.tile.v, sector.planet.radius).rotate(Vec3.Y, rotation).nor(),
|
||||
//right vector
|
||||
Tmp.v31.set(Tmp.v32).rotate(Vec3.Y, -rotation).add(sector.tile.v).rotate(sector.tile.v, 90).sub(sector.tile.v).rotate(Vec3.Y, rotation).nor()
|
||||
);
|
||||
sector.planet.setPlane(sector, projector);
|
||||
}
|
||||
|
||||
public void fill(Sector sector, Color color, float offset){
|
||||
|
||||
@@ -1179,7 +1179,7 @@ public abstract class InputHandler implements InputProcessor, GestureListener{
|
||||
|
||||
var last = lastSchematic;
|
||||
|
||||
ui.showTextInput("@schematic.add", "@name", "", text -> {
|
||||
ui.showTextInput("@schematic.add", "@name", 1000, "", text -> {
|
||||
Schematic replacement = schematics.all().find(s -> s.name().equals(text));
|
||||
if(replacement != null){
|
||||
ui.showConfirm("@confirm", "@schematic.replace", () -> {
|
||||
@@ -1973,11 +1973,13 @@ public abstract class InputHandler implements InputProcessor, GestureListener{
|
||||
var end = world.build(endX, endY);
|
||||
if(diagonal && (block == null || block.allowDiagonal)){
|
||||
if(block != null && start instanceof ChainedBuilding && end instanceof ChainedBuilding
|
||||
&& block.canReplace(end.block) && block.canReplace(start.block)){
|
||||
&& block.canReplace(end.block) && block.canReplace(start.block)){
|
||||
points = Placement.upgradeLine(startX, startY, endX, endY);
|
||||
}else{
|
||||
points = Placement.pathfindLine(block != null && block.conveyorPlacement, startX, startY, endX, endY);
|
||||
}
|
||||
}else if(block != null && block.allowRectanglePlacement){
|
||||
points = Placement.normalizeRectangle(startX, startY, endX, endY, block.size);
|
||||
}else{
|
||||
points = Placement.normalizeLine(startX, startY, endX, endY);
|
||||
}
|
||||
|
||||
@@ -743,6 +743,11 @@ public class MobileInput extends InputHandler implements GestureListener{
|
||||
queueCommandMode = false;
|
||||
}
|
||||
|
||||
//cannot rebuild and place at the same time
|
||||
if(block != null){
|
||||
rebuildMode = false;
|
||||
}
|
||||
|
||||
if(player.dead()){
|
||||
mode = none;
|
||||
manualShooting = false;
|
||||
@@ -766,7 +771,7 @@ public class MobileInput extends InputHandler implements GestureListener{
|
||||
renderer.scaleCamera(Core.input.axisTap(Binding.zoom));
|
||||
}
|
||||
|
||||
if(!Core.settings.getBool("keyboard") && !locked){
|
||||
if(!Core.settings.getBool("keyboard") && !locked && !scene.hasKeyboard()){
|
||||
//move camera around
|
||||
float camSpeed = 6f;
|
||||
Core.camera.position.add(Tmp.v1.setZero().add(Core.input.axis(Binding.move_x), Core.input.axis(Binding.move_y)).nor().scl(Time.delta * camSpeed));
|
||||
@@ -967,7 +972,6 @@ public class MobileInput extends InputHandler implements GestureListener{
|
||||
boolean allowHealing = type.canHeal;
|
||||
boolean validHealTarget = allowHealing && target instanceof Building b && b.isValid() && target.team() == unit.team && b.damaged() && target.within(unit, type.range);
|
||||
boolean boosted = (unit instanceof Mechc && unit.isFlying());
|
||||
|
||||
//reset target if:
|
||||
// - in the editor, or...
|
||||
// - it's both an invalid standard target and an invalid heal target
|
||||
|
||||
@@ -58,6 +58,22 @@ public class Placement{
|
||||
return points;
|
||||
}
|
||||
|
||||
/** Normalize two points into a rectangle. */
|
||||
public static Seq<Point2> normalizeRectangle(int startX, int startY, int endX, int endY, int blockSize){
|
||||
Pools.freeAll(points);
|
||||
points.clear();
|
||||
|
||||
int minX = Math.min(startX, endX), minY = Math.min(startY, endY), maxX = Math.max(startX, endX), maxY = Math.max(startY, endY);
|
||||
|
||||
for(int y = 0; y <= maxY - minY; y += blockSize){
|
||||
for(int x = 0; x <= maxX - minX; x += blockSize){
|
||||
points.add(Pools.obtain(Point2.class, Point2::new).set(startX + x * Mathf.sign(endX - startX), startY + y * Mathf.sign(endY - startY)));
|
||||
}
|
||||
}
|
||||
|
||||
return points;
|
||||
}
|
||||
|
||||
public static Seq<Point2> upgradeLine(int startX, int startY, int endX, int endY){
|
||||
closed.clear();
|
||||
Pools.freeAll(points);
|
||||
|
||||
@@ -27,45 +27,63 @@ public class GlobalVars{
|
||||
public static final Rand rand = new Rand();
|
||||
|
||||
//non-constants that depend on state
|
||||
private static int varTime, varTick, varSecond, varMinute, varWave, varWaveTime, varServer, varClient, varClientLocale, varClientUnit, varClientName, varClientTeam, varClientMobile;
|
||||
private static int varTime, varTick, varSecond, varMinute, varWave, varWaveTime, varMapW, varMapH, varServer, varClient, varClientLocale, varClientUnit, varClientName, varClientTeam, varClientMobile;
|
||||
|
||||
private ObjectIntMap<String> namesToIds = new ObjectIntMap<>();
|
||||
private Seq<Var> vars = new Seq<>(Var.class);
|
||||
private Seq<VarEntry> varEntries = new Seq<>();
|
||||
private IntSet privilegedIds = new IntSet();
|
||||
private UnlockableContent[][] logicIdToContent;
|
||||
private int[][] contentIdToLogicId;
|
||||
|
||||
public void init(){
|
||||
put("the end", null);
|
||||
putEntryOnly("sectionProcessor");
|
||||
|
||||
putEntryOnly("@this");
|
||||
putEntryOnly("@thisx");
|
||||
putEntryOnly("@thisy");
|
||||
putEntryOnly("@links");
|
||||
putEntryOnly("@ipt");
|
||||
|
||||
putEntryOnly("sectionGeneral");
|
||||
|
||||
put("the end", null, false, true);
|
||||
//add default constants
|
||||
put("false", 0);
|
||||
put("true", 1);
|
||||
put("null", null);
|
||||
putEntry("false", 0);
|
||||
putEntry("true", 1);
|
||||
put("null", null, false, true);
|
||||
|
||||
//math
|
||||
put("@pi", Mathf.PI);
|
||||
put("π", Mathf.PI); //for the "cool" kids
|
||||
put("@e", Mathf.E);
|
||||
put("@degToRad", Mathf.degRad);
|
||||
put("@radToDeg", Mathf.radDeg);
|
||||
putEntry("@pi", Mathf.PI);
|
||||
put("π", Mathf.PI, false, true); //for the "cool" kids
|
||||
putEntry("@e", Mathf.E);
|
||||
putEntry("@degToRad", Mathf.degRad);
|
||||
putEntry("@radToDeg", Mathf.radDeg);
|
||||
|
||||
putEntryOnly("sectionMap");
|
||||
|
||||
//time
|
||||
varTime = put("@time", 0);
|
||||
varTick = put("@tick", 0);
|
||||
varSecond = put("@second", 0);
|
||||
varMinute = put("@minute", 0);
|
||||
varWave = put("@waveNumber", 0);
|
||||
varWaveTime = put("@waveTime", 0);
|
||||
varTime = putEntry("@time", 0);
|
||||
varTick = putEntry("@tick", 0);
|
||||
varSecond = putEntry("@second", 0);
|
||||
varMinute = putEntry("@minute", 0);
|
||||
varWave = putEntry("@waveNumber", 0);
|
||||
varWaveTime = putEntry("@waveTime", 0);
|
||||
|
||||
varServer = put("@server", 0, true);
|
||||
varClient = put("@client", 0, true);
|
||||
varMapW = putEntry("@mapw", 0);
|
||||
varMapH = putEntry("@maph", 0);
|
||||
|
||||
putEntryOnly("sectionNetwork");
|
||||
|
||||
varServer = putEntry("@server", 0, true);
|
||||
varClient = putEntry("@client", 0, true);
|
||||
|
||||
//privileged desynced client variables
|
||||
varClientLocale = put("@clientLocale", null, true);
|
||||
varClientUnit = put("@clientUnit", null, true);
|
||||
varClientName = put("@clientName", null, true);
|
||||
varClientTeam = put("@clientTeam", 0, true);
|
||||
varClientMobile = put("@clientMobile", 0, true);
|
||||
varClientLocale = putEntry("@clientLocale", null, true);
|
||||
varClientUnit = putEntry("@clientUnit", null, true);
|
||||
varClientName = putEntry("@clientName", null, true);
|
||||
varClientTeam = putEntry("@clientTeam", 0, true);
|
||||
varClientMobile = putEntry("@clientMobile", 0, true);
|
||||
|
||||
//special enums
|
||||
put("@ctrlProcessor", ctrlProcessor);
|
||||
@@ -115,6 +133,8 @@ public class GlobalVars{
|
||||
logicIdToContent = new UnlockableContent[ContentType.all.length][];
|
||||
contentIdToLogicId = new int[ContentType.all.length][];
|
||||
|
||||
putEntryOnly("sectionLookup");
|
||||
|
||||
Fi ids = Core.files.internal("logicids.dat");
|
||||
if(ids.exists()){
|
||||
//read logic ID mapping data (generated in ImagePacker)
|
||||
@@ -125,7 +145,7 @@ public class GlobalVars{
|
||||
contentIdToLogicId[ctype.ordinal()] = new int[Vars.content.getBy(ctype).size];
|
||||
|
||||
//store count constants
|
||||
put("@" + ctype.name() + "Count", amount);
|
||||
putEntry("@" + ctype.name() + "Count", amount);
|
||||
|
||||
for(int i = 0; i < amount; i++){
|
||||
String name = in.readUTF();
|
||||
@@ -159,6 +179,9 @@ public class GlobalVars{
|
||||
vars.items[varWave].numval = state.wave;
|
||||
vars.items[varWaveTime].numval = state.wavetime / 60f;
|
||||
|
||||
vars.items[varMapW].numval = world.width();
|
||||
vars.items[varMapH].numval = world.height();
|
||||
|
||||
//network
|
||||
vars.items[varServer].numval = (net.server() || !net.active()) ? 1 : 0;
|
||||
vars.items[varClient].numval = net.client() ? 1 : 0;
|
||||
@@ -173,6 +196,10 @@ public class GlobalVars{
|
||||
}
|
||||
}
|
||||
|
||||
public Seq<VarEntry> getEntries(){
|
||||
return varEntries;
|
||||
}
|
||||
|
||||
/** @return a piece of content based on its logic ID. This is not equivalent to content ID. */
|
||||
public @Nullable Content lookupContent(ContentType type, int id){
|
||||
var arr = logicIdToContent[type.ordinal()];
|
||||
@@ -209,6 +236,11 @@ public class GlobalVars{
|
||||
|
||||
/** Adds a constant value by name. */
|
||||
public int put(String name, Object value, boolean privileged){
|
||||
return put(name, value, privileged, true);
|
||||
}
|
||||
|
||||
/** Adds a constant value by name. */
|
||||
public int put(String name, Object value, boolean privileged, boolean hidden){
|
||||
int existingIdx = namesToIds.get(name, -1);
|
||||
if(existingIdx != -1){ //don't overwrite existing vars (see #6910)
|
||||
Log.debug("Failed to add global logic variable '@', as it already exists.", name);
|
||||
@@ -228,10 +260,44 @@ public class GlobalVars{
|
||||
namesToIds.put(name, index);
|
||||
if(privileged) privilegedIds.add(index);
|
||||
vars.add(var);
|
||||
|
||||
if(!hidden){
|
||||
varEntries.add(new VarEntry(index, name, "", "", privileged));
|
||||
}
|
||||
return index;
|
||||
}
|
||||
|
||||
public int put(String name, Object value){
|
||||
return put(name, value, false);
|
||||
}
|
||||
|
||||
public int putEntry(String name, Object value){
|
||||
return put(name, value, false, false);
|
||||
}
|
||||
|
||||
public int putEntry(String name, Object value, boolean privileged){
|
||||
return put(name, value, privileged, false);
|
||||
}
|
||||
|
||||
public void putEntryOnly(String name){
|
||||
varEntries.add(new VarEntry(0, name, "", "", false));
|
||||
}
|
||||
|
||||
/** An entry that describes a variable for documentation purposes. This is *only* used inside UI for global variables. */
|
||||
public static class VarEntry{
|
||||
public int id;
|
||||
public String name, description, icon;
|
||||
public boolean privileged;
|
||||
|
||||
public VarEntry(int id, String name, String description, String icon, boolean privileged){
|
||||
this.id = id;
|
||||
this.name = name;
|
||||
this.description = description;
|
||||
this.icon = icon;
|
||||
this.privileged = privileged;
|
||||
}
|
||||
|
||||
public VarEntry(){
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,61 @@
|
||||
package mindustry.logic;
|
||||
|
||||
import arc.*;
|
||||
import arc.graphics.*;
|
||||
import arc.scene.ui.*;
|
||||
import arc.scene.ui.layout.*;
|
||||
import arc.util.*;
|
||||
import mindustry.*;
|
||||
import mindustry.gen.*;
|
||||
import mindustry.graphics.*;
|
||||
import mindustry.ui.*;
|
||||
import mindustry.ui.dialogs.*;
|
||||
|
||||
public class GlobalVarsDialog extends BaseDialog{
|
||||
|
||||
public GlobalVarsDialog(){
|
||||
super("@logic.globals");
|
||||
|
||||
addCloseButton();
|
||||
shown(this::setup);
|
||||
onResize(this::setup);
|
||||
}
|
||||
|
||||
void setup(){
|
||||
float prefWidth = Math.min(Core.graphics.getWidth() * 0.9f / Scl.scl(1f) - 240f, 600f);
|
||||
cont.clearChildren();
|
||||
|
||||
cont.pane(t -> {
|
||||
t.margin(10f).marginRight(16f);
|
||||
t.defaults().fillX().fillY();
|
||||
for(var entry : Vars.logicVars.getEntries()){
|
||||
|
||||
if(entry.name.startsWith("section")){
|
||||
Color color = Pal.accent;
|
||||
t.add("@lglobal." + entry.name).fillX().center().labelAlign(Align.center).colspan(4).color(color).padTop(4f).padBottom(2f).row();
|
||||
t.image(Tex.whiteui).height(4f).color(color).colspan(4).padBottom(8f).row();
|
||||
}else{
|
||||
Color varColor = Pal.gray;
|
||||
float stub = 8f, mul = 0.5f, pad = 4;
|
||||
|
||||
String desc = entry.description;
|
||||
if(desc == null || desc.isEmpty()){
|
||||
desc = Core.bundle.get("lglobal." + entry.name, "");
|
||||
}
|
||||
|
||||
String fdesc = desc;
|
||||
|
||||
t.add(new Image(Tex.whiteui, varColor.cpy().mul(mul))).width(stub);
|
||||
t.stack(new Image(Tex.whiteui, varColor), new Label(" " + entry.name + " ", Styles.outlineLabel)).padRight(pad);
|
||||
|
||||
t.add(new Image(Tex.whiteui, Pal.gray.cpy().mul(mul))).width(stub);
|
||||
t.table(Tex.pane, out -> out.add(fdesc).style(Styles.outlineLabel).width(prefWidth).padLeft(2).padRight(2).wrap()).padRight(pad);
|
||||
|
||||
t.row();
|
||||
|
||||
t.add().fillX().colspan(4).height(4).row();
|
||||
}
|
||||
}
|
||||
}).grow();
|
||||
}
|
||||
}
|
||||
@@ -67,7 +67,7 @@ public enum LAccess{
|
||||
all = values(),
|
||||
senseable = Seq.select(all, t -> t.params.length <= 1).toArray(LAccess.class),
|
||||
controls = Seq.select(all, t -> t.params.length > 0).toArray(LAccess.class),
|
||||
settable = {x, y, rotation, speed, armor, health, team, flag, totalPower, payloadType};
|
||||
settable = {x, y, rotation, speed, armor, health, shield, team, flag, totalPower, payloadType};
|
||||
|
||||
LAccess(String... params){
|
||||
this.params = params;
|
||||
|
||||
@@ -706,7 +706,7 @@ public class LExecutor{
|
||||
int address = exec.numi(position);
|
||||
Building from = exec.building(target);
|
||||
|
||||
if(from instanceof MemoryBuild mem && (exec.privileged || from.team == exec.team) && address >= 0 && address < mem.memory.length){
|
||||
if(from instanceof MemoryBuild mem && (exec.privileged || (from.team == exec.team && !mem.block.privileged)) && address >= 0 && address < mem.memory.length){
|
||||
mem.memory[address] = exec.num(value);
|
||||
}
|
||||
}
|
||||
@@ -1025,14 +1025,17 @@ public class LExecutor{
|
||||
exec.textBuffer.setLength(0);
|
||||
}
|
||||
}else{
|
||||
int num1 = exec.numi(p1);
|
||||
int num1 = exec.numi(p1), xval = packSign(exec.numi(x)), yval = packSign(exec.numi(y));
|
||||
|
||||
if(type == LogicDisplay.commandImage){
|
||||
num1 = exec.obj(p1) instanceof UnlockableContent u ? u.iconId : 0;
|
||||
}else if(type == LogicDisplay.commandScale){
|
||||
xval = packSign((int)(exec.numf(x) / LogicDisplay.scaleStep));
|
||||
yval = packSign((int)(exec.numf(y) / LogicDisplay.scaleStep));
|
||||
}
|
||||
|
||||
//add graphics calls, cap graphics buffer size
|
||||
exec.graphicsBuffer.add(DisplayCmd.get(type, packSign(exec.numi(x)), packSign(exec.numi(y)), packSign(num1), packSign(exec.numi(p2)), packSign(exec.numi(p3)), packSign(exec.numi(p4))));
|
||||
exec.graphicsBuffer.add(DisplayCmd.get(type, xval, yval, packSign(num1), packSign(exec.numi(p2)), packSign(exec.numi(p3)), packSign(exec.numi(p4))));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2049,6 +2052,11 @@ public class LExecutor{
|
||||
state.markers.add(id, marker);
|
||||
}
|
||||
|
||||
@Remote(called = Loc.server, variants = Variant.both, unreliable = true)
|
||||
public static void removeMarker(int id){
|
||||
state.markers.remove(id);
|
||||
}
|
||||
|
||||
@Remote(called = Loc.server, variants = Variant.both, unreliable = true)
|
||||
public static void updateMarker(int id, LMarkerControl control, double p1, double p2, double p3){
|
||||
var marker = state.markers.get(id);
|
||||
|
||||
@@ -2,7 +2,7 @@ package mindustry.logic;
|
||||
|
||||
public enum LMarkerControl{
|
||||
remove,
|
||||
visibility("true/false"),
|
||||
world("true/false"),
|
||||
minimap("true/false"),
|
||||
autoscale("true/false"),
|
||||
pos("x", "y"),
|
||||
@@ -18,7 +18,10 @@ public enum LMarkerControl{
|
||||
textHeight("height"),
|
||||
labelFlags("background", "outline"),
|
||||
texture("printFlush", "name"),
|
||||
textureSize("width", "height");
|
||||
textureSize("width", "height"),
|
||||
posi("index", "x", "y"),
|
||||
uvi("index", "x", "y"),
|
||||
colori("index", "color");
|
||||
|
||||
public final String[] params;
|
||||
|
||||
|
||||
@@ -260,6 +260,13 @@ public class LStatements{
|
||||
}, 2, cell -> cell.size(165, 50)));
|
||||
}, Styles.logict, () -> {}).size(165, 40).color(s.color).left().padLeft(2);
|
||||
}
|
||||
case translate, scale -> {
|
||||
fields(s, "x", x, v -> x = v);
|
||||
fields(s, "y", y, v -> y = v);
|
||||
}
|
||||
case rotate -> {
|
||||
fields(s, "degrees", p1, v -> p1 = v);
|
||||
}
|
||||
}
|
||||
}).expand().left();
|
||||
}
|
||||
@@ -1999,11 +2006,14 @@ public class LStatements{
|
||||
table.table(t -> {
|
||||
t.setColor(table.color);
|
||||
|
||||
fields(t, type.params[i], i == 0 ? p1 : i == 1 ? p2 : p3, i == 0 ? v -> p1 = v : i == 1 ? v -> p2 = v : v -> p3 = v).width(100f);
|
||||
String value = i == 0 ? p1 : i == 1 ? p2 : p3;
|
||||
Cons<String> setter = i == 0 ? v -> p1 = v : i == 1 ? v -> p2 = v : v -> p3 = v;
|
||||
|
||||
if(type == LMarkerControl.color){
|
||||
col(t, p1, res -> {
|
||||
p1 = "%" + res.toString().substring(0, res.a >= 1f ? 6 : 8);
|
||||
fields(t, type.params[i], value, setter).width(100f);
|
||||
|
||||
if(type == LMarkerControl.color || (type == LMarkerControl.colori && i == 1)){
|
||||
col(t, value, res -> {
|
||||
setter.get("%" + res.toString().substring(0, res.a >= 1f ? 6 : 8));
|
||||
build(table);
|
||||
});
|
||||
}else if(type == LMarkerControl.drawLayer){
|
||||
@@ -2013,10 +2023,10 @@ public class LStatements{
|
||||
o.row();
|
||||
o.table(s -> {
|
||||
s.left();
|
||||
for(var layer : Layer.class.getFields()){
|
||||
float value = Reflect.get(Layer.class, layer.getName());
|
||||
s.button(layer.getName() + " = " + value, Styles.logicTogglet, () -> {
|
||||
p1 = Float.toString(value);
|
||||
for(var field : Layer.class.getFields()){
|
||||
float layer = Reflect.get(field);
|
||||
s.button(field.getName() + " = " + layer, Styles.logicTogglet, () -> {
|
||||
p1 = Float.toString(layer);
|
||||
rebuild(table);
|
||||
hide.run();
|
||||
}).size(240f, 40f).row();
|
||||
|
||||
@@ -26,6 +26,7 @@ public class LogicDialog extends BaseDialog{
|
||||
Cons<String> consumer = s -> {};
|
||||
boolean privileged;
|
||||
@Nullable LExecutor executor;
|
||||
GlobalVarsDialog globalsDialog = new GlobalVarsDialog();
|
||||
|
||||
public LogicDialog(){
|
||||
super("logic");
|
||||
@@ -51,7 +52,7 @@ public class LogicDialog extends BaseDialog{
|
||||
add(buttons).growX().name("canvas");
|
||||
}
|
||||
|
||||
private Color typeColor(Var s, Color color){
|
||||
public static Color typeColor(Var s, Color color){
|
||||
return color.set(
|
||||
!s.isobj ? Pal.place :
|
||||
s.objval == null ? Color.darkGray :
|
||||
@@ -65,7 +66,7 @@ public class LogicDialog extends BaseDialog{
|
||||
);
|
||||
}
|
||||
|
||||
private String typeName(Var s){
|
||||
public static String typeName(Var s){
|
||||
return
|
||||
!s.isobj ? "number" :
|
||||
s.objval == null ? "null" :
|
||||
@@ -178,6 +179,8 @@ public class LogicDialog extends BaseDialog{
|
||||
});
|
||||
|
||||
dialog.addCloseButton();
|
||||
dialog.buttons.button("@logic.globals", Icon.list, () -> globalsDialog.show()).size(210f, 64f);
|
||||
|
||||
dialog.show();
|
||||
}).name("variables").disabled(b -> executor == null || executor.vars.length == 0);
|
||||
|
||||
|
||||
@@ -57,6 +57,12 @@ public class LogicFx{
|
||||
return map.get(name);
|
||||
}
|
||||
|
||||
/** Adds an effect entry to the map. */
|
||||
public static void add(String name, EffectEntry entry){
|
||||
entry.name = name;
|
||||
map.put(name, entry);
|
||||
}
|
||||
|
||||
public static String[] all(){
|
||||
return map.orderedKeys().toArray(String.class);
|
||||
}
|
||||
|
||||
@@ -271,8 +271,9 @@ public class ContentParser{
|
||||
return new Vec3(data.getFloat("x", 0f), data.getFloat("y", 0f), data.getFloat("z", 0f));
|
||||
});
|
||||
put(Sound.class, (type, data) -> {
|
||||
var field = fieldOpt(Sounds.class, data);
|
||||
if(data.isArray()) return new RandomSound(parser.readValue(Sound[].class, data));
|
||||
|
||||
var field = fieldOpt(Sounds.class, data);
|
||||
return field != null ? field : Vars.tree.loadSound(data.asString());
|
||||
});
|
||||
put(Music.class, (type, data) -> {
|
||||
@@ -445,6 +446,17 @@ public class ContentParser{
|
||||
if(value.has("consumes") && value.get("consumes").isObject()){
|
||||
for(JsonValue child : value.get("consumes")){
|
||||
switch(child.name){
|
||||
case "remove" -> {
|
||||
String[] values = child.isString() ? new String[]{child.asString()} : child.asStringArray();
|
||||
for(String type : values){
|
||||
Class<?> consumeType = resolve("Consume" + Strings.capitalize(type), Consume.class);
|
||||
if(consumeType != Consume.class){
|
||||
block.removeConsumers(b -> consumeType.isAssignableFrom(b.getClass()));
|
||||
}else{
|
||||
Log.warn("Unknown consumer type '@' (Class: @) in consume: remove.", type, "Consume" + Strings.capitalize(type));
|
||||
}
|
||||
}
|
||||
}
|
||||
case "item" -> block.consumeItem(find(ContentType.item, child.asString()));
|
||||
case "itemCharged" -> block.consume((Consume)parser.readValue(ConsumeItemCharged.class, child));
|
||||
case "itemFlammable" -> block.consume((Consume)parser.readValue(ConsumeItemFlammable.class, child));
|
||||
|
||||
@@ -577,6 +577,10 @@ public class Administration{
|
||||
changed.run();
|
||||
}
|
||||
|
||||
public boolean isDefault(){
|
||||
return Structs.eq(get(), defaultValue);
|
||||
}
|
||||
|
||||
private static boolean debug(){
|
||||
return Config.debug.bool();
|
||||
}
|
||||
|
||||
@@ -39,7 +39,7 @@ public enum Achievement{
|
||||
issueAttackCommand,
|
||||
active100Units(SStat.maxUnitActive, 100),
|
||||
build1000Units(SStat.unitsBuilt, 1000),
|
||||
buildAllUnits(SStat.unitTypesBuilt, 30),
|
||||
buildAllUnits(SStat.unitTypesBuilt, 50),
|
||||
buildT5,
|
||||
pickupT5,
|
||||
active10Polys,
|
||||
|
||||
@@ -84,8 +84,6 @@ public class Liquid extends UnlockableContent implements Senseable{
|
||||
super.init();
|
||||
|
||||
if(gas){
|
||||
//gases can't be coolants
|
||||
coolant = false;
|
||||
//always "boils", it's a gas
|
||||
boilPoint = -1;
|
||||
//ensure no accidental global mutation
|
||||
|
||||
@@ -536,4 +536,26 @@ public class Planet extends UnlockableContent{
|
||||
}
|
||||
batch.flush(Gl.lineStrip);
|
||||
}
|
||||
|
||||
public Vec3 lookAt(Sector sector, Vec3 out){
|
||||
return out.set(sector.tile.v).rotate(Vec3.Y, -getRotation());
|
||||
}
|
||||
|
||||
public Vec3 project(Sector sector, Camera3D cam, Vec3 out){
|
||||
return cam.project(out.set(sector.tile.v).setLength(outlineRad * radius).rotate(Vec3.Y, -getRotation()).add(position));
|
||||
}
|
||||
|
||||
public void setPlane(Sector sector, PlaneBatch3D projector){
|
||||
float rotation = -getRotation();
|
||||
float length = 0.01f;
|
||||
|
||||
projector.setPlane(
|
||||
//origin on sector position
|
||||
Tmp.v33.set(sector.tile.v).setLength((outlineRad + length) * radius).rotate(Vec3.Y, rotation).add(position),
|
||||
//face up
|
||||
sector.plane.project(Tmp.v32.set(sector.tile.v).add(Vec3.Y)).sub(sector.tile.v, radius).rotate(Vec3.Y, rotation).nor(),
|
||||
//right vector
|
||||
Tmp.v31.set(Tmp.v32).rotate(Vec3.Y, -rotation).add(sector.tile.v).rotate(sector.tile.v, 90).sub(sector.tile.v).rotate(Vec3.Y, rotation).nor()
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -236,7 +236,7 @@ public class Sector{
|
||||
|
||||
/** Projects this sector onto a 4-corner square for use in map gen.
|
||||
* Allocates a new object. Do not call in the main loop. */
|
||||
private SectorRect makeRect(){
|
||||
protected SectorRect makeRect(){
|
||||
Vec3[] corners = new Vec3[tile.corners.length];
|
||||
for(int i = 0; i < corners.length; i++){
|
||||
corners[i] = tile.corners[i].v.cpy().setLength(planet.radius);
|
||||
|
||||
@@ -215,6 +215,8 @@ public class UnitType extends UnlockableContent implements Senseable{
|
||||
naval = false,
|
||||
/** if false, RTS AI controlled units do not automatically attack things while moving. This is automatically assigned. */
|
||||
autoFindTarget = true,
|
||||
/** If false, 'under' blocks like conveyors are not targeted. */
|
||||
targetUnderBlocks = true,
|
||||
/** if true, this unit will always shoot while moving regardless of slowdown */
|
||||
alwaysShootWhenMoving = false,
|
||||
|
||||
@@ -960,13 +962,14 @@ public class UnitType extends UnlockableContent implements Senseable{
|
||||
getRegionsToOutline(toOutline);
|
||||
|
||||
for(var region : toOutline){
|
||||
if(region instanceof AtlasRegion atlas){
|
||||
if(region instanceof AtlasRegion atlas && !Core.atlas.has(atlas.name + "-outline")){
|
||||
String regionName = atlas.name;
|
||||
Pixmap outlined = Pixmaps.outline(Core.atlas.getPixmap(region), outlineColor, outlineRadius);
|
||||
|
||||
Drawf.checkBleed(outlined);
|
||||
|
||||
packer.add(PageType.main, regionName + "-outline", outlined);
|
||||
outlined.dispose();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1019,7 +1022,9 @@ public class UnitType extends UnlockableContent implements Senseable{
|
||||
}
|
||||
|
||||
packer.add(PageType.main, name + "-treads" + r + "-" + i, frame);
|
||||
frame.dispose();
|
||||
}
|
||||
slice.dispose();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -430,7 +430,7 @@ public class Weapon implements Cloneable{
|
||||
}
|
||||
|
||||
protected Teamc findTarget(Unit unit, float x, float y, float range, boolean air, boolean ground){
|
||||
return Units.closestTarget(unit.team, x, y, range + Math.abs(shootY), u -> u.checkTarget(air, ground), t -> ground);
|
||||
return Units.closestTarget(unit.team, x, y, range + Math.abs(shootY), u -> u.checkTarget(air, ground), t -> ground && (unit.type.targetUnderBlocks || !t.block.underBullets));
|
||||
}
|
||||
|
||||
protected boolean checkTarget(Unit unit, Teamc target, float x, float y, float range){
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package mindustry.ui.dialogs;
|
||||
|
||||
import arc.*;
|
||||
import arc.freetype.FreeTypeFontGenerator.*;
|
||||
import arc.graphics.*;
|
||||
import arc.input.*;
|
||||
import arc.math.*;
|
||||
@@ -35,6 +36,7 @@ public class JoinDialog extends BaseDialog{
|
||||
int refreshes;
|
||||
boolean showHidden;
|
||||
TextButtonStyle style;
|
||||
Task fontIgnoreDirtyTask;
|
||||
|
||||
String lastIp;
|
||||
int lastPort, lastColumns = -1;
|
||||
@@ -413,6 +415,15 @@ public class JoinDialog extends BaseDialog{
|
||||
net.pingHost(resaddress, resport, res -> {
|
||||
if(refreshes != cur) return;
|
||||
|
||||
//don't recache the texture for a while
|
||||
if(fontIgnoreDirtyTask == null){
|
||||
FreeTypeFontData.ignoreDirty = true;
|
||||
fontIgnoreDirtyTask = Time.runTask(0.6f * 60f, () -> {
|
||||
FreeTypeFontData.ignoreDirty = false;
|
||||
fontIgnoreDirtyTask = null;
|
||||
});
|
||||
}
|
||||
|
||||
if(!serverSearch.isEmpty() && !(group.name.toLowerCase().contains(serverSearch)
|
||||
|| res.name.toLowerCase().contains(serverSearch)
|
||||
|| res.description.toLowerCase().contains(serverSearch)
|
||||
|
||||
@@ -167,7 +167,7 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{
|
||||
|
||||
//show selection of Erekir/Serpulo campaign if the user has no bases, and hasn't selected yet (essentially a "have they played campaign before" check)
|
||||
shown(() -> {
|
||||
if(!settings.getBool("campaignselect") && !content.planets().contains(p -> p.sectors.contains(s -> s.hasBase()))){
|
||||
if(!settings.getBool("campaignselect") && !content.planets().contains(p -> p.sectors.contains(Sector::hasBase))){
|
||||
var diag = new BaseDialog("@campaign.select");
|
||||
|
||||
Planet[] selected = {null};
|
||||
@@ -214,7 +214,7 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{
|
||||
}
|
||||
|
||||
//unlock defaults for older campaign saves (TODO move? where to?)
|
||||
if(content.planets().contains(p -> p.sectors.contains(s -> s.hasBase())) || Blocks.scatter.unlocked() || Blocks.router.unlocked()){
|
||||
if(content.planets().contains(p -> p.sectors.contains(Sector::hasBase)) || Blocks.scatter.unlocked() || Blocks.router.unlocked()){
|
||||
Seq.with(Blocks.junction, Blocks.mechanicalDrill, Blocks.conveyor, Blocks.duo, Items.copper, Items.lead).each(UnlockableContent::quietUnlock);
|
||||
}
|
||||
}
|
||||
@@ -372,11 +372,17 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{
|
||||
super.show();
|
||||
}
|
||||
|
||||
void lookAt(Sector sector){
|
||||
public void lookAt(Sector sector){
|
||||
if(sector.tile == Ptile.empty) return;
|
||||
|
||||
//TODO should this even set `state.planet`? the other lookAt() doesn't, so...
|
||||
state.planet = sector.planet;
|
||||
state.camPos.set(Tmp.v33.set(sector.tile.v).rotate(Vec3.Y, -sector.planet.getRotation()));
|
||||
sector.planet.lookAt(sector, state.camPos);
|
||||
}
|
||||
|
||||
public void lookAt(Sector sector, float alpha){
|
||||
float len = state.camPos.len();
|
||||
state.camPos.slerp(sector.planet.lookAt(sector, Tmp.v33).setLength(len), alpha);
|
||||
}
|
||||
|
||||
boolean canSelect(Sector sector){
|
||||
@@ -648,10 +654,7 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{
|
||||
}
|
||||
}).visible(() -> mode != select),
|
||||
|
||||
new Table(c -> {
|
||||
expandTable = c;
|
||||
})).grow();
|
||||
|
||||
new Table(c -> expandTable = c)).grow();
|
||||
rebuildExpand();
|
||||
}
|
||||
|
||||
@@ -770,11 +773,6 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{
|
||||
}
|
||||
}
|
||||
|
||||
public void lookAt(Sector sector, float alpha){
|
||||
float len = state.camPos.len();
|
||||
state.camPos.slerp(Tmp.v31.set(sector.tile.v).rotate(Vec3.Y, -sector.planet.getRotation()).setLength(len), alpha);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void act(float delta){
|
||||
super.act(delta);
|
||||
@@ -801,7 +799,7 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{
|
||||
hoverLabel.touchable = Touchable.disabled;
|
||||
hoverLabel.color.a = state.uiAlpha;
|
||||
|
||||
Vec3 pos = planets.cam.project(Tmp.v31.set(hovered.tile.v).setLength(PlanetRenderer.outlineRad * state.planet.radius).rotate(Vec3.Y, -state.planet.getRotation()).add(state.planet.position));
|
||||
Vec3 pos = hovered.planet.project(hovered, planets.cam, Tmp.v31);
|
||||
hoverLabel.setPosition(pos.x - Core.scene.marginLeft, pos.y - Core.scene.marginBottom, Align.center);
|
||||
|
||||
hoverLabel.getText().setLength(0);
|
||||
|
||||
@@ -36,8 +36,6 @@ public class TraceDialog extends BaseDialog{
|
||||
c.add(Core.bundle.format("trace.ip", info.ip)).row();
|
||||
c.button(Icon.copySmall, style, () -> copy(info.uuid)).size(s).padRight(4f);
|
||||
c.add(Core.bundle.format("trace.id", info.uuid)).row();
|
||||
c.button(Icon.copySmall, style, () -> copy(player.locale)).size(s).padRight(4f);
|
||||
c.add(Core.bundle.format("trace.language", player.locale)).row();
|
||||
}).row();
|
||||
|
||||
table.add(Core.bundle.format("trace.modclient", info.modded)).row();
|
||||
|
||||
@@ -72,9 +72,9 @@ public class HudFragment{
|
||||
|
||||
Events.on(SectorCaptureEvent.class, e -> {
|
||||
if(e.sector.isBeingPlayed()){
|
||||
ui.announce(Core.bundle.format("sector.capture", ""), 5f);
|
||||
ui.announce("@sector.capture.current", 5f);
|
||||
}else{
|
||||
showToast(Core.bundle.format("sector.capture", e.sector.name() + " "));
|
||||
showToast(Core.bundle.format("sector.capture", e.sector.name()));
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
@@ -219,6 +219,8 @@ public class Block extends UnlockableContent implements Senseable{
|
||||
public int unitCapModifier = 0;
|
||||
/** Whether the block can be tapped and selected to configure. */
|
||||
public boolean configurable;
|
||||
/** If true, this block does not have pointConfig with a transform called on map resize. */
|
||||
public boolean ignoreResizeConfig;
|
||||
/** If true, this building can be selected like a unit when commanding. */
|
||||
public boolean commandable;
|
||||
/** If true, the building inventory can be shown with the config. */
|
||||
@@ -245,6 +247,8 @@ public class Block extends UnlockableContent implements Senseable{
|
||||
public boolean allowDiagonal = true;
|
||||
/** Whether to swap the diagonal placement modes. */
|
||||
public boolean swapDiagonalPlacement;
|
||||
/** Whether to allow rectangular placement, as opposed to a line. */
|
||||
public boolean allowRectanglePlacement = false;
|
||||
/** Build queue priority in schematics. */
|
||||
public int schematicPriority = 0;
|
||||
/**
|
||||
@@ -322,6 +326,8 @@ public class Block extends UnlockableContent implements Senseable{
|
||||
public float deconstructThreshold = 0f;
|
||||
/** If true, this block deconstructs immediately. Instant deconstruction implies no resource refund. */
|
||||
public boolean instantDeconstruct = false;
|
||||
/** If true, this block constructs immediately. This implies no resource requirement, and ignores configs - do not use, this is for performance only! */
|
||||
public boolean instantBuild = false;
|
||||
/** Effect for placing the block. Passes size as rotation. */
|
||||
public Effect placeEffect = Fx.placeBlock;
|
||||
/** Effect for breaking the block. Passes size as rotation. */
|
||||
@@ -378,7 +384,7 @@ public class Block extends UnlockableContent implements Senseable{
|
||||
/** Dump timer ID.*/
|
||||
protected final int timerDump = timers++;
|
||||
/** How often to try dumping items in ticks, e.g. 5 = 12 times/sec*/
|
||||
protected final int dumpTime = 5;
|
||||
public int dumpTime = 5;
|
||||
|
||||
public Block(String name){
|
||||
super(name);
|
||||
@@ -952,6 +958,14 @@ public class Block extends UnlockableContent implements Senseable{
|
||||
consumeBuilder.remove(cons);
|
||||
}
|
||||
|
||||
public void removeConsumers(Boolf<Consume> b){
|
||||
consumeBuilder.removeAll(b);
|
||||
//the power was removed, unassign it
|
||||
if(!consumeBuilder.contains(c -> c instanceof ConsumePower)){
|
||||
consPower = null;
|
||||
}
|
||||
}
|
||||
|
||||
public ConsumeLiquid consumeLiquid(Liquid liquid, float amount){
|
||||
return consume(new ConsumeLiquid(liquid, amount));
|
||||
}
|
||||
@@ -1280,6 +1294,8 @@ public class Block extends UnlockableContent implements Senseable{
|
||||
}
|
||||
}
|
||||
|
||||
Seq<Pixmap> toDispose = new Seq<>();
|
||||
|
||||
//generate paletted team regions
|
||||
if(teamRegion != null && teamRegion.found()){
|
||||
for(Team team : Team.all){
|
||||
@@ -1304,6 +1320,7 @@ public class Block extends UnlockableContent implements Senseable{
|
||||
Drawf.checkBleed(out);
|
||||
|
||||
packer.add(PageType.main, name + "-team-" + team.name, out);
|
||||
toDispose.add(out);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1323,6 +1340,7 @@ public class Block extends UnlockableContent implements Senseable{
|
||||
Pixmap out = last = Pixmaps.outline(region, outlineColor, outlineRadius);
|
||||
Drawf.checkBleed(out);
|
||||
packer.add(PageType.main, atlasRegion.name, out);
|
||||
toDispose.add(out);
|
||||
}
|
||||
|
||||
var toOutline = new Seq<TextureRegion>();
|
||||
@@ -1336,6 +1354,7 @@ public class Block extends UnlockableContent implements Senseable{
|
||||
Drawf.checkBleed(outlined);
|
||||
|
||||
packer.add(PageType.main, regionName + "-outline", outlined);
|
||||
toDispose.add(outlined);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1353,12 +1372,15 @@ public class Block extends UnlockableContent implements Senseable{
|
||||
packer.add(PageType.main, "block-" + name + "-full", base);
|
||||
|
||||
editorBase = new PixmapRegion(base);
|
||||
toDispose.add(base);
|
||||
}else{
|
||||
if(gen[0] != null) packer.add(PageType.main, "block-" + name + "-full", Core.atlas.getPixmap(gen[0]));
|
||||
editorBase = gen[0] == null ? Core.atlas.getPixmap(fullIcon) : Core.atlas.getPixmap(gen[0]);
|
||||
}
|
||||
|
||||
packer.add(PageType.editor, name + "-icon-editor", editorBase);
|
||||
|
||||
toDispose.each(Pixmap::dispose);
|
||||
}
|
||||
|
||||
public int planRotation(int rot){
|
||||
|
||||
@@ -50,6 +50,7 @@ public class Build{
|
||||
if(tile.build != null){
|
||||
prevBuild.add(tile.build);
|
||||
tile.build.onDeconstructed(unit);
|
||||
tile.build.dead = true;
|
||||
}
|
||||
|
||||
tile.setBlock(sub, team, rotation);
|
||||
@@ -122,6 +123,14 @@ public class Build{
|
||||
}
|
||||
});
|
||||
|
||||
//complete it immediately
|
||||
if(result.instantBuild){
|
||||
Events.fire(new BlockBuildBeginEvent(tile, team, unit, false));
|
||||
result.placeBegan(tile, tile.block, unit);
|
||||
ConstructBlock.constructFinish(tile, result, unit, (byte)rotation, team, null);
|
||||
return;
|
||||
}
|
||||
|
||||
Block previous = tile.block();
|
||||
Block sub = ConstructBlock.get(result.size);
|
||||
var prevBuild = new Seq<Building>(9);
|
||||
@@ -190,6 +199,11 @@ public class Build{
|
||||
|
||||
if(tile == null) return false;
|
||||
|
||||
//floors have different checks
|
||||
if(type.isFloor()){
|
||||
return type.isOverlay() ? tile.overlay() != type : tile.floor() != type;
|
||||
}
|
||||
|
||||
//campaign darkness check
|
||||
if(world.getDarkness(x, y) >= 3){
|
||||
return false;
|
||||
@@ -199,10 +213,6 @@ public class Build{
|
||||
return false;
|
||||
}
|
||||
|
||||
if((type.isFloor() && tile.floor() == type) || (type.isOverlay() && tile.overlay() == type)){
|
||||
return false;
|
||||
}
|
||||
|
||||
if(!type.canPlaceOn(tile, team, rotation)){
|
||||
return false;
|
||||
}
|
||||
@@ -223,7 +233,7 @@ public class Build{
|
||||
(check.floor().isDeep() && !type.floating && !type.requiresWater && !type.placeableLiquid) || //deep water
|
||||
(type == check.block() && check.build != null && rotation == check.build.rotation && type.rotate && !((type == check.block && check.team() == Team.derelict))) || //same block, same rotation
|
||||
!check.interactable(team) || //cannot interact
|
||||
!check.floor().placeableOn || //solid wall
|
||||
!check.floor().placeableOn || //solid floor
|
||||
(!checkVisible && !check.block().alwaysReplace) || //replacing a block that should be replaced (e.g. payload placement)
|
||||
!(((type.canReplace(check.block()) || (type == check.block && state.rules.derelictRepair && check.team() == Team.derelict)) || //can replace type OR can replace derelict block of same type
|
||||
(check.build instanceof ConstructBuild build && build.current == type && check.centerX() == tile.x && check.centerY() == tile.y)) && //same type in construction
|
||||
@@ -281,9 +291,9 @@ public class Build{
|
||||
return false;
|
||||
}
|
||||
|
||||
/** Returns whether the tile at this position is breakable by this team */
|
||||
/** @return whether the tile at this position is breakable by this team */
|
||||
public static boolean validBreak(Team team, int x, int y){
|
||||
Tile tile = world.tile(x, y);
|
||||
return tile != null && tile.block().canBreak(tile) && tile.breakable() && tile.interactable(team);
|
||||
return tile != null && tile.block() != Blocks.air && (tile.block().canBreak(tile) && (tile.breakable() || state.rules.allowEnvironmentDeconstruct)) && tile.interactable(team);
|
||||
}
|
||||
}
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user