Merge branch 'Anuken:master' into balancing_burst-drill-optional-multiplier

This commit is contained in:
SomeonesShade
2024-03-21 14:44:30 +08:00
committed by GitHub
122 changed files with 3883 additions and 1296 deletions

View File

@@ -18,7 +18,7 @@ jobs:
- name: Setup Gradle - name: Setup Gradle
uses: gradle/gradle-build-action@v2 uses: gradle/gradle-build-action@v2
- name: Run unit tests - name: Run unit tests
run: ./gradlew clean cleanTest test --stacktrace run: ./gradlew tests:test --stacktrace --rerun
- name: Run unit tests and build JAR - name: Run unit tests and build JAR
run: ./gradlew desktop:dist run: ./gradlew desktop:dist
- name: Upload desktop JAR for testing - name: Upload desktop JAR for testing

View File

@@ -57,4 +57,4 @@ jobs:
git push https://Anuken:${{ secrets.API_TOKEN_GITHUB }}@github.com/Anuken/MindustryJitpack git push https://Anuken:${{ secrets.API_TOKEN_GITHUB }}@github.com/Anuken/MindustryJitpack
cd ../Mindustry cd ../Mindustry
- name: Run unit tests - name: Run unit tests
run: ./gradlew clean cleanTest test --stacktrace run: ./gradlew tests:test --rerun --stacktrace

View File

@@ -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. 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`). 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. 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. 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:
For example, if your server address is `example.com:6000`, you would add a comma after the last entry and insert:
```json ```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. > 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. 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.

View File

@@ -101,64 +101,68 @@ public class AndroidLauncher extends AndroidApplication{
} }
void showFileChooser(boolean open, String title, Cons<Fi> cons, String... extensions){ void showFileChooser(boolean open, String title, Cons<Fi> cons, String... extensions){
String extension = extensions[0]; try{
String extension = extensions[0];
if(VERSION.SDK_INT >= VERSION_CODES.Q){ if(VERSION.SDK_INT >= VERSION_CODES.Q){
Intent intent = new Intent(open ? Intent.ACTION_OPEN_DOCUMENT : Intent.ACTION_CREATE_DOCUMENT); Intent intent = new Intent(open ? Intent.ACTION_OPEN_DOCUMENT : Intent.ACTION_CREATE_DOCUMENT);
intent.addCategory(Intent.CATEGORY_OPENABLE); intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType(extension.equals("zip") && !open && extensions.length == 1 ? "application/zip" : "*/*"); intent.setType(extension.equals("zip") && !open && extensions.length == 1 ? "application/zip" : "*/*");
addResultListener(i -> startActivityForResult(intent, i), (code, in) -> { addResultListener(i -> startActivityForResult(intent, i), (code, in) -> {
if(code == Activity.RESULT_OK && in != null && in.getData() != null){ if(code == Activity.RESULT_OK && in != null && in.getData() != null){
Uri uri = in.getData(); Uri uri = in.getData();
if(uri.getPath().contains("(invalid)")) return; if(uri.getPath().contains("(invalid)")) return;
Core.app.post(() -> Core.app.post(() -> cons.get(new Fi(uri.getPath()){ Core.app.post(() -> Core.app.post(() -> cons.get(new Fi(uri.getPath()){
@Override @Override
public InputStream read(){ public InputStream read(){
try{ try{
return getContentResolver().openInputStream(uri); return getContentResolver().openInputStream(uri);
}catch(IOException e){ }catch(IOException e){
throw new ArcRuntimeException(e); throw new ArcRuntimeException(e);
}
} }
}
@Override @Override
public OutputStream write(boolean append){ public OutputStream write(boolean append){
try{ try{
return getContentResolver().openOutputStream(uri); return getContentResolver().openOutputStream(uri);
}catch(IOException e){ }catch(IOException e){
throw new ArcRuntimeException(e); throw new ArcRuntimeException(e);
}
} }
} })));
}))); }
} });
}); }else if(VERSION.SDK_INT >= VERSION_CODES.M && !(checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED &&
}else if(VERSION.SDK_INT >= VERSION_CODES.M && !(checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED &&
checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED)){ checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED)){
chooser = new FileChooser(title, file -> Structs.contains(extensions, file.extension().toLowerCase()), open, file -> { chooser = new FileChooser(title, file -> Structs.contains(extensions, file.extension().toLowerCase()), open, file -> {
if(!open){ if(!open){
cons.get(file.parent().child(file.nameWithoutExtension() + "." + extension)); cons.get(file.parent().child(file.nameWithoutExtension() + "." + extension));
}else{ }else{
cons.get(file); cons.get(file);
} }
}); });
ArrayList<String> perms = new ArrayList<>(); ArrayList<String> perms = new ArrayList<>();
if(checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED){ if(checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED){
perms.add(Manifest.permission.WRITE_EXTERNAL_STORAGE); perms.add(Manifest.permission.WRITE_EXTERNAL_STORAGE);
} }
if(checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED){ if(checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED){
perms.add(Manifest.permission.READ_EXTERNAL_STORAGE); perms.add(Manifest.permission.READ_EXTERNAL_STORAGE);
} }
requestPermissions(perms.toArray(new String[0]), PERMISSION_REQUEST_CODE); requestPermissions(perms.toArray(new String[0]), PERMISSION_REQUEST_CODE);
}else{
if(open){
new FileChooser(title, file -> Structs.contains(extensions, file.extension().toLowerCase()), true, cons).show();
}else{ }else{
super.showFileChooser(open, "@open", extension, cons); if(open){
new FileChooser(title, file -> Structs.contains(extensions, file.extension().toLowerCase()), true, cons).show();
}else{
super.showFileChooser(open, "@open", extension, cons);
}
} }
}catch(Throwable error){
Core.app.post(() -> Vars.ui.showException(error));
} }
} }

Binary file not shown.

After

Width:  |  Height:  |  Size: 510 B

View File

@@ -501,6 +501,7 @@ editor.default = [lightgray]<Default>
details = Details... details = Details...
edit = Edit edit = Edit
variables = Vars variables = Vars
logic.globals = Built-in Variables
editor.name = Name: editor.name = Name:
editor.spawn = Spawn Unit editor.spawn = Spawn Unit
editor.removeunit = Remove Unit editor.removeunit = Remove Unit
@@ -613,7 +614,7 @@ filter.option.threshold2 = Secondary Threshold
filter.option.radius = Radius filter.option.radius = Radius
filter.option.percentile = Percentile 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.deletelocale = Are you sure you want to delete this locale bundle?
locales.applytoall = Apply Changes To All Locales locales.applytoall = Apply Changes To All Locales
locales.addtoother = Add To Other Locales locales.addtoother = Add To Other Locales
@@ -682,10 +683,11 @@ objective.commandmode.name = Command Mode
objective.flag.name = Flag objective.flag.name = Flag
marker.shapetext.name = Shape Text marker.shapetext.name = Shape Text
marker.minimap.name = Minimap marker.point.name = Point
marker.shape.name = Shape marker.shape.name = Shape
marker.text.name = Text marker.text.name = Text
marker.line.name = Line marker.line.name = Line
marker.quad.name = Quad
marker.background = Background marker.background = Background
marker.outline = Outline marker.outline = Outline
@@ -773,8 +775,8 @@ sector.curlost = Sector Lost
sector.missingresources = [scarlet]Insufficient Core Resources sector.missingresources = [scarlet]Insufficient Core Resources
sector.attacked = Sector [accent]{0}[white] under attack! sector.attacked = Sector [accent]{0}[white] under attack!
sector.lost = Sector [accent]{0}[white] lost! 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.changeicon = Change Icon
sector.noswitch.title = Unable to Switch Sectors 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}[] 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.message.name = Message
block.reinforced-message.name = Reinforced Message block.reinforced-message.name = Reinforced Message
block.world-message.name = World Message block.world-message.name = World Message
block.world-switch.name = World Switch
block.illuminator.name = Illuminator block.illuminator.name = Illuminator
block.overflow-gate.name = Overflow Gate block.overflow-gate.name = Overflow Gate
block.underflow-gate.name = Underflow Gate block.underflow-gate.name = Underflow Gate
@@ -2312,6 +2315,8 @@ lst.getblock = Get tile data at any location.
lst.setblock = Set tile data at any location. lst.setblock = Set tile data at any location.
lst.spawnunit = Spawn unit at a location. lst.spawnunit = Spawn unit at a location.
lst.applystatus = Apply or clear a status effect from a unit. lst.applystatus = Apply or clear a status effect from a unit.
lst.weathersensor = Check if a type of weather is active.
lst.weatherset = Set the current state of a type of weather.
lst.spawnwave = Spawn a wave. lst.spawnwave = Spawn a wave.
lst.explosion = Create an explosion at a location. lst.explosion = Create an explosion at a location.
lst.setrate = Set processor execution speed in instructions/tick. lst.setrate = Set processor execution speed in instructions/tick.
@@ -2329,6 +2334,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.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. 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. 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.type = Type of building/unit.\ne.g. for any router, this will return [accent]@router[].\nNot a string.
@@ -2485,3 +2533,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.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.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.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.

View File

@@ -489,6 +489,7 @@ editor.default = [lightgray]<Па змаўчанні>
details = Падрабязнасці... details = Падрабязнасці...
edit = Рэдагаваць... edit = Рэдагаваць...
variables = Пераменныя variables = Пераменныя
logic.globals = Built-in Variables
editor.name = Назва: editor.name = Назва:
editor.spawn = Стварыць баявую адзінку editor.spawn = Стварыць баявую адзінку
editor.removeunit = Выдаліць баявую адзінку editor.removeunit = Выдаліць баявую адзінку
@@ -664,10 +665,11 @@ objective.destroycore.name = Знішчыць Ядро
objective.commandmode.name = Рэжым Загадаў objective.commandmode.name = Рэжым Загадаў
objective.flag.name = Сцяг objective.flag.name = Сцяг
marker.shapetext.name = Форма Тэксту marker.shapetext.name = Форма Тэксту
marker.minimap.name = Міні-Мапа marker.point.name = Point
marker.shape.name = Форма marker.shape.name = Форма
marker.text.name = Тэкст marker.text.name = Тэкст
marker.line.name = Line marker.line.name = Line
marker.quad.name = Quad
marker.background = Задні Фон marker.background = Задні Фон
marker.outline = Контур marker.outline = Контур
objective.research = [accent]Даследаваць:\n[]{0}[lightgray]{1} objective.research = [accent]Даследаваць:\n[]{0}[lightgray]{1}
@@ -751,6 +753,7 @@ sector.missingresources = [scarlet]Insufficient Core Resources
sector.attacked = Сектар [accent]{0}[white] атакуецца! sector.attacked = Сектар [accent]{0}[white] атакуецца!
sector.lost = Сектар [accent]{0}[white] згублены! sector.lost = Сектар [accent]{0}[white] згублены!
sector.capture = Sector [accent]{0}[white]Captured! sector.capture = Sector [accent]{0}[white]Captured!
sector.capture.current = Sector Captured!
sector.changeicon = Змяніць Іконку sector.changeicon = Змяніць Іконку
sector.noswitch.title = Немагчыма Пераключыцца на Сектар sector.noswitch.title = Немагчыма Пераключыцца на Сектар
sector.noswitch = Вы не можаце пераключацца на сектары калі гэты сектар атакуецца.\n\nСектар: [accent]{0}[] у [accent]{1}[] sector.noswitch = Вы не можаце пераключацца на сектары калі гэты сектар атакуецца.\n\nСектар: [accent]{0}[] у [accent]{1}[]
@@ -1529,6 +1532,7 @@ block.inverted-sorter.name = Інвертаваны сартавальнік
block.message.name = Паведамленне block.message.name = Паведамленне
block.reinforced-message.name = Узмоцненнае Паведамленне block.reinforced-message.name = Узмоцненнае Паведамленне
block.world-message.name = Паведамленне Свету block.world-message.name = Паведамленне Свету
block.world-switch.name = World Switch
block.illuminator.name = Асвятляльнік block.illuminator.name = Асвятляльнік
block.overflow-gate.name = Залішнi затвор block.overflow-gate.name = Залішнi затвор
block.underflow-gate.name = Залішнi шлюз block.underflow-gate.name = Залішнi шлюз
@@ -2260,6 +2264,8 @@ lst.getblock = Get tile data at any location.
lst.setblock = Set tile data at any location. lst.setblock = Set tile data at any location.
lst.spawnunit = Spawn unit at a location. lst.spawnunit = Spawn unit at a location.
lst.applystatus = Apply or clear a status effect from a uniut. lst.applystatus = Apply or clear a status effect from a uniut.
lst.weathersensor = Check if a type of weather is active.
lst.weatherset = Set the current state of a type of weather.
lst.spawnwave = Simulate a wave being spawned at a arbitrary location.\nWill not increment the wave counter. lst.spawnwave = Simulate a wave being spawned at a arbitrary location.\nWill not increment the wave counter.
lst.explosion = Create an explosion at a location. lst.explosion = Create an explosion at a location.
lst.setrate = Set processor execution speed in instructions/tick. lst.setrate = Set processor execution speed in instructions/tick.
@@ -2276,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.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.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. 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. 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.type = Type of building/unit.\ne.g. for any router, this will return [accent]@router[].\nNot a string.
lenum.shoot = Shoot at a position. lenum.shoot = Shoot at a position.
@@ -2412,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.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.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.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.

View File

@@ -495,6 +495,7 @@ editor.default = [lightgray]<Стандартно>
details = Детайли... details = Детайли...
edit = Редактирай... edit = Редактирай...
variables = Vars variables = Vars
logic.globals = Built-in Variables
editor.name = Име: editor.name = Име:
editor.spawn = Създай Единица editor.spawn = Създай Единица
editor.removeunit = Премахни Единица editor.removeunit = Премахни Единица
@@ -670,10 +671,11 @@ objective.destroycore.name = Destroy Core
objective.commandmode.name = Command Mode objective.commandmode.name = Command Mode
objective.flag.name = Flag objective.flag.name = Flag
marker.shapetext.name = Shape Text marker.shapetext.name = Shape Text
marker.minimap.name = Minimap marker.point.name = Point
marker.shape.name = Shape marker.shape.name = Shape
marker.text.name = Text marker.text.name = Text
marker.line.name = Line marker.line.name = Line
marker.quad.name = Quad
marker.background = Background marker.background = Background
marker.outline = Outline marker.outline = Outline
objective.research = [accent]Research:\n[]{0}[lightgray]{1} objective.research = [accent]Research:\n[]{0}[lightgray]{1}
@@ -758,6 +760,7 @@ sector.missingresources = [scarlet]Недостатъчни ресурси в я
sector.attacked = Зона [accent]{0}[white] е под атака! sector.attacked = Зона [accent]{0}[white] е под атака!
sector.lost = Зона [accent]{0}[white] беше загубена! sector.lost = Зона [accent]{0}[white] беше загубена!
sector.capture = Sector [accent]{0}[white]Captured! sector.capture = Sector [accent]{0}[white]Captured!
sector.capture.current = Sector Captured!
sector.changeicon = Change Icon sector.changeicon = Change Icon
sector.noswitch.title = Unable to Switch Sectors 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}[] 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.message.name = Съобщение
block.reinforced-message.name = Reinforced Message block.reinforced-message.name = Reinforced Message
block.world-message.name = World Message block.world-message.name = World Message
block.world-switch.name = World Switch
block.illuminator.name = Осветител block.illuminator.name = Осветител
block.overflow-gate.name = Преливаща Порта block.overflow-gate.name = Преливаща Порта
block.underflow-gate.name = Обратна Преливаща Порта block.underflow-gate.name = Обратна Преливаща Порта
@@ -2274,6 +2278,8 @@ lst.getblock = Get tile data at any location.
lst.setblock = Set tile data at any location. lst.setblock = Set tile data at any location.
lst.spawnunit = Spawn unit at a location. lst.spawnunit = Spawn unit at a location.
lst.applystatus = Apply or clear a status effect from a uniut. lst.applystatus = Apply or clear a status effect from a uniut.
lst.weathersensor = Check if a type of weather is active.
lst.weatherset = Set the current state of a type of weather.
lst.spawnwave = Simulate a wave being spawned at a arbitrary location.\nWill not increment the wave counter. lst.spawnwave = Simulate a wave being spawned at a arbitrary location.\nWill not increment the wave counter.
lst.explosion = Create an explosion at a location. lst.explosion = Create an explosion at a location.
lst.setrate = Set processor execution speed in instructions/tick. lst.setrate = Set processor execution speed in instructions/tick.
@@ -2290,6 +2296,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.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.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. 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]Действия за строене на единици не са позволени тук. logic.nounitbuild = [red]Действия за строене на единици не са позволени тук.
@@ -2442,3 +2484,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.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.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.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.

View File

@@ -495,6 +495,7 @@ editor.default = [lightgray]<Per defecte>
details = Detalls details = Detalls
edit = Edita edit = Edita
variables = Variables variables = Variables
logic.globals = Built-in Variables
editor.name = Nom: editor.name = Nom:
editor.spawn = Genera una unitat editor.spawn = Genera una unitat
editor.removeunit = Treu una unitat editor.removeunit = Treu una unitat
@@ -673,10 +674,11 @@ objective.destroycore.name = Destrueix el nucli
objective.commandmode.name = Mode de comandament objective.commandmode.name = Mode de comandament
objective.flag.name = Bandera objective.flag.name = Bandera
marker.shapetext.name = Forma del text marker.shapetext.name = Forma del text
marker.minimap.name = Minimapa marker.point.name = Punt
marker.shape.name = Forma marker.shape.name = Forma
marker.text.name = Text marker.text.name = Text
marker.line.name = Línia marker.line.name = Línia
marker.quad.name = Rectangle
marker.background = Fons marker.background = Fons
marker.outline = Contorn marker.outline = Contorn
@@ -761,7 +763,8 @@ sector.curlost = Sector perdut
sector.missingresources = [scarlet]Recursos insuficients al nucli sector.missingresources = [scarlet]Recursos insuficients al nucli
sector.attacked = Ataquen el sector [accent]{0}[white]! sector.attacked = Ataquen el sector [accent]{0}[white]!
sector.lost = Heu perdut el sector [accent]{0}[white]! sector.lost = Heu perdut el sector [accent]{0}[white]!
sector.capture = Sector [accent]{0}[white]Captured! sector.capture = Sha capturat el sector [accent]{0}[white]!
sector.capture.current = Sector capturat!
sector.changeicon = Canvia la icona sector.changeicon = Canvia la icona
sector.noswitch.title = Els sectors no es poden canviar. sector.noswitch.title = Els sectors no es poden canviar.
sector.noswitch = Potser no podeu canviar de sector perquè nataquen un altre.\n\nSector: [accent]{0}[] de [accent]{1}[] sector.noswitch = Potser no podeu canviar de sector perquè nataquen 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.mutesound.name = Silencia el so
setting.crashreport.name = Envia informes derror anònims setting.crashreport.name = Envia informes derror anònims
setting.savecreate.name = Desa automàticament la partida 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.playerlimit.name = Límit de jugadors
setting.chatopacity.name = Opacitat del xat setting.chatopacity.name = Opacitat del xat
setting.lasersopacity.name = Opacitat dels làsers denergia setting.lasersopacity.name = Opacitat dels làsers denergia
@@ -1547,6 +1550,7 @@ block.inverted-sorter.name = Classificador invers
block.message.name = Missatge block.message.name = Missatge
block.reinforced-message.name = Missatge destacat block.reinforced-message.name = Missatge destacat
block.world-message.name = Missatge mundial block.world-message.name = Missatge mundial
block.world-switch.name = Interruptor mundial
block.illuminator.name = Il·luminador block.illuminator.name = Il·luminador
block.overflow-gate.name = Porta de desbordament block.overflow-gate.name = Porta de desbordament
block.underflow-gate.name = Porta de subdesbordament 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.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.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 = Sapropa un enemic. Prepareu la defensa. onset.enemies = Sapropa un enemic. Prepareu la defensa.
onset.defenses = [accent]Set up defenses:[lightgray] {0} onset.defenses = [accent]Establiu defenses:[lightgray] {0}
onset.attack = Lenemic és vulnerable. Contraataqueu. onset.attack = Lenemic é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.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 = Lenemic us detectarà daquí 2 minuts.\nEstabliu les defenses i les explotacions mineres i de producció. onset.detect = Lenemic us detectarà daquí 2 minuts.\nEstabliu les defenses i les explotacions mineres i de producció.
@@ -2284,6 +2288,8 @@ lst.getblock = Obtén les dades dun bloc en qualsevol posició.
lst.setblock = Estableix les dades dun bloc en qualsevol posició. lst.setblock = Estableix les dades dun bloc en qualsevol posició.
lst.spawnunit = Fes aparèixer una unitat en una posició. lst.spawnunit = Fes aparèixer una unitat en una posició.
lst.applystatus = Aplica o esborra un efecte destat duna unitat. lst.applystatus = Aplica o esborra un efecte destat duna unitat.
lst.weathersensor = Check if a type of weather is active.
lst.weatherset = Set the current state of a type of weather.
lst.spawnwave = Simula laparició duna onada enemiga en una posició arbitrària.\nEl comptador donades no sincrementarà. lst.spawnwave = Simula laparició duna onada enemiga en una posició arbitrària.\nEl comptador donades no sincrementarà.
lst.explosion = Crea una explosió en una posició. lst.explosion = Crea una explosió en una posició.
lst.setrate = Estableix la velocitat dexecució del processador en instruccions/tic. lst.setrate = Estableix la velocitat dexecució del processador en instruccions/tic.
@@ -2300,6 +2306,42 @@ lst.sync = Sincronitza una variable a través de la xarxa.\nSinvoca com a mol
lst.makemarker = Crea una marca lògica al món.\nSha de donar un ID per a identificar-la.\nEs poden establir fins a 20.000 marcadors per món. lst.makemarker = Crea una marca lògica al món.\nSha 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.\nLID que es faci servir ha de ser el mateix que el de la instrucció de crear la marca. lst.setmarker = Estableix una propietat per a la marca.\nLID 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. 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. logic.nounitbuild = [red]Aquí no es permet construir blocs de tipus lògic.
@@ -2451,7 +2493,10 @@ lenum.build = Construeix una estructura.
lenum.getblock = Obté un bloc i el seu tipus a les coordenades indicades.\nLa posició escollida ha destar a labast de la unitat.\nEls blocs que no són construccions tindran el tipus [accent]@solid[]. lenum.getblock = Obté un bloc i el seu tipus a les coordenades indicades.\nLa posició escollida ha destar a labast de la unitat.\nEls blocs que no són construccions tindran el tipus [accent]@solid[].
lenum.within = Comprova si la unitat està a prop duna posició. lenum.within = Comprova si la unitat està a prop duna posició.
lenum.boost = Inicia/Detén el vol. 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.flushtext = Passa el contingut de la cua dimpressió al marcador, si es pot.\nSi sestableix «fetch» a vertader, sintentarà carregar les propietats de la traducció del mapa o del joc.
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.texture = Nom de la textura directa de latles de textures del joc (amb lestil de noms kebab-case).\nSi «printFlush» sestableix a vertader, consumeix el contingut de la cua dimpressió com a argument de text.
lenum.texturesize = Size of texture in tiles. Zero value scales marker width to original texture's size. lenum.texturesize = Mida de la textura a les caselles. Un valor de zero indica que sha d'escalar lamplada del marcador a la mida original de la textura.
lenum.autoscale = Whether to scale marker corresponding to player's zoom level. 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.

View File

@@ -153,12 +153,12 @@ mod.unmetdependencies = [red]Nesplněné Dependencies
mod.erroredcontent = [scarlet]V obsahu jsou chyby[] mod.erroredcontent = [scarlet]V obsahu jsou chyby[]
mod.circulardependencies = [red]Kruhové Dependencies mod.circulardependencies = [red]Kruhové Dependencies
mod.incompletedependencies = [red]Nedokončené 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.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 = 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.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 = This mod has been manually blacklisted for causing crashes or other issues with this version of the game. Do not use it. 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 = This mod is missing dependencies: {0} mod.missingdependencies.details = Tomuto módu chybí závislosti: {0}
mod.erroredcontent.details = This game caused errors when loading. Ask the mod author to fix them. mod.erroredcontent.details = Tato hra způsobovala chyby při načítání. Požádejte autora módu o jejich opravu.
mod.circulardependencies.details = This mod has dependencies that depends on each other. 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.incompletedependencies.details = This mod is unable to be loaded due to invalid or missing dependencies: {0}.
mod.requiresversion = Requires game version: [red]{0} mod.requiresversion = Requires game version: [red]{0}
mod.errors = Při načítání obsahu hry se vyskytly problémy. 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.joined = Krát Připojen: [accent]{0}
trace.times.kicked = Krát Vyhozen: [accent]{0} trace.times.kicked = Krát Vyhozen: [accent]{0}
trace.ips = IPs: trace.ips = IPs:
trace.names = Names: trace.names = Jména:
invalidid = Neplatná adresa IP klienta! Zašli prosím zprávu o chybě. invalidid = Neplatná adresa IP klienta! Zašli prosím zprávu o chybě.
player.ban = Ban player.ban = Ban
player.kick = Kick player.kick = Vyhodit
player.trace = Trace player.trace = Trace
player.admin = Toggle Admin player.admin = Přepínání správce
player.team = Change Team player.team = Změnit tým
server.bans = Zákazy server.bans = Zákazy
server.bans.none = Žádní hráči se zákazem nebyli nalezeni. server.bans.none = Žádní hráči se zákazem nebyli nalezeni.
server.admins = Správci server.admins = Správci
@@ -340,13 +340,14 @@ ok = OK
open = Otevřít open = Otevřít
customize = Přizpůsobit pravidla customize = Přizpůsobit pravidla
cancel = Zrušit cancel = Zrušit
command = Command command = Velet
command.queue = [lightgray][Queuing] command.queue = Queue
command.mine = Mine command.mine = Těžit
command.repair = Repair command.repair = Opravovat
command.rebuild = Rebuild command.rebuild = Přestavět
command.assist = Assist Player command.assist = Asistovat hráči
command.move = Move command.move = Pohyb
command.boost = Boost command.boost = Boost
command.enterPayload = Enter Payload Block command.enterPayload = Enter Payload Block
command.loadUnits = Load Units command.loadUnits = Load Units
@@ -362,7 +363,7 @@ openlink = Otevřít odkaz
copylink = Zkopírovat odkaz copylink = Zkopírovat odkaz
back = Zpět back = Zpět
max = Max max = Max
objective = Map Objective objective = Úkol mapy
crash.export = Exportovat záznamy o zhroucení hry crash.export = Exportovat záznamy o zhroucení hry
crash.none = Záznamy o zhroucení hry nebyly nalezeny. crash.none = Záznamy o zhroucení hry nebyly nalezeny.
crash.exported = Záznamy o zhroucení hry byly exportovány. 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í resumebuilding = [scarlet][[{0}][] bude pokračovat ve stavění
enablebuilding = [scarlet][[{0}][] povolí stavení enablebuilding = [scarlet][[{0}][] povolí stavení
showui = UI je skryto.\nZmáčkni [accent][[{0}][] pro jeho zobrazení. 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] commandmode.nounits = [no units]
wave = [accent]Vlna číslo {0}[] wave = [accent]Vlna číslo {0}[]
wave.cap = [accent]Vlna {0} z {1}[] wave.cap = [accent]Vlna {0} z {1}[]
@@ -495,6 +496,7 @@ editor.default = [lightgray]<Výchozí>[]
details = Podrobnosti... details = Podrobnosti...
edit = Upravit... edit = Upravit...
variables = Hodnoty variables = Hodnoty
logic.globals = Built-in Variables
editor.name = Jméno: editor.name = Jméno:
editor.spawn = Zrodit jednotku editor.spawn = Zrodit jednotku
editor.removeunit = Odstranit jednotku editor.removeunit = Odstranit jednotku
@@ -671,10 +673,11 @@ objective.destroycore.name = Zničit Jádro
objective.commandmode.name = Příkazovy Režim objective.commandmode.name = Příkazovy Režim
objective.flag.name = Vlajka objective.flag.name = Vlajka
marker.shapetext.name = Shape Text marker.shapetext.name = Shape Text
marker.minimap.name = Minimapa marker.point.name = Point
marker.shape.name = Tvar marker.shape.name = Tvar
marker.text.name = Text marker.text.name = Text
marker.line.name = Line marker.line.name = Line
marker.quad.name = Quad
marker.background = Pozadí marker.background = Pozadí
marker.outline = Outline marker.outline = Outline
objective.research = [accent]Research:\n[]{0}[lightgray]{1} objective.research = [accent]Research:\n[]{0}[lightgray]{1}
@@ -704,7 +707,7 @@ bannedunits.whitelist = Banned Units As Whitelist
bannedblocks.whitelist = Banned Blocks As Whitelist bannedblocks.whitelist = Banned Blocks As Whitelist
addall = Přidat vše addall = Přidat vše
launch.from = Vysláno z: [accent]{0} 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} launch.destination = Cíl: {0}
configure.invalid = Hodnota musí být číslo mezi 0 a {0}. configure.invalid = Hodnota musí být číslo mezi 0 a {0}.
add = Přidat... add = Přidat...
@@ -734,8 +737,8 @@ sectorlist.attacked = {0} pod útokem
sectors.unexplored = [lightgray]Neprozkoumáno sectors.unexplored = [lightgray]Neprozkoumáno
sectors.resources = Zdroje: sectors.resources = Zdroje:
sectors.production = Výroba: sectors.production = Výroba:
sectors.export = Export: sectors.export = Exportovat:
sectors.import = Import: sectors.import = Importovat:
sectors.time = Čas: sectors.time = Čas:
sectors.threat = Ohrožení: sectors.threat = Ohrožení:
sectors.wave = Vlna: 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.attacked = Sektor [accent]{0}[white] pod útokem!
sector.lost = Sektor [accent]{0}[white] ztracen! :( sector.lost = Sektor [accent]{0}[white] ztracen! :(
sector.capture = Sector [accent]{0}[white]Captured! sector.capture = Sector [accent]{0}[white]Captured!
sector.capture.current = Sector Captured!
sector.changeicon = Změnit Ikonu sector.changeicon = Změnit Ikonu
sector.noswitch.title = Nelze Vyměnit Sektor 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}[] 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.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.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.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.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 = 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.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 = The Onset sector.onset.name = Nástup
sector.aegis.name = Aegis sector.aegis.name = Aegis
sector.lake.name = Lake sector.lake.name = Jezero
sector.intersect.name = Intersect sector.intersect.name = Průsečík
sector.atlas.name = Atlas sector.atlas.name = Atlas
sector.split.name = Split sector.split.name = Rozdělení
sector.basin.name = Basin sector.basin.name = Povodí
sector.marsh.name = Marsh sector.marsh.name = Marš
sector.peaks.name = Peaks sector.peaks.name = Vrcholy
sector.ravine.name = Ravine sector.ravine.name = Rokle
sector.caldera-erekir.name = Caldera sector.caldera-erekir.name = Kaldera
sector.stronghold.name = Stronghold sector.stronghold.name = Pevnost
sector.crevice.name = Crevice sector.crevice.name = Štěrbina
sector.siege.name = Siege sector.siege.name = Obléhání
sector.crossroads.name = Crossroads sector.crossroads.name = Křižovatka
sector.karst.name = Karst sector.karst.name = Kras
sector.origin.name = Origin sector.origin.name = Původ
sector.onset.description = Commence the conquest of Erekir. Gather resources, produce units, and begin researching technology. 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.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 = 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.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 = 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.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 = 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.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 = The minimal enemy presence in this sector makes it perfect for testing new transport tech. 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 = Large enemy presence detected in this sector.\nBuild units quickly and capture enemy cores to gain a foothold. 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 = This sector has an abundance of arkycite, but has limited vents.\nBuild [accent]Chemical Combustion Chambers[] to generate power. 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 = 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.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 = 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.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 = The resources detected in this sector are scattered across several islands.\nResearch and deploy drone-based transportation. 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 = The large enemy encampment in this sector guards significant deposits of [accent]thorium[].\nUse it to develop higher tier units and turrets. 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 = 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.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 = 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.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 = 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.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 = 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.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 = The final sector with a significant enemy presence.\nNo probable research opportunities remain - focus solely on destroying all enemy cores. 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.burning.name = Hořící
status.freezing.name = Mrazí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.message.name = Zpráva
block.reinforced-message.name = Posílená Zpráva block.reinforced-message.name = Posílená Zpráva
block.world-message.name = Světová Zpráva block.world-message.name = Světová Zpráva
block.world-switch.name = World Switch
block.illuminator.name = Osvětlovač block.illuminator.name = Osvětlovač
block.overflow-gate.name = Brána s přepadem block.overflow-gate.name = Brána s přepadem
block.underflow-gate.name = Brána s podtokem block.underflow-gate.name = Brána s podtokem
@@ -2278,6 +2283,8 @@ lst.getblock = Get tile data at any location.
lst.setblock = Set tile data at any location. lst.setblock = Set tile data at any location.
lst.spawnunit = Spawn unit at a location. lst.spawnunit = Spawn unit at a location.
lst.applystatus = Apply or clear a status effect from a uniut. lst.applystatus = Apply or clear a status effect from a uniut.
lst.weathersensor = Check if a type of weather is active.
lst.weatherset = Set the current state of a type of weather.
lst.spawnwave = Simulate a wave being spawned at a arbitrary location.\nWill not increment the wave counter. lst.spawnwave = Simulate a wave being spawned at a arbitrary location.\nWill not increment the wave counter.
lst.explosion = Create an explosion at a location. lst.explosion = Create an explosion at a location.
lst.setrate = Set processor execution speed in instructions/tick. lst.setrate = Set processor execution speed in instructions/tick.
@@ -2294,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.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.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. 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é. logic.nounitbuild = [red]Stavba budov pomoci jednotek kontrolované procesorem neni povolené.
@@ -2449,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.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.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.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.

View File

@@ -490,6 +490,7 @@ editor.default = [lightgray]<standard>
details = Detaljer... details = Detaljer...
edit = Rediger... edit = Rediger...
variables = Vars variables = Vars
logic.globals = Built-in Variables
editor.name = Navn: editor.name = Navn:
editor.spawn = Påkald enhed editor.spawn = Påkald enhed
editor.removeunit = Fjern enhed editor.removeunit = Fjern enhed
@@ -665,10 +666,11 @@ objective.destroycore.name = Destroy Core
objective.commandmode.name = Command Mode objective.commandmode.name = Command Mode
objective.flag.name = Flag objective.flag.name = Flag
marker.shapetext.name = Shape Text marker.shapetext.name = Shape Text
marker.minimap.name = Minimap marker.point.name = Point
marker.shape.name = Shape marker.shape.name = Shape
marker.text.name = Text marker.text.name = Text
marker.line.name = Line marker.line.name = Line
marker.quad.name = Quad
marker.background = Background marker.background = Background
marker.outline = Outline marker.outline = Outline
objective.research = [accent]Research:\n[]{0}[lightgray]{1} 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.attacked = Sector [accent]{0}[white] under attack!
sector.lost = Sector [accent]{0}[white] lost! sector.lost = Sector [accent]{0}[white] lost!
sector.capture = Sector [accent]{0}[white]Captured! sector.capture = Sector [accent]{0}[white]Captured!
sector.capture.current = Sector Captured!
sector.changeicon = Change Icon sector.changeicon = Change Icon
sector.noswitch.title = Unable to Switch Sectors 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}[] 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.message.name = Besked
block.reinforced-message.name = Reinforced Message block.reinforced-message.name = Reinforced Message
block.world-message.name = World Message block.world-message.name = World Message
block.world-switch.name = World Switch
block.illuminator.name = Lyskilde block.illuminator.name = Lyskilde
block.overflow-gate.name = Overflods-låge block.overflow-gate.name = Overflods-låge
block.underflow-gate.name = Underflods-låge block.underflow-gate.name = Underflods-låge
@@ -2260,6 +2264,8 @@ lst.getblock = Get tile data at any location.
lst.setblock = Set tile data at any location. lst.setblock = Set tile data at any location.
lst.spawnunit = Spawn unit at a location. lst.spawnunit = Spawn unit at a location.
lst.applystatus = Apply or clear a status effect from a uniut. lst.applystatus = Apply or clear a status effect from a uniut.
lst.weathersensor = Check if a type of weather is active.
lst.weatherset = Set the current state of a type of weather.
lst.spawnwave = Simulate a wave being spawned at a arbitrary location.\nWill not increment the wave counter. lst.spawnwave = Simulate a wave being spawned at a arbitrary location.\nWill not increment the wave counter.
lst.explosion = Create an explosion at a location. lst.explosion = Create an explosion at a location.
lst.setrate = Set processor execution speed in instructions/tick. lst.setrate = Set processor execution speed in instructions/tick.
@@ -2276,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.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.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. 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. 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.type = Type of building/unit.\ne.g. for any router, this will return [accent]@router[].\nNot a string.
lenum.shoot = Shoot at a position. lenum.shoot = Shoot at a position.
@@ -2412,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.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.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.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.

View File

@@ -498,6 +498,7 @@ editor.default = [lightgray]<Standard>
details = Details details = Details
edit = Bearbeiten edit = Bearbeiten
variables = Variablen variables = Variablen
logic.globals = Built-in Variables
editor.name = Name: editor.name = Name:
editor.spawn = Spawnbereich editor.spawn = Spawnbereich
editor.removeunit = Bereich entfernen editor.removeunit = Bereich entfernen
@@ -678,10 +679,11 @@ objective.commandmode.name = Steuerungsmodus
objective.flag.name = Flag objective.flag.name = Flag
marker.shapetext.name = Geformter Text marker.shapetext.name = Geformter Text
marker.minimap.name = Minimap marker.point.name = Point
marker.shape.name = Form marker.shape.name = Form
marker.text.name = Text marker.text.name = Text
marker.line.name = Line marker.line.name = Line
marker.quad.name = Quad
marker.background = Hintergrund marker.background = Hintergrund
marker.outline = Umriss marker.outline = Umriss
@@ -770,6 +772,7 @@ sector.missingresources = [scarlet]Fehlende Kernressourcen
sector.attacked = Sektor [accent]{0}[white] wird angegriffen! sector.attacked = Sektor [accent]{0}[white] wird angegriffen!
sector.lost = Sektor [accent]{0}[white] verloren! sector.lost = Sektor [accent]{0}[white] verloren!
sector.capture = Sector [accent]{0}[white]Captured! sector.capture = Sector [accent]{0}[white]Captured!
sector.capture.current = Sector Captured!
sector.changeicon = Bild ändern sector.changeicon = Bild ändern
sector.noswitch.title = Kann Sektoren nicht wechseln 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}[] 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.message.name = Nachricht
block.reinforced-message.name = Verstärkte Nachricht block.reinforced-message.name = Verstärkte Nachricht
block.world-message.name = Weltnachricht block.world-message.name = Weltnachricht
block.world-switch.name = World Switch
block.illuminator.name = Illuminierer block.illuminator.name = Illuminierer
block.overflow-gate.name = Überlauftor block.overflow-gate.name = Überlauftor
block.underflow-gate.name = Unterlauftor block.underflow-gate.name = Unterlauftor
@@ -2309,6 +2313,8 @@ lst.getblock = Lese Tile-Daten von jedem Standort.
lst.setblock = Setze Tile-Daten an jedem Standort. lst.setblock = Setze Tile-Daten an jedem Standort.
lst.spawnunit = Einheit an einem Standort erstellen. lst.spawnunit = Einheit an einem Standort erstellen.
lst.applystatus = Füge einer Einheit einen Effekt hinzu oder entferne ihn. lst.applystatus = Füge einer Einheit einen Effekt hinzu oder entferne ihn.
lst.weathersensor = Check if a type of weather is active.
lst.weatherset = Set the current state of a type of weather.
lst.spawnwave = Schickt die nächste Welle. lst.spawnwave = Schickt die nächste Welle.
lst.explosion = Erstellt an einer beliebigen Stelle eine Explosion. lst.explosion = Erstellt an einer beliebigen Stelle eine Explosion.
lst.setrate = Setzt die Ausführungsgeschwindigkeit von Prozessoren in Anweisungen/tick. lst.setrate = Setzt die Ausführungsgeschwindigkeit von Prozessoren in Anweisungen/tick.
@@ -2325,6 +2331,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.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.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. 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. logic.nounitbuild = [red]Logik, die Blöcke baut, ist hier nicht erlaubt.
@@ -2481,3 +2523,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.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.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.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.

View File

@@ -495,6 +495,7 @@ editor.default = [lightgray]<Por defecto>
details = Detalles... details = Detalles...
edit = Editar... edit = Editar...
variables = Variables variables = Variables
logic.globals = Built-in Variables
editor.name = Nombre: editor.name = Nombre:
editor.spawn = Generar unidad editor.spawn = Generar unidad
editor.removeunit = Eliminar unidad editor.removeunit = Eliminar unidad
@@ -675,10 +676,11 @@ objective.commandmode.name = Modo comando
objective.flag.name = Bandera objective.flag.name = Bandera
marker.shapetext.name = Forma del texto marker.shapetext.name = Forma del texto
marker.minimap.name = Minimapa marker.point.name = Point
marker.shape.name = Forma marker.shape.name = Forma
marker.text.name = Texto marker.text.name = Texto
marker.line.name = Line marker.line.name = Line
marker.quad.name = Quad
marker.background = Fondo marker.background = Fondo
marker.outline = Bordes 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.attacked = ¡Sector [accent]{0}[white] bajo ataque!
sector.lost = ¡Sector [accent]{0}[white] perdido! sector.lost = ¡Sector [accent]{0}[white] perdido!
sector.capture = Sector [accent]{0}[white]Captured! sector.capture = Sector [accent]{0}[white]Captured!
sector.capture.current = Sector Captured!
sector.changeicon = Cambiar icono sector.changeicon = Cambiar icono
sector.noswitch.title = No se pueden cambiar los sectores 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}[] 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.message.name = Mensaje
block.reinforced-message.name = Mensaje reforzado block.reinforced-message.name = Mensaje reforzado
block.world-message.name = Mensaje estático block.world-message.name = Mensaje estático
block.world-switch.name = World Switch
block.illuminator.name = Iluminador block.illuminator.name = Iluminador
block.overflow-gate.name = Compuerta de desborde block.overflow-gate.name = Compuerta de desborde
block.underflow-gate.name = Compuerta de subdesbordamiento block.underflow-gate.name = Compuerta de subdesbordamiento
@@ -2302,6 +2306,8 @@ lst.getblock = Obtiene los datos de un bloque en cualquier lugar.
lst.setblock = Cambia los datos de un bloque en cualquier lugar. lst.setblock = Cambia los datos de un bloque en cualquier lugar.
lst.spawnunit = Crea una unidad en una localización. lst.spawnunit = Crea una unidad en una localización.
lst.applystatus = Aplica o elimina un efecto de alteración de estado a una unidad. lst.applystatus = Aplica o elimina un efecto de alteración de estado a una unidad.
lst.weathersensor = Check if a type of weather is active.
lst.weatherset = Set the current state of a type of weather.
lst.spawnwave = Simula la aparición de una oleada de enemigos en una localización arbitraria.\nNo incrementará el contador de oleadas. lst.spawnwave = Simula la aparición de una oleada de enemigos en una localización arbitraria.\nNo incrementará el contador de oleadas.
lst.explosion = Crea una explosión en una localización. lst.explosion = Crea una explosión en una localización.
lst.setrate = Establece la velocidad de ejecución de los procesadores lógicos en formato instrucción/tick. lst.setrate = Establece la velocidad de ejecución de los procesadores lógicos en formato instrucción/tick.
@@ -2318,6 +2324,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.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.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. 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. logic.nounitbuild = [red]No se permite construir bloques de categoría lógica.
@@ -2474,3 +2516,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.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.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.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.

View File

@@ -490,6 +490,7 @@ editor.default = [lightgray]<Vaikimisi>
details = Üksikasjad... details = Üksikasjad...
edit = Muuda... edit = Muuda...
variables = Vars variables = Vars
logic.globals = Built-in Variables
editor.name = Nimi: editor.name = Nimi:
editor.spawn = Tekita väeüksus editor.spawn = Tekita väeüksus
editor.removeunit = Eemalda väeüksus editor.removeunit = Eemalda väeüksus
@@ -665,10 +666,11 @@ objective.destroycore.name = Destroy Core
objective.commandmode.name = Command Mode objective.commandmode.name = Command Mode
objective.flag.name = Flag objective.flag.name = Flag
marker.shapetext.name = Shape Text marker.shapetext.name = Shape Text
marker.minimap.name = Minimap marker.point.name = Point
marker.shape.name = Shape marker.shape.name = Shape
marker.text.name = Text marker.text.name = Text
marker.line.name = Line marker.line.name = Line
marker.quad.name = Quad
marker.background = Background marker.background = Background
marker.outline = Outline marker.outline = Outline
objective.research = [accent]Research:\n[]{0}[lightgray]{1} 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.attacked = Sector [accent]{0}[white] under attack!
sector.lost = Sector [accent]{0}[white] lost! sector.lost = Sector [accent]{0}[white] lost!
sector.capture = Sector [accent]{0}[white]Captured! sector.capture = Sector [accent]{0}[white]Captured!
sector.capture.current = Sector Captured!
sector.changeicon = Change Icon sector.changeicon = Change Icon
sector.noswitch.title = Unable to Switch Sectors 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}[] 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.message.name = Sõnum
block.reinforced-message.name = Reinforced Message block.reinforced-message.name = Reinforced Message
block.world-message.name = World Message block.world-message.name = World Message
block.world-switch.name = World Switch
block.illuminator.name = Illuminator block.illuminator.name = Illuminator
block.overflow-gate.name = Ülevooluvärav block.overflow-gate.name = Ülevooluvärav
block.underflow-gate.name = Underflow Gate block.underflow-gate.name = Underflow Gate
@@ -2262,6 +2266,8 @@ lst.getblock = Get tile data at any location.
lst.setblock = Set tile data at any location. lst.setblock = Set tile data at any location.
lst.spawnunit = Spawn unit at a location. lst.spawnunit = Spawn unit at a location.
lst.applystatus = Apply or clear a status effect from a uniut. lst.applystatus = Apply or clear a status effect from a uniut.
lst.weathersensor = Check if a type of weather is active.
lst.weatherset = Set the current state of a type of weather.
lst.spawnwave = Simulate a wave being spawned at a arbitrary location.\nWill not increment the wave counter. lst.spawnwave = Simulate a wave being spawned at a arbitrary location.\nWill not increment the wave counter.
lst.explosion = Create an explosion at a location. lst.explosion = Create an explosion at a location.
lst.setrate = Set processor execution speed in instructions/tick. lst.setrate = Set processor execution speed in instructions/tick.
@@ -2278,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.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.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. 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. 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.type = Type of building/unit.\ne.g. for any router, this will return [accent]@router[].\nNot a string.
lenum.shoot = Shoot at a position. lenum.shoot = Shoot at a position.
@@ -2414,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.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.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.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.

View File

@@ -492,6 +492,7 @@ editor.default = [lightgray]<Lehenetsia>
details = Xehetasunak... details = Xehetasunak...
edit = Editatu... edit = Editatu...
variables = Vars variables = Vars
logic.globals = Built-in Variables
editor.name = Izena: editor.name = Izena:
editor.spawn = Sortu unitatea editor.spawn = Sortu unitatea
editor.removeunit = Kendu unitatea editor.removeunit = Kendu unitatea
@@ -667,10 +668,11 @@ objective.destroycore.name = Destroy Core
objective.commandmode.name = Command Mode objective.commandmode.name = Command Mode
objective.flag.name = Flag objective.flag.name = Flag
marker.shapetext.name = Shape Text marker.shapetext.name = Shape Text
marker.minimap.name = Minimap marker.point.name = Point
marker.shape.name = Shape marker.shape.name = Shape
marker.text.name = Text marker.text.name = Text
marker.line.name = Line marker.line.name = Line
marker.quad.name = Quad
marker.background = Background marker.background = Background
marker.outline = Outline marker.outline = Outline
objective.research = [accent]Research:\n[]{0}[lightgray]{1} 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.attacked = Sector [accent]{0}[white] under attack!
sector.lost = Sector [accent]{0}[white] lost! sector.lost = Sector [accent]{0}[white] lost!
sector.capture = Sector [accent]{0}[white]Captured! sector.capture = Sector [accent]{0}[white]Captured!
sector.capture.current = Sector Captured!
sector.changeicon = Change Icon sector.changeicon = Change Icon
sector.noswitch.title = Unable to Switch Sectors 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}[] 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.message.name = Mezua
block.reinforced-message.name = Reinforced Message block.reinforced-message.name = Reinforced Message
block.world-message.name = World Message block.world-message.name = World Message
block.world-switch.name = World Switch
block.illuminator.name = Illuminator block.illuminator.name = Illuminator
block.overflow-gate.name = Gainezkatze atea block.overflow-gate.name = Gainezkatze atea
block.underflow-gate.name = Underflow Gate block.underflow-gate.name = Underflow Gate
@@ -2264,6 +2268,8 @@ lst.getblock = Get tile data at any location.
lst.setblock = Set tile data at any location. lst.setblock = Set tile data at any location.
lst.spawnunit = Spawn unit at a location. lst.spawnunit = Spawn unit at a location.
lst.applystatus = Apply or clear a status effect from a uniut. lst.applystatus = Apply or clear a status effect from a uniut.
lst.weathersensor = Check if a type of weather is active.
lst.weatherset = Set the current state of a type of weather.
lst.spawnwave = Simulate a wave being spawned at a arbitrary location.\nWill not increment the wave counter. lst.spawnwave = Simulate a wave being spawned at a arbitrary location.\nWill not increment the wave counter.
lst.explosion = Create an explosion at a location. lst.explosion = Create an explosion at a location.
lst.setrate = Set processor execution speed in instructions/tick. lst.setrate = Set processor execution speed in instructions/tick.
@@ -2280,6 +2286,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.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.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. 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. 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.type = Type of building/unit.\ne.g. for any router, this will return [accent]@router[].\nNot a string.
lenum.shoot = Shoot at a position. lenum.shoot = Shoot at a position.
@@ -2416,3 +2458,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.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.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.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.

View File

@@ -490,6 +490,7 @@ editor.default = [lightgray]<Oletus>
details = Yksityiskohdat... details = Yksityiskohdat...
edit = Muokkaa... edit = Muokkaa...
variables = Muuttujat variables = Muuttujat
logic.globals = Built-in Variables
editor.name = Nimi: editor.name = Nimi:
editor.spawn = Luo yksikkö editor.spawn = Luo yksikkö
editor.removeunit = Poista yksikkö editor.removeunit = Poista yksikkö
@@ -665,10 +666,11 @@ objective.destroycore.name = Destroy Core
objective.commandmode.name = Command Mode objective.commandmode.name = Command Mode
objective.flag.name = Flag objective.flag.name = Flag
marker.shapetext.name = Shape Text marker.shapetext.name = Shape Text
marker.minimap.name = Pikkukartta marker.point.name = Point
marker.shape.name = Shape marker.shape.name = Shape
marker.text.name = Teksti marker.text.name = Teksti
marker.line.name = Line marker.line.name = Line
marker.quad.name = Quad
marker.background = Background marker.background = Background
marker.outline = Outline marker.outline = Outline
objective.research = [accent]Tutki:\n[]{0}[lightgray]{1} 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.attacked = Sektori [accent]{0}[white] on hyökkäyksen kohteena!
sector.lost = Sektori [accent]{0}[white] menetetty! sector.lost = Sektori [accent]{0}[white] menetetty!
sector.capture = Sector [accent]{0}[white]Captured! sector.capture = Sector [accent]{0}[white]Captured!
sector.capture.current = Sector Captured!
sector.changeicon = Vaihda kuvaketta sector.changeicon = Vaihda kuvaketta
sector.noswitch.title = Sektoria ei voida vaihtaa 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}[] 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.message.name = Viesti
block.reinforced-message.name = Reinforced Message block.reinforced-message.name = Reinforced Message
block.world-message.name = World Message block.world-message.name = World Message
block.world-switch.name = World Switch
block.illuminator.name = Lamppu block.illuminator.name = Lamppu
block.overflow-gate.name = Ylivuotoportti block.overflow-gate.name = Ylivuotoportti
block.underflow-gate.name = Alivuotoportti block.underflow-gate.name = Alivuotoportti
@@ -2265,6 +2269,8 @@ lst.getblock = Selvitä laattadata missä tahansa sijainnissa.
lst.setblock = Aseta laattadata missä tahansa sijainnissa. lst.setblock = Aseta laattadata missä tahansa sijainnissa.
lst.spawnunit = Luo joukko tietyssä sijainnissa. lst.spawnunit = Luo joukko tietyssä sijainnissa.
lst.applystatus = Lisää tai poista statusefekti yksiköltä. lst.applystatus = Lisää tai poista statusefekti yksiköltä.
lst.weathersensor = Check if a type of weather is active.
lst.weatherset = Set the current state of a type of weather.
lst.spawnwave = Simuloi tason syntymistä mielivaltaisessa sijainnissa.\nEi vaikuta tasolaskuriin. lst.spawnwave = Simuloi tason syntymistä mielivaltaisessa sijainnissa.\nEi vaikuta tasolaskuriin.
lst.explosion = Luo räjähdys tietyssä sijainnissa. lst.explosion = Luo räjähdys tietyssä sijainnissa.
lst.setrate = Aseta prosessorin suoritusnopeus ohjeessa/sekunti. lst.setrate = Aseta prosessorin suoritusnopeus ohjeessa/sekunti.
@@ -2281,6 +2287,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.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.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. 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. 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.type = Rakennuksen/Yksikön tyyppi.\nEsim. jokaisesta reitittimestä tämä palauttaa [accent]@router[].\nEi ole merkkijono.
lenum.shoot = Ammu tiettyä sijaintia. lenum.shoot = Ammu tiettyä sijaintia.
@@ -2417,3 +2459,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.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.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.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.

View File

@@ -490,6 +490,7 @@ editor.default = [lightgray]<Default>
details = Details... details = Details...
edit = Edit... edit = Edit...
variables = Vars variables = Vars
logic.globals = Built-in Variables
editor.name = Name: editor.name = Name:
editor.spawn = Spawn Unit editor.spawn = Spawn Unit
editor.removeunit = Remove Unit editor.removeunit = Remove Unit
@@ -665,10 +666,11 @@ objective.destroycore.name = Destroy Core
objective.commandmode.name = Command Mode objective.commandmode.name = Command Mode
objective.flag.name = Flag objective.flag.name = Flag
marker.shapetext.name = Shape Text marker.shapetext.name = Shape Text
marker.minimap.name = Minimap marker.point.name = Point
marker.shape.name = Shape marker.shape.name = Shape
marker.text.name = Text marker.text.name = Text
marker.line.name = Line marker.line.name = Line
marker.quad.name = Quad
marker.background = Background marker.background = Background
marker.outline = Outline marker.outline = Outline
objective.research = [accent]Research:\n[]{0}[lightgray]{1} 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.attacked = Ang sector [accent]{0}[white] ay inaatake!
sector.lost = Ang sector [accent]{0}[white] ay nawala! sector.lost = Ang sector [accent]{0}[white] ay nawala!
sector.capture = Sector [accent]{0}[white]Captured! sector.capture = Sector [accent]{0}[white]Captured!
sector.capture.current = Sector Captured!
sector.changeicon = Change Icon sector.changeicon = Change Icon
sector.noswitch.title = Unable to Switch Sectors 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}[] 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.message.name = Message
block.reinforced-message.name = Reinforced Message block.reinforced-message.name = Reinforced Message
block.world-message.name = World Message block.world-message.name = World Message
block.world-switch.name = World Switch
block.illuminator.name = Illuminator block.illuminator.name = Illuminator
block.overflow-gate.name = Overflow Gate block.overflow-gate.name = Overflow Gate
block.underflow-gate.name = Underflow Gate block.underflow-gate.name = Underflow Gate
@@ -2261,6 +2265,8 @@ lst.getblock = Get tile data at any location.
lst.setblock = Set tile data at any location. lst.setblock = Set tile data at any location.
lst.spawnunit = Spawn unit at a location. lst.spawnunit = Spawn unit at a location.
lst.applystatus = Apply or clear a status effect from a uniut. lst.applystatus = Apply or clear a status effect from a uniut.
lst.weathersensor = Check if a type of weather is active.
lst.weatherset = Set the current state of a type of weather.
lst.spawnwave = Simulate a wave being spawned at a arbitrary location.\nWill not increment the wave counter. lst.spawnwave = Simulate a wave being spawned at a arbitrary location.\nWill not increment the wave counter.
lst.explosion = Create an explosion at a location. lst.explosion = Create an explosion at a location.
lst.setrate = Set processor execution speed in instructions/tick. lst.setrate = Set processor execution speed in instructions/tick.
@@ -2277,6 +2283,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.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.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. 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. 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.type = Type of building/unit.\ne.g. for any router, this will return [accent]@router[].\nNot a string.
lenum.shoot = Shoot at a position. lenum.shoot = Shoot at a position.
@@ -2413,3 +2455,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.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.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.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.

View File

@@ -501,6 +501,7 @@ editor.default = [lightgray]<par défaut>
details = Détails... details = Détails...
edit = Modifier... edit = Modifier...
variables = Variables variables = Variables
logic.globals = Built-in Variables
editor.name = Nom : editor.name = Nom :
editor.spawn = Ajouter une unité editor.spawn = Ajouter une unité
editor.removeunit = Retirer l'unité editor.removeunit = Retirer l'unité
@@ -681,10 +682,11 @@ objective.commandmode.name = Mode « Commande »
objective.flag.name = Drapeau objective.flag.name = Drapeau
marker.shapetext.name = Forme de Texte marker.shapetext.name = Forme de Texte
marker.minimap.name = Minicarte marker.point.name = Point
marker.shape.name = Forme marker.shape.name = Forme
marker.text.name = Texte marker.text.name = Texte
marker.line.name = Ligne marker.line.name = Ligne
marker.quad.name = Quad
marker.background = Fond marker.background = Fond
marker.outline = Contour marker.outline = Contour
@@ -773,6 +775,7 @@ sector.missingresources = [scarlet]Ressources du Noyau insuffisantes !
sector.attacked = Secteur [accent]{0}[white] attaqué ! sector.attacked = Secteur [accent]{0}[white] attaqué !
sector.lost = Secteur [accent]{0}[white] perdu ! sector.lost = Secteur [accent]{0}[white] perdu !
sector.capture = Sector [accent]{0}[white]Captured! sector.capture = Sector [accent]{0}[white]Captured!
sector.capture.current = Sector Captured!
sector.changeicon = Changer l'Icône sector.changeicon = Changer l'Icône
sector.noswitch.title = Impossible de changer de Secteur sector.noswitch.title = Impossible de changer de Secteur
sector.noswitch = Vous ne pouvez pas changer de secteur pendant quun autre est attaqué.\n\nSecteur: [accent]{0}[] sur [accent]{1}[] sector.noswitch = Vous ne pouvez pas changer de secteur pendant quun 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.message.name = Bloc de Message
block.reinforced-message.name = Bloc de Message Renforcé block.reinforced-message.name = Bloc de Message Renforcé
block.world-message.name = Bloc de Message Global block.world-message.name = Bloc de Message Global
block.world-switch.name = World Switch
block.illuminator.name = Illuminateur block.illuminator.name = Illuminateur
block.overflow-gate.name = Barrière de Débordement block.overflow-gate.name = Barrière de Débordement
block.underflow-gate.name = Barrière de Refoulement block.underflow-gate.name = Barrière de Refoulement
@@ -2310,6 +2314,8 @@ lst.getblock = Obtient les données d'une tuile à n'importe quel emplacement.
lst.setblock = Définit les données d'une tuile à n'importe quel emplacement. lst.setblock = Définit les données d'une tuile à n'importe quel emplacement.
lst.spawnunit = Fait apparaître une unité à un emplacement. lst.spawnunit = Fait apparaître une unité à un emplacement.
lst.applystatus = Ajoute ou enlève un effet de statut d'une unité. lst.applystatus = Ajoute ou enlève un effet de statut d'une unité.
lst.weathersensor = Check if a type of weather is active.
lst.weatherset = Set the current state of a type of weather.
lst.spawnwave = Simule un déclenchement de vague à n'importe quel emplacement.\nCela n'incrémente pas le compteur de vaugues. lst.spawnwave = Simule un déclenchement de vague à n'importe quel emplacement.\nCela n'incrémente pas le compteur de vaugues.
lst.explosion = Crée une explosion à un emplacement. lst.explosion = Crée une explosion à un emplacement.
lst.setrate = Définit la vitesse d'exécution d'un processeur en instructions/tick. lst.setrate = Définit la vitesse d'exécution d'un processeur en instructions/tick.
@@ -2326,6 +2332,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.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.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. 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. logic.nounitbuild = [red]Les unités contrôlées par des processeurs ne peuvent pas construire ici.
@@ -2482,3 +2524,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.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.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.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

View File

@@ -495,6 +495,7 @@ editor.default = [lightgray]<Standar>
details = Detail... details = Detail...
edit = Sunting... edit = Sunting...
variables = Vars variables = Vars
logic.globals = Built-in Variables
editor.name = Nama: editor.name = Nama:
editor.spawn = Munculkan Unit editor.spawn = Munculkan Unit
editor.removeunit = Hapus Unit editor.removeunit = Hapus Unit
@@ -675,10 +676,11 @@ objective.commandmode.name = Mode Perintah
objective.flag.name = Bendera objective.flag.name = Bendera
marker.shapetext.name = Teks Berbentuk marker.shapetext.name = Teks Berbentuk
marker.minimap.name = Peta Kecil marker.point.name = Point
marker.shape.name = Bentuk marker.shape.name = Bentuk
marker.text.name = Teks marker.text.name = Teks
marker.line.name = Line marker.line.name = Line
marker.quad.name = Quad
marker.background = Latar Belakang marker.background = Latar Belakang
marker.outline = Garis Luar 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.attacked = Sektor [accent]{0}[white] sedang diserang!
sector.lost = Sektor [accent]{0}[white] telah dihancurkan! sector.lost = Sektor [accent]{0}[white] telah dihancurkan!
sector.capture = Sector [accent]{0}[white]Captured! sector.capture = Sector [accent]{0}[white]Captured!
sector.capture.current = Sector Captured!
sector.changeicon = Ubah Ikon sector.changeicon = Ubah Ikon
sector.noswitch.title = Tidak Dapat beralih Sektor 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}[] 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.message.name = Pesan
block.reinforced-message.name = Reinforced Message block.reinforced-message.name = Reinforced Message
block.world-message.name = World Message block.world-message.name = World Message
block.world-switch.name = World Switch
block.illuminator.name = Lampu block.illuminator.name = Lampu
block.overflow-gate.name = Gerbang Luap block.overflow-gate.name = Gerbang Luap
block.underflow-gate.name = Gerbang Luap Terbalik block.underflow-gate.name = Gerbang Luap Terbalik
@@ -2300,6 +2304,8 @@ lst.getblock = Mendapatkan data petak di lokasi manapun.
lst.setblock = Menentukan data petak di lokasi manapun. lst.setblock = Menentukan data petak di lokasi manapun.
lst.spawnunit = Munculkan unit pada tempat yang ditentukan. lst.spawnunit = Munculkan unit pada tempat yang ditentukan.
lst.applystatus = Menerapkan atau menghapus status efek dari sebuah unit. lst.applystatus = Menerapkan atau menghapus status efek dari sebuah unit.
lst.weathersensor = Check if a type of weather is active.
lst.weatherset = Set the current state of a type of weather.
lst.spawnwave = Simulasikan adanya gelombang pada lokasi acak.\nTidak akan ditambahkan pada jumlah gelombang keseluruhan. lst.spawnwave = Simulasikan adanya gelombang pada lokasi acak.\nTidak akan ditambahkan pada jumlah gelombang keseluruhan.
lst.explosion = Membuat sebuah ledakan pada lokasi yang ditentukan. lst.explosion = Membuat sebuah ledakan pada lokasi yang ditentukan.
lst.setrate = Menentukan kecepatan eksekusi prosesor dalam instruksi per tick. lst.setrate = Menentukan kecepatan eksekusi prosesor dalam instruksi per tick.
@@ -2316,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.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.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. 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. logic.nounitbuild = [red]Logika unit membangun tidak diperbolehkan di sini.
@@ -2472,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.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.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.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.

View File

@@ -493,6 +493,7 @@ editor.default = [lightgray]<Predefinito>
details = Dettagli... details = Dettagli...
edit = Modifica... edit = Modifica...
variables = Vars variables = Vars
logic.globals = Built-in Variables
editor.name = Nome: editor.name = Nome:
editor.spawn = Piazza un'Unità editor.spawn = Piazza un'Unità
editor.removeunit = Rimuovi un'Unità editor.removeunit = Rimuovi un'Unità
@@ -668,10 +669,11 @@ objective.destroycore.name = Distruggi nuclei
objective.commandmode.name = Modalità comando objective.commandmode.name = Modalità comando
objective.flag.name = Flag objective.flag.name = Flag
marker.shapetext.name = Shape Text marker.shapetext.name = Shape Text
marker.minimap.name = Minimappa marker.point.name = Point
marker.shape.name = Forma marker.shape.name = Forma
marker.text.name = Testo marker.text.name = Testo
marker.line.name = Line marker.line.name = Line
marker.quad.name = Quad
marker.background = Sfondo marker.background = Sfondo
marker.outline = Outline marker.outline = Outline
objective.research = [accent]Ricerca:\n[]{0}[lightgray]{1} 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.attacked = Settore [accent]{0}[white] sotto attacco!
sector.lost = Settore [accent]{0}[white] perso! sector.lost = Settore [accent]{0}[white] perso!
sector.capture = Sector [accent]{0}[white]Captured! sector.capture = Sector [accent]{0}[white]Captured!
sector.capture.current = Sector Captured!
sector.changeicon = Cambia icona sector.changeicon = Cambia icona
sector.noswitch.title = Impossibile cambiare settore sector.noswitch.title = Impossibile cambiare settore
sector.noswitch = Non puoi cambiare settore mentre sei sotto attacco.\n\nSectore: [accent]{0}[] on [accent]{1}[] 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.message.name = Messaggio
block.reinforced-message.name = Reinforced Message block.reinforced-message.name = Reinforced Message
block.world-message.name = World Message block.world-message.name = World Message
block.world-switch.name = World Switch
block.illuminator.name = Lanterna block.illuminator.name = Lanterna
block.overflow-gate.name = Separatore per Eccesso block.overflow-gate.name = Separatore per Eccesso
block.underflow-gate.name = Separatore per Eccesso Inverso block.underflow-gate.name = Separatore per Eccesso Inverso
@@ -2274,6 +2278,8 @@ lst.getblock = Get tile data at any location.
lst.setblock = Set tile data at any location. lst.setblock = Set tile data at any location.
lst.spawnunit = Spawn unit at a location. lst.spawnunit = Spawn unit at a location.
lst.applystatus = Apply or clear a status effect from a uniut. lst.applystatus = Apply or clear a status effect from a uniut.
lst.weathersensor = Check if a type of weather is active.
lst.weatherset = Set the current state of a type of weather.
lst.spawnwave = Simulate a wave being spawned at a arbitrary location.\nWill not increment the wave counter. lst.spawnwave = Simulate a wave being spawned at a arbitrary location.\nWill not increment the wave counter.
lst.explosion = Create an explosion at a location. lst.explosion = Create an explosion at a location.
lst.setrate = Set processor execution speed in instructions/tick. lst.setrate = Set processor execution speed in instructions/tick.
@@ -2290,6 +2296,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.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.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. 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. 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.type = Type of building/unit.\ne.g. for any router, this will return [accent]@router[].\nNot a string.
lenum.shoot = Shoot at a position. lenum.shoot = Shoot at a position.
@@ -2426,3 +2468,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.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.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.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.

View File

@@ -495,6 +495,7 @@ editor.default = [lightgray]<デフォルト>
details = 詳細... details = 詳細...
edit = 編集... edit = 編集...
variables = 変数 variables = 変数
logic.globals = Built-in Variables
editor.name = 名前: editor.name = 名前:
editor.spawn = ユニットを出す editor.spawn = ユニットを出す
editor.removeunit = ユニットを消す editor.removeunit = ユニットを消す
@@ -672,10 +673,11 @@ objective.destroycore.name = コアを破壊する
objective.commandmode.name = コマンドモード objective.commandmode.name = コマンドモード
objective.flag.name = フラグ objective.flag.name = フラグ
marker.shapetext.name = テキストの形 marker.shapetext.name = テキストの形
marker.minimap.name = ミニマップ marker.point.name = Point
marker.shape.name = 図形 marker.shape.name = 図形
marker.text.name = 文章 marker.text.name = 文章
marker.line.name = Line marker.line.name = Line
marker.quad.name = Quad
marker.background = 背景 marker.background = 背景
marker.outline = 輪郭 marker.outline = 輪郭
objective.research = [accent]Research:\n[]{0}[lightgray]{1} objective.research = [accent]Research:\n[]{0}[lightgray]{1}
@@ -760,6 +762,7 @@ sector.missingresources = [scarlet]資源が足りません
sector.attacked = セクター [accent]{0}[white] が攻撃を受けています! sector.attacked = セクター [accent]{0}[white] が攻撃を受けています!
sector.lost = セクター [accent]{0}[white] 喪失! sector.lost = セクター [accent]{0}[white] 喪失!
sector.capture = Sector [accent]{0}[white]Captured! sector.capture = Sector [accent]{0}[white]Captured!
sector.capture.current = Sector Captured!
sector.changeicon = アイコンを変更 sector.changeicon = アイコンを変更
sector.noswitch.title = セクターを切り替えることができません sector.noswitch.title = セクターを切り替えることができません
sector.noswitch = 既存のセクターが攻撃を受けている間は、セクターを切り替えることはできません。\n\nセクター: [accent]{0}[] on [accent]{1}[] sector.noswitch = 既存のセクターが攻撃を受けている間は、セクターを切り替えることはできません。\n\nセクター: [accent]{0}[] on [accent]{1}[]
@@ -1544,6 +1547,7 @@ block.inverted-sorter.name = 反転ソーター
block.message.name = メッセージブロック block.message.name = メッセージブロック
block.reinforced-message.name = 強化されたメッセージブロック block.reinforced-message.name = 強化されたメッセージブロック
block.world-message.name = ワールドメッセージブロック block.world-message.name = ワールドメッセージブロック
block.world-switch.name = World Switch
block.illuminator.name = イルミネーター block.illuminator.name = イルミネーター
block.overflow-gate.name = オーバーフローゲート block.overflow-gate.name = オーバーフローゲート
block.underflow-gate.name = アンダーフローゲート block.underflow-gate.name = アンダーフローゲート
@@ -2278,6 +2282,8 @@ lst.getblock = 任意の座標のタイルの情報を取得します。
lst.setblock = 任意の座標のタイルの情報を変更します。 lst.setblock = 任意の座標のタイルの情報を変更します。
lst.spawnunit = 任意の座標にユニットをスポーンさせます。 lst.spawnunit = 任意の座標にユニットをスポーンさせます。
lst.applystatus = ユニットからステータス効果を適用または削除する。 lst.applystatus = ユニットからステータス効果を適用または削除する。
lst.weathersensor = Check if a type of weather is active.
lst.weatherset = Set the current state of a type of weather.
lst.spawnwave = 任意の座標で発生するウェーブをシミュレーションします。\nウェーブを進めません。 lst.spawnwave = 任意の座標で発生するウェーブをシミュレーションします。\nウェーブを進めません。
lst.explosion = ある場所で爆発を起こします。 lst.explosion = ある場所で爆発を起こします。
lst.setrate = プロセッサーの実行速度を1命令/tickで設定します。 lst.setrate = プロセッサーの実行速度を1命令/tickで設定します。
@@ -2294,6 +2300,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.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.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. 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]ここではユニット構築ロジックは使用できません。 logic.nounitbuild = [red]ここではユニット構築ロジックは使用できません。
lenum.type = ユニットや建物の種類を取得します。\n例任意のルーターに対して、 [accent]@router[] を返します。\n文字列ではありません。 lenum.type = ユニットや建物の種類を取得します。\n例任意のルーターに対して、 [accent]@router[] を返します。\n文字列ではありません。
lenum.shoot = 指定した座標に向かって撃ちます。 lenum.shoot = 指定した座標に向かって撃ちます。
@@ -2430,3 +2472,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.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.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.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.

View File

@@ -494,6 +494,7 @@ editor.default = [lightgray]<기본값>
details = 설명... details = 설명...
edit = 편집... edit = 편집...
variables = 변수 variables = 변수
logic.globals = Built-in Variables
editor.name = 이름: editor.name = 이름:
editor.spawn = 기체 생성 editor.spawn = 기체 생성
editor.removeunit = 기체 삭제 editor.removeunit = 기체 삭제
@@ -672,10 +673,11 @@ objective.destroycore.name = 코어 파괴
objective.commandmode.name = 명령 모드 objective.commandmode.name = 명령 모드
objective.flag.name = 플래그 objective.flag.name = 플래그
marker.shapetext.name = 도형과 문자 marker.shapetext.name = 도형과 문자
marker.minimap.name = 미니맵 marker.point.name = Point
marker.shape.name = 도형 marker.shape.name = 도형
marker.text.name = 문자 marker.text.name = 문자
marker.line.name = Line marker.line.name = Line
marker.quad.name = Quad
marker.background = 배경 marker.background = 배경
marker.outline = 외곽선 marker.outline = 외곽선
@@ -761,6 +763,7 @@ sector.missingresources = [scarlet]코어 자원 부족[]
sector.attacked = [accent]{0}[white] 지역이 공격받고 있습니다![] sector.attacked = [accent]{0}[white] 지역이 공격받고 있습니다![]
sector.lost = [accent]{0}[white] 지역을 잃었습니다![] sector.lost = [accent]{0}[white] 지역을 잃었습니다![]
sector.capture = Sector [accent]{0}[white]Captured! sector.capture = Sector [accent]{0}[white]Captured!
sector.capture.current = Sector Captured!
sector.changeicon = 아이콘 바꾸기 sector.changeicon = 아이콘 바꾸기
sector.noswitch.title = 지역 전환 불가능 sector.noswitch.title = 지역 전환 불가능
sector.noswitch = 기존 지역이 공격받는 동안은 지역을 전환할 수 없습니다.\n\n지역: [accent]{0}[] 중 [accent]{1}[] sector.noswitch = 기존 지역이 공격받는 동안은 지역을 전환할 수 없습니다.\n\n지역: [accent]{0}[] 중 [accent]{1}[]
@@ -1543,6 +1546,7 @@ block.inverted-sorter.name = 반전 필터
block.message.name = 메모 블록 block.message.name = 메모 블록
block.reinforced-message.name = 보강된 메모 블록 block.reinforced-message.name = 보강된 메모 블록
block.world-message.name = 월드 메모 블록 block.world-message.name = 월드 메모 블록
block.world-switch.name = World Switch
block.illuminator.name = 조명 block.illuminator.name = 조명
block.overflow-gate.name = 포화 필터 block.overflow-gate.name = 포화 필터
block.underflow-gate.name = 불포화 필터 block.underflow-gate.name = 불포화 필터
@@ -2277,6 +2281,8 @@ lst.getblock = 특정 위치의 타일 정보를 불러옴
lst.setblock = 특정 위치의 타일 정보 설정 lst.setblock = 특정 위치의 타일 정보 설정
lst.spawnunit = 특정 위치에 기체 소환 lst.spawnunit = 특정 위치에 기체 소환
lst.applystatus = 기체에게 상태이상을 적용하거나 삭제 lst.applystatus = 기체에게 상태이상을 적용하거나 삭제
lst.weathersensor = Check if a type of weather is active.
lst.weatherset = Set the current state of a type of weather.
lst.spawnwave = 특정 위치에 이전 단계를 실행\n실제 단계가 넘어가지 않습니다 lst.spawnwave = 특정 위치에 이전 단계를 실행\n실제 단계가 넘어가지 않습니다
lst.explosion = 특정 위치에 폭발 생성 lst.explosion = 특정 위치에 폭발 생성
lst.setrate = 프로세서 실행 속도를 틱당 연산량으로 설정 lst.setrate = 프로세서 실행 속도를 틱당 연산량으로 설정
@@ -2293,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.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.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. 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]기체의 건설 로직은 여기서 허용되지 않습니다. logic.nounitbuild = [red]기체의 건설 로직은 여기서 허용되지 않습니다.
@@ -2448,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.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.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.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.

View File

@@ -490,6 +490,7 @@ editor.default = [lightgray]<Numatytasis>
details = Detaliau... details = Detaliau...
edit = Redaguoti... edit = Redaguoti...
variables = Vars variables = Vars
logic.globals = Built-in Variables
editor.name = Pavadinimas: editor.name = Pavadinimas:
editor.spawn = Atradinti vienetą editor.spawn = Atradinti vienetą
editor.removeunit = Panaikinti vienetą editor.removeunit = Panaikinti vienetą
@@ -665,10 +666,11 @@ objective.destroycore.name = Destroy Core
objective.commandmode.name = Command Mode objective.commandmode.name = Command Mode
objective.flag.name = Flag objective.flag.name = Flag
marker.shapetext.name = Shape Text marker.shapetext.name = Shape Text
marker.minimap.name = Minimap marker.point.name = Point
marker.shape.name = Shape marker.shape.name = Shape
marker.text.name = Text marker.text.name = Text
marker.line.name = Line marker.line.name = Line
marker.quad.name = Quad
marker.background = Background marker.background = Background
marker.outline = Outline marker.outline = Outline
objective.research = [accent]Research:\n[]{0}[lightgray]{1} 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.attacked = Sector [accent]{0}[white] under attack!
sector.lost = Sector [accent]{0}[white] lost! sector.lost = Sector [accent]{0}[white] lost!
sector.capture = Sector [accent]{0}[white]Captured! sector.capture = Sector [accent]{0}[white]Captured!
sector.capture.current = Sector Captured!
sector.changeicon = Change Icon sector.changeicon = Change Icon
sector.noswitch.title = Unable to Switch Sectors 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}[] 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.message.name = Žinutė
block.reinforced-message.name = Reinforced Message block.reinforced-message.name = Reinforced Message
block.world-message.name = World Message block.world-message.name = World Message
block.world-switch.name = World Switch
block.illuminator.name = Šviestuvas block.illuminator.name = Šviestuvas
block.overflow-gate.name = Perpildymo Užtvara block.overflow-gate.name = Perpildymo Užtvara
block.underflow-gate.name = Neperpildymo Užtvara block.underflow-gate.name = Neperpildymo Užtvara
@@ -2262,6 +2266,8 @@ lst.getblock = Get tile data at any location.
lst.setblock = Set tile data at any location. lst.setblock = Set tile data at any location.
lst.spawnunit = Spawn unit at a location. lst.spawnunit = Spawn unit at a location.
lst.applystatus = Apply or clear a status effect from a uniut. lst.applystatus = Apply or clear a status effect from a uniut.
lst.weathersensor = Check if a type of weather is active.
lst.weatherset = Set the current state of a type of weather.
lst.spawnwave = Simulate a wave being spawned at a arbitrary location.\nWill not increment the wave counter. lst.spawnwave = Simulate a wave being spawned at a arbitrary location.\nWill not increment the wave counter.
lst.explosion = Create an explosion at a location. lst.explosion = Create an explosion at a location.
lst.setrate = Set processor execution speed in instructions/tick. lst.setrate = Set processor execution speed in instructions/tick.
@@ -2278,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.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.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. 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. 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.type = Type of building/unit.\ne.g. for any router, this will return [accent]@router[].\nNot a string.
lenum.shoot = Shoot at a position. lenum.shoot = Shoot at a position.
@@ -2414,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.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.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.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.

View File

@@ -498,6 +498,7 @@ editor.default = [lightgray]<Standaard>
details = Details... details = Details...
edit = Bewerk... edit = Bewerk...
variables = Vars variables = Vars
logic.globals = Built-in Variables
editor.name = Naam: editor.name = Naam:
editor.spawn = Voeg Eenheid toe editor.spawn = Voeg Eenheid toe
editor.removeunit = Verwijder Eenheid editor.removeunit = Verwijder Eenheid
@@ -676,10 +677,11 @@ objective.destroycore.name = Vernietig Core
objective.commandmode.name = Commando Modus objective.commandmode.name = Commando Modus
objective.flag.name = Vlag objective.flag.name = Vlag
marker.shapetext.name = Vorm Tekst marker.shapetext.name = Vorm Tekst
marker.minimap.name = Minimap marker.point.name = Point
marker.shape.name = Vorm marker.shape.name = Vorm
marker.text.name = Tekst marker.text.name = Tekst
marker.line.name = Line marker.line.name = Line
marker.quad.name = Quad
marker.background = Achtergrond marker.background = Achtergrond
marker.outline = Omtrek marker.outline = Omtrek
objective.research = [accent]Onderzoek:\n[]{0}[lightgray]{1} 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.attacked = Sector [accent]{0}[white] onder vuur!
sector.lost = Sector [accent]{0}[white] verloren! sector.lost = Sector [accent]{0}[white] verloren!
sector.capture = Sector [accent]{0}[white]Captured! sector.capture = Sector [accent]{0}[white]Captured!
sector.capture.current = Sector Captured!
sector.changeicon = Verander icoon sector.changeicon = Verander icoon
sector.noswitch.title = Kan niet van sector wisselen 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}[] 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.message.name = Bericht
block.reinforced-message.name = Gepansterd Bericht block.reinforced-message.name = Gepansterd Bericht
block.world-message.name = Wereldbericht block.world-message.name = Wereldbericht
block.world-switch.name = World Switch
block.illuminator.name = Lamp block.illuminator.name = Lamp
block.overflow-gate.name = Overstroom Poort block.overflow-gate.name = Overstroom Poort
block.underflow-gate.name = Onderstroom Poort block.underflow-gate.name = Onderstroom Poort
@@ -2275,6 +2279,8 @@ lst.getblock = Get tile data at any location.
lst.setblock = Set tile data at any location. lst.setblock = Set tile data at any location.
lst.spawnunit = Spawn unit at a location. lst.spawnunit = Spawn unit at a location.
lst.applystatus = Apply or clear a status effect from a uniut. lst.applystatus = Apply or clear a status effect from a uniut.
lst.weathersensor = Check if a type of weather is active.
lst.weatherset = Set the current state of a type of weather.
lst.spawnwave = Simulate a wave being spawned at a arbitrary location.\nWill not increment the wave counter. lst.spawnwave = Simulate a wave being spawned at a arbitrary location.\nWill not increment the wave counter.
lst.explosion = Create an explosion at a location. lst.explosion = Create an explosion at a location.
lst.setrate = Set processor execution speed in instructions/tick. lst.setrate = Set processor execution speed in instructions/tick.
@@ -2291,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.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.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. 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. 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.type = Type of building/unit.\ne.g. for any router, this will return [accent]@router[].\nNot a string.
lenum.shoot = Shoot at a position. lenum.shoot = Shoot at a position.
@@ -2427,3 +2469,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.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.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.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.

View File

@@ -490,6 +490,7 @@ editor.default = [lightgray]<Default>
details = Details... details = Details...
edit = Edit... edit = Edit...
variables = Vars variables = Vars
logic.globals = Built-in Variables
editor.name = Name: editor.name = Name:
editor.spawn = Spawn Unit editor.spawn = Spawn Unit
editor.removeunit = Remove Unit editor.removeunit = Remove Unit
@@ -665,10 +666,11 @@ objective.destroycore.name = Destroy Core
objective.commandmode.name = Command Mode objective.commandmode.name = Command Mode
objective.flag.name = Flag objective.flag.name = Flag
marker.shapetext.name = Shape Text marker.shapetext.name = Shape Text
marker.minimap.name = Minimap marker.point.name = Point
marker.shape.name = Shape marker.shape.name = Shape
marker.text.name = Text marker.text.name = Text
marker.line.name = Line marker.line.name = Line
marker.quad.name = Quad
marker.background = Background marker.background = Background
marker.outline = Outline marker.outline = Outline
objective.research = [accent]Research:\n[]{0}[lightgray]{1} 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.attacked = Sector [accent]{0}[white] under attack!
sector.lost = Sector [accent]{0}[white] lost! sector.lost = Sector [accent]{0}[white] lost!
sector.capture = Sector [accent]{0}[white]Captured! sector.capture = Sector [accent]{0}[white]Captured!
sector.capture.current = Sector Captured!
sector.changeicon = Change Icon sector.changeicon = Change Icon
sector.noswitch.title = Unable to Switch Sectors 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}[] 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.message.name = Message
block.reinforced-message.name = Reinforced Message block.reinforced-message.name = Reinforced Message
block.world-message.name = World Message block.world-message.name = World Message
block.world-switch.name = World Switch
block.illuminator.name = Illuminator block.illuminator.name = Illuminator
block.overflow-gate.name = Overflow Gate block.overflow-gate.name = Overflow Gate
block.underflow-gate.name = Underflow Gate block.underflow-gate.name = Underflow Gate
@@ -2262,6 +2266,8 @@ lst.getblock = Get tile data at any location.
lst.setblock = Set tile data at any location. lst.setblock = Set tile data at any location.
lst.spawnunit = Spawn unit at a location. lst.spawnunit = Spawn unit at a location.
lst.applystatus = Apply or clear a status effect from a uniut. lst.applystatus = Apply or clear a status effect from a uniut.
lst.weathersensor = Check if a type of weather is active.
lst.weatherset = Set the current state of a type of weather.
lst.spawnwave = Simulate a wave being spawned at a arbitrary location.\nWill not increment the wave counter. lst.spawnwave = Simulate a wave being spawned at a arbitrary location.\nWill not increment the wave counter.
lst.explosion = Create an explosion at a location. lst.explosion = Create an explosion at a location.
lst.setrate = Set processor execution speed in instructions/tick. lst.setrate = Set processor execution speed in instructions/tick.
@@ -2278,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.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.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. 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. 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.type = Type of building/unit.\ne.g. for any router, this will return [accent]@router[].\nNot a string.
lenum.shoot = Shoot at a position. lenum.shoot = Shoot at a position.
@@ -2414,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.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.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.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.

View File

@@ -495,6 +495,7 @@ editor.default = [lightgray]<Domyślne>
details = Detale... details = Detale...
edit = Edytuj... edit = Edytuj...
variables = Zmienne variables = Zmienne
logic.globals = Built-in Variables
editor.name = Nazwa: editor.name = Nazwa:
editor.spawn = Stwórz Jednostkę editor.spawn = Stwórz Jednostkę
editor.removeunit = Usuń Jednostkę editor.removeunit = Usuń Jednostkę
@@ -670,10 +671,11 @@ objective.destroycore.name = Zniszcz Rdzeń
objective.commandmode.name = Tryb Poleceń objective.commandmode.name = Tryb Poleceń
objective.flag.name = Oznaczenie objective.flag.name = Oznaczenie
marker.shapetext.name = Dostosuj Tekst marker.shapetext.name = Dostosuj Tekst
marker.minimap.name = Minimapa marker.point.name = Point
marker.shape.name = Figura marker.shape.name = Figura
marker.text.name = Tekst marker.text.name = Tekst
marker.line.name = Line marker.line.name = Line
marker.quad.name = Quad
marker.background = Tło marker.background = Tło
marker.outline = Kontur marker.outline = Kontur
objective.research = [accent]Zbadaj:\n[]{0}[lightgray]{1} 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.attacked = Sektor [accent]{0}[white] jest atakowany!
sector.lost = Sektor [accent]{0}[white] został stracony! sector.lost = Sektor [accent]{0}[white] został stracony!
sector.capture = Sector [accent]{0}[white]Captured! sector.capture = Sector [accent]{0}[white]Captured!
sector.capture.current = Sector Captured!
sector.changeicon = Zmień Ikonę sector.changeicon = Zmień Ikonę
sector.noswitch.title = Nie można zmienić sektorów 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}[] 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.message.name = Wiadomość
block.reinforced-message.name = Wzmocniona Wiadomość block.reinforced-message.name = Wzmocniona Wiadomość
block.world-message.name = World Message block.world-message.name = World Message
block.world-switch.name = World Switch
block.illuminator.name = Rozświetlacz block.illuminator.name = Rozświetlacz
block.overflow-gate.name = Brama Przepełnieniowa block.overflow-gate.name = Brama Przepełnieniowa
block.underflow-gate.name = Brama Niedomiaru block.underflow-gate.name = Brama Niedomiaru
@@ -2296,6 +2300,8 @@ lst.getblock = Uzyskaj dane dla dowolnej lokalizacji.
lst.setblock = Ustaw dane dla dowolnej lokalizacji. lst.setblock = Ustaw dane dla dowolnej lokalizacji.
lst.spawnunit = Odródź jednostkę w lokalizacji. lst.spawnunit = Odródź jednostkę w lokalizacji.
lst.applystatus = Zastosuj lub wyczyść efekty statusu jednostki. lst.applystatus = Zastosuj lub wyczyść efekty statusu jednostki.
lst.weathersensor = Check if a type of weather is active.
lst.weatherset = Set the current state of a type of weather.
lst.spawnwave = Symuluj falę odradzającą się w dowolnym miejscu.\nNie zwiększy licznika fali. lst.spawnwave = Symuluj falę odradzającą się w dowolnym miejscu.\nNie zwiększy licznika fali.
lst.explosion = Stwórz eksplozję w lokalizacji. lst.explosion = Stwórz eksplozję w lokalizacji.
lst.setrate = Ustaw szybkość wykonywania procesora w instrukcjach/tick. lst.setrate = Ustaw szybkość wykonywania procesora w instrukcjach/tick.
@@ -2312,6 +2318,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.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.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. 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. logic.nounitbuild = [red]Logika budowania jednostek nie jest tu dozwolona.
@@ -2467,3 +2509,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.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.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.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.

View File

@@ -495,6 +495,7 @@ editor.default = [lightgray]<padrão>
details = Detalhes... details = Detalhes...
edit = Editar... edit = Editar...
variables = Variáveis variables = Variáveis
logic.globals = Built-in Variables
editor.name = Nome: editor.name = Nome:
editor.spawn = Spawnar unidade editor.spawn = Spawnar unidade
editor.removeunit = Remover unidade editor.removeunit = Remover unidade
@@ -675,10 +676,11 @@ objective.commandmode.name = Modo de Comando
objective.flag.name = Flag objective.flag.name = Flag
marker.shapetext.name = Shape Text marker.shapetext.name = Shape Text
marker.minimap.name = Minimapa marker.point.name = Point
marker.shape.name = Shape marker.shape.name = Shape
marker.text.name = Texto marker.text.name = Texto
marker.line.name = Line marker.line.name = Line
marker.quad.name = Quad
marker.background = Fundo marker.background = Fundo
marker.outline = Contorno marker.outline = Contorno
@@ -766,6 +768,7 @@ sector.missingresources = [scarlet]Recursos Insuficientes no Núcleo
sector.attacked = Setor [accent]{0}[white] sob ataque! sector.attacked = Setor [accent]{0}[white] sob ataque!
sector.lost = Setor [accent]{0}[white] perdido! sector.lost = Setor [accent]{0}[white] perdido!
sector.capture = Sector [accent]{0}[white]Captured! sector.capture = Sector [accent]{0}[white]Captured!
sector.capture.current = Sector Captured!
sector.changeicon = Trocar Ícone sector.changeicon = Trocar Ícone
sector.noswitch.title = Incapaz de Mudar de Setores 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}[] 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.message.name = Mensagem
block.reinforced-message.name = Reinforced Message block.reinforced-message.name = Reinforced Message
block.world-message.name = World Message block.world-message.name = World Message
block.world-switch.name = World Switch
block.illuminator.name = Iluminador block.illuminator.name = Iluminador
block.overflow-gate.name = Portão de Sobrecarga block.overflow-gate.name = Portão de Sobrecarga
block.underflow-gate.name = Portão de Sobrecarga Invertido block.underflow-gate.name = Portão de Sobrecarga Invertido
@@ -2295,6 +2299,8 @@ lst.getblock = Obtenha dados de blocos em qualquer local.
lst.setblock = Defina os dados do bloco em qualquer local. lst.setblock = Defina os dados do bloco em qualquer local.
lst.spawnunit = Gere uma unidade em um local. lst.spawnunit = Gere uma unidade em um local.
lst.applystatus = Aplique ou elimine um efeito de status de uma unidade. lst.applystatus = Aplique ou elimine um efeito de status de uma unidade.
lst.weathersensor = Check if a type of weather is active.
lst.weatherset = Set the current state of a type of weather.
lst.spawnwave = Gerar uma onda. lst.spawnwave = Gerar uma onda.
lst.explosion = Crie uma explosão em um local. lst.explosion = Crie uma explosão em um local.
lst.setrate = Defina a velocidade de execução do processador em instruções/tick. lst.setrate = Defina a velocidade de execução do processador em instruções/tick.
@@ -2311,6 +2317,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.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.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. 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. logic.nounitbuild = [red]Lógica de construção de unidades não é permitida aqui.
@@ -2465,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.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.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.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.

View File

@@ -490,6 +490,7 @@ editor.default = [lightgray]<padrão>
details = Detalhes... details = Detalhes...
edit = Editar... edit = Editar...
variables = Vars variables = Vars
logic.globals = Built-in Variables
editor.name = Nome: editor.name = Nome:
editor.spawn = Criar unidade editor.spawn = Criar unidade
editor.removeunit = Remover unidade editor.removeunit = Remover unidade
@@ -665,10 +666,11 @@ objective.destroycore.name = Destroy Core
objective.commandmode.name = Command Mode objective.commandmode.name = Command Mode
objective.flag.name = Flag objective.flag.name = Flag
marker.shapetext.name = Shape Text marker.shapetext.name = Shape Text
marker.minimap.name = Minimap marker.point.name = Point
marker.shape.name = Shape marker.shape.name = Shape
marker.text.name = Text marker.text.name = Text
marker.line.name = Line marker.line.name = Line
marker.quad.name = Quad
marker.background = Background marker.background = Background
marker.outline = Outline marker.outline = Outline
objective.research = [accent]Research:\n[]{0}[lightgray]{1} 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.attacked = Sector [accent]{0}[white] under attack!
sector.lost = Sector [accent]{0}[white] lost! sector.lost = Sector [accent]{0}[white] lost!
sector.capture = Sector [accent]{0}[white]Captured! sector.capture = Sector [accent]{0}[white]Captured!
sector.capture.current = Sector Captured!
sector.changeicon = Change Icon sector.changeicon = Change Icon
sector.noswitch.title = Unable to Switch Sectors 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}[] 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.message.name = Mensagem
block.reinforced-message.name = Reinforced Message block.reinforced-message.name = Reinforced Message
block.world-message.name = World Message block.world-message.name = World Message
block.world-switch.name = World Switch
block.illuminator.name = Illuminator block.illuminator.name = Illuminator
block.overflow-gate.name = Portão Sobrecarregado block.overflow-gate.name = Portão Sobrecarregado
block.underflow-gate.name = Portão Desobrecarregado block.underflow-gate.name = Portão Desobrecarregado
@@ -2262,6 +2266,8 @@ lst.getblock = Get tile data at any location.
lst.setblock = Set tile data at any location. lst.setblock = Set tile data at any location.
lst.spawnunit = Spawn unit at a location. lst.spawnunit = Spawn unit at a location.
lst.applystatus = Apply or clear a status effect from a uniut. lst.applystatus = Apply or clear a status effect from a uniut.
lst.weathersensor = Check if a type of weather is active.
lst.weatherset = Set the current state of a type of weather.
lst.spawnwave = Simulate a wave being spawned at a arbitrary location.\nWill not increment the wave counter. lst.spawnwave = Simulate a wave being spawned at a arbitrary location.\nWill not increment the wave counter.
lst.explosion = Create an explosion at a location. lst.explosion = Create an explosion at a location.
lst.setrate = Set processor execution speed in instructions/tick. lst.setrate = Set processor execution speed in instructions/tick.
@@ -2278,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.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.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. 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. 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.type = Type of building/unit.\ne.g. for any router, this will return [accent]@router[].\nNot a string.
lenum.shoot = Shoot at a position. lenum.shoot = Shoot at a position.
@@ -2414,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.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.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.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.

View File

@@ -495,6 +495,7 @@ editor.default = [lightgray]<Prestabilit>
details = Detalii... details = Detalii...
edit = Editează... edit = Editează...
variables = Vars variables = Vars
logic.globals = Built-in Variables
editor.name = Nume: editor.name = Nume:
editor.spawn = Adaugă Unitate editor.spawn = Adaugă Unitate
editor.removeunit = Înlătură Unitate editor.removeunit = Înlătură Unitate
@@ -672,10 +673,11 @@ objective.destroycore.name = Destroy Core
objective.commandmode.name = Command Mode objective.commandmode.name = Command Mode
objective.flag.name = Flag objective.flag.name = Flag
marker.shapetext.name = Shape Text marker.shapetext.name = Shape Text
marker.minimap.name = Minimap marker.point.name = Point
marker.shape.name = Shape marker.shape.name = Shape
marker.text.name = Text marker.text.name = Text
marker.line.name = Line marker.line.name = Line
marker.quad.name = Quad
marker.background = Background marker.background = Background
marker.outline = Outline marker.outline = Outline
objective.research = [accent]Research:\n[]{0}[lightgray]{1} 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.attacked = Sectorul [accent]{0}[white] este atacat!
sector.lost = Ai pierdut sectorul [accent]{0}[white]! sector.lost = Ai pierdut sectorul [accent]{0}[white]!
sector.capture = Sector [accent]{0}[white]Captured! sector.capture = Sector [accent]{0}[white]Captured!
sector.capture.current = Sector Captured!
sector.changeicon = Schimbă Iconița sector.changeicon = Schimbă Iconița
sector.noswitch.title = Unable to Switch Sectors 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}[] 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.message.name = Mesaj
block.reinforced-message.name = Reinforced Message block.reinforced-message.name = Reinforced Message
block.world-message.name = World Message block.world-message.name = World Message
block.world-switch.name = World Switch
block.illuminator.name = Iluminator block.illuminator.name = Iluminator
block.overflow-gate.name = Poartă de Revărsare block.overflow-gate.name = Poartă de Revărsare
block.underflow-gate.name = Poartă de Subversare block.underflow-gate.name = Poartă de Subversare
@@ -2279,6 +2283,8 @@ lst.getblock = Get tile data at any location.
lst.setblock = Set tile data at any location. lst.setblock = Set tile data at any location.
lst.spawnunit = Spawn unit at a location. lst.spawnunit = Spawn unit at a location.
lst.applystatus = Apply or clear a status effect from a uniut. lst.applystatus = Apply or clear a status effect from a uniut.
lst.weathersensor = Check if a type of weather is active.
lst.weatherset = Set the current state of a type of weather.
lst.spawnwave = Simulate a wave being spawned at a arbitrary location.\nWill not increment the wave counter. lst.spawnwave = Simulate a wave being spawned at a arbitrary location.\nWill not increment the wave counter.
lst.explosion = Create an explosion at a location. lst.explosion = Create an explosion at a location.
lst.setrate = Set processor execution speed in instructions/tick. lst.setrate = Set processor execution speed in instructions/tick.
@@ -2295,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.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.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. 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. logic.nounitbuild = [red]Nu ai voie să construiești cu unitățile folosind procesoare.
@@ -2450,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.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.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.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.

View File

@@ -495,6 +495,7 @@ editor.default = [lightgray]<По умолчанию>
details = Подробности… details = Подробности…
edit = Редактировать… edit = Редактировать…
variables = Переменные variables = Переменные
logic.globals = Built-in Variables
editor.name = Название: editor.name = Название:
editor.spawn = Создать боевую единицу editor.spawn = Создать боевую единицу
editor.removeunit = Удалить боевую единицу editor.removeunit = Удалить боевую единицу
@@ -672,10 +673,11 @@ objective.destroycore.name = Уничтожить ядро
objective.commandmode.name = Командовать единицей objective.commandmode.name = Командовать единицей
objective.flag.name = Флаг objective.flag.name = Флаг
marker.shapetext.name = Фигура с текстом marker.shapetext.name = Фигура с текстом
marker.minimap.name = Миникарта marker.point.name = Point
marker.shape.name = Фигура marker.shape.name = Фигура
marker.text.name = Текст marker.text.name = Текст
marker.line.name = Line marker.line.name = Line
marker.quad.name = Quad
marker.background = Фон marker.background = Фон
marker.outline = Контур marker.outline = Контур
objective.research = [accent]Исследуйте:\n[]{0}[lightgray]{1} objective.research = [accent]Исследуйте:\n[]{0}[lightgray]{1}
@@ -761,6 +763,7 @@ sector.missingresources = [scarlet]Недостаточно ресурсов д
sector.attacked = Сектор [accent]{0}[white] атакован! sector.attacked = Сектор [accent]{0}[white] атакован!
sector.lost = Сектор [accent]{0}[white] потерян! sector.lost = Сектор [accent]{0}[white] потерян!
sector.capture = Sector [accent]{0}[white]Captured! sector.capture = Sector [accent]{0}[white]Captured!
sector.capture.current = Sector Captured!
sector.changeicon = Изменить иконку sector.changeicon = Изменить иконку
sector.noswitch.title = Перемещение между секторами sector.noswitch.title = Перемещение между секторами
sector.noswitch = Вы не можете переключаться между секторами, пока существующий сектор находится под атакой.\n\nСектор: [accent]{0}[] на [accent]{1}[] sector.noswitch = Вы не можете переключаться между секторами, пока существующий сектор находится под атакой.\n\nСектор: [accent]{0}[] на [accent]{1}[]
@@ -1544,6 +1547,7 @@ block.inverted-sorter.name = Инвертированный сортировщи
block.message.name = Сообщение block.message.name = Сообщение
block.reinforced-message.name = Усиленное сообщение block.reinforced-message.name = Усиленное сообщение
block.world-message.name = Мировое сообщение block.world-message.name = Мировое сообщение
block.world-switch.name = World Switch
block.illuminator.name = Осветитель block.illuminator.name = Осветитель
block.overflow-gate.name = Избыточный затвор block.overflow-gate.name = Избыточный затвор
block.underflow-gate.name = Избыточный шлюз block.underflow-gate.name = Избыточный шлюз
@@ -1903,13 +1907,13 @@ onset.turrets = Боевые единицы эффективны, но [accent]
onset.turretammo = Снабдите турель [accent]бериллиевыми боеприпасами.[] onset.turretammo = Снабдите турель [accent]бериллиевыми боеприпасами.[]
onset.walls = [accent]Стены[] могут предотвратить повреждение близлежащих построек.\nПоставьте \uf6ee [accent]бериллиевые стены[] вокруг турели. onset.walls = [accent]Стены[] могут предотвратить повреждение близлежащих построек.\nПоставьте \uf6ee [accent]бериллиевые стены[] вокруг турели.
onset.enemies = Враг на подходе, приготовьтесь защищаться. onset.enemies = Враг на подходе, приготовьтесь защищаться.
onset.defenses = [accent]Set up defenses:[lightgray] {0} onset.defenses = [accent]Приготовьте оборону:[lightgray] {0}
onset.attack = Враг уязвим. Начните контратаку. onset.attack = Враг уязвим. Начните контратаку.
onset.cores = Новые ядра могут быть поставлены на [accent]зоны ядра[].\nНовые ядра функционируют как передовые базы и имеют общий инвентарь между другими ядрами.\nПоставьте \uf725 ядро. onset.cores = Новые ядра могут быть поставлены на [accent]зоны ядра[].\nНовые ядра функционируют как передовые базы и имеют общий инвентарь между другими ядрами.\nПоставьте \uf725 ядро.
onset.detect = Враг обнаружит вас через 2 минуты.\nПриготовьте оборону, добычу и производство. onset.detect = Враг обнаружит вас через 2 минуты.\nПриготовьте оборону, добычу и производство.
onset.commandmode = Удерживайте [accent]shift[], чтобы войти в [accent]режим командования[].\n[accent]Щелкните левой кнопкой мыши и выделите область[] для выбора боевых единиц.\n[accent]Щелкните правой кнопкой мыши[], чтобы приказать выбранным единицам двигаться или атаковать. onset.commandmode = Удерживайте [accent]shift[], чтобы войти в [accent]режим командования[].\n[accent]Щелкните левой кнопкой мыши и выделите область[] для выбора боевых единиц.\n[accent]Щелкните правой кнопкой мыши[], чтобы приказать выбранным единицам двигаться или атаковать.
onset.commandmode.mobile = Нажмите [accent]Командовать[], чтобы войти в [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 = Некоторые блоки можно подобрать боевой единицей ядра.\nВозьмите этот [accent]контейнер[] и поставьте его на [accent]грузовой загрузчик[].\n(Клавиши по умолчанию - [ и ] для поднятия и разгрузки)
split.pickup.mobile = Некоторые блоки можно подобрать боевой единицей ядра.\nВозьмите этот [accent]контейнер[] и поставьте его на [accent]грузовой загрузчик[].\n(Чтобы поднять или разгрузить что-либо, удерживайте палец.) split.pickup.mobile = Некоторые блоки можно подобрать боевой единицей ядра.\nВозьмите этот [accent]контейнер[] и поставьте его на [accent]грузовой загрузчик[].\n(Чтобы поднять или разгрузить что-либо, удерживайте палец.)
@@ -2281,6 +2285,8 @@ lst.getblock = Получает данные о плитке в любом ме
lst.setblock = Устанавливает плитку в любом месте. lst.setblock = Устанавливает плитку в любом месте.
lst.spawnunit = Создает боевую единицу на локации. lst.spawnunit = Создает боевую единицу на локации.
lst.applystatus = Применяет или снимает эффект статуса с боевой единицы. lst.applystatus = Применяет или снимает эффект статуса с боевой единицы.
lst.weathersensor = Check if a type of weather is active.
lst.weatherset = Set the current state of a type of weather.
lst.spawnwave = Имитация волны, создаваемой в произвольном месте.\nСчетчик волн не увеличивается. lst.spawnwave = Имитация волны, создаваемой в произвольном месте.\nСчетчик волн не увеличивается.
lst.explosion = Создает взрыв на локации. lst.explosion = Создает взрыв на локации.
lst.setrate = Устанавливает скорость выполнения процессора в инструкциях/тиках. lst.setrate = Устанавливает скорость выполнения процессора в инструкциях/тиках.
@@ -2297,6 +2303,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.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.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. 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]Строительство с помощью процессоров здесь запрещено. logic.nounitbuild = [red]Строительство с помощью процессоров здесь запрещено.
@@ -2452,3 +2494,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.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.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.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.

View File

@@ -495,6 +495,7 @@ editor.default = [lightgray]<Default>
details = Detalji... details = Detalji...
edit = Izmeni... edit = Izmeni...
variables = Varijabla variables = Varijabla
logic.globals = Built-in Variables
editor.name = Ime: editor.name = Ime:
editor.spawn = Prizovi Jedinicu editor.spawn = Prizovi Jedinicu
editor.removeunit = Ukloni Jedinicu editor.removeunit = Ukloni Jedinicu
@@ -672,10 +673,11 @@ objective.destroycore.name = Uništi Jezgro
objective.commandmode.name = Upravljački Mod objective.commandmode.name = Upravljački Mod
objective.flag.name = Zastava objective.flag.name = Zastava
marker.shapetext.name = Tekst i Oblik marker.shapetext.name = Tekst i Oblik
marker.minimap.name = Minimapa marker.point.name = Point
marker.shape.name = Oblik marker.shape.name = Oblik
marker.text.name = Tekst marker.text.name = Tekst
marker.line.name = Line marker.line.name = Line
marker.quad.name = Quad
marker.background = Pozadina marker.background = Pozadina
marker.outline = Outline marker.outline = Outline
objective.research = [accent]Izuči:\n[]{0}[lightgray]{1} 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.attacked = Sektor [accent]{0}[white] je napadnut!
sector.lost = Sektor [accent]{0}[white] je izgubljen! sector.lost = Sektor [accent]{0}[white] je izgubljen!
sector.capture = Sector [accent]{0}[white]Captured! sector.capture = Sector [accent]{0}[white]Captured!
sector.capture.current = Sector Captured!
sector.changeicon = Promeni Ikonicu sector.changeicon = Promeni Ikonicu
sector.noswitch.title = Nije Moguće Promeniti Sektor 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}[] 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.message.name = Poruka
block.reinforced-message.name = Armirana Poruka block.reinforced-message.name = Armirana Poruka
block.world-message.name = Svetovna Poruka block.world-message.name = Svetovna Poruka
block.world-switch.name = World Switch
block.illuminator.name = Svetlo block.illuminator.name = Svetlo
block.overflow-gate.name = Prelivna Kapija block.overflow-gate.name = Prelivna Kapija
block.underflow-gate.name = Podlivna Kapija block.underflow-gate.name = Podlivna Kapija
@@ -2282,6 +2286,8 @@ lst.getblock = Get tile data at any location.
lst.setblock = Set tile data at any location. lst.setblock = Set tile data at any location.
lst.spawnunit = Prizovi jedinicu na mestu. lst.spawnunit = Prizovi jedinicu na mestu.
lst.applystatus = Dodaj ili ukloni statusni efekat na jedinicu/e. lst.applystatus = Dodaj ili ukloni statusni efekat na jedinicu/e.
lst.weathersensor = Check if a type of weather is active.
lst.weatherset = Set the current state of a type of weather.
lst.spawnwave = Simulate a wave being spawned at a arbitrary location.\nWill not increment the wave counter. lst.spawnwave = Simulate a wave being spawned at a arbitrary location.\nWill not increment the wave counter.
lst.explosion = Izazovi eksploziju na mestu. lst.explosion = Izazovi eksploziju na mestu.
lst.setrate = Set processor execution speed in instructions/tick. lst.setrate = Set processor execution speed in instructions/tick.
@@ -2298,6 +2304,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.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.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. 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. logic.nounitbuild = [red]Unit building logic is not allowed here.
@@ -2453,3 +2495,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.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.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.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.

View File

@@ -490,6 +490,7 @@ editor.default = [lightgray]<Default>
details = Details... details = Details...
edit = Redigera... edit = Redigera...
variables = Vars variables = Vars
logic.globals = Built-in Variables
editor.name = Namn: editor.name = Namn:
editor.spawn = Spawn Unit editor.spawn = Spawn Unit
editor.removeunit = Remove Unit editor.removeunit = Remove Unit
@@ -665,10 +666,11 @@ objective.destroycore.name = Destroy Core
objective.commandmode.name = Command Mode objective.commandmode.name = Command Mode
objective.flag.name = Flag objective.flag.name = Flag
marker.shapetext.name = Shape Text marker.shapetext.name = Shape Text
marker.minimap.name = Minimap marker.point.name = Point
marker.shape.name = Shape marker.shape.name = Shape
marker.text.name = Text marker.text.name = Text
marker.line.name = Line marker.line.name = Line
marker.quad.name = Quad
marker.background = Background marker.background = Background
marker.outline = Outline marker.outline = Outline
objective.research = [accent]Research:\n[]{0}[lightgray]{1} 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.attacked = Sector [accent]{0}[white] under attack!
sector.lost = Sector [accent]{0}[white] lost! sector.lost = Sector [accent]{0}[white] lost!
sector.capture = Sector [accent]{0}[white]Captured! sector.capture = Sector [accent]{0}[white]Captured!
sector.capture.current = Sector Captured!
sector.changeicon = Change Icon sector.changeicon = Change Icon
sector.noswitch.title = Unable to Switch Sectors 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}[] 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.message.name = Meddelande
block.reinforced-message.name = Reinforced Message block.reinforced-message.name = Reinforced Message
block.world-message.name = World Message block.world-message.name = World Message
block.world-switch.name = World Switch
block.illuminator.name = Illuminator block.illuminator.name = Illuminator
block.overflow-gate.name = Överflödesgrind block.overflow-gate.name = Överflödesgrind
block.underflow-gate.name = Underflow Gate block.underflow-gate.name = Underflow Gate
@@ -2262,6 +2266,8 @@ lst.getblock = Get tile data at any location.
lst.setblock = Set tile data at any location. lst.setblock = Set tile data at any location.
lst.spawnunit = Spawn unit at a location. lst.spawnunit = Spawn unit at a location.
lst.applystatus = Apply or clear a status effect from a uniut. lst.applystatus = Apply or clear a status effect from a uniut.
lst.weathersensor = Check if a type of weather is active.
lst.weatherset = Set the current state of a type of weather.
lst.spawnwave = Simulate a wave being spawned at a arbitrary location.\nWill not increment the wave counter. lst.spawnwave = Simulate a wave being spawned at a arbitrary location.\nWill not increment the wave counter.
lst.explosion = Create an explosion at a location. lst.explosion = Create an explosion at a location.
lst.setrate = Set processor execution speed in instructions/tick. lst.setrate = Set processor execution speed in instructions/tick.
@@ -2278,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.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.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. 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. 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.type = Type of building/unit.\ne.g. for any router, this will return [accent]@router[].\nNot a string.
lenum.shoot = Shoot at a position. lenum.shoot = Shoot at a position.
@@ -2414,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.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.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.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.

View File

@@ -495,6 +495,7 @@ editor.default = [lightgray]<ค่าเริ่มต้น>
details = รายละเอียด... details = รายละเอียด...
edit = แก้ไข... edit = แก้ไข...
variables = ตัวแปร variables = ตัวแปร
logic.globals = Built-in Variables
editor.name = ชื่อ: editor.name = ชื่อ:
editor.spawn = สร้างยูนิต editor.spawn = สร้างยูนิต
editor.removeunit = ลบยูนิต editor.removeunit = ลบยูนิต
@@ -672,10 +673,11 @@ objective.destroycore.name = ทำลายแกนกลาง
objective.commandmode.name = โหมดสั่งการ objective.commandmode.name = โหมดสั่งการ
objective.flag.name = ธง objective.flag.name = ธง
marker.shapetext.name = ข้อความในรูปทรง marker.shapetext.name = ข้อความในรูปทรง
marker.minimap.name = มินิแมพ marker.point.name = Point
marker.shape.name = รูปทรง marker.shape.name = รูปทรง
marker.text.name = ข้อความ marker.text.name = ข้อความ
marker.line.name = Line marker.line.name = Line
marker.quad.name = Quad
marker.background = พื้นหลัง marker.background = พื้นหลัง
marker.outline = โครงร่าง marker.outline = โครงร่าง
objective.research = [accent]วิจัย:\n[]{0}[lightgray]{1} objective.research = [accent]วิจัย:\n[]{0}[lightgray]{1}
@@ -761,6 +763,7 @@ sector.missingresources = [scarlet]ขาดทรัพยากรในกา
sector.attacked = เซ็กเตอร์ [accent]{0}[white] ถูกโจมตี! sector.attacked = เซ็กเตอร์ [accent]{0}[white] ถูกโจมตี!
sector.lost = เราเสียเซ็กเตอร์ [accent]{0}[white]! sector.lost = เราเสียเซ็กเตอร์ [accent]{0}[white]!
sector.capture = Sector [accent]{0}[white]Captured! sector.capture = Sector [accent]{0}[white]Captured!
sector.capture.current = Sector Captured!
sector.changeicon = เปลี่ยนไอคอน sector.changeicon = เปลี่ยนไอคอน
sector.noswitch.title = ไม่สามารถเปลี่ยนเซ็กเตอร์ได้ sector.noswitch.title = ไม่สามารถเปลี่ยนเซ็กเตอร์ได้
sector.noswitch = คุณไม่สามารถเปลี่ยนเซ็กเตอร์ได้ระหว่างที่อีกเซ็กเตอร์กำลังถูกโจมตีอยู่\n\nเซ็กเตอร์: [accent]{0}[] บนดาว [accent]{1}[] sector.noswitch = คุณไม่สามารถเปลี่ยนเซ็กเตอร์ได้ระหว่างที่อีกเซ็กเตอร์กำลังถูกโจมตีอยู่\n\nเซ็กเตอร์: [accent]{0}[] บนดาว [accent]{1}[]
@@ -1551,6 +1554,7 @@ block.inverted-sorter.name = เครื่องคัดแยกกลับ
block.message.name = กล่องข้อความ block.message.name = กล่องข้อความ
block.reinforced-message.name = กล่องข้อความเสริมกำลัง block.reinforced-message.name = กล่องข้อความเสริมกำลัง
block.world-message.name = กล่องข้อความโลก block.world-message.name = กล่องข้อความโลก
block.world-switch.name = World Switch
block.illuminator.name = ตัวเปล่งแสง block.illuminator.name = ตัวเปล่งแสง
block.overflow-gate.name = ประตูระบาย block.overflow-gate.name = ประตูระบาย
block.underflow-gate.name = ประตูระบายข้าง block.underflow-gate.name = ประตูระบายข้าง
@@ -2299,6 +2303,8 @@ lst.getblock = รับข้อมูลของช่องที่ตำ
lst.setblock = ปรับแต่งข้อมูลของช่องที่ตำแหน่งใดๆ lst.setblock = ปรับแต่งข้อมูลของช่องที่ตำแหน่งใดๆ
lst.spawnunit = เสกยูนิตมาที่ตำแหน่งที่กำหนดไว้ lst.spawnunit = เสกยูนิตมาที่ตำแหน่งที่กำหนดไว้
lst.applystatus = ใส่หรือล้างเอฟเฟกต์สถานะจากยูนิต lst.applystatus = ใส่หรือล้างเอฟเฟกต์สถานะจากยูนิต
lst.weathersensor = Check if a type of weather is active.
lst.weatherset = Set the current state of a type of weather.
lst.spawnwave = จำลองคลื่นที่ตำแหน่งใดๆ lst.spawnwave = จำลองคลื่นที่ตำแหน่งใดๆ
lst.explosion = เสกระเบิดที่ตำแหน่ง lst.explosion = เสกระเบิดที่ตำแหน่ง
lst.setrate = ตั้งค่าความเร็วการสั่งเป็นคำสั่งใน คำสั่ง/ติก lst.setrate = ตั้งค่าความเร็วการสั่งเป็นคำสั่งใน คำสั่ง/ติก
@@ -2315,6 +2321,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.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.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. 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]ไม่อนุญาตให้ใช้ลอจิกควบคุมให้ยูนิตสร้างที่นี่ logic.nounitbuild = [red]ไม่อนุญาตให้ใช้ลอจิกควบคุมให้ยูนิตสร้างที่นี่
@@ -2471,3 +2513,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.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.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.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.

View File

@@ -490,6 +490,7 @@ editor.default = [lightgray]<Default>
details = Details... details = Details...
edit = Edit... edit = Edit...
variables = Vars variables = Vars
logic.globals = Built-in Variables
editor.name = isim: editor.name = isim:
editor.spawn = Spawn Unit editor.spawn = Spawn Unit
editor.removeunit = Remove Unit editor.removeunit = Remove Unit
@@ -665,10 +666,11 @@ objective.destroycore.name = Destroy Core
objective.commandmode.name = Command Mode objective.commandmode.name = Command Mode
objective.flag.name = Flag objective.flag.name = Flag
marker.shapetext.name = Shape Text marker.shapetext.name = Shape Text
marker.minimap.name = Minimap marker.point.name = Point
marker.shape.name = Shape marker.shape.name = Shape
marker.text.name = Text marker.text.name = Text
marker.line.name = Line marker.line.name = Line
marker.quad.name = Quad
marker.background = Background marker.background = Background
marker.outline = Outline marker.outline = Outline
objective.research = [accent]Research:\n[]{0}[lightgray]{1} 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.attacked = Sector [accent]{0}[white] under attack!
sector.lost = Sector [accent]{0}[white] lost! sector.lost = Sector [accent]{0}[white] lost!
sector.capture = Sector [accent]{0}[white]Captured! sector.capture = Sector [accent]{0}[white]Captured!
sector.capture.current = Sector Captured!
sector.changeicon = Change Icon sector.changeicon = Change Icon
sector.noswitch.title = Unable to Switch Sectors 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}[] 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.message.name = Message
block.reinforced-message.name = Reinforced Message block.reinforced-message.name = Reinforced Message
block.world-message.name = World Message block.world-message.name = World Message
block.world-switch.name = World Switch
block.illuminator.name = Illuminator block.illuminator.name = Illuminator
block.overflow-gate.name = Kapali dagatici block.overflow-gate.name = Kapali dagatici
block.underflow-gate.name = Underflow Gate block.underflow-gate.name = Underflow Gate
@@ -2262,6 +2266,8 @@ lst.getblock = Get tile data at any location.
lst.setblock = Set tile data at any location. lst.setblock = Set tile data at any location.
lst.spawnunit = Spawn unit at a location. lst.spawnunit = Spawn unit at a location.
lst.applystatus = Apply or clear a status effect from a uniut. lst.applystatus = Apply or clear a status effect from a uniut.
lst.weathersensor = Check if a type of weather is active.
lst.weatherset = Set the current state of a type of weather.
lst.spawnwave = Simulate a wave being spawned at a arbitrary location.\nWill not increment the wave counter. lst.spawnwave = Simulate a wave being spawned at a arbitrary location.\nWill not increment the wave counter.
lst.explosion = Create an explosion at a location. lst.explosion = Create an explosion at a location.
lst.setrate = Set processor execution speed in instructions/tick. lst.setrate = Set processor execution speed in instructions/tick.
@@ -2278,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.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.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. 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. 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.type = Type of building/unit.\ne.g. for any router, this will return [accent]@router[].\nNot a string.
lenum.shoot = Shoot at a position. lenum.shoot = Shoot at a position.
@@ -2414,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.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.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.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.

View File

@@ -495,6 +495,7 @@ editor.default = [lightgray]<Varsayılan>
details = Detaylar... details = Detaylar...
edit = Düzenle... edit = Düzenle...
variables = Değişkenler variables = Değişkenler
logic.globals = Built-in Variables
editor.name = İsim: editor.name = İsim:
editor.spawn = Birim Oluştur editor.spawn = Birim Oluştur
editor.removeunit = Birim Kaldır editor.removeunit = Birim Kaldır
@@ -672,10 +673,11 @@ objective.destroycore.name = Merkezi Yok Et
objective.commandmode.name = Komuta Et objective.commandmode.name = Komuta Et
objective.flag.name = Bayrak objective.flag.name = Bayrak
marker.shapetext.name = Şekilli Yazı marker.shapetext.name = Şekilli Yazı
marker.minimap.name = Harita marker.point.name = Point
marker.shape.name = Şekil marker.shape.name = Şekil
marker.text.name = Yazı marker.text.name = Yazı
marker.line.name = Line marker.line.name = Line
marker.quad.name = Quad
marker.background = Arkaplan marker.background = Arkaplan
marker.outline = Anahat marker.outline = Anahat
objective.research = [accent]Araştır:\n[]{0}[lightgray]{1} 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.attacked = Sektör [accent]{0}[white] saldırı altında!
sector.lost = Sektör [accent]{0}[white] kaybedildi! sector.lost = Sektör [accent]{0}[white] kaybedildi!
sector.capture = Sector [accent]{0}[white]Captured! sector.capture = Sector [accent]{0}[white]Captured!
sector.capture.current = Sector Captured!
sector.changeicon = İkon Değiştir sector.changeicon = İkon Değiştir
sector.noswitch.title = Sektör Değiştirilemiyor 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}[] 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.message.name = Mesaj Bloğu
block.reinforced-message.name = Güçlendirilmiş Mesaj Bloğu block.reinforced-message.name = Güçlendirilmiş Mesaj Bloğu
block.world-message.name = Evrensel Mesaj Bloğu block.world-message.name = Evrensel Mesaj Bloğu
block.world-switch.name = World Switch
block.illuminator.name = Aydınlatıcı block.illuminator.name = Aydınlatıcı
block.overflow-gate.name = Taşma Geçidi block.overflow-gate.name = Taşma Geçidi
block.underflow-gate.name = Yana Taşma Geçidi block.underflow-gate.name = Yana Taşma Geçidi
@@ -2279,6 +2283,8 @@ lst.getblock = Herhangi bir yerdeki blok bilgisini al.
lst.setblock = Herhangi bir yerdeki blok bilgisini değiştir. lst.setblock = Herhangi bir yerdeki blok bilgisini değiştir.
lst.spawnunit = Herhangi bir yerde birim var et. lst.spawnunit = Herhangi bir yerde birim var et.
lst.applystatus = Bir Birime Durum Etkisi ekle. lst.applystatus = Bir Birime Durum Etkisi ekle.
lst.weathersensor = Check if a type of weather is active.
lst.weatherset = Set the current state of a type of weather.
lst.spawnwave = Bellir bir noktada dalga başlat.\nDalga Zamanlayıcı Oluşturmaz! lst.spawnwave = Bellir bir noktada dalga başlat.\nDalga Zamanlayıcı Oluşturmaz!
lst.explosion = Bir Noktada Patlama oluştur. lst.explosion = Bir Noktada Patlama oluştur.
lst.setrate = İşlemci Hızını Ayarla (işlem/tick) lst.setrate = İşlemci Hızını Ayarla (işlem/tick)
@@ -2295,6 +2301,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.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.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. 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! logic.nounitbuild = [red]Birim İnşası Yasak!
@@ -2450,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.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.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.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.

View File

@@ -497,6 +497,7 @@ editor.default = [lightgray]<За замовчуванням>
details = Подробиці… details = Подробиці…
edit = Змінити… edit = Змінити…
variables = Змінні variables = Змінні
logic.globals = Built-in Variables
editor.name = Ім’я: editor.name = Ім’я:
editor.spawn = Створити бойову одиницю editor.spawn = Створити бойову одиницю
editor.removeunit = Видалити бойову одиницю editor.removeunit = Видалити бойову одиницю
@@ -677,10 +678,11 @@ objective.commandmode.name = Режим командування
objective.flag.name = Прапорець objective.flag.name = Прапорець
marker.shapetext.name = Форма тексту marker.shapetext.name = Форма тексту
marker.minimap.name = Мінімапа marker.point.name = Point
marker.shape.name = Форма marker.shape.name = Форма
marker.text.name = Текст marker.text.name = Текст
marker.line.name = Line marker.line.name = Line
marker.quad.name = Quad
marker.background = Фон marker.background = Фон
marker.outline = Контур marker.outline = Контур
@@ -769,6 +771,7 @@ sector.missingresources = [scarlet]Недостатньо ресурсів у я
sector.attacked = Сектор [accent]{0}[white] під атакою! sector.attacked = Сектор [accent]{0}[white] під атакою!
sector.lost = Сектор [accent]{0}[white] втрачено! sector.lost = Сектор [accent]{0}[white] втрачено!
sector.capture = Sector [accent]{0}[white]Captured! sector.capture = Sector [accent]{0}[white]Captured!
sector.capture.current = Sector Captured!
sector.changeicon = Змінити значок sector.changeicon = Змінити значок
sector.noswitch.title = Неможливо переключити сектори sector.noswitch.title = Неможливо переключити сектори
sector.noswitch = Ви не можете змінювати сектори, поки поточний сектор піддається атаці.\n\nСектор: [accent]{0}[] на [accent]{1}[] sector.noswitch = Ви не можете змінювати сектори, поки поточний сектор піддається атаці.\n\nСектор: [accent]{0}[] на [accent]{1}[]
@@ -1555,6 +1558,7 @@ block.inverted-sorter.name = Зворотний сортувальник
block.message.name = Повідомлення block.message.name = Повідомлення
block.reinforced-message.name = Посилене повідомлення block.reinforced-message.name = Посилене повідомлення
block.world-message.name = Світове повідомлення block.world-message.name = Світове повідомлення
block.world-switch.name = World Switch
block.illuminator.name = Освітлювач block.illuminator.name = Освітлювач
block.overflow-gate.name = Надмірний затвор block.overflow-gate.name = Надмірний затвор
block.underflow-gate.name = Недостатній затвор block.underflow-gate.name = Недостатній затвор
@@ -2306,6 +2310,8 @@ lst.getblock = Отримує дані плитки в будь-якому мі
lst.setblock = Установлює дані плитки в будь-якому місці. lst.setblock = Установлює дані плитки в будь-якому місці.
lst.spawnunit = Породжує одиницю на певному місці. lst.spawnunit = Породжує одиницю на певному місці.
lst.applystatus = Застосовує або видаляє ефект стану з одиниці. lst.applystatus = Застосовує або видаляє ефект стану з одиниці.
lst.weathersensor = Check if a type of weather is active.
lst.weatherset = Set the current state of a type of weather.
lst.spawnwave = Змодельовує хвилю, що виникає у довільному місці.\nНе збільшує лічильник хвиль. lst.spawnwave = Змодельовує хвилю, що виникає у довільному місці.\nНе збільшує лічильник хвиль.
lst.explosion = Створює вибух у певному місці. lst.explosion = Створює вибух у певному місці.
lst.setrate = Установлює швидкість виконання процесора в інструкціях за такт. lst.setrate = Установлює швидкість виконання процесора в інструкціях за такт.
@@ -2322,6 +2328,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.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.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. 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]Будування за допомогою процесорів заборено. logic.nounitbuild = [red]Будування за допомогою процесорів заборено.
@@ -2478,3 +2520,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.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.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.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.

View File

@@ -496,6 +496,7 @@ editor.default = [lightgray]<Mặc định>
details = Chi tiết... details = Chi tiết...
edit = Chỉnh sửa... edit = Chỉnh sửa...
variables = Thông số variables = Thông số
logic.globals = Built-in Variables
editor.name = Tên: editor.name = Tên:
editor.spawn = Thêm kẻ địch editor.spawn = Thêm kẻ địch
editor.removeunit = Xóa 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.commandmode.name = Chế độ ra lệnh
objective.flag.name = Cờ objective.flag.name = Cờ
marker.shapetext.name = Hình dạng văn bản 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.shape.name = Hình dạng
marker.text.name = Văn bản marker.text.name = Văn bản
marker.line.name = Line marker.line.name = Line
marker.quad.name = Quad
marker.background = Nền marker.background = Nền
marker.outline = Đường viền marker.outline = Đường viền
objective.research = [accent]Nghiên cứu:\n[]{0}[lightgray]{1} 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.attacked = Khu vực [accent]{0}[white] đang bị tấn công!
sector.lost = Khu vực [accent]{0}[white] đã mất! sector.lost = Khu vực [accent]{0}[white] đã mất!
sector.capture = Sector [accent]{0}[white]Captured! sector.capture = Sector [accent]{0}[white]Captured!
sector.capture.current = Sector Captured!
sector.changeicon = Thay đổi biểu tượng sector.changeicon = Thay đổi biểu tượng
sector.noswitch.title = Không thể thay đổi sang khu vực khác 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}[] 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.message.name = Thông điệp
block.reinforced-message.name = Thông điệp [Gia cố] block.reinforced-message.name = Thông điệp [Gia cố]
block.world-message.name = Thông điệp thế giới block.world-message.name = Thông điệp thế giới
block.world-switch.name = World Switch
block.illuminator.name = Đèn block.illuminator.name = Đèn
block.overflow-gate.name = Cổng tràn block.overflow-gate.name = Cổng tràn
block.underflow-gate.name = Cổng tràn ngược block.underflow-gate.name = Cổng tràn ngược
@@ -2280,6 +2284,8 @@ lst.getblock = Lấy dữ liệu từ ô từ vị trí bất kì.
lst.setblock = Chỉnh sửa dữ liệu từ ô từ vị trí bất kì. lst.setblock = Chỉnh sửa dữ liệu từ ô từ vị trí bất kì.
lst.spawnunit = Tạo ra quân từ vị trí. lst.spawnunit = Tạo ra quân từ vị trí.
lst.applystatus = Áp dụng hoặc loại bỏ một hiệu ứng trạng thái cho một đơn vị. lst.applystatus = Áp dụng hoặc loại bỏ một hiệu ứng trạng thái cho một đơn vị.
lst.weathersensor = Check if a type of weather is active.
lst.weatherset = Set the current state of a type of weather.
lst.spawnwave = Mô phỏng một lượt xuất hiện ở vị trí tùy ý.\nSẽ không tăng số đếm lượt. lst.spawnwave = Mô phỏng một lượt xuất hiện ở vị trí tùy ý.\nSẽ không tăng số đếm lượt.
lst.explosion = Tạo ra một vụ nổ tại vị trí đó. lst.explosion = Tạo ra một vụ nổ tại vị trí đó.
lst.setrate = Đặt tốc độ thực thi khối xử lý theo chỉ thị/tíc-tắc. lst.setrate = Đặt tốc độ thực thi khối xử lý theo chỉ thị/tíc-tắc.
@@ -2296,6 +2302,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.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.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. 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. logic.nounitbuild = [red]Lô-gíc xây dựng đơn vị không được phép ở đây.
@@ -2451,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.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.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.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.

View File

@@ -498,6 +498,7 @@ editor.default = [lightgray]<默认>
details = 详情… details = 详情…
edit = 编辑… edit = 编辑…
variables = 变量 variables = 变量
logic.globals = Built-in Variables
editor.name = 名称: editor.name = 名称:
editor.spawn = 生成单位 editor.spawn = 生成单位
editor.removeunit = 移除单位 editor.removeunit = 移除单位
@@ -678,10 +679,11 @@ objective.commandmode.name = 指挥模式
objective.flag.name = 标签 objective.flag.name = 标签
marker.shapetext.name = 带形状文本 marker.shapetext.name = 带形状文本
marker.minimap.name = 小地图 marker.point.name = Point
marker.shape.name = 形状 marker.shape.name = 形状
marker.text.name = 文本 marker.text.name = 文本
marker.line.name = Line marker.line.name = Line
marker.quad.name = Quad
marker.background = 背景 marker.background = 背景
marker.outline = 轮廓 marker.outline = 轮廓
@@ -770,6 +772,7 @@ sector.missingresources = [scarlet]建造核心所需资源不足
sector.attacked = 区块[accent]{0}[white]受到攻击! sector.attacked = 区块[accent]{0}[white]受到攻击!
sector.lost = 区块[accent]{0}[white]已丢失! sector.lost = 区块[accent]{0}[white]已丢失!
sector.capture = Sector [accent]{0}[white]Captured! sector.capture = Sector [accent]{0}[white]Captured!
sector.capture.current = Sector Captured!
sector.changeicon = 更改图标 sector.changeicon = 更改图标
sector.noswitch.title = 无法切换区块 sector.noswitch.title = 无法切换区块
sector.noswitch = 你无法在当前区块遭受攻击时切换区块。\n\n区块[accent]{0}[]位于[accent]{1}[] sector.noswitch = 你无法在当前区块遭受攻击时切换区块。\n\n区块[accent]{0}[]位于[accent]{1}[]
@@ -1556,6 +1559,7 @@ block.inverted-sorter.name = 反向分类器
block.message.name = 信息板 block.message.name = 信息板
block.reinforced-message.name = 强化信息板 block.reinforced-message.name = 强化信息板
block.world-message.name = 世界信息板 block.world-message.name = 世界信息板
block.world-switch.name = World Switch
block.illuminator.name = 照明器 block.illuminator.name = 照明器
block.overflow-gate.name = 溢流门 block.overflow-gate.name = 溢流门
block.underflow-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]点击[]指挥所选单位移动或攻击。 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 = 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.pickup.mobile = 核心单位可以拾取一些方块。\n拾取这个[accent]强化容器[]并将其放到[accent]载荷装载器[]中。\n长按以拾取或放下载荷
split.acquire = 你需要获取钨来生产单位。 split.acquire = 你需要获取钨来生产单位。
split.build = 单位必须被运输到墙的另一侧。\n在墙壁两侧各放置一个[accent]载荷质量驱动器[]。\n点击其中一个然后点击另一个以连接它们。 split.build = 单位必须被运输到墙的另一侧。\n在墙壁两侧各放置一个[accent]载荷质量驱动器[]。\n点击其中一个然后点击另一个以连接它们。
@@ -2305,6 +2309,8 @@ lst.getblock = 获取任意位置的地块数据
lst.setblock = 设置任意位置的地块数据 lst.setblock = 设置任意位置的地块数据
lst.spawnunit = 在指定位置生成单位 lst.spawnunit = 在指定位置生成单位
lst.applystatus = 添加或清除单位的一个状态效果 lst.applystatus = 添加或清除单位的一个状态效果
lst.weathersensor = Check if a type of weather is active.
lst.weatherset = Set the current state of a type of weather.
lst.spawnwave = 在任意位置生成一波敌人\n并不记录在波数计数器中 lst.spawnwave = 在任意位置生成一波敌人\n并不记录在波数计数器中
lst.explosion = 在某个位置生成爆炸 lst.explosion = 在某个位置生成爆炸
lst.setrate = 在指令/时间刻的时间下设置处理器处理速度 lst.setrate = 在指令/时间刻的时间下设置处理器处理速度
@@ -2321,6 +2327,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.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.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. 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]此处不允许处理器操控单位去建设 logic.nounitbuild = [red]此处不允许处理器操控单位去建设
@@ -2477,3 +2519,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.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.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.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.

View File

@@ -495,6 +495,7 @@ editor.default = [lightgray](預設)
details = 詳細資訊…… details = 詳細資訊……
edit = 編輯…… edit = 編輯……
variables = 變數 variables = 變數
logic.globals = Built-in Variables
editor.name = 名稱: editor.name = 名稱:
editor.spawn = 重生單位 editor.spawn = 重生單位
editor.removeunit = 移除單位 editor.removeunit = 移除單位
@@ -675,10 +676,11 @@ objective.commandmode.name = 指揮模式
objective.flag.name = 全局Flag objective.flag.name = 全局Flag
marker.shapetext.name = 稜框+文字標示 marker.shapetext.name = 稜框+文字標示
marker.minimap.name = 小地圖標示 marker.point.name = Point
marker.shape.name = 稜框標示 marker.shape.name = 稜框標示
marker.text.name = 文字標示 marker.text.name = 文字標示
marker.line.name = Line marker.line.name = Line
marker.quad.name = Quad
marker.background = 反黑背景 marker.background = 反黑背景
marker.outline = 描邊 marker.outline = 描邊
@@ -766,6 +768,7 @@ sector.missingresources = [scarlet]核心資源不足
sector.attacked = 地區 [accent]{0}[white] 遭受攻擊! sector.attacked = 地區 [accent]{0}[white] 遭受攻擊!
sector.lost = 地區 [accent]{0}[white] 戰敗! sector.lost = 地區 [accent]{0}[white] 戰敗!
sector.capture = Sector [accent]{0}[white]Captured! sector.capture = Sector [accent]{0}[white]Captured!
sector.capture.current = Sector Captured!
sector.changeicon = 更改圖標 sector.changeicon = 更改圖標
sector.noswitch.title = 無法切換地區 sector.noswitch.title = 無法切換地區
sector.noswitch = 當前地區遭受攻擊時,無法切換地區\n\n地區: [accent]{0}[] 於 [accent]{1}[] sector.noswitch = 當前地區遭受攻擊時,無法切換地區\n\n地區: [accent]{0}[] 於 [accent]{1}[]
@@ -1552,6 +1555,7 @@ block.inverted-sorter.name = 反向分類器
block.message.name = 訊息板 block.message.name = 訊息板
block.reinforced-message.name = Reinforced Message block.reinforced-message.name = Reinforced Message
block.world-message.name = World Message block.world-message.name = World Message
block.world-switch.name = World Switch
block.illuminator.name = 照明燈 block.illuminator.name = 照明燈
block.overflow-gate.name = 溢流器 block.overflow-gate.name = 溢流器
block.underflow-gate.name = 反向溢流器 block.underflow-gate.name = 反向溢流器
@@ -2291,6 +2295,8 @@ lst.getblock = 由位置取方塊數據
lst.setblock = 由位置設置方塊數據 lst.setblock = 由位置設置方塊數據
lst.spawnunit = 在某一位置生成單位 lst.spawnunit = 在某一位置生成單位
lst.applystatus = 爲單位添加或移除狀態效果 lst.applystatus = 爲單位添加或移除狀態效果
lst.weathersensor = Check if a type of weather is active.
lst.weatherset = Set the current state of a type of weather.
lst.spawnwave = 在某一位置生成一波敵人\n不計入波數 lst.spawnwave = 在某一位置生成一波敵人\n不計入波數
lst.explosion = 在某一位置製造爆炸 lst.explosion = 在某一位置製造爆炸
lst.setrate = 以指令/每時刻設置處理器速度 lst.setrate = 以指令/每時刻設置處理器速度
@@ -2307,6 +2313,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.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.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. 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]單位建造邏輯已被禁止。 logic.nounitbuild = [red]單位建造邏輯已被禁止。
@@ -2463,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.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.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.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.

View File

@@ -164,3 +164,4 @@ summoner
OpalSoPL OpalSoPL
BalaM314 BalaM314
Redstonneur1256 Redstonneur1256
ApsZoldat

Binary file not shown.

View File

@@ -2,7 +2,6 @@ uniform sampler2D u_texture;
uniform float u_time; uniform float u_time;
uniform float u_progress; uniform float u_progress;
uniform vec4 u_color;
uniform vec2 u_uv; uniform vec2 u_uv;
uniform vec2 u_uv2; uniform vec2 u_uv2;
uniform vec2 u_texsize; uniform vec2 u_texsize;
@@ -14,8 +13,7 @@ void main(){
vec2 coords = (v_texCoords - u_uv) / (u_uv2 - u_uv); vec2 coords = (v_texCoords - u_uv) / (u_uv2 - u_uv);
vec2 v = vec2(1.0/u_texsize.x, 1.0/u_texsize.y); 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 *= u_progress;
c.a *= step(abs(sin(coords.y*3.0 + u_time)), 0.9); c.a *= step(abs(sin(coords.y*3.0 + u_time)), 0.9);

View File

@@ -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); return (Float.isNaN(result) || Float.isInfinite(result)) ? 1f : Mathf.clamp(result, 0.0001f, 60f / 10f);
}); });
UI.loadColors();
batch = new SortedSpriteBatch(); batch = new SortedSpriteBatch();
assets = new AssetManager(); assets = new AssetManager();
assets.setLoader(Texture.class, "." + mapExtension, new MapPreviewLoader()); assets.setLoader(Texture.class, "." + mapExtension, new MapPreviewLoader());

View File

@@ -19,7 +19,23 @@ public class UnitGroup{
public int collisionLayer; public int collisionLayer;
public volatile float[] positions, originalPositions; public volatile float[] positions, originalPositions;
public volatile boolean valid; public volatile boolean valid;
public long lastSpeedUpdate = -1;
public float minSpeed = 999999f; 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){ public void calculateFormation(Vec2 dest, int collisionLayer){
this.collisionLayer = collisionLayer; this.collisionLayer = collisionLayer;
@@ -33,19 +49,16 @@ public class UnitGroup{
cy /= units.size; cy /= units.size;
positions = new float[units.size * 2]; positions = new float[units.size * 2];
//all positions are relative to the center //all positions are relative to the center
for(int i = 0; i < units.size; i ++){ for(int i = 0; i < units.size; i ++){
Unit unit = units.get(i); Unit unit = units.get(i);
positions[i * 2] = unit.x - cx; positions[i * 2] = unit.x - cx;
positions[i * 2 + 1] = unit.y - cy; positions[i * 2 + 1] = unit.y - cy;
unit.command().groupIndex = i; 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 //run on new thread to prevent stutter
Vars.mainExecutor.submit(() -> { Vars.mainExecutor.submit(() -> {

View File

@@ -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()))){ 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(); var build = unit.buildOn();
tmpPayload.unit = unit; tmpPayload.unit = unit;

View File

@@ -2,6 +2,8 @@ package mindustry.ai.types;
import arc.math.*; import arc.math.*;
import arc.util.*; import arc.util.*;
import mindustry.*;
import mindustry.entities.*;
import mindustry.entities.units.*; import mindustry.entities.units.*;
import mindustry.gen.*; 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 @Override
public boolean retarget(){ public boolean retarget(){
//more frequent retarget due to high speed. TODO won't this lag? //more frequent retarget due to high speed. TODO won't this lag?

View File

@@ -4571,6 +4571,7 @@ public class Blocks{
loopSoundVolume = 0.6f; loopSoundVolume = 0.6f;
deathSound = Sounds.largeExplosion; deathSound = Sounds.largeExplosion;
targetAir = false; targetAir = false;
targetUnderBlocks = false;
fogRadius = 6f; fogRadius = 6f;
@@ -5505,23 +5506,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"){{ shipRefabricator = new Reconstructor("ship-refabricator"){{
requirements(Category.units, with(Items.beryllium, 200, Items.tungsten, 100, Items.silicon, 150, Items.oxide, 40)); requirements(Category.units, with(Items.beryllium, 200, Items.tungsten, 100, Items.silicon, 150, Items.oxide, 40));
regionSuffix = "-dark"; regionSuffix = "-dark";
@@ -5540,6 +5524,23 @@ public class Blocks{
researchCost = with(Items.beryllium, 500, Items.tungsten, 200, Items.silicon, 300, Items.oxide, 80); 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 //yes very silly name
primeRefabricator = new Reconstructor("prime-refabricator"){{ primeRefabricator = new Reconstructor("prime-refabricator"){{
requirements(Category.units, with(Items.thorium, 250, Items.oxide, 200, Items.tungsten, 200, Items.silicon, 400)); requirements(Category.units, with(Items.thorium, 250, Items.oxide, 200, Items.tungsten, 200, Items.silicon, 400));

View File

@@ -4063,6 +4063,8 @@ public class UnitTypes{
isEnemy = false; isEnemy = false;
envDisabled = 0; envDisabled = 0;
range = 60f;
faceTarget = true;
targetPriority = -2; targetPriority = -2;
lowAltitude = false; lowAltitude = false;
mineWalls = true; mineWalls = true;
@@ -4127,8 +4129,10 @@ public class UnitTypes{
isEnemy = false; isEnemy = false;
envDisabled = 0; envDisabled = 0;
range = 60f;
targetPriority = -2; targetPriority = -2;
lowAltitude = false; lowAltitude = false;
faceTarget = true;
mineWalls = true; mineWalls = true;
mineFloor = false; mineFloor = false;
mineHardnessScaling = false; mineHardnessScaling = false;
@@ -4204,6 +4208,8 @@ public class UnitTypes{
isEnemy = false; isEnemy = false;
envDisabled = 0; envDisabled = 0;
range = 65f;
faceTarget = true;
targetPriority = -2; targetPriority = -2;
lowAltitude = false; lowAltitude = false;
mineWalls = true; mineWalls = true;

View File

@@ -17,7 +17,7 @@ public class Weathers{
suspendParticles; suspendParticles;
public static void load(){ public static void load(){
snow = new ParticleWeather("snow"){{ snow = new ParticleWeather("snowing"){{
particleRegion = "particle"; particleRegion = "particle";
sizeMax = 13f; sizeMax = 13f;
sizeMin = 2.6f; sizeMin = 2.6f;

View File

@@ -314,6 +314,14 @@ public class ContentLoader{
return getByName(ContentType.planet, name); return getByName(ContentType.planet, name);
} }
public Seq<Weather> weathers(){
return getBy(ContentType.weather);
}
public Weather weather(String name){
return getByName(ContentType.weather, name);
}
public Seq<UnitStance> unitStances(){ public Seq<UnitStance> unitStances(){
return getBy(ContentType.unitStance); return getBy(ContentType.unitStance);
} }

View File

@@ -86,11 +86,12 @@ public class GameState{
} }
public boolean isPaused(){ public boolean isPaused(){
return is(State.paused); return state == State.paused;
} }
/** @return whether there is an unpaused game in progress. */
public boolean isPlaying(){ public boolean isPlaying(){
return (state == State.playing) || (state == State.paused && !isPaused()); return state == State.playing;
} }
/** @return whether the current state is *not* the menu. */ /** @return whether the current state is *not* the menu. */

View File

@@ -357,7 +357,8 @@ public class Logic implements ApplicationListener{
//map is over, no more world processor objective stuff //map is over, no more world processor objective stuff
state.rules.disableWorldProcessors = true; state.rules.disableWorldProcessors = true;
state.rules.objectives.clear();
Call.clearObjectives();
//save, just in case //save, just in case
if(!headless && !net.client()){ if(!headless && !net.client()){
@@ -460,9 +461,6 @@ public class Logic implements ApplicationListener{
if(!state.isEditor()){ if(!state.isEditor()){
state.rules.objectives.update(); 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){ if(state.rules.waves && state.rules.waveTimer && !state.gameOver){

View File

@@ -340,15 +340,23 @@ public class NetClient implements ApplicationListener{
state.rules = rules; state.rules = rules;
} }
//NOTE: avoid using this, runs into packet/buffer size limitations
@Remote(variants = Variant.both) @Remote(variants = Variant.both)
public static void setObjectives(MapObjectives executor){ public static void setObjectives(MapObjectives executor){
state.rules.objectives = executor; state.rules.objectives = executor;
} }
@Remote(called = Loc.server) @Remote(variants = Variant.both, called = Loc.server)
public static void objectiveCompleted(String[] flagsRemoved, String[] flagsAdded){ public static void clearObjectives(){
state.rules.objectiveFlags.removeAll(flagsRemoved); state.rules.objectives.clear();
state.rules.objectiveFlags.addAll(flagsAdded); }
@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) @Remote(variants = Variant.both)

View File

@@ -372,18 +372,20 @@ public class Renderer implements ApplicationListener{
}); });
} }
float scaleFactor = 4f / renderer.getDisplayScale();
//draw objective markers //draw objective markers
state.rules.objectives.eachRunning(obj -> { state.rules.objectives.eachRunning(obj -> {
for(var marker : obj.markers){ for(var marker : obj.markers){
if(!marker.minimap){ if(marker.world){
marker.drawWorld(); marker.draw(marker.autoscale ? scaleFactor : 1);
} }
} }
}); });
for(var marker : state.markers){ for(var marker : state.markers){
if(!marker.isHidden() && !marker.minimap){ if(marker.world){
marker.drawWorld(); marker.draw(marker.autoscale ? scaleFactor : 1);
} }
} }

View File

@@ -101,8 +101,6 @@ public class UI implements ApplicationListener, Loadable{
@Override @Override
public void loadSync(){ public void loadSync(){
loadColors();
Fonts.outline.getData().markupEnabled = true; Fonts.outline.getData().markupEnabled = true;
Fonts.def.getData().markupEnabled = true; Fonts.def.getData().markupEnabled = true;
Fonts.def.setOwnsTexture(false); 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){ public void showTextInput(String titleText, String text, int textLength, String def, boolean numbers, boolean allowEmpty, Cons<String> confirmed, Runnable closed){
if(mobile){ if(mobile){
var description = text; var description = (text.startsWith("@") ? Core.bundle.get(text.substring(1)) : text);
var empty = allowEmpty; var empty = allowEmpty;
Core.input.getTextInput(new TextInput(){{ Core.input.getTextInput(new TextInput(){{
this.title = (titleText.startsWith("@") ? Core.bundle.get(titleText.substring(1)) : titleText); this.title = (titleText.startsWith("@") ? Core.bundle.get(titleText.substring(1)) : titleText);

View File

@@ -43,6 +43,8 @@ public abstract class UnlockableContent extends MappableContent{
public TextureRegion uiIcon; public TextureRegion uiIcon;
/** Icon of the full content. Unscaled.*/ /** Icon of the full content. Unscaled.*/
public TextureRegion fullIcon; public TextureRegion fullIcon;
/** Override for the full icon. Useful for mod content with duplicate icons. Overrides any other full icon.*/
public String fullOverride = "";
/** The tech tree node for this content, if applicable. Null if not part of a tech tree. */ /** The tech tree node for this content, if applicable. Null if not part of a tech tree. */
public @Nullable TechNode techNode; public @Nullable TechNode techNode;
/** Tech nodes for all trees that this content is part of. */ /** Tech nodes for all trees that this content is part of. */
@@ -62,11 +64,12 @@ public abstract class UnlockableContent extends MappableContent{
@Override @Override
public void loadIcon(){ public void loadIcon(){
fullIcon = fullIcon =
Core.atlas.find(fullOverride,
Core.atlas.find(getContentType().name() + "-" + name + "-full", Core.atlas.find(getContentType().name() + "-" + name + "-full",
Core.atlas.find(name + "-full", Core.atlas.find(name + "-full",
Core.atlas.find(name, Core.atlas.find(name,
Core.atlas.find(getContentType().name() + "-" + name, Core.atlas.find(getContentType().name() + "-" + name,
Core.atlas.find(name + "1"))))); Core.atlas.find(name + "1"))))));
uiIcon = Core.atlas.find(getContentType().name() + "-" + name + "-ui", fullIcon); uiIcon = Core.atlas.find(getContentType().name() + "-" + name + "-ui", fullIcon);
} }
@@ -115,6 +118,7 @@ public abstract class UnlockableContent extends MappableContent{
var result = Pixmaps.outline(base, outlineColor, outlineRadius); var result = Pixmaps.outline(base, outlineColor, outlineRadius);
Drawf.checkBleed(result); Drawf.checkBleed(result);
packer.add(page, regName, result); packer.add(page, regName, result);
result.dispose();
} }
} }
} }
@@ -126,6 +130,7 @@ public abstract class UnlockableContent extends MappableContent{
var result = Pixmaps.outline(base, outlineColor, outlineRadius); var result = Pixmaps.outline(base, outlineColor, outlineRadius);
Drawf.checkBleed(result); Drawf.checkBleed(result);
packer.add(PageType.main, name, result); packer.add(PageType.main, name, result);
result.dispose();
} }
} }

View File

@@ -301,6 +301,14 @@ public class MapEditor{
if(previous.in(px, py)){ if(previous.in(px, py)){
tiles.set(x, y, previous.getn(px, py)); tiles.set(x, y, previous.getn(px, py));
Tile tile = tiles.getn(x, y); 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.x = (short)x;
tile.y = (short)y; tile.y = (short)y;
@@ -309,9 +317,12 @@ public class MapEditor{
tile.build.y = y * tilesize + tile.block().offset; tile.build.y = y * tilesize + tile.block().offset;
//shift links to account for map resize //shift links to account for map resize
Object config = tile.build.config();
if(config != null){ 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){ if(out != config){
tile.build.configureAny(out); tile.build.configureAny(out);
} }

View File

@@ -91,6 +91,8 @@ public class MapLocalesDialog extends BaseDialog{
t.button("@edit", Icon.edit, this::editDialog).size(210f, 64f); t.button("@edit", Icon.edit, this::editDialog).size(210f, 64f);
}).growX(); }).growX();
resized(this::buildMain);
buttons.button("?", () -> ui.showInfo("@locales.info")).size(60f, 64f).uniform(); buttons.button("?", () -> ui.showInfo("@locales.info")).size(60f, 64f).uniform();
shown(this::setup); shown(this::setup);
@@ -158,7 +160,7 @@ public class MapLocalesDialog extends BaseDialog{
saved = false; saved = false;
buildMain(); buildMain();
}).padTop(10f).size(400f, 50f).fillX().row(); }).padTop(10f).size(cardWidth, 50f).fillX().row();
}).right(); }).right();
} }
@@ -184,7 +186,7 @@ public class MapLocalesDialog extends BaseDialog{
selectedLocale = name; selectedLocale = name;
buildTables(); 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.edit, Styles.flati, () -> localeEditDialog(name)).size(50f);
p.button(Icon.trash, Styles.flati, () -> ui.showConfirm("@confirm", "@locales.deletelocale", () -> { p.button(Icon.trash, Styles.flati, () -> ui.showConfirm("@confirm", "@locales.deletelocale", () -> {
locales.remove(name); locales.remove(name);
@@ -196,7 +198,7 @@ public class MapLocalesDialog extends BaseDialog{
} }
} }
}).row(); }).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(){ private void buildMain(){
@@ -206,7 +208,7 @@ public class MapLocalesDialog extends BaseDialog{
main.image().color(Pal.gray).height(3f).growX().expandY().top().row(); main.image().color(Pal.gray).height(3f).growX().expandY().top().row();
main.pane(p -> { 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){ if(props.size == 0){
main.add("@empty").center().row(); main.add("@empty").center().row();
return; return;
@@ -512,7 +514,7 @@ public class MapLocalesDialog extends BaseDialog{
propView.image().color(Pal.gray).height(3f).fillX().top().row(); propView.image().color(Pal.gray).height(3f).fillX().top().row();
propView.pane(p -> { 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){ if(cols == 0){
propView.add("@empty").center().row(); propView.add("@empty").center().row();
return; return;
@@ -720,7 +722,9 @@ public class MapLocalesDialog extends BaseDialog{
if(!locales.containsKey(key)) return ""; if(!locales.containsKey(key)) return "";
for(var prop : locales.get(key).entries()){ 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(); return data.toString();
@@ -738,7 +742,9 @@ public class MapLocalesDialog extends BaseDialog{
}else{ }else{
int sepIndex = line.indexOf(" = "); int sepIndex = line.indexOf(" = ");
if(sepIndex != -1 && !currentLocale.isEmpty()){ 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")){ for(var line : data.split("\\r?\\n|\\r")){
int sepIndex = line.indexOf(" = "); int sepIndex = line.indexOf(" = ");
if(sepIndex != -1){ 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"));
} }
} }

View File

@@ -246,6 +246,38 @@ public class MapObjectivesDialog extends BaseDialog{
show(); 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. // 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 obj : MapObjectives.allObjectiveTypes) setInterpreter(obj.get().getClass(), defaultInterpreter());
for(var mark : MapObjectives.allMarkerTypes) setInterpreter(mark.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.downOpen, Styles.emptyi, () -> indexer.get(false)).fill().padRight(4f);
} }
t.button(Icon.add, Styles.emptyi, () -> getProvider(type.element.raw).get(type.element, res -> { if(!field.isAnnotationPresent(Immutable.class)) {
arr.add(res); t.button(Icon.add, Styles.emptyi, () -> getProvider(type.element.raw).get(type.element, res -> {
rebuild[0].run(); arr.add(res);
})).fill(); rebuild[0].run();
})).fill();
}
}).growX().height(46f).pad(0f, -10f, 0f, -10f).get(); }).growX().height(46f).pad(0f, -10f, 0f, -10f).get();
main.row().table(Tex.button, t -> rebuild[0] = () -> { 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( getInterpreter((Class<Object>)arr.get(index).getClass()).build(
t, "", new TypeInfo(arr.get(index).getClass()), t, "", new TypeInfo(arr.get(index).getClass()),
field, () -> { field, field == null || !field.isAnnotationPresent(Immutable.class) ? () -> {
arr.remove(index); arr.remove(index);
rebuild[0].run(); rebuild[0].run();
}, field == null || !field.isAnnotationPresent(Unordered.class) ? in -> { } : null, field == null || !field.isAnnotationPresent(Unordered.class) ? in -> {
if(in && index > 0){ if(in && index > 0){
arr.swap(index, index - 1); arr.swap(index, index - 1);
rebuild[0].run(); rebuild[0].run();

View File

@@ -192,8 +192,18 @@ public class Units{
/** Returns the nearest enemy tile in a range. */ /** Returns the nearest enemy tile in a range. */
public static Building findEnemyTile(Team team, float x, float y, float range, Boolf<Building> pred){ 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(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); return indexer.findEnemyTile(team, x, y, range, pred);
} }
@@ -243,7 +253,7 @@ public class Units{
if(unit != null){ if(unit != null){
return unit; return unit;
}else{ }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){ if(unit != null){
return unit; return unit;
}else{ }else{
return findEnemyTile(team, x, y, range, tilePred); return findEnemyTile(team, x, y, range, true, tilePred);
} }
} }

View File

@@ -12,10 +12,20 @@ import mindustry.world.meta.*;
public class ArmorPlateAbility extends Ability{ public class ArmorPlateAbility extends Ability{
public TextureRegion plateRegion; 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 healthMultiplier = 0.2f;
public float z = Layer.effect;
protected float warmup; protected float warmup;
@@ -34,24 +44,39 @@ public class ArmorPlateAbility extends Ability{
@Override @Override
public void draw(Unit unit){ public void draw(Unit unit){
if(!drawPlate && !drawShine) return;
if(warmup > 0.001f){ if(warmup > 0.001f){
if(plateRegion == null){ 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, () -> { float pz = Draw.z();
Shaders.armor.region = plateRegion; if(z > 0) Draw.z(z);
Shaders.armor.progress = warmup;
Shaders.armor.time = -Time.time / 20f;
Draw.rect(Shaders.armor.region, unit.x, unit.y, unit.rotation - 90f); if(drawPlate){
Draw.color(color); Draw.alpha(warmup);
Draw.shader(Shaders.armor); Draw.rect(plateRegion, unit.x, unit.y, unit.rotation - 90f);
Draw.rect(Shaders.armor.region, unit.x, unit.y, unit.rotation - 90f); Draw.alpha(1f);
Draw.shader(); }
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);
} }
} }
} }

View File

@@ -174,6 +174,8 @@ public class BulletType extends Content implements Cloneable{
public float fragVelocityMin = 0.2f, fragVelocityMax = 1f; public float fragVelocityMin = 0.2f, fragVelocityMax = 1f;
/** Random range of frag lifetime as a multiplier. */ /** Random range of frag lifetime as a multiplier. */
public float fragLifeMin = 1f, fragLifeMax = 1f; 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. */ /** Bullet that is created at a fixed interval. */
public @Nullable BulletType intervalBullet; public @Nullable BulletType intervalBullet;
@@ -509,7 +511,7 @@ public class BulletType extends Content implements Cloneable{
public void createFrags(Bullet b, float x, float y){ public void createFrags(Bullet b, float x, float y){
if(fragBullet != null && (fragOnAbsorb || !b.absorbed)){ if(fragBullet != null && (fragOnAbsorb || !b.absorbed)){
for(int i = 0; i < fragBullets; i++){ 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); 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)); fragBullet.create(b, x + Angles.trnsx(a, len), y + Angles.trnsy(a, len), a, Mathf.random(fragVelocityMin, fragVelocityMax), Mathf.random(fragLifeMin, fragLifeMax));
} }

View File

@@ -127,10 +127,10 @@ abstract class StatusComp implements Posc, Flyingc{
return entry; 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){ public void statusSpeed(float speed){
//type.speed should never be 0 //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. */ /** Uses a dynamic status effect to change damage. */

View File

@@ -21,18 +21,32 @@ public class SoundEffect extends Effect{
public Effect effect; public Effect effect;
public SoundEffect(){ public SoundEffect(){
startDelay = -1;
} }
public SoundEffect(Sound sound, Effect effect){ public SoundEffect(Sound sound, Effect effect){
this();
this.sound = sound; this.sound = sound;
this.effect = effect; this.effect = effect;
} }
@Override
public void init(){
if(startDelay < 0){
startDelay = effect.startDelay;
}
}
@Override @Override
public void create(float x, float y, float rotation, Color color, Object data){ public void create(float x, float y, float rotation, Color color, Object data){
if(!shouldCreate()) return; 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); effect.create(x, y, rotation, color, data);
} }
} }

View File

@@ -227,7 +227,7 @@ public class AIController implements UnitController{
} }
public Teamc target(float x, float y, float range, boolean air, boolean ground){ public Teamc target(float x, float y, float range, boolean air, boolean ground){
return Units.closestTarget(unit.team, x, y, range, u -> u.checkTarget(air, ground), t -> ground); return Units.closestTarget(unit.team, x, y, range, u -> u.checkTarget(air, ground), t -> ground && (unit.type.targetUnderBlocks || !t.block.underBullets));
} }
public boolean retarget(){ public boolean retarget(){

View File

@@ -39,6 +39,7 @@ public class EventType{
socketConfigChanged, socketConfigChanged,
update, update,
unitCommandChange, unitCommandChange,
unitCommandPosition,
unitCommandAttack, unitCommandAttack,
importMod, importMod,
draw, draw,

View File

@@ -39,8 +39,6 @@ public class MapObjectives implements Iterable<MapObjective>, Eachable<MapObject
* @see #eachRunning(Cons) * @see #eachRunning(Cons)
*/ */
public Seq<MapObjective> all = new Seq<>(4); public Seq<MapObjective> all = new Seq<>(4);
/** @see #checkChanged() */
protected transient boolean changed;
static{ static{
registerObjective( registerObjective(
@@ -61,12 +59,15 @@ public class MapObjectives implements Iterable<MapObjective>, Eachable<MapObject
registerMarker( registerMarker(
ShapeTextMarker::new, ShapeTextMarker::new,
MinimapMarker::new, PointMarker::new,
ShapeMarker::new, ShapeMarker::new,
TextMarker::new, TextMarker::new,
LineMarker::new, LineMarker::new,
TextureMarker::new TextureMarker::new,
QuadMarker::new
); );
registerLegacyMarker("Minimap", PointMarker::new);
} }
@SafeVarargs @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. */ /** Adds all given objectives to the executor as root objectives. */
public void add(MapObjective... objectives){ public void add(MapObjective... objectives){
for(var objective : objectives) flatten(objective); for(var objective : objectives) flatten(objective);
@@ -114,21 +124,13 @@ public class MapObjectives implements Iterable<MapObjective>, Eachable<MapObject
eachRunning(obj -> { eachRunning(obj -> {
//objectives cannot get completed on the client, but they do try to update for timers and such //objectives cannot get completed on the client, but they do try to update for timers and such
if(obj.update() && !net.client()){ if(obj.update() && !net.client()){
obj.completed = true; Call.completeObjective(all.indexOf(obj));
obj.done();
} }
changed |= obj.changed;
obj.changed = false;
}); });
} }
/** @return True if map rules should be synced. Reserved for {@link Vars#logic}; do not invoke directly! */ public @Nullable MapObjective get(int index){
public boolean checkChanged(){ return index < 0 || index >= all.size ? null : all.get(index);
boolean has = changed;
changed = false;
return has;
} }
/** @return Whether there are any qualified objectives at all. */ /** @return Whether there are any qualified objectives at all. */
@@ -137,7 +139,6 @@ public class MapObjectives implements Iterable<MapObjective>, Eachable<MapObject
} }
public void clear(){ public void clear(){
if(all.size > 0) changed = true;
all.clear(); 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. */ /** Whether this objective has been done yet. This is internally set. */
private boolean completed; private boolean completed;
/** Internal value. Do not modify! */ /** 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. */ /** @return True if this objective is done and should be removed from the executor. */
public abstract boolean update(); 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. */ /** Called once after {@link #update()} returns true, before this objective is removed. */
public void done(){ public void done(){
changed(); state.rules.objectiveFlags.removeAll(flagsRemoved);
Call.objectiveCompleted(flagsRemoved, flagsAdded); state.rules.objectiveFlags.addAll(flagsAdded);
} completed = true;
/** Notifies the executor that map rules should be synced. */
protected void changed(){
changed = true;
} }
/** @return True if all {@link #parents} are completed, rendering this objective able to execute. */ /** @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. */ /** Internal use only! Do not access. */
public transient int arrayIndex; 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; 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; public boolean autoscale = false;
/** Hides the marker, used by world processors. */
protected boolean hidden = false;
/** On which z-sorting layer is marker drawn. */ /** On which z-sorting layer is marker drawn. */
protected float drawLayer = Layer.overlayUI; protected float drawLayer = Layer.overlayUI;
/** Draws the marker. Actual marker position and scale are calculated in {@link #drawWorld()} and {@link #drawMinimap(MinimapRenderer)}. */ public void draw(float scaleFactor){}
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;
}
/** Control marker with world processor code. Ignores NaN (null) values. */ /** Control marker with world processor code. Ignores NaN (null) values. */
public void control(LMarkerControl type, double p1, double p2, double p3){ public void control(LMarkerControl type, double p1, double p2, double p3){
if(Double.isNaN(p1)) return; if(Double.isNaN(p1)) return;
switch(type){ switch(type){
case visibility -> hidden = Mathf.equal((float)p1, 0f); case world -> world = !Mathf.equal((float)p1, 0f);
case drawLayer -> drawLayer = (float)p1;
case minimap -> minimap = !Mathf.equal((float)p1, 0f); case minimap -> minimap = !Mathf.equal((float)p1, 0f);
case autoscale -> autoscale = !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 */ /** Position of marker, in world coordinates */
public @TilePos Vec2 pos = new Vec2(); 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 @Override
public void control(LMarkerControl type, double p1, double p2, double p3){ public void control(LMarkerControl type, double p1, double p2, double p3){
super.control(type, p1, p2, p3);
if(!Double.isNaN(p1)){ if(!Double.isNaN(p1)){
if(type == LMarkerControl.pos){ if(type == LMarkerControl.pos){
pos.x = (float)p1 * tilesize; pos.x = (float)p1 * tilesize;
}else{
super.control(type, p1, p2, p3);
} }
} }
if(!Double.isNaN(p2)){ if(!Double.isNaN(p2)){
if(type == LMarkerControl.pos){ if(type == LMarkerControl.pos){
pos.y = (float)p2 * tilesize; 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(){} public ShapeTextMarker(){}
@Override @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 //in case some idiot decides to make 9999999 sides and freeze the game
int sides = Math.min(this.sides, 300); int sides = Math.min(this.sides, 300);
Draw.z(drawLayer); Draw.z(drawLayer);
Lines.stroke(3f * scaleFactor, Pal.gray); 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.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(); Draw.reset();
if(fetchedText == null){ if(fetchedText == null){
@@ -781,11 +751,13 @@ public class MapObjectives implements Iterable<MapObjective>, Eachable<MapObject
// font size cannot be 0 // font size cannot be 0
if(Mathf.equal(fontSize, 0f)) return; 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 @Override
public void control(LMarkerControl type, double p1, double p2, double p3){ public void control(LMarkerControl type, double p1, double p2, double p3){
super.control(type, p1, p2, p3);
if(!Double.isNaN(p1)){ if(!Double.isNaN(p1)){
switch(type){ switch(type){
case fontSize -> fontSize = (float)p1; case fontSize -> fontSize = (float)p1;
@@ -799,9 +771,8 @@ public class MapObjectives implements Iterable<MapObjective>, Eachable<MapObject
} }
case radius -> radius = (float)p1; case radius -> radius = (float)p1;
case rotation -> rotation = (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; 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; 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. */ /** Displays a circle in the world. */
public static class MinimapMarker extends ObjectiveMarker{ public static class PointMarker extends PosMarker{
public Point2 pos = new Point2();
public float radius = 5f, stroke = 11f; public float radius = 5f, stroke = 11f;
public Color color = Color.valueOf("f25555"); public Color color = Color.valueOf("f25555");
public MinimapMarker(int x, int y){ public PointMarker(int x, int y){
this.pos.set(x, 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.pos.set(x, y);
this.color = color; 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.pos.set(x, y);
this.stroke = stroke; this.stroke = stroke;
this.radius = radius; this.radius = radius;
this.color = color; this.color = color;
minimap = true;
} }
public MinimapMarker(){} public PointMarker(){}
@Override @Override
public void baseDraw(float x, float y, float scaleFactor){ public void draw(float scaleFactor){
float rad = radius * tilesize * scaleFactor; float rad = radius * tilesize * scaleFactor;
float fin = Interp.pow2Out.apply((Time.globalTime / 100f) % 1f); float fin = Interp.pow2Out.apply((Time.globalTime / 100f) % 1f);
Draw.z(drawLayer); Draw.z(drawLayer);
Lines.stroke(Scl.scl((1f - fin) * stroke + 0.1f), color); 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(); 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 @Override
public void control(LMarkerControl type, double p1, double p2, double p3){ public void control(LMarkerControl type, double p1, double p2, double p3){
super.control(type, p1, p2, p3);
if(!Double.isNaN(p1)){ if(!Double.isNaN(p1)){
switch(type){ switch(type){
case pos -> pos.x = (int)p1;
case radius -> radius = (float)p1; case radius -> radius = (float)p1;
case stroke -> stroke = (float)p1; case stroke -> stroke = (float)p1;
case color -> color.set(Tmp.c1.fromDouble(p1)); case color -> color.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);
} }
} }
} }
@@ -922,7 +869,7 @@ public class MapObjectives implements Iterable<MapObjective>, Eachable<MapObject
public ShapeMarker(){} public ShapeMarker(){}
@Override @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 //in case some idiot decides to make 9999999 sides and freeze the game
int sides = Math.min(this.sides, 200); int sides = Math.min(this.sides, 200);
@@ -930,14 +877,14 @@ public class MapObjectives implements Iterable<MapObjective>, Eachable<MapObject
if(!fill){ if(!fill){
if(outline){ if(outline){
Lines.stroke((stroke + 2f) * scaleFactor, Pal.gray); 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.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{ }else{
Draw.color(color); Draw.color(color);
Fill.poly(x, y, sides, radius * scaleFactor, rotation); Fill.poly(pos.x, pos.y, sides, radius * scaleFactor, rotation);
} }
Draw.reset(); Draw.reset();
@@ -945,29 +892,27 @@ public class MapObjectives implements Iterable<MapObjective>, Eachable<MapObject
@Override @Override
public void control(LMarkerControl type, double p1, double p2, double p3){ public void control(LMarkerControl type, double p1, double p2, double p3){
super.control(type, p1, p2, p3);
if(!Double.isNaN(p1)){ if(!Double.isNaN(p1)){
switch(type){ switch(type){
case radius -> radius = (float)p1; case radius -> radius = (float)p1;
case stroke -> stroke = (float)p1; case stroke -> stroke = (float)p1;
case rotation -> rotation = (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; case shape -> sides = (int)p1;
default -> super.control(type, p1, p2, p3);
} }
} }
if(!Double.isNaN(p2)){ if(!Double.isNaN(p2)){
switch(type){ switch(type){
case shape -> fill = !Mathf.equal((float)p2, 0f); case shape -> fill = !Mathf.equal((float)p2, 0f);
default -> super.control(type, p1, p2, p3);
} }
} }
if(!Double.isNaN(p3)){ if(!Double.isNaN(p3)){
if(type == LMarkerControl.shape){ if(type == LMarkerControl.shape){
outline = !Mathf.equal((float)p3, 0f); 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(){} public TextMarker(){}
@Override @Override
public void baseDraw(float x, float y, float scaleFactor){ public void draw(float scaleFactor){
// font size cannot be 0 // font size cannot be 0
if(Mathf.equal(fontSize, 0f)) return; if(Mathf.equal(fontSize, 0f)) return;
@@ -1004,11 +949,13 @@ public class MapObjectives implements Iterable<MapObjective>, Eachable<MapObject
fetchedText = fetchText(text); fetchedText = fetchText(text);
} }
WorldLabel.drawAt(fetchedText, x, y, drawLayer, flags, fontSize * scaleFactor); WorldLabel.drawAt(fetchedText, pos.x, pos.y, drawLayer, flags, fontSize * scaleFactor);
} }
@Override @Override
public void control(LMarkerControl type, double p1, double p2, double p3){ public void control(LMarkerControl type, double p1, double p2, double p3){
super.control(type, p1, p2, p3);
if(!Double.isNaN(p1)){ if(!Double.isNaN(p1)){
switch(type){ switch(type){
case fontSize -> fontSize = (float)p1; case fontSize -> fontSize = (float)p1;
@@ -1019,7 +966,6 @@ public class MapObjectives implements Iterable<MapObjective>, Eachable<MapObject
flags &= ~WorldLabel.flagBackground; 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; 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 @TilePos Vec2 endPos = new Vec2();
public float stroke = 1f; public float stroke = 1f;
public boolean outline = true; 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){ public LineMarker(float x1, float y1, float x2, float y2, float stroke){
this.stroke = stroke; this.stroke = stroke;
@@ -1068,44 +1014,46 @@ public class MapObjectives implements Iterable<MapObjective>, Eachable<MapObject
public LineMarker(){} public LineMarker(){}
public void baseLineDraw(float x1, float y1, float x2, float y2, float scaleFactor){ @Override
public void draw(float scaleFactor){
Draw.z(drawLayer); Draw.z(drawLayer);
if(outline){ if(outline){
Lines.stroke((stroke + 2f) * scaleFactor, Pal.gray); 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.stroke(stroke * scaleFactor, Color.white);
Lines.line(x1, y1, x2, y2); Lines.line(pos.x, pos.y, color1, endPos.x, endPos.y, color2);
}
@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));
} }
@Override @Override
public void control(LMarkerControl type, double p1, double p2, double p3){ public void control(LMarkerControl type, double p1, double p2, double p3){
super.control(type, p1, p2, p3);
if(!Double.isNaN(p1)){ if(!Double.isNaN(p1)){
switch(type){ switch(type){
case endPos -> endPos.x = (float)p1 * tilesize; case endPos -> endPos.x = (float)p1 * tilesize;
case stroke -> stroke = (float)p1; case stroke -> stroke = (float)p1;
case color -> color.set(Tmp.c1.fromDouble(p1)); case color -> color1.set(color2.fromDouble(p1));
default -> super.control(type, p1, p2, p3);
} }
} }
if(!Double.isNaN(p2)){ if(!Double.isNaN(p2)){
switch(type){ switch(type){
case endPos -> endPos.y = (float)p2 * tilesize; 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 @Override
public void control(LMarkerControl type, double p1, double p2, double p3){ public void control(LMarkerControl type, double p1, double p2, double p3){
super.control(type, p1, p2, p3);
if(!Double.isNaN(p1)){ if(!Double.isNaN(p1)){
switch(type){ switch(type){
case rotation -> rotation = (float)p1; case rotation -> rotation = (float)p1;
case textureSize -> width = (float)p1 * tilesize; case textureSize -> width = (float)p1 * tilesize;
case color -> color.set(Tmp.c1.fromDouble(p1)); case color -> color.fromDouble(p1);
default -> super.control(type, p1, p2, p3);
} }
} }
if(!Double.isNaN(p2)){ if(!Double.isNaN(p2)){
switch(type){ switch(type){
case textureSize -> height = (float)p2 * tilesize; case textureSize -> height = (float)p2 * tilesize;
default -> super.control(type, p1, p2, p3);
} }
} }
} }
@Override @Override
public void baseDraw(float x, float y, float scaleFactor){ public void draw(float scaleFactor){
if(textureName.isEmpty()) return; if(textureName.isEmpty()) return;
if(fetchedRegion == null) setTexture(textureName); if(fetchedRegion == null) setTexture(textureName);
@@ -1164,7 +1112,7 @@ public class MapObjectives implements Iterable<MapObjective>, Eachable<MapObject
Draw.z(drawLayer); Draw.z(drawLayer);
Draw.color(color); 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 @Override
@@ -1172,19 +1120,126 @@ public class MapObjectives implements Iterable<MapObjective>, Eachable<MapObject
this.textureName = textureName; this.textureName = textureName;
if(fetchedRegion == null) fetchedRegion = new TextureRegion(); if(fetchedRegion == null) fetchedRegion = new TextureRegion();
lookupRegion(textureName, fetchedRegion);
}
TextureRegion region = Core.atlas.find(textureName); }
if(region.found()){
fetchedRegion.set(region); public static class QuadMarker extends ObjectiveMarker{
}else{ public String textureName = "white";
if(Core.assets.isLoaded(textureName, Texture.class)){ public @Vertices float[] vertices = new float[24];
fetchedRegion.set(Core.assets.get(textureName, Texture.class)); private boolean mapRegion = true;
}else{
fetchedRegion.set(Core.atlas.find("error")); 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. */ /** 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) @Retention(RUNTIME)
public @interface Unordered{} 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. */ /** For {@code byte}; treats it as a world label flag. */
@Target(FIELD) @Target(FIELD)
@Retention(RUNTIME) @Retention(RUNTIME)

View File

@@ -31,7 +31,7 @@ public class Schematic implements Publishable, Comparable<Schematic>{
} }
public float powerProduction(){ 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(){ public float powerConsumption(){

View File

@@ -146,26 +146,37 @@ public class MinimapRenderer{
rect.set((dx - sz) * tilesize, (dy - sz) * tilesize, sz * 2 * tilesize, sz * 2 * tilesize); 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){ for(Unit unit : units){
if(unit.inFogTo(player.team()) || !unit.type.drawMinimap) continue; 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 scale = Scl.scl(1f) * tilesize * 3;
float ry = !fullView ? (unit.y - rect.y) / rect.width * h : unit.y / (world.height() * tilesize) * h; var region = unit.icon();
Draw.mixcol(unit.team.color, 1f); Draw.mixcol(unit.team.color, 1f);
float scale = Scl.scl(1f) / 2f * scaling * 32f; Draw.rect(region, unit.x, unit.y, scale, scale * (float)region.height / region.width, unit.rotation() - 90);
var region = unit.icon();
Draw.rect(region, x + rx, y + ry, scale, scale * (float)region.height / region.width, unit.rotation() - 90);
Draw.reset(); Draw.reset();
} }
if(fullView && net.active()){ if(fullView && net.active()){
for(Player player : Groups.player){ for(Player player : Groups.player){
if(!player.dead()){ if(!player.dead()){
float rx = player.x / (world.width() * tilesize) * w; drawLabel(player.x, player.y, player.name, player.color);
float ry = player.y / (world.height() * tilesize) * h;
drawLabel(x + rx, y + ry, player.name, player.color);
} }
} }
} }
@@ -186,15 +197,14 @@ public class MinimapRenderer{
//crisp pixels //crisp pixels
dynamicTex.setFilter(TextureFilter.nearest); dynamicTex.setFilter(TextureFilter.nearest);
if(worldSpace){
region.set(0f, 0f, 1f, 1f);
}
Tmp.tr1.set(dynamicTex); 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.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){ if(state.rules.staticFog){
staticTex.setFilter(TextureFilter.nearest); staticTex.setFilter(TextureFilter.nearest);
@@ -202,7 +212,7 @@ public class MinimapRenderer{
Tmp.tr1.texture = staticTex; Tmp.tr1.texture = staticTex;
//must be black to fit with borders //must be black to fit with borders
Draw.color(0f, 0f, 0f, 1f); 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(); Draw.color();
@@ -211,23 +221,21 @@ public class MinimapRenderer{
//TODO might be useful in the standard minimap too //TODO might be useful in the standard minimap too
if(fullView){ if(fullView){
drawSpawns(x, y, w, h, scaling); drawSpawns();
if(!mobile){ if(!mobile){
//draw bounds for camera - not drawn on mobile because you can't shift it by tapping anyway //draw bounds for camera - not drawn on mobile because you can't shift it by tapping anyway
Rect r = Core.camera.bounds(Tmp.r1); Rect r = Core.camera.bounds(Tmp.r1);
Vec2 bot = transform(Tmp.v1.set(r.x, r.y)); Lines.stroke(Scl.scl(3f) * scaleFactor);
Vec2 top = transform(Tmp.v2.set(r.x + r.width, r.y + r.height));
Lines.stroke(Scl.scl(3f));
Draw.color(Pal.accent); 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(); Draw.reset();
} }
} }
LongSeq indicators = control.indicators.list(); LongSeq indicators = control.indicators.list();
float fin = ((Time.globalTime / 30f) % 1f); 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)); Lines.stroke(Scl.scl((1f - fin) * 4f + 0.5f));
for(int i = 0; i < indicators.size; i++){ for(int i = 0; i < indicators.size; i++){
@@ -244,31 +252,32 @@ public class MinimapRenderer{
offset = build.block.offset / tilesize; 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)); 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(); Draw.reset();
//TODO autoscale markers
state.rules.objectives.eachRunning(obj -> { state.rules.objectives.eachRunning(obj -> {
for(var marker : obj.markers){ for(var marker : obj.markers){
if(marker.minimap){ if(marker.minimap){
marker.drawMinimap(this); marker.draw(1);
} }
} }
}); });
for(var marker : state.markers){ for(var marker : state.markers){
if(!marker.isHidden() && marker.minimap){ if(marker.minimap){
marker.drawMinimap(this); 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; if(!state.rules.showSpawns || !state.hasSpawns() || !state.rules.waves) return;
TextureRegion icon = Icon.units.getRegion(); TextureRegion icon = Icon.units.getRegion();
@@ -277,44 +286,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)); 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); float curve = Mathf.curve(Time.time % 240f, 120f, 240f);
for(Tile tile : spawner.getSpawns()){ for(Tile tile : spawner.getSpawns()){
float tx = ((tile.x + 0.5f) / world.width()) * w; float tx = tile.worldx();
float ty = ((tile.y + 0.5f) / world.height()) * h; float ty = tile.worldy();
Draw.rect(icon, x + tx, y + ty, icon.width, icon.height); Draw.rect(icon, tx, ty, icon.width, icon.height);
Lines.circle(x + tx, y + ty, rad); Lines.circle(tx, ty, rad);
if(curve > 0f) Lines.circle(x + tx, y + ty, rad * Interp.pow3Out.apply(curve)); if(curve > 0f) Lines.circle(tx, ty, rad * Interp.pow3Out.apply(curve));
} }
Draw.reset(); 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(){ public @Nullable TextureRegion getRegion(){
if(texture == null) return null; if(texture == null) return null;

View File

@@ -97,8 +97,12 @@ public class MultiPacker implements Disposable{
@Override @Override
public void dispose(){ public void dispose(){
for(PixmapPacker packer : packers){ for(int i = 0; i < PageType.all.length; i ++){
packer.dispose(); 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();
}
} }
} }

View File

@@ -474,6 +474,6 @@ public class Shaders{
} }
public static Fi getShaderFi(String file){ public static Fi getShaderFi(String file){
return Core.files.internal("shaders/" + file); return tree.get("shaders/" + file);
} }
} }

View File

@@ -203,17 +203,7 @@ public class PlanetRenderer implements Disposable{
} }
public void setPlane(Sector sector){ public void setPlane(Sector sector){
float rotation = -sector.planet.getRotation(); sector.planet.setPlane(sector, projector);
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()
);
} }
public void fill(Sector sector, Color color, float offset){ public void fill(Sector sector, Color color, float offset){

View File

@@ -451,7 +451,7 @@ public class DesktopInput extends InputHandler{
cursorType = cursor.build.getCursor(); cursorType = cursor.build.getCursor();
} }
if(cursor.build != null && cursor.build.team == Team.derelict && Build.validPlace(cursor.block(), player.team(), cursor.build.tileX(), cursor.build.tileY(), cursor.build.rotation)){ if(cursor.build != null && player.team() != Team.derelict && cursor.build.team == Team.derelict && Build.validPlace(cursor.block(), player.team(), cursor.build.tileX(), cursor.build.tileY(), cursor.build.rotation)){
cursorType = ui.repairCursor; cursorType = ui.repairCursor;
} }

View File

@@ -1012,6 +1012,8 @@ public abstract class InputHandler implements InputProcessor, GestureListener{
if(attack != null){ if(attack != null){
Events.fire(Trigger.unitCommandAttack); Events.fire(Trigger.unitCommandAttack);
}else{
Events.fire(Trigger.unitCommandPosition);
} }
int maxChunkSize = 200; int maxChunkSize = 200;
@@ -1179,7 +1181,7 @@ public abstract class InputHandler implements InputProcessor, GestureListener{
var last = lastSchematic; 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)); Schematic replacement = schematics.all().find(s -> s.name().equals(text));
if(replacement != null){ if(replacement != null){
ui.showConfirm("@confirm", "@schematic.replace", () -> { ui.showConfirm("@confirm", "@schematic.replace", () -> {
@@ -1661,7 +1663,7 @@ public abstract class InputHandler implements InputProcessor, GestureListener{
} }
boolean tryRepairDerelict(Tile selected){ boolean tryRepairDerelict(Tile selected){
if(selected != null && selected.build != null && selected.build.block.unlockedNow() && selected.build.team == Team.derelict && Build.validPlace(selected.block(), player.team(), selected.build.tileX(), selected.build.tileY(), selected.build.rotation)){ if(selected != null && player.team() != Team.derelict && selected.build != null && selected.build.block.unlockedNow() && selected.build.team == Team.derelict && Build.validPlace(selected.block(), player.team(), selected.build.tileX(), selected.build.tileY(), selected.build.rotation)){
player.unit().addBuild(new BuildPlan(selected.build.tileX(), selected.build.tileY(), selected.build.rotation, selected.block(), selected.build.config())); player.unit().addBuild(new BuildPlan(selected.build.tileX(), selected.build.tileY(), selected.build.rotation, selected.block(), selected.build.config()));
return true; return true;
} }

View File

@@ -743,6 +743,11 @@ public class MobileInput extends InputHandler implements GestureListener{
queueCommandMode = false; queueCommandMode = false;
} }
//cannot rebuild and place at the same time
if(block != null){
rebuildMode = false;
}
if(player.dead()){ if(player.dead()){
mode = none; mode = none;
manualShooting = false; manualShooting = false;
@@ -766,7 +771,7 @@ public class MobileInput extends InputHandler implements GestureListener{
renderer.scaleCamera(Core.input.axisTap(Binding.zoom)); renderer.scaleCamera(Core.input.axisTap(Binding.zoom));
} }
if(!Core.settings.getBool("keyboard") && !locked){ if(!Core.settings.getBool("keyboard") && !locked && !scene.hasKeyboard()){
//move camera around //move camera around
float camSpeed = 6f; 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)); 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 allowHealing = type.canHeal;
boolean validHealTarget = allowHealing && target instanceof Building b && b.isValid() && target.team() == unit.team && b.damaged() && target.within(unit, type.range); 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()); boolean boosted = (unit instanceof Mechc && unit.isFlying());
//reset target if: //reset target if:
// - in the editor, or... // - in the editor, or...
// - it's both an invalid standard target and an invalid heal target // - it's both an invalid standard target and an invalid heal target

View File

@@ -27,45 +27,63 @@ public class GlobalVars{
public static final Rand rand = new Rand(); public static final Rand rand = new Rand();
//non-constants that depend on state //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 ObjectIntMap<String> namesToIds = new ObjectIntMap<>();
private Seq<Var> vars = new Seq<>(Var.class); private Seq<Var> vars = new Seq<>(Var.class);
private Seq<VarEntry> varEntries = new Seq<>();
private IntSet privilegedIds = new IntSet(); private IntSet privilegedIds = new IntSet();
private UnlockableContent[][] logicIdToContent; private UnlockableContent[][] logicIdToContent;
private int[][] contentIdToLogicId; private int[][] contentIdToLogicId;
public void init(){ 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 //add default constants
put("false", 0); putEntry("false", 0);
put("true", 1); putEntry("true", 1);
put("null", null); put("null", null, false, true);
//math //math
put("@pi", Mathf.PI); putEntry("@pi", Mathf.PI);
put("π", Mathf.PI); //for the "cool" kids put("π", Mathf.PI, false, true); //for the "cool" kids
put("@e", Mathf.E); putEntry("@e", Mathf.E);
put("@degToRad", Mathf.degRad); putEntry("@degToRad", Mathf.degRad);
put("@radToDeg", Mathf.radDeg); putEntry("@radToDeg", Mathf.radDeg);
putEntryOnly("sectionMap");
//time //time
varTime = put("@time", 0); varTime = putEntry("@time", 0);
varTick = put("@tick", 0); varTick = putEntry("@tick", 0);
varSecond = put("@second", 0); varSecond = putEntry("@second", 0);
varMinute = put("@minute", 0); varMinute = putEntry("@minute", 0);
varWave = put("@waveNumber", 0); varWave = putEntry("@waveNumber", 0);
varWaveTime = put("@waveTime", 0); varWaveTime = putEntry("@waveTime", 0);
varServer = put("@server", 0, true); varMapW = putEntry("@mapw", 0);
varClient = put("@client", 0, true); varMapH = putEntry("@maph", 0);
putEntryOnly("sectionNetwork");
varServer = putEntry("@server", 0, true);
varClient = putEntry("@client", 0, true);
//privileged desynced client variables //privileged desynced client variables
varClientLocale = put("@clientLocale", null, true); varClientLocale = putEntry("@clientLocale", null, true);
varClientUnit = put("@clientUnit", null, true); varClientUnit = putEntry("@clientUnit", null, true);
varClientName = put("@clientName", null, true); varClientName = putEntry("@clientName", null, true);
varClientTeam = put("@clientTeam", 0, true); varClientTeam = putEntry("@clientTeam", 0, true);
varClientMobile = put("@clientMobile", 0, true); varClientMobile = putEntry("@clientMobile", 0, true);
//special enums //special enums
put("@ctrlProcessor", ctrlProcessor); put("@ctrlProcessor", ctrlProcessor);
@@ -107,6 +125,10 @@ public class GlobalVars{
put("@" + type.name, type); put("@" + type.name, type);
} }
for(Weather weather : Vars.content.weathers()){
put("@" + weather.name, weather);
}
//store sensor constants //store sensor constants
for(LAccess sensor : LAccess.all){ for(LAccess sensor : LAccess.all){
put("@" + sensor.name(), sensor); put("@" + sensor.name(), sensor);
@@ -115,6 +137,8 @@ public class GlobalVars{
logicIdToContent = new UnlockableContent[ContentType.all.length][]; logicIdToContent = new UnlockableContent[ContentType.all.length][];
contentIdToLogicId = new int[ContentType.all.length][]; contentIdToLogicId = new int[ContentType.all.length][];
putEntryOnly("sectionLookup");
Fi ids = Core.files.internal("logicids.dat"); Fi ids = Core.files.internal("logicids.dat");
if(ids.exists()){ if(ids.exists()){
//read logic ID mapping data (generated in ImagePacker) //read logic ID mapping data (generated in ImagePacker)
@@ -125,7 +149,7 @@ public class GlobalVars{
contentIdToLogicId[ctype.ordinal()] = new int[Vars.content.getBy(ctype).size]; contentIdToLogicId[ctype.ordinal()] = new int[Vars.content.getBy(ctype).size];
//store count constants //store count constants
put("@" + ctype.name() + "Count", amount); putEntry("@" + ctype.name() + "Count", amount);
for(int i = 0; i < amount; i++){ for(int i = 0; i < amount; i++){
String name = in.readUTF(); String name = in.readUTF();
@@ -159,6 +183,9 @@ public class GlobalVars{
vars.items[varWave].numval = state.wave; vars.items[varWave].numval = state.wave;
vars.items[varWaveTime].numval = state.wavetime / 60f; vars.items[varWaveTime].numval = state.wavetime / 60f;
vars.items[varMapW].numval = world.width();
vars.items[varMapH].numval = world.height();
//network //network
vars.items[varServer].numval = (net.server() || !net.active()) ? 1 : 0; vars.items[varServer].numval = (net.server() || !net.active()) ? 1 : 0;
vars.items[varClient].numval = net.client() ? 1 : 0; vars.items[varClient].numval = net.client() ? 1 : 0;
@@ -173,6 +200,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. */ /** @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){ public @Nullable Content lookupContent(ContentType type, int id){
var arr = logicIdToContent[type.ordinal()]; var arr = logicIdToContent[type.ordinal()];
@@ -209,6 +240,11 @@ public class GlobalVars{
/** Adds a constant value by name. */ /** Adds a constant value by name. */
public int put(String name, Object value, boolean privileged){ 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); int existingIdx = namesToIds.get(name, -1);
if(existingIdx != -1){ //don't overwrite existing vars (see #6910) if(existingIdx != -1){ //don't overwrite existing vars (see #6910)
Log.debug("Failed to add global logic variable '@', as it already exists.", name); Log.debug("Failed to add global logic variable '@', as it already exists.", name);
@@ -228,10 +264,44 @@ public class GlobalVars{
namesToIds.put(name, index); namesToIds.put(name, index);
if(privileged) privilegedIds.add(index); if(privileged) privilegedIds.add(index);
vars.add(var); vars.add(var);
if(!hidden){
varEntries.add(new VarEntry(index, name, "", "", privileged));
}
return index; return index;
} }
public int put(String name, Object value){ public int put(String name, Object value){
return put(name, value, false); 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(){
}
}
} }

View File

@@ -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();
}
}

View File

@@ -67,7 +67,7 @@ public enum LAccess{
all = values(), all = values(),
senseable = Seq.select(all, t -> t.params.length <= 1).toArray(LAccess.class), senseable = Seq.select(all, t -> t.params.length <= 1).toArray(LAccess.class),
controls = Seq.select(all, t -> t.params.length > 0).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){ LAccess(String... params){
this.params = params; this.params = params;

View File

@@ -13,8 +13,8 @@ import mindustry.content.*;
import mindustry.core.*; import mindustry.core.*;
import mindustry.ctype.*; import mindustry.ctype.*;
import mindustry.entities.*; import mindustry.entities.*;
import mindustry.game.*;
import mindustry.game.EventType.*; import mindustry.game.EventType.*;
import mindustry.game.*;
import mindustry.game.MapObjectives.*; import mindustry.game.MapObjectives.*;
import mindustry.game.Teams.*; import mindustry.game.Teams.*;
import mindustry.gen.*; import mindustry.gen.*;
@@ -706,7 +706,7 @@ public class LExecutor{
int address = exec.numi(position); int address = exec.numi(position);
Building from = exec.building(target); 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); mem.memory[address] = exec.num(value);
} }
} }
@@ -1025,14 +1025,17 @@ public class LExecutor{
exec.textBuffer.setLength(0); exec.textBuffer.setLength(0);
} }
}else{ }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){ if(type == LogicDisplay.commandImage){
num1 = exec.obj(p1) instanceof UnlockableContent u ? u.iconId : 0; 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 //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))));
} }
} }
@@ -1508,6 +1511,47 @@ public class LExecutor{
} }
} }
public static class SenseWeatherI implements LInstruction{
public int type, to;
public SenseWeatherI(int type, int to){
this.type = type;
this.to = to;
}
@Override
public void run(LExecutor exec){
exec.setbool(to, exec.obj(type) instanceof Weather weather && weather.isActive());
}
}
public static class SetWeatherI implements LInstruction{
public int type, state;
public SetWeatherI(int type, int state){
this.type = type;
this.state = state;
}
@Override
public void run(LExecutor exec){
if(exec.obj(type) instanceof Weather weather){
if(exec.bool(state)){
if(!weather.isActive()){ //Create is not already active
Tmp.v1.setToRandomDirection();
Call.createWeather(weather, 1f, WeatherState.fadeTime, Tmp.v1.x, Tmp.v1.y);
}else{
weather.instance().life(WeatherState.fadeTime);
}
}else{
if(weather.isActive() && weather.instance().life > WeatherState.fadeTime){
weather.instance().life(WeatherState.fadeTime);
}
}
}
}
}
public static class ApplyEffectI implements LInstruction{ public static class ApplyEffectI implements LInstruction{
public boolean clear; public boolean clear;
public String effect; public String effect;

View File

@@ -2,7 +2,7 @@ package mindustry.logic;
public enum LMarkerControl{ public enum LMarkerControl{
remove, remove,
visibility("true/false"), world("true/false"),
minimap("true/false"), minimap("true/false"),
autoscale("true/false"), autoscale("true/false"),
pos("x", "y"), pos("x", "y"),
@@ -18,7 +18,10 @@ public enum LMarkerControl{
textHeight("height"), textHeight("height"),
labelFlags("background", "outline"), labelFlags("background", "outline"),
texture("printFlush", "name"), texture("printFlush", "name"),
textureSize("width", "height"); textureSize("width", "height"),
posi("index", "x", "y"),
uvi("index", "x", "y"),
colori("index", "color");
public final String[] params; public final String[] params;

View File

@@ -16,7 +16,7 @@ import mindustry.logic.LCanvas.*;
import mindustry.logic.LExecutor.*; import mindustry.logic.LExecutor.*;
import mindustry.ui.*; import mindustry.ui.*;
import static mindustry.Vars.ui; import static mindustry.Vars.*;
import static mindustry.logic.LCanvas.*; import static mindustry.logic.LCanvas.*;
/** /**

View File

@@ -260,6 +260,13 @@ public class LStatements{
}, 2, cell -> cell.size(165, 50))); }, 2, cell -> cell.size(165, 50)));
}, Styles.logict, () -> {}).size(165, 40).color(s.color).left().padLeft(2); }, 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(); }).expand().left();
} }
@@ -1373,6 +1380,115 @@ public class LStatements{
} }
} }
@RegisterStatement("weathersensor")
public static class WeatherSenseStatement extends LStatement{
public String to = "result";
public String weather = "@rain";
private transient TextField tfield;
@Override
public void build(Table table){
field(table, to, str -> to = str);
table.add(" = weather ");
row(table);
tfield = field(table, weather, str -> weather = str).padRight(0f).get();
table.button(b -> {
b.image(Icon.pencilSmall);
b.clicked(() -> showSelectTable(b, (t, hide) -> {
t.row();
t.table(i -> {
i.left();
int c = 0;
for(Weather w : Vars.content.weathers()){
i.button(w.name, Styles.flatt, () -> {
weather = "@" + w.name;
tfield.setText(weather);
hide.run();
}).height(40f).uniformX().wrapLabel(false).growX();
if(++c % 2 == 0) i.row();
}
}).left();
}));
}, Styles.logict, () -> {}).size(40f).padLeft(-1).color(table.color);
}
@Override
public boolean privileged(){
return true;
}
@Override
public LInstruction build(LAssembler builder){
return new SenseWeatherI(builder.var(weather), builder.var(to));
}
@Override
public LCategory category(){
return LCategory.world;
}
}
@RegisterStatement("weatherset")
public static class WeatherSetStatement extends LStatement{
public String weather = "@rain", state = "true";
private transient TextField tfield;
@Override
public void build(Table table){
table.add(" set weather ");
tfield = field(table, weather, str -> weather = str).padRight(0f).get();
table.button(b -> {
b.image(Icon.pencilSmall);
b.clicked(() -> showSelectTable(b, (t, hide) -> {
t.row();
t.table(i -> {
i.left();
int c = 0;
for(Weather w : Vars.content.weathers()){
i.button(w.name, Styles.flatt, () -> {
weather = "@" + w.name;
tfield.setText(weather);
hide.run();
}).height(40f).uniformX().wrapLabel(false).growX();
if(++c % 2 == 0) i.row();
}
}).left();
}));
}, Styles.logict, () -> {}).size(40f).padLeft(-1).color(table.color);
table.add(" state ");
fields(table, state, str -> state = str);
}
@Override
public boolean privileged(){
return true;
}
@Override
public LInstruction build(LAssembler builder){
return new SetWeatherI(builder.var(weather), builder.var(state));
}
@Override
public LCategory category(){
return LCategory.world;
}
}
@RegisterStatement("spawnwave") @RegisterStatement("spawnwave")
public static class SpawnWaveStatement extends LStatement{ public static class SpawnWaveStatement extends LStatement{
public String x = "10", y = "10", natural = "false"; public String x = "10", y = "10", natural = "false";
@@ -1999,11 +2115,14 @@ public class LStatements{
table.table(t -> { table.table(t -> {
t.setColor(table.color); 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){ fields(t, type.params[i], value, setter).width(100f);
col(t, p1, res -> {
p1 = "%" + res.toString().substring(0, res.a >= 1f ? 6 : 8); 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); build(table);
}); });
}else if(type == LMarkerControl.drawLayer){ }else if(type == LMarkerControl.drawLayer){
@@ -2013,10 +2132,10 @@ public class LStatements{
o.row(); o.row();
o.table(s -> { o.table(s -> {
s.left(); s.left();
for(var layer : Layer.class.getFields()){ for(var field : Layer.class.getFields()){
float value = Reflect.get(Layer.class, layer.getName()); float layer = Reflect.get(field);
s.button(layer.getName() + " = " + value, Styles.logicTogglet, () -> { s.button(field.getName() + " = " + layer, Styles.logicTogglet, () -> {
p1 = Float.toString(value); p1 = Float.toString(layer);
rebuild(table); rebuild(table);
hide.run(); hide.run();
}).size(240f, 40f).row(); }).size(240f, 40f).row();

View File

@@ -26,6 +26,7 @@ public class LogicDialog extends BaseDialog{
Cons<String> consumer = s -> {}; Cons<String> consumer = s -> {};
boolean privileged; boolean privileged;
@Nullable LExecutor executor; @Nullable LExecutor executor;
GlobalVarsDialog globalsDialog = new GlobalVarsDialog();
public LogicDialog(){ public LogicDialog(){
super("logic"); super("logic");
@@ -51,7 +52,7 @@ public class LogicDialog extends BaseDialog{
add(buttons).growX().name("canvas"); add(buttons).growX().name("canvas");
} }
private Color typeColor(Var s, Color color){ public static Color typeColor(Var s, Color color){
return color.set( return color.set(
!s.isobj ? Pal.place : !s.isobj ? Pal.place :
s.objval == null ? Color.darkGray : 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 return
!s.isobj ? "number" : !s.isobj ? "number" :
s.objval == null ? "null" : s.objval == null ? "null" :
@@ -178,6 +179,8 @@ public class LogicDialog extends BaseDialog{
}); });
dialog.addCloseButton(); dialog.addCloseButton();
dialog.buttons.button("@logic.globals", Icon.list, () -> globalsDialog.show()).size(210f, 64f);
dialog.show(); dialog.show();
}).name("variables").disabled(b -> executor == null || executor.vars.length == 0); }).name("variables").disabled(b -> executor == null || executor.vars.length == 0);

View File

@@ -57,6 +57,12 @@ public class LogicFx{
return map.get(name); 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(){ public static String[] all(){
return map.orderedKeys().toArray(String.class); return map.orderedKeys().toArray(String.class);
} }

View File

@@ -271,8 +271,9 @@ public class ContentParser{
return new Vec3(data.getFloat("x", 0f), data.getFloat("y", 0f), data.getFloat("z", 0f)); return new Vec3(data.getFloat("x", 0f), data.getFloat("y", 0f), data.getFloat("z", 0f));
}); });
put(Sound.class, (type, data) -> { 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()); return field != null ? field : Vars.tree.loadSound(data.asString());
}); });
put(Music.class, (type, data) -> { put(Music.class, (type, data) -> {
@@ -445,6 +446,17 @@ public class ContentParser{
if(value.has("consumes") && value.get("consumes").isObject()){ if(value.has("consumes") && value.get("consumes").isObject()){
for(JsonValue child : value.get("consumes")){ for(JsonValue child : value.get("consumes")){
switch(child.name){ 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 "item" -> block.consumeItem(find(ContentType.item, child.asString()));
case "itemCharged" -> block.consume((Consume)parser.readValue(ConsumeItemCharged.class, child)); case "itemCharged" -> block.consume((Consume)parser.readValue(ConsumeItemCharged.class, child));
case "itemFlammable" -> block.consume((Consume)parser.readValue(ConsumeItemFlammable.class, child)); case "itemFlammable" -> block.consume((Consume)parser.readValue(ConsumeItemFlammable.class, child));

View File

@@ -218,7 +218,10 @@ public class Mods implements Loadable{
} }
//this returns a *runnable* which actually packs the resulting pixmap; this has to be done synchronously outside the method //this returns a *runnable* which actually packs the resulting pixmap; this has to be done synchronously outside the method
return () -> { return () -> {
String fullName = (prefix ? mod.name + "-" : "") + baseName; //don't prefix with mod name if it's already prefixed by a category, e.g. `block-modname-content-full`.
int hyphen = baseName.indexOf('-');
String fullName = ((prefix && !(hyphen != -1 && baseName.substring(hyphen + 1).startsWith(mod.name + "-"))) ? mod.name + "-" : "") + baseName;
packer.add(getPage(file), fullName, new PixmapRegion(pix)); packer.add(getPage(file), fullName, new PixmapRegion(pix));
if(textureScale != 1.0f){ if(textureScale != 1.0f){
textureResize.put(fullName, textureScale); textureResize.put(fullName, textureScale);
@@ -358,7 +361,24 @@ public class Mods implements Loadable{
Log.debug("Time to generate icons: @", Time.elapsed()); Log.debug("Time to generate icons: @", Time.elapsed());
//dispose old atlas data //dispose old atlas data
Core.atlas = packer.flush(filter, new TextureAtlas()); Core.atlas = packer.flush(filter, new TextureAtlas(){
PixmapRegion fake = new PixmapRegion(new Pixmap(1, 1));
boolean didWarn = false;
@Override
public PixmapRegion getPixmap(AtlasRegion region){
var other = super.getPixmap(region);
if(other.pixmap.isDisposed()){
if(!didWarn){
Log.err(new RuntimeException("Calling getPixmap outside of createIcons is not supported! This will be a crash in the future."));
didWarn = true;
}
return fake;
}
return other;
}
});
textureResize.each(e -> Core.atlas.find(e.key).scale = e.value); textureResize.each(e -> Core.atlas.find(e.key).scale = e.value);
@@ -856,7 +876,7 @@ public class Mods implements Loadable{
return false; return false;
// If dependency present, resolve it, or if it's not required, ignore it // If dependency present, resolve it, or if it's not required, ignore it
}else if(context.dependencies.containsKey(dependency.name)){ }else if(context.dependencies.containsKey(dependency.name)){
if(!context.ordered.contains(dependency.name) && !resolve(dependency.name, context) && dependency.required){ if(((!context.ordered.contains(dependency.name) && !resolve(dependency.name, context)) || !Core.settings.getBool("mod-" + dependency.name + "-enabled", true)) && dependency.required){
context.invalid.put(element, ModState.incompleteDependencies); context.invalid.put(element, ModState.incompleteDependencies);
return false; return false;
} }

View File

@@ -577,6 +577,10 @@ public class Administration{
changed.run(); changed.run();
} }
public boolean isDefault(){
return Structs.eq(get(), defaultValue);
}
private static boolean debug(){ private static boolean debug(){
return Config.debug.bool(); return Config.debug.bool();
} }

View File

@@ -39,7 +39,7 @@ public enum Achievement{
issueAttackCommand, issueAttackCommand,
active100Units(SStat.maxUnitActive, 100), active100Units(SStat.maxUnitActive, 100),
build1000Units(SStat.unitsBuilt, 1000), build1000Units(SStat.unitsBuilt, 1000),
buildAllUnits(SStat.unitTypesBuilt, 30), buildAllUnits(SStat.unitTypesBuilt, 50),
buildT5, buildT5,
pickupT5, pickupT5,
active10Polys, active10Polys,

View File

@@ -84,8 +84,6 @@ public class Liquid extends UnlockableContent implements Senseable{
super.init(); super.init();
if(gas){ if(gas){
//gases can't be coolants
coolant = false;
//always "boils", it's a gas //always "boils", it's a gas
boilPoint = -1; boilPoint = -1;
//ensure no accidental global mutation //ensure no accidental global mutation

View File

@@ -536,4 +536,26 @@ public class Planet extends UnlockableContent{
} }
batch.flush(Gl.lineStrip); 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()
);
}
} }

View File

@@ -236,7 +236,7 @@ public class Sector{
/** Projects this sector onto a 4-corner square for use in map gen. /** Projects this sector onto a 4-corner square for use in map gen.
* Allocates a new object. Do not call in the main loop. */ * Allocates a new object. Do not call in the main loop. */
private SectorRect makeRect(){ protected SectorRect makeRect(){
Vec3[] corners = new Vec3[tile.corners.length]; Vec3[] corners = new Vec3[tile.corners.length];
for(int i = 0; i < corners.length; i++){ for(int i = 0; i < corners.length; i++){
corners[i] = tile.corners[i].v.cpy().setLength(planet.radius); corners[i] = tile.corners[i].v.cpy().setLength(planet.radius);

View File

@@ -39,8 +39,10 @@ public class SectorPreset extends UnlockableContent{
/** Internal use only! */ /** Internal use only! */
public SectorPreset(String name, LoadedMod mod){ public SectorPreset(String name, LoadedMod mod){
super(name); super(name);
this.minfo.mod = mod; if(mod != null){
this.generator = new FileMapGenerator(name, this); this.minfo.mod = mod;
}
this.generator = new FileMapGenerator(this.name, this);
} }
/** Internal use only! */ /** Internal use only! */

View File

@@ -215,6 +215,8 @@ public class UnitType extends UnlockableContent implements Senseable{
naval = false, naval = false,
/** if false, RTS AI controlled units do not automatically attack things while moving. This is automatically assigned. */ /** if false, RTS AI controlled units do not automatically attack things while moving. This is automatically assigned. */
autoFindTarget = true, 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 */ /** if true, this unit will always shoot while moving regardless of slowdown */
alwaysShootWhenMoving = false, alwaysShootWhenMoving = false,
@@ -967,6 +969,7 @@ public class UnitType extends UnlockableContent implements Senseable{
Drawf.checkBleed(outlined); Drawf.checkBleed(outlined);
packer.add(PageType.main, regionName + "-outline", 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); packer.add(PageType.main, name + "-treads" + r + "-" + i, frame);
frame.dispose();
} }
slice.dispose();
} }
} }
} }

View File

@@ -297,31 +297,9 @@ public class Weapon implements Cloneable{
mount.warmup = Mathf.lerpDelta(mount.warmup, warmupTarget, shootWarmupSpeed); mount.warmup = Mathf.lerpDelta(mount.warmup, warmupTarget, shootWarmupSpeed);
} }
//rotate if applicable
if(rotate && (mount.rotate || mount.shoot) && can){
float axisX = unit.x + Angles.trnsx(unit.rotation - 90, x, y),
axisY = unit.y + Angles.trnsy(unit.rotation - 90, x, y);
mount.targetRotation = Angles.angle(axisX, axisY, mount.aimX, mount.aimY) - unit.rotation;
mount.rotation = Angles.moveToward(mount.rotation, mount.targetRotation, rotateSpeed * Time.delta);
if(rotationLimit < 360){
float dst = Angles.angleDist(mount.rotation, baseRotation);
if(dst > rotationLimit/2f){
mount.rotation = Angles.moveToward(mount.rotation, baseRotation, dst - rotationLimit/2f);
}
}
}else if(!rotate){
mount.rotation = baseRotation;
mount.targetRotation = unit.angleTo(mount.aimX, mount.aimY);
}
float float
weaponRotation = unit.rotation - 90 + (rotate ? mount.rotation : baseRotation),
mountX = unit.x + Angles.trnsx(unit.rotation - 90, x, y), mountX = unit.x + Angles.trnsx(unit.rotation - 90, x, y),
mountY = unit.y + Angles.trnsy(unit.rotation - 90, x, y), mountY = unit.y + Angles.trnsy(unit.rotation - 90, x, y);
bulletX = mountX + Angles.trnsx(weaponRotation, this.shootX, this.shootY),
bulletY = mountY + Angles.trnsy(weaponRotation, this.shootX, this.shootY),
shootAngle = bulletRotation(unit, mount, bulletX, bulletY);
//find a new target //find a new target
if(!controllable && autoTarget){ if(!controllable && autoTarget){
@@ -355,6 +333,30 @@ public class Weapon implements Cloneable{
//logic will return shooting as false even if these return true, which is fine //logic will return shooting as false even if these return true, which is fine
} }
//rotate if applicable
if(rotate && (mount.rotate || mount.shoot) && can){
float axisX = unit.x + Angles.trnsx(unit.rotation - 90, x, y),
axisY = unit.y + Angles.trnsy(unit.rotation - 90, x, y);
mount.targetRotation = Angles.angle(axisX, axisY, mount.aimX, mount.aimY) - unit.rotation;
mount.rotation = Angles.moveToward(mount.rotation, mount.targetRotation, rotateSpeed * Time.delta);
if(rotationLimit < 360){
float dst = Angles.angleDist(mount.rotation, baseRotation);
if(dst > rotationLimit/2f){
mount.rotation = Angles.moveToward(mount.rotation, baseRotation, dst - rotationLimit/2f);
}
}
}else if(!rotate){
mount.rotation = baseRotation;
mount.targetRotation = unit.angleTo(mount.aimX, mount.aimY);
}
float
weaponRotation = unit.rotation - 90 + (rotate ? mount.rotation : baseRotation),
bulletX = mountX + Angles.trnsx(weaponRotation, this.shootX, this.shootY),
bulletY = mountY + Angles.trnsy(weaponRotation, this.shootX, this.shootY),
shootAngle = bulletRotation(unit, mount, bulletX, bulletY);
if(alwaysShooting) mount.shoot = true; if(alwaysShooting) mount.shoot = true;
//update continuous state //update continuous state
@@ -430,7 +432,7 @@ public class Weapon implements Cloneable{
} }
protected Teamc findTarget(Unit unit, float x, float y, float range, boolean air, boolean ground){ 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){ protected boolean checkTarget(Unit unit, Teamc target, float x, float y, float range){

View File

@@ -314,7 +314,7 @@ public class Weather extends UnlockableContent{
@EntityDef(value = {WeatherStatec.class}, pooled = true, isFinal = false) @EntityDef(value = {WeatherStatec.class}, pooled = true, isFinal = false)
@Component(base = true) @Component(base = true)
abstract static class WeatherStateComp implements Drawc, Syncc{ abstract static class WeatherStateComp implements Drawc, Syncc{
private static final float fadeTime = 60 * 4; public static final float fadeTime = 60 * 4;
Weather weather; Weather weather;
float intensity = 1f, opacity = 0f, life, effectTimer; float intensity = 1f, opacity = 0f, life, effectTimer;

View File

@@ -1,6 +1,7 @@
package mindustry.ui.dialogs; package mindustry.ui.dialogs;
import arc.*; import arc.*;
import arc.freetype.FreeTypeFontGenerator.*;
import arc.graphics.*; import arc.graphics.*;
import arc.input.*; import arc.input.*;
import arc.math.*; import arc.math.*;
@@ -35,6 +36,7 @@ public class JoinDialog extends BaseDialog{
int refreshes; int refreshes;
boolean showHidden; boolean showHidden;
TextButtonStyle style; TextButtonStyle style;
Task fontIgnoreDirtyTask;
String lastIp; String lastIp;
int lastPort, lastColumns = -1; int lastPort, lastColumns = -1;
@@ -413,6 +415,15 @@ public class JoinDialog extends BaseDialog{
net.pingHost(resaddress, resport, res -> { net.pingHost(resaddress, resport, res -> {
if(refreshes != cur) return; 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) if(!serverSearch.isEmpty() && !(group.name.toLowerCase().contains(serverSearch)
|| res.name.toLowerCase().contains(serverSearch) || res.name.toLowerCase().contains(serverSearch)
|| res.description.toLowerCase().contains(serverSearch) || res.description.toLowerCase().contains(serverSearch)

View File

@@ -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) //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(() -> { 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"); var diag = new BaseDialog("@campaign.select");
Planet[] selected = {null}; Planet[] selected = {null};
@@ -214,7 +214,7 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{
} }
//unlock defaults for older campaign saves (TODO move? where to?) //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); 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(); super.show();
} }
void lookAt(Sector sector){ public void lookAt(Sector sector){
if(sector.tile == Ptile.empty) return; if(sector.tile == Ptile.empty) return;
//TODO should this even set `state.planet`? the other lookAt() doesn't, so...
state.planet = sector.planet; 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){ boolean canSelect(Sector sector){
@@ -648,10 +654,7 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{
} }
}).visible(() -> mode != select), }).visible(() -> mode != select),
new Table(c -> { new Table(c -> expandTable = c)).grow();
expandTable = c;
})).grow();
rebuildExpand(); 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 @Override
public void act(float delta){ public void act(float delta){
super.act(delta); super.act(delta);
@@ -801,7 +799,7 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{
hoverLabel.touchable = Touchable.disabled; hoverLabel.touchable = Touchable.disabled;
hoverLabel.color.a = state.uiAlpha; 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.setPosition(pos.x - Core.scene.marginLeft, pos.y - Core.scene.marginBottom, Align.center);
hoverLabel.getText().setLength(0); hoverLabel.getText().setLength(0);

View File

@@ -36,8 +36,6 @@ public class TraceDialog extends BaseDialog{
c.add(Core.bundle.format("trace.ip", info.ip)).row(); c.add(Core.bundle.format("trace.ip", info.ip)).row();
c.button(Icon.copySmall, style, () -> copy(info.uuid)).size(s).padRight(4f); c.button(Icon.copySmall, style, () -> copy(info.uuid)).size(s).padRight(4f);
c.add(Core.bundle.format("trace.id", info.uuid)).row(); 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(); }).row();
table.add(Core.bundle.format("trace.modclient", info.modded)).row(); table.add(Core.bundle.format("trace.modclient", info.modded)).row();

View File

@@ -72,9 +72,9 @@ public class HudFragment{
Events.on(SectorCaptureEvent.class, e -> { Events.on(SectorCaptureEvent.class, e -> {
if(e.sector.isBeingPlayed()){ if(e.sector.isBeingPlayed()){
ui.announce(Core.bundle.format("sector.capture", ""), 5f); ui.announce("@sector.capture.current", 5f);
}else{ }else{
showToast(Core.bundle.format("sector.capture", e.sector.name() + " ")); showToast(Core.bundle.format("sector.capture", e.sector.name()));
} }
}); });

Some files were not shown because too many files have changed in this diff Show More