Merge branch 'Anuken:master' into do-you-hear-the-voices-too

This commit is contained in:
Mythril382
2024-03-11 17:25:34 +08:00
committed by GitHub
124 changed files with 3872 additions and 1250 deletions
Binary file not shown.

After

Width:  |  Height:  |  Size: 510 B

+53 -4
View File
@@ -501,6 +501,7 @@ editor.default = [lightgray]<Default>
details = Details...
edit = Edit
variables = Vars
logic.globals = Built-in Variables
editor.name = Name:
editor.spawn = Spawn Unit
editor.removeunit = Remove Unit
@@ -613,7 +614,7 @@ filter.option.threshold2 = Secondary Threshold
filter.option.radius = Radius
filter.option.percentile = Percentile
locales.info = Here, you can add locale bundles for specific languages to your map. In locale bundles, each property has a name and a value. These properties can be used by world processors and objectives using their names. They support text formatting (replacing placeholders with actual values).\n\n[cyan]Example property:\n[]name: [accent]timer[]\nvalue: [accent]Example timer, time left: @[]\n\n[cyan]Usage:\n[]Set it as objective's text: [accent]@timer\n\n[]Print it in a world processor:\n[accent]localeprint "timer"\nformat time\n[gray](where time is a separately calculated variable)
locales.info = Here, you can add locale bundles for specific languages to your map. In locale bundles, each property has a name and a value. These properties can be used by world processors and objectives using their names. They support text formatting (replacing placeholders with actual values).\n\n[cyan]Example property:\n[]name: [accent]timer[]\nvalue: [accent]Example timer, time left: {0}[]\n\n[cyan]Usage:\n[]Set it as objective's text: [accent]@timer\n\n[]Print it in a world processor:\n[accent]localeprint "timer"\nformat time\n[gray](where time is a separately calculated variable)
locales.deletelocale = Are you sure you want to delete this locale bundle?
locales.applytoall = Apply Changes To All Locales
locales.addtoother = Add To Other Locales
@@ -682,10 +683,11 @@ objective.commandmode.name = Command Mode
objective.flag.name = Flag
marker.shapetext.name = Shape Text
marker.minimap.name = Minimap
marker.point.name = Point
marker.shape.name = Shape
marker.text.name = Text
marker.line.name = Line
marker.quad.name = Quad
marker.background = Background
marker.outline = Outline
@@ -773,8 +775,8 @@ sector.curlost = Sector Lost
sector.missingresources = [scarlet]Insufficient Core Resources
sector.attacked = Sector [accent]{0}[white] under attack!
sector.lost = Sector [accent]{0}[white] lost!
#note: the missing space in the line below is intentional
sector.capture = Sector [accent]{0}[white]Captured!
sector.capture = Sector [accent]{0}[white] Captured!
sector.capture.current = Sector Captured!
sector.changeicon = Change Icon
sector.noswitch.title = Unable to Switch Sectors
sector.noswitch = You may not switch sectors while an existing sector is under attack.\n\nSector: [accent]{0}[] on [accent]{1}[]
@@ -1564,6 +1566,7 @@ block.inverted-sorter.name = Inverted Sorter
block.message.name = Message
block.reinforced-message.name = Reinforced Message
block.world-message.name = World Message
block.world-switch.name = World Switch
block.illuminator.name = Illuminator
block.overflow-gate.name = Overflow Gate
block.underflow-gate.name = Underflow Gate
@@ -2329,6 +2332,49 @@ lst.makemarker = Create a new logic marker in the world.\nAn ID to identify this
lst.setmarker = Set a property for a marker.\nThe ID used must be the same as in the Make Marker instruction.\n[accent]null []values are ignored.
lst.localeprint = Add map locale property value to the text buffer.\nTo set map locale bundles in map editor, check [accent]Map Info > Locale Bundles[].\nIf client is a mobile device, tries to print a property ending in ".mobile" first.
lglobal.false = 0
lglobal.true = 1
lglobal.null = null
lglobal.@pi = The mathematical constant pi (3.141...)
lglobal.@e = The mathematical constant e (2.718...)
lglobal.@degToRad = Multiply by this number to convert degrees to radians
lglobal.@radToDeg = Multiply by this number to convert radians to degrees
lglobal.@time = Playtime of current save, in milliseconds
lglobal.@tick = Playtime of current save, in ticks (1 second = 60 ticks)
lglobal.@second = Playtime of current save, in seconds
lglobal.@minute = Playtime of current save, in minutes
lglobal.@waveNumber = Current wave number, if waves are enabled
lglobal.@waveTime = Countdown timer for waves, in seconds
lglobal.@mapw = Map width in tiles
lglobal.@maph = Map height in tiles
lglobal.sectionMap = Map
lglobal.sectionGeneral = General
lglobal.sectionNetwork = Network/Clientside [World Processor Only]
lglobal.sectionProcessor = Processor
lglobal.sectionLookup = Lookup
lglobal.@this = The logic block executing the code
lglobal.@thisx = X coordinate of block executing the code
lglobal.@thisy = Y coordinate of block executing the code
lglobal.@links = Total number of blocks linked to this processors
lglobal.@ipt = Execution speed of the processor in instructions per tick (60 ticks = 1 second)
lglobal.@unitCount = Total number of types of unit content in the game; used with the lookup instruction
lglobal.@blockCount = Total number of types of block content in the game; used with the lookup instruction
lglobal.@itemCount = Total number of types of item content in the game; used with the lookup instruction
lglobal.@liquidCount = Total number of types of liquid content in the game; used with the lookup instruction
lglobal.@server = True if the code is running on a server or in singleplayer, false otherwise
lglobal.@client = True if the code is running on a client connected to a server
lglobal.@clientLocale = Locale of the client running the code. For example: en_US
lglobal.@clientUnit = Unit of client running the code
lglobal.@clientName = Player name of client running the code
lglobal.@clientTeam = Team ID of client running the code
lglobal.@clientMobile = True if the client running the code is on mobile, false otherwise
logic.nounitbuild = [red]Unit building logic is not allowed here.
lenum.type = Type of building/unit.\ne.g. for any router, this will return [accent]@router[].\nNot a string.
@@ -2485,3 +2531,6 @@ lenum.flushtext = Flush print buffer's content to marker, if applicable.\nIf fet
lenum.texture = Texture name straight from game's texture atlas (using kebab-case naming style).\nIf printFlush is set to true, consumes text buffer content as text argument.
lenum.texturesize = Size of texture in tiles. Zero value scales marker width to original texture's size.
lenum.autoscale = Whether to scale marker corresponding to player's zoom level.
lenum.posi = Indexed position, used for line and quad markers with index zero being the first position.
lenum.uvi = Texture's position ranging from zero to one, used for quad markers.
lenum.colori = Indexed color, used for line and quad markers with index zero being the first color.
+44 -1
View File
@@ -489,6 +489,7 @@ editor.default = [lightgray]<Па змаўчанні>
details = Падрабязнасці...
edit = Рэдагаваць...
variables = Пераменныя
logic.globals = Built-in Variables
editor.name = Назва:
editor.spawn = Стварыць баявую адзінку
editor.removeunit = Выдаліць баявую адзінку
@@ -664,10 +665,11 @@ objective.destroycore.name = Знішчыць Ядро
objective.commandmode.name = Рэжым Загадаў
objective.flag.name = Сцяг
marker.shapetext.name = Форма Тэксту
marker.minimap.name = Міні-Мапа
marker.point.name = Point
marker.shape.name = Форма
marker.text.name = Тэкст
marker.line.name = Line
marker.quad.name = Quad
marker.background = Задні Фон
marker.outline = Контур
objective.research = [accent]Даследаваць:\n[]{0}[lightgray]{1}
@@ -751,6 +753,7 @@ sector.missingresources = [scarlet]Insufficient Core Resources
sector.attacked = Сектар [accent]{0}[white] атакуецца!
sector.lost = Сектар [accent]{0}[white] згублены!
sector.capture = Sector [accent]{0}[white]Captured!
sector.capture.current = Sector Captured!
sector.changeicon = Змяніць Іконку
sector.noswitch.title = Немагчыма Пераключыцца на Сектар
sector.noswitch = Вы не можаце пераключацца на сектары калі гэты сектар атакуецца.\n\nСектар: [accent]{0}[] у [accent]{1}[]
@@ -1529,6 +1532,7 @@ block.inverted-sorter.name = Інвертаваны сартавальнік
block.message.name = Паведамленне
block.reinforced-message.name = Узмоцненнае Паведамленне
block.world-message.name = Паведамленне Свету
block.world-switch.name = World Switch
block.illuminator.name = Асвятляльнік
block.overflow-gate.name = Залішнi затвор
block.underflow-gate.name = Залішнi шлюз
@@ -2276,6 +2280,42 @@ lst.sync = Sync a variable across the network.\nOnly invoked 10 times a second a
lst.makemarker = Create a new logic marker in the world.\nAn ID to identify this marker must be provided.\nMarkers currently limited to 20,000 per world.
lst.setmarker = Set a property for a marker.\nThe ID used must be the same as in the Make Marker instruction.
lst.localeprint = Add map locale property value to the text buffer.\nTo set map locale bundles in map editor, check [accent]Map Info > Locale Bundles[].\nIf client is a mobile device, tries to print a property ending in ".mobile" first.
lglobal.false = 0
lglobal.true = 1
lglobal.null = null
lglobal.@pi = The mathematical constant pi (3.141...)
lglobal.@e = The mathematical constant e (2.718...)
lglobal.@degToRad = Multiply by this number to convert degrees to radians
lglobal.@radToDeg = Multiply by this number to convert radians to degrees
lglobal.@time = Playtime of current save, in milliseconds
lglobal.@tick = Playtime of current save, in ticks (1 second = 60 ticks)
lglobal.@second = Playtime of current save, in seconds
lglobal.@minute = Playtime of current save, in minutes
lglobal.@waveNumber = Current wave number, if waves are enabled
lglobal.@waveTime = Countdown timer for waves, in seconds
lglobal.@mapw = Map width in tiles
lglobal.@maph = Map height in tiles
lglobal.sectionMap = Map
lglobal.sectionGeneral = General
lglobal.sectionNetwork = Network/Clientside [World Processor Only]
lglobal.sectionProcessor = Processor
lglobal.sectionLookup = Lookup
lglobal.@this = The logic block executing the code
lglobal.@thisx = X coordinate of block executing the code
lglobal.@thisy = Y coordinate of block executing the code
lglobal.@links = Total number of blocks linked to this processors
lglobal.@ipt = Execution speed of the processor in instructions per tick (60 ticks = 1 second)
lglobal.@unitCount = Total number of types of unit content in the game; used with the lookup instruction
lglobal.@blockCount = Total number of types of block content in the game; used with the lookup instruction
lglobal.@itemCount = Total number of types of item content in the game; used with the lookup instruction
lglobal.@liquidCount = Total number of types of liquid content in the game; used with the lookup instruction
lglobal.@server = True if the code is running on a server or in singleplayer, false otherwise
lglobal.@client = True if the code is running on a client connected to a server
lglobal.@clientLocale = Locale of the client running the code. For example: en_US
lglobal.@clientUnit = Unit of client running the code
lglobal.@clientName = Player name of client running the code
lglobal.@clientTeam = Team ID of client running the code
lglobal.@clientMobile = True is the client running the code is on mobile, false otherwise
logic.nounitbuild = [red]Unit building logic is not allowed here.
lenum.type = Type of building/unit.\ne.g. for any router, this will return [accent]@router[].\nNot a string.
lenum.shoot = Shoot at a position.
@@ -2412,3 +2452,6 @@ lenum.flushtext = Flush print buffer's content to marker, if applicable.\nIf fet
lenum.texture = Texture name straight from game's texture atlas (using kebab-case naming style).\nIf printFlush is set to true, consumes text buffer content as text argument.
lenum.texturesize = Size of texture in tiles. Zero value scales marker width to original texture's size.
lenum.autoscale = Whether to scale marker corresponding to player's zoom level.
lenum.posi = Indexed position, used for line and quad markers with index zero being the first position.
lenum.uvi = Texture's position ranging from zero to one, used for quad markers.
lenum.colori = Indexed position, used for line and quad markers with index zero being the first color.
+44 -1
View File
@@ -495,6 +495,7 @@ editor.default = [lightgray]<Стандартно>
details = Детайли...
edit = Редактирай...
variables = Vars
logic.globals = Built-in Variables
editor.name = Име:
editor.spawn = Създай Единица
editor.removeunit = Премахни Единица
@@ -670,10 +671,11 @@ objective.destroycore.name = Destroy Core
objective.commandmode.name = Command Mode
objective.flag.name = Flag
marker.shapetext.name = Shape Text
marker.minimap.name = Minimap
marker.point.name = Point
marker.shape.name = Shape
marker.text.name = Text
marker.line.name = Line
marker.quad.name = Quad
marker.background = Background
marker.outline = Outline
objective.research = [accent]Research:\n[]{0}[lightgray]{1}
@@ -758,6 +760,7 @@ sector.missingresources = [scarlet]Недостатъчни ресурси в я
sector.attacked = Зона [accent]{0}[white] е под атака!
sector.lost = Зона [accent]{0}[white] беше загубена!
sector.capture = Sector [accent]{0}[white]Captured!
sector.capture.current = Sector Captured!
sector.changeicon = Change Icon
sector.noswitch.title = Unable to Switch Sectors
sector.noswitch = You may not switch sectors while an existing sector is under attack.\n\nSector: [accent]{0}[] on [accent]{1}[]
@@ -1540,6 +1543,7 @@ block.inverted-sorter.name = Обърнат сортирач
block.message.name = Съобщение
block.reinforced-message.name = Reinforced Message
block.world-message.name = World Message
block.world-switch.name = World Switch
block.illuminator.name = Осветител
block.overflow-gate.name = Преливаща Порта
block.underflow-gate.name = Обратна Преливаща Порта
@@ -2290,6 +2294,42 @@ lst.sync = Sync a variable across the network.\nOnly invoked 10 times a second a
lst.makemarker = Create a new logic marker in the world.\nAn ID to identify this marker must be provided.\nMarkers currently limited to 20,000 per world.
lst.setmarker = Set a property for a marker.\nThe ID used must be the same as in the Make Marker instruction.
lst.localeprint = Add map locale property value to the text buffer.\nTo set map locale bundles in map editor, check [accent]Map Info > Locale Bundles[].\nIf client is a mobile device, tries to print a property ending in ".mobile" first.
lglobal.false = 0
lglobal.true = 1
lglobal.null = null
lglobal.@pi = The mathematical constant pi (3.141...)
lglobal.@e = The mathematical constant e (2.718...)
lglobal.@degToRad = Multiply by this number to convert degrees to radians
lglobal.@radToDeg = Multiply by this number to convert radians to degrees
lglobal.@time = Playtime of current save, in milliseconds
lglobal.@tick = Playtime of current save, in ticks (1 second = 60 ticks)
lglobal.@second = Playtime of current save, in seconds
lglobal.@minute = Playtime of current save, in minutes
lglobal.@waveNumber = Current wave number, if waves are enabled
lglobal.@waveTime = Countdown timer for waves, in seconds
lglobal.@mapw = Map width in tiles
lglobal.@maph = Map height in tiles
lglobal.sectionMap = Map
lglobal.sectionGeneral = General
lglobal.sectionNetwork = Network/Clientside [World Processor Only]
lglobal.sectionProcessor = Processor
lglobal.sectionLookup = Lookup
lglobal.@this = The logic block executing the code
lglobal.@thisx = X coordinate of block executing the code
lglobal.@thisy = Y coordinate of block executing the code
lglobal.@links = Total number of blocks linked to this processors
lglobal.@ipt = Execution speed of the processor in instructions per tick (60 ticks = 1 second)
lglobal.@unitCount = Total number of types of unit content in the game; used with the lookup instruction
lglobal.@blockCount = Total number of types of block content in the game; used with the lookup instruction
lglobal.@itemCount = Total number of types of item content in the game; used with the lookup instruction
lglobal.@liquidCount = Total number of types of liquid content in the game; used with the lookup instruction
lglobal.@server = True if the code is running on a server or in singleplayer, false otherwise
lglobal.@client = True if the code is running on a client connected to a server
lglobal.@clientLocale = Locale of the client running the code. For example: en_US
lglobal.@clientUnit = Unit of client running the code
lglobal.@clientName = Player name of client running the code
lglobal.@clientTeam = Team ID of client running the code
lglobal.@clientMobile = True is the client running the code is on mobile, false otherwise
logic.nounitbuild = [red]Действия за строене на единици не са позволени тук.
@@ -2442,3 +2482,6 @@ lenum.flushtext = Flush print buffer's content to marker, if applicable.\nIf fet
lenum.texture = Texture name straight from game's texture atlas (using kebab-case naming style).\nIf printFlush is set to true, consumes text buffer content as text argument.
lenum.texturesize = Size of texture in tiles. Zero value scales marker width to original texture's size.
lenum.autoscale = Whether to scale marker corresponding to player's zoom level.
lenum.posi = Indexed position, used for line and quad markers with index zero being the first position.
lenum.uvi = Texture's position ranging from zero to one, used for quad markers.
lenum.colori = Indexed position, used for line and quad markers with index zero being the first color.
+51 -8
View File
@@ -495,6 +495,7 @@ editor.default = [lightgray]<Per defecte>
details = Detalls
edit = Edita
variables = Variables
logic.globals = Built-in Variables
editor.name = Nom:
editor.spawn = Genera una unitat
editor.removeunit = Treu una unitat
@@ -673,10 +674,11 @@ objective.destroycore.name = Destrueix el nucli
objective.commandmode.name = Mode de comandament
objective.flag.name = Bandera
marker.shapetext.name = Forma del text
marker.minimap.name = Minimapa
marker.point.name = Punt
marker.shape.name = Forma
marker.text.name = Text
marker.line.name = Línia
marker.quad.name = Rectangle
marker.background = Fons
marker.outline = Contorn
@@ -761,7 +763,8 @@ sector.curlost = Sector perdut
sector.missingresources = [scarlet]Recursos insuficients al nucli
sector.attacked = Ataquen el sector [accent]{0}[white]!
sector.lost = Heu perdut el sector [accent]{0}[white]!
sector.capture = Sector [accent]{0}[white]Captured!
sector.capture = Sha capturat el sector [accent]{0}[white]!
sector.capture.current = Sector capturat!
sector.changeicon = Canvia la icona
sector.noswitch.title = Els sectors no es poden canviar.
sector.noswitch = Potser no podeu canviar de sector perquè 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.crashreport.name = Envia informes derror anònims
setting.savecreate.name = Desa automàticament la partida
setting.steampublichost.name = Public Game Visibility
setting.steampublichost.name = Visibilitat de la partida pública
setting.playerlimit.name = Límit de jugadors
setting.chatopacity.name = Opacitat del xat
setting.lasersopacity.name = Opacitat dels làsers denergia
@@ -1547,6 +1550,7 @@ block.inverted-sorter.name = Classificador invers
block.message.name = Missatge
block.reinforced-message.name = Missatge destacat
block.world-message.name = Missatge mundial
block.world-switch.name = Interruptor mundial
block.illuminator.name = Il·luminador
block.overflow-gate.name = Porta de desbordament
block.underflow-gate.name = Porta de subdesbordament
@@ -1907,7 +1911,7 @@ onset.turrets = Les unitats són efectives, però les [accent]torretes[] proporc
onset.turretammo = Subministreu [accent]munició de beril·li[] a la torreta.
onset.walls = Els [accent]murs[] poden evitar que el dany arribi a les estructures importants.\nConstruïu alguns \uf6ee [accent]murs de beril·li[] al voltant de la torreta.
onset.enemies = 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.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ó.
@@ -2300,6 +2304,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.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.
lglobal.false = 0
lglobal.true = 1
lglobal.null = null
lglobal.@pi = The mathematical constant pi (3.141...)
lglobal.@e = The mathematical constant e (2.718...)
lglobal.@degToRad = Multiply by this number to convert degrees to radians
lglobal.@radToDeg = Multiply by this number to convert radians to degrees
lglobal.@time = Playtime of current save, in milliseconds
lglobal.@tick = Playtime of current save, in ticks (1 second = 60 ticks)
lglobal.@second = Playtime of current save, in seconds
lglobal.@minute = Playtime of current save, in minutes
lglobal.@waveNumber = Current wave number, if waves are enabled
lglobal.@waveTime = Countdown timer for waves, in seconds
lglobal.@mapw = Map width in tiles
lglobal.@maph = Map height in tiles
lglobal.sectionMap = Map
lglobal.sectionGeneral = General
lglobal.sectionNetwork = Network/Clientside [World Processor Only]
lglobal.sectionProcessor = Processor
lglobal.sectionLookup = Lookup
lglobal.@this = The logic block executing the code
lglobal.@thisx = X coordinate of block executing the code
lglobal.@thisy = Y coordinate of block executing the code
lglobal.@links = Total number of blocks linked to this processors
lglobal.@ipt = Execution speed of the processor in instructions per tick (60 ticks = 1 second)
lglobal.@unitCount = Total number of types of unit content in the game; used with the lookup instruction
lglobal.@blockCount = Total number of types of block content in the game; used with the lookup instruction
lglobal.@itemCount = Total number of types of item content in the game; used with the lookup instruction
lglobal.@liquidCount = Total number of types of liquid content in the game; used with the lookup instruction
lglobal.@server = True if the code is running on a server or in singleplayer, false otherwise
lglobal.@client = True if the code is running on a client connected to a server
lglobal.@clientLocale = Locale of the client running the code. For example: en_US
lglobal.@clientUnit = Unit of client running the code
lglobal.@clientName = Player name of client running the code
lglobal.@clientTeam = Team ID of client running the code
lglobal.@clientMobile = True is the client running the code is on mobile, false otherwise
logic.nounitbuild = [red]Aquí no es permet construir blocs de tipus lògic.
@@ -2451,7 +2491,10 @@ lenum.build = Construeix una estructura.
lenum.getblock = Obté un bloc i el seu tipus a les coordenades indicades.\nLa posició escollida ha 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.boost = Inicia/Detén el vol.
lenum.flushtext = Flush print buffer's content to marker, if applicable.\nIf fetch is set to true, tries to fetch properties from map locale bundle or game's bundle.
lenum.texture = Texture name straight from game's texture atlas (using kebab-case naming style).\nIf printFlush is set to true, consumes text buffer content as text argument.
lenum.texturesize = Size of texture in tiles. Zero value scales marker width to original texture's size.
lenum.autoscale = Whether to scale marker corresponding to player's zoom level.
lenum.flushtext = Passa el contingut de la cua 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 = 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 = 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 = 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.
+101 -57
View File
@@ -153,12 +153,12 @@ mod.unmetdependencies = [red]Nesplněné Dependencies
mod.erroredcontent = [scarlet]V obsahu jsou chyby[]
mod.circulardependencies = [red]Kruhové Dependencies
mod.incompletedependencies = [red]Nedokončené Dependencies
mod.requiresversion.details = Requires game version: [accent]{0}[]\nYour game is outdated. This mod requires a newer version of the game (possibly a beta/alpha release) to function.
mod.outdatedv7.details = This mod is incompatible with the latest version of the game. The author must update it, and add [accent]minGameVersion: 136[] to its [accent]mod.json[] file.
mod.blacklisted.details = This mod has been manually blacklisted for causing crashes or other issues with this version of the game. Do not use it.
mod.missingdependencies.details = This mod is missing dependencies: {0}
mod.erroredcontent.details = This game caused errors when loading. Ask the mod author to fix them.
mod.circulardependencies.details = This mod has dependencies that depends on each other.
mod.requiresversion.details = Vyžaduje verzi hry: [accent]{0}[]\nVaše hra je zastaralá. Tento mod vyžaduje novější verzi hry (možná beta/alfa verze) aby fungoval.
mod.outdatedv7.details = Tento mod není kompatibilní s nejnovější verzí hry. Autor ho musí aktualizovat a přidat [accent]minGameVersion: 136[] ho do [accent]mod.json[] složky.
mod.blacklisted.details = Tento mod byl ručně zařazen na černou listinu, protože způsobuje pády nebo jiné problémy s touto verzí hry. Nepoužívejte jej.
mod.missingdependencies.details = Tomuto módu chybí závislosti: {0}
mod.erroredcontent.details = Tato hra způsobovala chyby při načítání. Požádejte autora módu o jejich opravu.
mod.circulardependencies.details = Tento mod má závislosti, které na sobě navzájem závisí.
mod.incompletedependencies.details = This mod is unable to be loaded due to invalid or missing dependencies: {0}.
mod.requiresversion = Requires game version: [red]{0}
mod.errors = Při načítání obsahu hry se vyskytly problémy.
@@ -261,13 +261,13 @@ trace.modclient = Upravený klient hry: [accent]{0}[]
trace.times.joined = Krát Připojen: [accent]{0}
trace.times.kicked = Krát Vyhozen: [accent]{0}
trace.ips = IPs:
trace.names = Names:
trace.names = Jména:
invalidid = Neplatná adresa IP klienta! Zašli prosím zprávu o chybě.
player.ban = Ban
player.kick = Kick
player.kick = Vyhodit
player.trace = Trace
player.admin = Toggle Admin
player.team = Change Team
player.admin = Přepínání správce
player.team = Změnit tým
server.bans = Zákazy
server.bans.none = Žádní hráči se zákazem nebyli nalezeni.
server.admins = Správci
@@ -340,13 +340,14 @@ ok = OK
open = Otevřít
customize = Přizpůsobit pravidla
cancel = Zrušit
command = Command
command.queue = [lightgray][Queuing]
command.mine = Mine
command.repair = Repair
command.rebuild = Rebuild
command.assist = Assist Player
command.move = Move
command = Velet
command.queue = Queue
command.mine = Těžit
command.repair = Opravovat
command.rebuild = Přestavět
command.assist = Asistovat hráči
command.move = Pohyb
command.boost = Boost
command.enterPayload = Enter Payload Block
command.loadUnits = Load Units
@@ -362,7 +363,7 @@ openlink = Otevřít odkaz
copylink = Zkopírovat odkaz
back = Zpět
max = Max
objective = Map Objective
objective = Úkol mapy
crash.export = Exportovat záznamy o zhroucení hry
crash.none = Záznamy o zhroucení hry nebyly nalezeny.
crash.exported = Záznamy o zhroucení hry byly exportovány.
@@ -383,7 +384,7 @@ pausebuilding = [accent][[{0}][] zastaví stavění
resumebuilding = [scarlet][[{0}][] bude pokračovat ve stavění
enablebuilding = [scarlet][[{0}][] povolí stavení
showui = UI je skryto.\nZmáčkni [accent][[{0}][] pro jeho zobrazení.
commandmode.name = [accent]Command Mode
commandmode.name = [accent]Velící zežim
commandmode.nounits = [no units]
wave = [accent]Vlna číslo {0}[]
wave.cap = [accent]Vlna {0} z {1}[]
@@ -495,6 +496,7 @@ editor.default = [lightgray]<Výchozí>[]
details = Podrobnosti...
edit = Upravit...
variables = Hodnoty
logic.globals = Built-in Variables
editor.name = Jméno:
editor.spawn = Zrodit jednotku
editor.removeunit = Odstranit jednotku
@@ -671,10 +673,11 @@ objective.destroycore.name = Zničit Jádro
objective.commandmode.name = Příkazovy Režim
objective.flag.name = Vlajka
marker.shapetext.name = Shape Text
marker.minimap.name = Minimapa
marker.point.name = Point
marker.shape.name = Tvar
marker.text.name = Text
marker.line.name = Line
marker.quad.name = Quad
marker.background = Pozadí
marker.outline = Outline
objective.research = [accent]Research:\n[]{0}[lightgray]{1}
@@ -704,7 +707,7 @@ bannedunits.whitelist = Banned Units As Whitelist
bannedblocks.whitelist = Banned Blocks As Whitelist
addall = Přidat vše
launch.from = Vysláno z: [accent]{0}
launch.capacity = Launching Item Capacity: [accent]{0}
launch.capacity = Odpalovací kapacita: [accent]{0}
launch.destination = Cíl: {0}
configure.invalid = Hodnota musí být číslo mezi 0 a {0}.
add = Přidat...
@@ -734,8 +737,8 @@ sectorlist.attacked = {0} pod útokem
sectors.unexplored = [lightgray]Neprozkoumáno
sectors.resources = Zdroje:
sectors.production = Výroba:
sectors.export = Export:
sectors.import = Import:
sectors.export = Exportovat:
sectors.import = Importovat:
sectors.time = Čas:
sectors.threat = Ohrožení:
sectors.wave = Vlna:
@@ -759,6 +762,7 @@ sector.missingresources = [scarlet]Nedostatečné zdroje v jádře
sector.attacked = Sektor [accent]{0}[white] pod útokem!
sector.lost = Sektor [accent]{0}[white] ztracen! :(
sector.capture = Sector [accent]{0}[white]Captured!
sector.capture.current = Sector Captured!
sector.changeicon = Změnit Ikonu
sector.noswitch.title = Nelze Vyměnit Sektor
sector.noswitch = Sektory nelze přepnut, pokud je stávající sektor pod útokem.\n\nSektor: [accent]{0}[] na [accent]{1}[]
@@ -811,43 +815,43 @@ sector.windsweptIslands.description = Vzdálen od pevniny je tento řetízek ost
sector.extractionOutpost.description = Vzdálená pevnost, postavená nepřítelem za účelem vysílání zdrojů do okolních sektorů.\n\nDoprava položek napříč sektory je nezbytná pro lapení dalších sektorů. Znič základnu. Vyzkoumej jejich Vysílací plošiny.
sector.impact0078.description = Zde leží zbytky mezihvězdné lodi, která vstoupila do tohoto systému.\n\nZachraň z vraku vše, co se dá. Vyzkoumej nepoškozenou technologii.
sector.planetaryTerminal.description = Konečný cíl.\n\nTato pobřežní základna obsahuje konstrukce schopné vyslat jádra na okolní planety. Je mimořádně dobře opevněna.\n\nVyrob námořní jednotky. Odstraň nepřítele tak rychle, jak umíš. Vyzkoumej vysílací konstrukci.
sector.coastline.description = Remnants of naval unit technology have been detected at this location. Repel the enemy attacks, capture this sector, and acquire the technology.
sector.navalFortress.description = The enemy has established a base on a remote, naturally-fortified island. Destroy this outpost. Acquire their advanced naval craft technology, and research it.
sector.onset.name = The Onset
sector.coastline.description = V této lokaci byly objeveny pozůstatky techniky námořních jednotek. Odražte nepřátelské útoky, dobijte tento sektor a získejte technologii.
sector.navalFortress.description = Nepřítel si vybudoval základnu na odlehlém, přírodou opevněném ostrově. Zničte tuto základnu. Získejte jejich pokročilou technologii námořních plavidel a vyzkoumejte ji.
sector.onset.name = Nástup
sector.aegis.name = Aegis
sector.lake.name = Lake
sector.intersect.name = Intersect
sector.lake.name = Jezero
sector.intersect.name = Průsečík
sector.atlas.name = Atlas
sector.split.name = Split
sector.basin.name = Basin
sector.marsh.name = Marsh
sector.peaks.name = Peaks
sector.ravine.name = Ravine
sector.caldera-erekir.name = Caldera
sector.stronghold.name = Stronghold
sector.crevice.name = Crevice
sector.siege.name = Siege
sector.crossroads.name = Crossroads
sector.karst.name = Karst
sector.origin.name = Origin
sector.onset.description = Commence the conquest of Erekir. Gather resources, produce units, and begin researching technology.
sector.split.name = Rozdělení
sector.basin.name = Povodí
sector.marsh.name = Marš
sector.peaks.name = Vrcholy
sector.ravine.name = Rokle
sector.caldera-erekir.name = Kaldera
sector.stronghold.name = Pevnost
sector.crevice.name = Štěrbina
sector.siege.name = Obléhání
sector.crossroads.name = Křižovatka
sector.karst.name = Kras
sector.origin.name = Původ
sector.onset.description = Zahajte dobývání Erekiru. Shromážděte zdroje, vyrobte jednotky a začněte zkoumat technologie.
sector.aegis.description = This sector contains deposits of tungsten.\nResearch the [accent]Impact Drill[] to mine this resource, and destroy the enemy base in the area.
sector.lake.description = This sector's slag lake greatly limits viable units. A hover unit is the only option.\nResearch the [accent]ship fabricator[] and produce an [accent]elude[] unit as soon as possible.
sector.intersect.description = Scans suggest that this sector will be attacked from multiple sides soon after landing.\nSet up defenses quickly and expand as soon as possible.\n[accent]Mech[] units will be required for the area's rough terrain.
sector.atlas.description = This sector contains varied terrain and will require a variety of units to attack effectively.\nUpgraded units may also be necessary to get past some of the tougher enemy bases detected here.\nResearch the [accent]Electrolyzer[] and the [accent]Tank Refabricator[].
sector.split.description = The minimal enemy presence in this sector makes it perfect for testing new transport tech.
sector.basin.description = Large enemy presence detected in this sector.\nBuild units quickly and capture enemy cores to gain a foothold.
sector.marsh.description = This sector has an abundance of arkycite, but has limited vents.\nBuild [accent]Chemical Combustion Chambers[] to generate power.
sector.peaks.description = The mountainous terrain in this sector make most units useless. Flying units will be required.\nBe aware of enemy anti-air installations. It may be possible to disable some of these installations by targeting their supporting buildings.
sector.ravine.description = No enemy cores detected in the sector, although it's an important transportation route for the enemy. Expect variety of enemy forces.\nProduce [accent]surge alloy[]. Construct [accent]Afflict[] turrets.
sector.caldera-erekir.description = The resources detected in this sector are scattered across several islands.\nResearch and deploy drone-based transportation.
sector.stronghold.description = The large enemy encampment in this sector guards significant deposits of [accent]thorium[].\nUse it to develop higher tier units and turrets.
sector.crevice.description = The enemy will send fierce attack forces to take out your base in this sector.\nDeveloping [accent]carbide[] and the [accent]Pyrolysis Generator[] may be imperative for survival.
sector.siege.description = This sector features two parallel canyons that will force a two-pronged attack.\nResearch [accent]cyanogen[] to gain the capability to create even stronger tank units.\nCaution: enemy long-range missiles have been detected. The missiles may be shot down before impact.
sector.crossroads.description = The enemy bases in this sector have been established in varying terrain. Research different units to adapt.\nAdditionally, some bases are protected by shields. Figure out how they are powered.
sector.karst.description = This sector is rich in resources, but will be attacked by the enemy once a new core lands.\nTake advantage of the resources and research [accent]phase fabric[].
sector.origin.description = The final sector with a significant enemy presence.\nNo probable research opportunities remain - focus solely on destroying all enemy cores.
sector.aegis.description = Tento sektor obsahuje ložiska wolframu.\nVyzkoumej [accent]Nárazový vrták[] k vytěžení této suroviny, a znič nepřátelskou základnu.
sector.lake.description = Struskové jezero v tomto sektoru značně omezuje použitelné jednotky. Jedinou možností je vznášecí jednotka.\nVyzkoumej [accent]továrna na výrobu lodí[] a vyrob [accent]elude[] jednotku co nejdříve
sector.intersect.description = Podle průzkumů bude tento sektor brzy po přistání napaden z více stran.\nRychle vytvořte obranu a co nejdříve expandujte.\n[accent]Mech[] jednotky budou zapotřebí pro překročení teréu v oblasti.
sector.atlas.description = Tento sektor obsahuje rozmanitý terén a pro efektivní útok bude vyžadovat různé jednotky.\nPro překonání některých těžších nepřátelských základen zde mohou být nutné i vylepšené jednotky.\nVyzkoumej [accent]Electrolyzér[] a [accent]Přestavovač tanků[].
sector.split.description = Minimální přítomnost nepřátel v tomto sektoru je ideální pro testování nových dopravních technologií.
sector.basin.description = V tomto sektoru byla zjištěna velká přítomnost nepřátel.\nRychle postavte jednotky a získejte nepřátelská jádra, abyste se prosadili.
sector.marsh.description = Tento sektor má hojnost arkycitu, ale má omezené průduchy.\nPostav [accent]Chemické spalovací komory[] k výrobě energie.
sector.peaks.description = Hornatý terén v tomto sektoru činí většinu jednotek nepoužitelnými. Bude zapotřebí létajících jednotek.\nDejte si pozor na nepřátelská protiletecká zařízení. Některá z těchto zařízení je možné vyřadit zaměřením jejich podpůrných budov.
sector.ravine.description = V sektoru nebyla zjištěna žádná nepřátelská jádra, ačkoli se jedná o důležitou dopravní trasu pro nepřítele. Očekávejte rozmanitost nepřátelských sil.\nVyrob [accent]rázová slitina[]. Postav [accent]Aflict[] věže.
sector.caldera-erekir.description = Zdroje zjištěné v tomto sektoru jsou rozptýleny na několika ostrovech. \nVyzkoumejte a nasaďte dopravu pomocí dronů.
sector.stronghold.description = Rozsáhlé nepřátelské ležení v tomto sektoru střeží významná ložiska [accent]thoria[].\nPoužijte ho na vývoj jednotek a věží vyšší úrovně.
sector.crevice.description = Nepřítel vyšle ostré útočné síly, aby zničily vaši základnu v tomto sektoru.\nVývoj [accent]karbid[] a [accent]Pyrolytický generátor[] může být nezbytný pro přežití.
sector.siege.description = V tomto sektoru se nacházejí dva paralelní kaňony, které si vynutí útok dvěma směry.\nVyzkoumej [accent]kyan[] pro získání schopnosti vytvářet ještě silnější tankové jednotky.\nPozor: byly detekovány nepřátelské rakety dlouhého doletu. Rakety mohou být sestřeleny před dopadem.
sector.crossroads.description = Nepřátelské základny v tomto sektoru jsou rozmístěny v různém terénu. Výzkumem různých jednotek se jim přizpůsobíte.\nNěkteré základny jsou navíc chráněny štíty. Zjistěte, jak jsou napájeny.
sector.karst.description = Tento sektor je bohatý na zdroje, ale jakmile se zde objeví nové jádro, bude napaden nepřítelem.\nVyužijte zdroje a vyzkoumej [accent]fázová tkanina[].
sector.origin.description = Poslední sektor s výrazným výskytem nepřátel.\nŽádné pravděpodobné možnosti výzkumu nezbývají - soustřeďte se výhradně na zničení všech nepřátelských jader.
status.burning.name = Hořící
status.freezing.name = Mrazící
@@ -1543,6 +1547,7 @@ block.inverted-sorter.name = Obrácená třídička
block.message.name = Zpráva
block.reinforced-message.name = Posílená Zpráva
block.world-message.name = Světová Zpráva
block.world-switch.name = World Switch
block.illuminator.name = Osvětlovač
block.overflow-gate.name = Brána s přepadem
block.underflow-gate.name = Brána s podtokem
@@ -2294,6 +2299,42 @@ lst.sync = Sync a variable across the network.\nOnly invoked 10 times a second a
lst.makemarker = Create a new logic marker in the world.\nAn ID to identify this marker must be provided.\nMarkers currently limited to 20,000 per world.
lst.setmarker = Set a property for a marker.\nThe ID used must be the same as in the Make Marker instruction.
lst.localeprint = Add map locale property value to the text buffer.\nTo set map locale bundles in map editor, check [accent]Map Info > Locale Bundles[].\nIf client is a mobile device, tries to print a property ending in ".mobile" first.
lglobal.false = 0
lglobal.true = 1
lglobal.null = null
lglobal.@pi = The mathematical constant pi (3.141...)
lglobal.@e = The mathematical constant e (2.718...)
lglobal.@degToRad = Multiply by this number to convert degrees to radians
lglobal.@radToDeg = Multiply by this number to convert radians to degrees
lglobal.@time = Playtime of current save, in milliseconds
lglobal.@tick = Playtime of current save, in ticks (1 second = 60 ticks)
lglobal.@second = Playtime of current save, in seconds
lglobal.@minute = Playtime of current save, in minutes
lglobal.@waveNumber = Current wave number, if waves are enabled
lglobal.@waveTime = Countdown timer for waves, in seconds
lglobal.@mapw = Map width in tiles
lglobal.@maph = Map height in tiles
lglobal.sectionMap = Map
lglobal.sectionGeneral = General
lglobal.sectionNetwork = Network/Clientside [World Processor Only]
lglobal.sectionProcessor = Processor
lglobal.sectionLookup = Lookup
lglobal.@this = The logic block executing the code
lglobal.@thisx = X coordinate of block executing the code
lglobal.@thisy = Y coordinate of block executing the code
lglobal.@links = Total number of blocks linked to this processors
lglobal.@ipt = Execution speed of the processor in instructions per tick (60 ticks = 1 second)
lglobal.@unitCount = Total number of types of unit content in the game; used with the lookup instruction
lglobal.@blockCount = Total number of types of block content in the game; used with the lookup instruction
lglobal.@itemCount = Total number of types of item content in the game; used with the lookup instruction
lglobal.@liquidCount = Total number of types of liquid content in the game; used with the lookup instruction
lglobal.@server = True if the code is running on a server or in singleplayer, false otherwise
lglobal.@client = True if the code is running on a client connected to a server
lglobal.@clientLocale = Locale of the client running the code. For example: en_US
lglobal.@clientUnit = Unit of client running the code
lglobal.@clientName = Player name of client running the code
lglobal.@clientTeam = Team ID of client running the code
lglobal.@clientMobile = True is the client running the code is on mobile, false otherwise
logic.nounitbuild = [red]Stavba budov pomoci jednotek kontrolované procesorem neni povolené.
@@ -2449,3 +2490,6 @@ lenum.flushtext = Flush print buffer's content to marker, if applicable.\nIf fet
lenum.texture = Texture name straight from game's texture atlas (using kebab-case naming style).\nIf printFlush is set to true, consumes text buffer content as text argument.
lenum.texturesize = Size of texture in tiles. Zero value scales marker width to original texture's size.
lenum.autoscale = Whether to scale marker corresponding to player's zoom level.
lenum.posi = Indexed position, used for line and quad markers with index zero being the first position.
lenum.uvi = Texture's position ranging from zero to one, used for quad markers.
lenum.colori = Indexed position, used for line and quad markers with index zero being the first color.
+44 -1
View File
@@ -490,6 +490,7 @@ editor.default = [lightgray]<standard>
details = Detaljer...
edit = Rediger...
variables = Vars
logic.globals = Built-in Variables
editor.name = Navn:
editor.spawn = Påkald enhed
editor.removeunit = Fjern enhed
@@ -665,10 +666,11 @@ objective.destroycore.name = Destroy Core
objective.commandmode.name = Command Mode
objective.flag.name = Flag
marker.shapetext.name = Shape Text
marker.minimap.name = Minimap
marker.point.name = Point
marker.shape.name = Shape
marker.text.name = Text
marker.line.name = Line
marker.quad.name = Quad
marker.background = Background
marker.outline = Outline
objective.research = [accent]Research:\n[]{0}[lightgray]{1}
@@ -752,6 +754,7 @@ sector.missingresources = [scarlet]Ikke nok resurser i kernen.
sector.attacked = Sector [accent]{0}[white] under attack!
sector.lost = Sector [accent]{0}[white] lost!
sector.capture = Sector [accent]{0}[white]Captured!
sector.capture.current = Sector Captured!
sector.changeicon = Change Icon
sector.noswitch.title = Unable to Switch Sectors
sector.noswitch = You may not switch sectors while an existing sector is under attack.\n\nSector: [accent]{0}[] on [accent]{1}[]
@@ -1531,6 +1534,7 @@ block.inverted-sorter.name = Omvendt Filter
block.message.name = Besked
block.reinforced-message.name = Reinforced Message
block.world-message.name = World Message
block.world-switch.name = World Switch
block.illuminator.name = Lyskilde
block.overflow-gate.name = Overflods-låge
block.underflow-gate.name = Underflods-låge
@@ -2276,6 +2280,42 @@ lst.sync = Sync a variable across the network.\nOnly invoked 10 times a second a
lst.makemarker = Create a new logic marker in the world.\nAn ID to identify this marker must be provided.\nMarkers currently limited to 20,000 per world.
lst.setmarker = Set a property for a marker.\nThe ID used must be the same as in the Make Marker instruction.
lst.localeprint = Add map locale property value to the text buffer.\nTo set map locale bundles in map editor, check [accent]Map Info > Locale Bundles[].\nIf client is a mobile device, tries to print a property ending in ".mobile" first.
lglobal.false = 0
lglobal.true = 1
lglobal.null = null
lglobal.@pi = The mathematical constant pi (3.141...)
lglobal.@e = The mathematical constant e (2.718...)
lglobal.@degToRad = Multiply by this number to convert degrees to radians
lglobal.@radToDeg = Multiply by this number to convert radians to degrees
lglobal.@time = Playtime of current save, in milliseconds
lglobal.@tick = Playtime of current save, in ticks (1 second = 60 ticks)
lglobal.@second = Playtime of current save, in seconds
lglobal.@minute = Playtime of current save, in minutes
lglobal.@waveNumber = Current wave number, if waves are enabled
lglobal.@waveTime = Countdown timer for waves, in seconds
lglobal.@mapw = Map width in tiles
lglobal.@maph = Map height in tiles
lglobal.sectionMap = Map
lglobal.sectionGeneral = General
lglobal.sectionNetwork = Network/Clientside [World Processor Only]
lglobal.sectionProcessor = Processor
lglobal.sectionLookup = Lookup
lglobal.@this = The logic block executing the code
lglobal.@thisx = X coordinate of block executing the code
lglobal.@thisy = Y coordinate of block executing the code
lglobal.@links = Total number of blocks linked to this processors
lglobal.@ipt = Execution speed of the processor in instructions per tick (60 ticks = 1 second)
lglobal.@unitCount = Total number of types of unit content in the game; used with the lookup instruction
lglobal.@blockCount = Total number of types of block content in the game; used with the lookup instruction
lglobal.@itemCount = Total number of types of item content in the game; used with the lookup instruction
lglobal.@liquidCount = Total number of types of liquid content in the game; used with the lookup instruction
lglobal.@server = True if the code is running on a server or in singleplayer, false otherwise
lglobal.@client = True if the code is running on a client connected to a server
lglobal.@clientLocale = Locale of the client running the code. For example: en_US
lglobal.@clientUnit = Unit of client running the code
lglobal.@clientName = Player name of client running the code
lglobal.@clientTeam = Team ID of client running the code
lglobal.@clientMobile = True is the client running the code is on mobile, false otherwise
logic.nounitbuild = [red]Unit building logic is not allowed here.
lenum.type = Type of building/unit.\ne.g. for any router, this will return [accent]@router[].\nNot a string.
lenum.shoot = Shoot at a position.
@@ -2412,3 +2452,6 @@ lenum.flushtext = Flush print buffer's content to marker, if applicable.\nIf fet
lenum.texture = Texture name straight from game's texture atlas (using kebab-case naming style).\nIf printFlush is set to true, consumes text buffer content as text argument.
lenum.texturesize = Size of texture in tiles. Zero value scales marker width to original texture's size.
lenum.autoscale = Whether to scale marker corresponding to player's zoom level.
lenum.posi = Indexed position, used for line and quad markers with index zero being the first position.
lenum.uvi = Texture's position ranging from zero to one, used for quad markers.
lenum.colori = Indexed position, used for line and quad markers with index zero being the first color.
+44 -1
View File
@@ -498,6 +498,7 @@ editor.default = [lightgray]<Standard>
details = Details
edit = Bearbeiten
variables = Variablen
logic.globals = Built-in Variables
editor.name = Name:
editor.spawn = Spawnbereich
editor.removeunit = Bereich entfernen
@@ -678,10 +679,11 @@ objective.commandmode.name = Steuerungsmodus
objective.flag.name = Flag
marker.shapetext.name = Geformter Text
marker.minimap.name = Minimap
marker.point.name = Point
marker.shape.name = Form
marker.text.name = Text
marker.line.name = Line
marker.quad.name = Quad
marker.background = Hintergrund
marker.outline = Umriss
@@ -770,6 +772,7 @@ sector.missingresources = [scarlet]Fehlende Kernressourcen
sector.attacked = Sektor [accent]{0}[white] wird angegriffen!
sector.lost = Sektor [accent]{0}[white] verloren!
sector.capture = Sector [accent]{0}[white]Captured!
sector.capture.current = Sector Captured!
sector.changeicon = Bild ändern
sector.noswitch.title = Kann Sektoren nicht wechseln
sector.noswitch = Du kannst nicht zwischen Sektoren wechseln, wenn ein anderer angegriffen wird.\n\nSektor: [accent]{0}[] auf [accent]{1}[]
@@ -1557,6 +1560,7 @@ block.inverted-sorter.name = Invertierter Sortierer
block.message.name = Nachricht
block.reinforced-message.name = Verstärkte Nachricht
block.world-message.name = Weltnachricht
block.world-switch.name = World Switch
block.illuminator.name = Illuminierer
block.overflow-gate.name = Überlauftor
block.underflow-gate.name = Unterlauftor
@@ -2325,6 +2329,42 @@ lst.sync = Sync a variable across the network.\nOnly invoked 10 times a second a
lst.makemarker = Create a new logic marker in the world.\nAn ID to identify this marker must be provided.\nMarkers currently limited to 20,000 per world.
lst.setmarker = Set a property for a marker.\nThe ID used must be the same as in the Make Marker instruction.
lst.localeprint = Add map locale property value to the text buffer.\nTo set map locale bundles in map editor, check [accent]Map Info > Locale Bundles[].\nIf client is a mobile device, tries to print a property ending in ".mobile" first.
lglobal.false = 0
lglobal.true = 1
lglobal.null = null
lglobal.@pi = The mathematical constant pi (3.141...)
lglobal.@e = The mathematical constant e (2.718...)
lglobal.@degToRad = Multiply by this number to convert degrees to radians
lglobal.@radToDeg = Multiply by this number to convert radians to degrees
lglobal.@time = Playtime of current save, in milliseconds
lglobal.@tick = Playtime of current save, in ticks (1 second = 60 ticks)
lglobal.@second = Playtime of current save, in seconds
lglobal.@minute = Playtime of current save, in minutes
lglobal.@waveNumber = Current wave number, if waves are enabled
lglobal.@waveTime = Countdown timer for waves, in seconds
lglobal.@mapw = Map width in tiles
lglobal.@maph = Map height in tiles
lglobal.sectionMap = Map
lglobal.sectionGeneral = General
lglobal.sectionNetwork = Network/Clientside [World Processor Only]
lglobal.sectionProcessor = Processor
lglobal.sectionLookup = Lookup
lglobal.@this = The logic block executing the code
lglobal.@thisx = X coordinate of block executing the code
lglobal.@thisy = Y coordinate of block executing the code
lglobal.@links = Total number of blocks linked to this processors
lglobal.@ipt = Execution speed of the processor in instructions per tick (60 ticks = 1 second)
lglobal.@unitCount = Total number of types of unit content in the game; used with the lookup instruction
lglobal.@blockCount = Total number of types of block content in the game; used with the lookup instruction
lglobal.@itemCount = Total number of types of item content in the game; used with the lookup instruction
lglobal.@liquidCount = Total number of types of liquid content in the game; used with the lookup instruction
lglobal.@server = True if the code is running on a server or in singleplayer, false otherwise
lglobal.@client = True if the code is running on a client connected to a server
lglobal.@clientLocale = Locale of the client running the code. For example: en_US
lglobal.@clientUnit = Unit of client running the code
lglobal.@clientName = Player name of client running the code
lglobal.@clientTeam = Team ID of client running the code
lglobal.@clientMobile = True is the client running the code is on mobile, false otherwise
logic.nounitbuild = [red]Logik, die Blöcke baut, ist hier nicht erlaubt.
@@ -2481,3 +2521,6 @@ lenum.flushtext = Flush print buffer's content to marker, if applicable.\nIf fet
lenum.texture = Texture name straight from game's texture atlas (using kebab-case naming style).\nIf printFlush is set to true, consumes text buffer content as text argument.
lenum.texturesize = Size of texture in tiles. Zero value scales marker width to original texture's size.
lenum.autoscale = Whether to scale marker corresponding to player's zoom level.
lenum.posi = Indexed position, used for line and quad markers with index zero being the first position.
lenum.uvi = Texture's position ranging from zero to one, used for quad markers.
lenum.colori = Indexed position, used for line and quad markers with index zero being the first color.
+44 -1
View File
@@ -495,6 +495,7 @@ editor.default = [lightgray]<Por defecto>
details = Detalles...
edit = Editar...
variables = Variables
logic.globals = Built-in Variables
editor.name = Nombre:
editor.spawn = Generar unidad
editor.removeunit = Eliminar unidad
@@ -675,10 +676,11 @@ objective.commandmode.name = Modo comando
objective.flag.name = Bandera
marker.shapetext.name = Forma del texto
marker.minimap.name = Minimapa
marker.point.name = Point
marker.shape.name = Forma
marker.text.name = Texto
marker.line.name = Line
marker.quad.name = Quad
marker.background = Fondo
marker.outline = Bordes
@@ -766,6 +768,7 @@ sector.missingresources = [scarlet]Recursos insuficientes en el núcleo
sector.attacked = ¡Sector [accent]{0}[white] bajo ataque!
sector.lost = ¡Sector [accent]{0}[white] perdido!
sector.capture = Sector [accent]{0}[white]Captured!
sector.capture.current = Sector Captured!
sector.changeicon = Cambiar icono
sector.noswitch.title = No se pueden cambiar los sectores
sector.noswitch = Tal vez no puedas cambiar de sector mientras se encuentre bajo ataque.\n\nSector: [accent]{0}[] en [accent]{1}[]
@@ -1553,6 +1556,7 @@ block.inverted-sorter.name = Clasificador invertido
block.message.name = Mensaje
block.reinforced-message.name = Mensaje reforzado
block.world-message.name = Mensaje estático
block.world-switch.name = World Switch
block.illuminator.name = Iluminador
block.overflow-gate.name = Compuerta de desborde
block.underflow-gate.name = Compuerta de subdesbordamiento
@@ -2318,6 +2322,42 @@ lst.sync = Sync a variable across the network.\nOnly invoked 10 times a second a
lst.makemarker = Create a new logic marker in the world.\nAn ID to identify this marker must be provided.\nMarkers currently limited to 20,000 per world.
lst.setmarker = Set a property for a marker.\nThe ID used must be the same as in the Make Marker instruction.
lst.localeprint = Add map locale property value to the text buffer.\nTo set map locale bundles in map editor, check [accent]Map Info > Locale Bundles[].\nIf client is a mobile device, tries to print a property ending in ".mobile" first.
lglobal.false = 0
lglobal.true = 1
lglobal.null = null
lglobal.@pi = The mathematical constant pi (3.141...)
lglobal.@e = The mathematical constant e (2.718...)
lglobal.@degToRad = Multiply by this number to convert degrees to radians
lglobal.@radToDeg = Multiply by this number to convert radians to degrees
lglobal.@time = Playtime of current save, in milliseconds
lglobal.@tick = Playtime of current save, in ticks (1 second = 60 ticks)
lglobal.@second = Playtime of current save, in seconds
lglobal.@minute = Playtime of current save, in minutes
lglobal.@waveNumber = Current wave number, if waves are enabled
lglobal.@waveTime = Countdown timer for waves, in seconds
lglobal.@mapw = Map width in tiles
lglobal.@maph = Map height in tiles
lglobal.sectionMap = Map
lglobal.sectionGeneral = General
lglobal.sectionNetwork = Network/Clientside [World Processor Only]
lglobal.sectionProcessor = Processor
lglobal.sectionLookup = Lookup
lglobal.@this = The logic block executing the code
lglobal.@thisx = X coordinate of block executing the code
lglobal.@thisy = Y coordinate of block executing the code
lglobal.@links = Total number of blocks linked to this processors
lglobal.@ipt = Execution speed of the processor in instructions per tick (60 ticks = 1 second)
lglobal.@unitCount = Total number of types of unit content in the game; used with the lookup instruction
lglobal.@blockCount = Total number of types of block content in the game; used with the lookup instruction
lglobal.@itemCount = Total number of types of item content in the game; used with the lookup instruction
lglobal.@liquidCount = Total number of types of liquid content in the game; used with the lookup instruction
lglobal.@server = True if the code is running on a server or in singleplayer, false otherwise
lglobal.@client = True if the code is running on a client connected to a server
lglobal.@clientLocale = Locale of the client running the code. For example: en_US
lglobal.@clientUnit = Unit of client running the code
lglobal.@clientName = Player name of client running the code
lglobal.@clientTeam = Team ID of client running the code
lglobal.@clientMobile = True is the client running the code is on mobile, false otherwise
logic.nounitbuild = [red]No se permite construir bloques de categoría lógica.
@@ -2474,3 +2514,6 @@ lenum.flushtext = Flush print buffer's content to marker, if applicable.\nIf fet
lenum.texture = Texture name straight from game's texture atlas (using kebab-case naming style).\nIf printFlush is set to true, consumes text buffer content as text argument.
lenum.texturesize = Size of texture in tiles. Zero value scales marker width to original texture's size.
lenum.autoscale = Whether to scale marker corresponding to player's zoom level.
lenum.posi = Indexed position, used for line and quad markers with index zero being the first position.
lenum.uvi = Texture's position ranging from zero to one, used for quad markers.
lenum.colori = Indexed position, used for line and quad markers with index zero being the first color.
+44 -1
View File
@@ -490,6 +490,7 @@ editor.default = [lightgray]<Vaikimisi>
details = Üksikasjad...
edit = Muuda...
variables = Vars
logic.globals = Built-in Variables
editor.name = Nimi:
editor.spawn = Tekita väeüksus
editor.removeunit = Eemalda väeüksus
@@ -665,10 +666,11 @@ objective.destroycore.name = Destroy Core
objective.commandmode.name = Command Mode
objective.flag.name = Flag
marker.shapetext.name = Shape Text
marker.minimap.name = Minimap
marker.point.name = Point
marker.shape.name = Shape
marker.text.name = Text
marker.line.name = Line
marker.quad.name = Quad
marker.background = Background
marker.outline = Outline
objective.research = [accent]Research:\n[]{0}[lightgray]{1}
@@ -752,6 +754,7 @@ sector.missingresources = [scarlet]Insufficient Core Resources
sector.attacked = Sector [accent]{0}[white] under attack!
sector.lost = Sector [accent]{0}[white] lost!
sector.capture = Sector [accent]{0}[white]Captured!
sector.capture.current = Sector Captured!
sector.changeicon = Change Icon
sector.noswitch.title = Unable to Switch Sectors
sector.noswitch = You may not switch sectors while an existing sector is under attack.\n\nSector: [accent]{0}[] on [accent]{1}[]
@@ -1531,6 +1534,7 @@ block.inverted-sorter.name = Inverted Sorter
block.message.name = Sõnum
block.reinforced-message.name = Reinforced Message
block.world-message.name = World Message
block.world-switch.name = World Switch
block.illuminator.name = Illuminator
block.overflow-gate.name = Ülevooluvärav
block.underflow-gate.name = Underflow Gate
@@ -2278,6 +2282,42 @@ lst.sync = Sync a variable across the network.\nOnly invoked 10 times a second a
lst.makemarker = Create a new logic marker in the world.\nAn ID to identify this marker must be provided.\nMarkers currently limited to 20,000 per world.
lst.setmarker = Set a property for a marker.\nThe ID used must be the same as in the Make Marker instruction.
lst.localeprint = Add map locale property value to the text buffer.\nTo set map locale bundles in map editor, check [accent]Map Info > Locale Bundles[].\nIf client is a mobile device, tries to print a property ending in ".mobile" first.
lglobal.false = 0
lglobal.true = 1
lglobal.null = null
lglobal.@pi = The mathematical constant pi (3.141...)
lglobal.@e = The mathematical constant e (2.718...)
lglobal.@degToRad = Multiply by this number to convert degrees to radians
lglobal.@radToDeg = Multiply by this number to convert radians to degrees
lglobal.@time = Playtime of current save, in milliseconds
lglobal.@tick = Playtime of current save, in ticks (1 second = 60 ticks)
lglobal.@second = Playtime of current save, in seconds
lglobal.@minute = Playtime of current save, in minutes
lglobal.@waveNumber = Current wave number, if waves are enabled
lglobal.@waveTime = Countdown timer for waves, in seconds
lglobal.@mapw = Map width in tiles
lglobal.@maph = Map height in tiles
lglobal.sectionMap = Map
lglobal.sectionGeneral = General
lglobal.sectionNetwork = Network/Clientside [World Processor Only]
lglobal.sectionProcessor = Processor
lglobal.sectionLookup = Lookup
lglobal.@this = The logic block executing the code
lglobal.@thisx = X coordinate of block executing the code
lglobal.@thisy = Y coordinate of block executing the code
lglobal.@links = Total number of blocks linked to this processors
lglobal.@ipt = Execution speed of the processor in instructions per tick (60 ticks = 1 second)
lglobal.@unitCount = Total number of types of unit content in the game; used with the lookup instruction
lglobal.@blockCount = Total number of types of block content in the game; used with the lookup instruction
lglobal.@itemCount = Total number of types of item content in the game; used with the lookup instruction
lglobal.@liquidCount = Total number of types of liquid content in the game; used with the lookup instruction
lglobal.@server = True if the code is running on a server or in singleplayer, false otherwise
lglobal.@client = True if the code is running on a client connected to a server
lglobal.@clientLocale = Locale of the client running the code. For example: en_US
lglobal.@clientUnit = Unit of client running the code
lglobal.@clientName = Player name of client running the code
lglobal.@clientTeam = Team ID of client running the code
lglobal.@clientMobile = True is the client running the code is on mobile, false otherwise
logic.nounitbuild = [red]Unit building logic is not allowed here.
lenum.type = Type of building/unit.\ne.g. for any router, this will return [accent]@router[].\nNot a string.
lenum.shoot = Shoot at a position.
@@ -2414,3 +2454,6 @@ lenum.flushtext = Flush print buffer's content to marker, if applicable.\nIf fet
lenum.texture = Texture name straight from game's texture atlas (using kebab-case naming style).\nIf printFlush is set to true, consumes text buffer content as text argument.
lenum.texturesize = Size of texture in tiles. Zero value scales marker width to original texture's size.
lenum.autoscale = Whether to scale marker corresponding to player's zoom level.
lenum.posi = Indexed position, used for line and quad markers with index zero being the first position.
lenum.uvi = Texture's position ranging from zero to one, used for quad markers.
lenum.colori = Indexed position, used for line and quad markers with index zero being the first color.
+44 -1
View File
@@ -492,6 +492,7 @@ editor.default = [lightgray]<Lehenetsia>
details = Xehetasunak...
edit = Editatu...
variables = Vars
logic.globals = Built-in Variables
editor.name = Izena:
editor.spawn = Sortu unitatea
editor.removeunit = Kendu unitatea
@@ -667,10 +668,11 @@ objective.destroycore.name = Destroy Core
objective.commandmode.name = Command Mode
objective.flag.name = Flag
marker.shapetext.name = Shape Text
marker.minimap.name = Minimap
marker.point.name = Point
marker.shape.name = Shape
marker.text.name = Text
marker.line.name = Line
marker.quad.name = Quad
marker.background = Background
marker.outline = Outline
objective.research = [accent]Research:\n[]{0}[lightgray]{1}
@@ -754,6 +756,7 @@ sector.missingresources = [scarlet]Insufficient Core Resources
sector.attacked = Sector [accent]{0}[white] under attack!
sector.lost = Sector [accent]{0}[white] lost!
sector.capture = Sector [accent]{0}[white]Captured!
sector.capture.current = Sector Captured!
sector.changeicon = Change Icon
sector.noswitch.title = Unable to Switch Sectors
sector.noswitch = You may not switch sectors while an existing sector is under attack.\n\nSector: [accent]{0}[] on [accent]{1}[]
@@ -1533,6 +1536,7 @@ block.inverted-sorter.name = Alderantzizko antolatzailea
block.message.name = Mezua
block.reinforced-message.name = Reinforced Message
block.world-message.name = World Message
block.world-switch.name = World Switch
block.illuminator.name = Illuminator
block.overflow-gate.name = Gainezkatze atea
block.underflow-gate.name = Underflow Gate
@@ -2280,6 +2284,42 @@ lst.sync = Sync a variable across the network.\nOnly invoked 10 times a second a
lst.makemarker = Create a new logic marker in the world.\nAn ID to identify this marker must be provided.\nMarkers currently limited to 20,000 per world.
lst.setmarker = Set a property for a marker.\nThe ID used must be the same as in the Make Marker instruction.
lst.localeprint = Add map locale property value to the text buffer.\nTo set map locale bundles in map editor, check [accent]Map Info > Locale Bundles[].\nIf client is a mobile device, tries to print a property ending in ".mobile" first.
lglobal.false = 0
lglobal.true = 1
lglobal.null = null
lglobal.@pi = The mathematical constant pi (3.141...)
lglobal.@e = The mathematical constant e (2.718...)
lglobal.@degToRad = Multiply by this number to convert degrees to radians
lglobal.@radToDeg = Multiply by this number to convert radians to degrees
lglobal.@time = Playtime of current save, in milliseconds
lglobal.@tick = Playtime of current save, in ticks (1 second = 60 ticks)
lglobal.@second = Playtime of current save, in seconds
lglobal.@minute = Playtime of current save, in minutes
lglobal.@waveNumber = Current wave number, if waves are enabled
lglobal.@waveTime = Countdown timer for waves, in seconds
lglobal.@mapw = Map width in tiles
lglobal.@maph = Map height in tiles
lglobal.sectionMap = Map
lglobal.sectionGeneral = General
lglobal.sectionNetwork = Network/Clientside [World Processor Only]
lglobal.sectionProcessor = Processor
lglobal.sectionLookup = Lookup
lglobal.@this = The logic block executing the code
lglobal.@thisx = X coordinate of block executing the code
lglobal.@thisy = Y coordinate of block executing the code
lglobal.@links = Total number of blocks linked to this processors
lglobal.@ipt = Execution speed of the processor in instructions per tick (60 ticks = 1 second)
lglobal.@unitCount = Total number of types of unit content in the game; used with the lookup instruction
lglobal.@blockCount = Total number of types of block content in the game; used with the lookup instruction
lglobal.@itemCount = Total number of types of item content in the game; used with the lookup instruction
lglobal.@liquidCount = Total number of types of liquid content in the game; used with the lookup instruction
lglobal.@server = True if the code is running on a server or in singleplayer, false otherwise
lglobal.@client = True if the code is running on a client connected to a server
lglobal.@clientLocale = Locale of the client running the code. For example: en_US
lglobal.@clientUnit = Unit of client running the code
lglobal.@clientName = Player name of client running the code
lglobal.@clientTeam = Team ID of client running the code
lglobal.@clientMobile = True is the client running the code is on mobile, false otherwise
logic.nounitbuild = [red]Unit building logic is not allowed here.
lenum.type = Type of building/unit.\ne.g. for any router, this will return [accent]@router[].\nNot a string.
lenum.shoot = Shoot at a position.
@@ -2416,3 +2456,6 @@ lenum.flushtext = Flush print buffer's content to marker, if applicable.\nIf fet
lenum.texture = Texture name straight from game's texture atlas (using kebab-case naming style).\nIf printFlush is set to true, consumes text buffer content as text argument.
lenum.texturesize = Size of texture in tiles. Zero value scales marker width to original texture's size.
lenum.autoscale = Whether to scale marker corresponding to player's zoom level.
lenum.posi = Indexed position, used for line and quad markers with index zero being the first position.
lenum.uvi = Texture's position ranging from zero to one, used for quad markers.
lenum.colori = Indexed position, used for line and quad markers with index zero being the first color.
+44 -1
View File
@@ -490,6 +490,7 @@ editor.default = [lightgray]<Oletus>
details = Yksityiskohdat...
edit = Muokkaa...
variables = Muuttujat
logic.globals = Built-in Variables
editor.name = Nimi:
editor.spawn = Luo yksikkö
editor.removeunit = Poista yksikkö
@@ -665,10 +666,11 @@ objective.destroycore.name = Destroy Core
objective.commandmode.name = Command Mode
objective.flag.name = Flag
marker.shapetext.name = Shape Text
marker.minimap.name = Pikkukartta
marker.point.name = Point
marker.shape.name = Shape
marker.text.name = Teksti
marker.line.name = Line
marker.quad.name = Quad
marker.background = Background
marker.outline = Outline
objective.research = [accent]Tutki:\n[]{0}[lightgray]{1}
@@ -752,6 +754,7 @@ sector.missingresources = [scarlet]Sinulla ei ole tarpeeksi resursseja.
sector.attacked = Sektori [accent]{0}[white] on hyökkäyksen kohteena!
sector.lost = Sektori [accent]{0}[white] menetetty!
sector.capture = Sector [accent]{0}[white]Captured!
sector.capture.current = Sector Captured!
sector.changeicon = Vaihda kuvaketta
sector.noswitch.title = Sektoria ei voida vaihtaa
sector.noswitch = Et voi vaihtaa sektoria, kun olemassaoleva sektori on hyökkäyksen kohteena.\n\nSektori: [accent]{0}[] planeetalla [accent]{1}[]
@@ -1532,6 +1535,7 @@ block.inverted-sorter.name = Käänteinen Lajittelija
block.message.name = Viesti
block.reinforced-message.name = Reinforced Message
block.world-message.name = World Message
block.world-switch.name = World Switch
block.illuminator.name = Lamppu
block.overflow-gate.name = Ylivuotoportti
block.underflow-gate.name = Alivuotoportti
@@ -2281,6 +2285,42 @@ lst.sync = Sync a variable across the network.\nOnly invoked 10 times a second a
lst.makemarker = Create a new logic marker in the world.\nAn ID to identify this marker must be provided.\nMarkers currently limited to 20,000 per world.
lst.setmarker = Set a property for a marker.\nThe ID used must be the same as in the Make Marker instruction.
lst.localeprint = Add map locale property value to the text buffer.\nTo set map locale bundles in map editor, check [accent]Map Info > Locale Bundles[].\nIf client is a mobile device, tries to print a property ending in ".mobile" first.
lglobal.false = 0
lglobal.true = 1
lglobal.null = null
lglobal.@pi = The mathematical constant pi (3.141...)
lglobal.@e = The mathematical constant e (2.718...)
lglobal.@degToRad = Multiply by this number to convert degrees to radians
lglobal.@radToDeg = Multiply by this number to convert radians to degrees
lglobal.@time = Playtime of current save, in milliseconds
lglobal.@tick = Playtime of current save, in ticks (1 second = 60 ticks)
lglobal.@second = Playtime of current save, in seconds
lglobal.@minute = Playtime of current save, in minutes
lglobal.@waveNumber = Current wave number, if waves are enabled
lglobal.@waveTime = Countdown timer for waves, in seconds
lglobal.@mapw = Map width in tiles
lglobal.@maph = Map height in tiles
lglobal.sectionMap = Map
lglobal.sectionGeneral = General
lglobal.sectionNetwork = Network/Clientside [World Processor Only]
lglobal.sectionProcessor = Processor
lglobal.sectionLookup = Lookup
lglobal.@this = The logic block executing the code
lglobal.@thisx = X coordinate of block executing the code
lglobal.@thisy = Y coordinate of block executing the code
lglobal.@links = Total number of blocks linked to this processors
lglobal.@ipt = Execution speed of the processor in instructions per tick (60 ticks = 1 second)
lglobal.@unitCount = Total number of types of unit content in the game; used with the lookup instruction
lglobal.@blockCount = Total number of types of block content in the game; used with the lookup instruction
lglobal.@itemCount = Total number of types of item content in the game; used with the lookup instruction
lglobal.@liquidCount = Total number of types of liquid content in the game; used with the lookup instruction
lglobal.@server = True if the code is running on a server or in singleplayer, false otherwise
lglobal.@client = True if the code is running on a client connected to a server
lglobal.@clientLocale = Locale of the client running the code. For example: en_US
lglobal.@clientUnit = Unit of client running the code
lglobal.@clientName = Player name of client running the code
lglobal.@clientTeam = Team ID of client running the code
lglobal.@clientMobile = True is the client running the code is on mobile, false otherwise
logic.nounitbuild = [red]Logiikan käyttö ei täällä ole sallittu yksikköjen tuottamisessa.
lenum.type = Rakennuksen/Yksikön tyyppi.\nEsim. jokaisesta reitittimestä tämä palauttaa [accent]@router[].\nEi ole merkkijono.
lenum.shoot = Ammu tiettyä sijaintia.
@@ -2417,3 +2457,6 @@ lenum.flushtext = Flush print buffer's content to marker, if applicable.\nIf fet
lenum.texture = Texture name straight from game's texture atlas (using kebab-case naming style).\nIf printFlush is set to true, consumes text buffer content as text argument.
lenum.texturesize = Size of texture in tiles. Zero value scales marker width to original texture's size.
lenum.autoscale = Whether to scale marker corresponding to player's zoom level.
lenum.posi = Indexed position, used for line and quad markers with index zero being the first position.
lenum.uvi = Texture's position ranging from zero to one, used for quad markers.
lenum.colori = Indexed position, used for line and quad markers with index zero being the first color.
+44 -1
View File
@@ -490,6 +490,7 @@ editor.default = [lightgray]<Default>
details = Details...
edit = Edit...
variables = Vars
logic.globals = Built-in Variables
editor.name = Name:
editor.spawn = Spawn Unit
editor.removeunit = Remove Unit
@@ -665,10 +666,11 @@ objective.destroycore.name = Destroy Core
objective.commandmode.name = Command Mode
objective.flag.name = Flag
marker.shapetext.name = Shape Text
marker.minimap.name = Minimap
marker.point.name = Point
marker.shape.name = Shape
marker.text.name = Text
marker.line.name = Line
marker.quad.name = Quad
marker.background = Background
marker.outline = Outline
objective.research = [accent]Research:\n[]{0}[lightgray]{1}
@@ -752,6 +754,7 @@ sector.missingresources = [scarlet]Kulang ang mga Core Resources
sector.attacked = Ang sector [accent]{0}[white] ay inaatake!
sector.lost = Ang sector [accent]{0}[white] ay nawala!
sector.capture = Sector [accent]{0}[white]Captured!
sector.capture.current = Sector Captured!
sector.changeicon = Change Icon
sector.noswitch.title = Unable to Switch Sectors
sector.noswitch = You may not switch sectors while an existing sector is under attack.\n\nSector: [accent]{0}[] on [accent]{1}[]
@@ -1530,6 +1533,7 @@ block.inverted-sorter.name = Inverted Sorter
block.message.name = Message
block.reinforced-message.name = Reinforced Message
block.world-message.name = World Message
block.world-switch.name = World Switch
block.illuminator.name = Illuminator
block.overflow-gate.name = Overflow Gate
block.underflow-gate.name = Underflow Gate
@@ -2277,6 +2281,42 @@ lst.sync = Sync a variable across the network.\nOnly invoked 10 times a second a
lst.makemarker = Create a new logic marker in the world.\nAn ID to identify this marker must be provided.\nMarkers currently limited to 20,000 per world.
lst.setmarker = Set a property for a marker.\nThe ID used must be the same as in the Make Marker instruction.
lst.localeprint = Add map locale property value to the text buffer.\nTo set map locale bundles in map editor, check [accent]Map Info > Locale Bundles[].\nIf client is a mobile device, tries to print a property ending in ".mobile" first.
lglobal.false = 0
lglobal.true = 1
lglobal.null = null
lglobal.@pi = The mathematical constant pi (3.141...)
lglobal.@e = The mathematical constant e (2.718...)
lglobal.@degToRad = Multiply by this number to convert degrees to radians
lglobal.@radToDeg = Multiply by this number to convert radians to degrees
lglobal.@time = Playtime of current save, in milliseconds
lglobal.@tick = Playtime of current save, in ticks (1 second = 60 ticks)
lglobal.@second = Playtime of current save, in seconds
lglobal.@minute = Playtime of current save, in minutes
lglobal.@waveNumber = Current wave number, if waves are enabled
lglobal.@waveTime = Countdown timer for waves, in seconds
lglobal.@mapw = Map width in tiles
lglobal.@maph = Map height in tiles
lglobal.sectionMap = Map
lglobal.sectionGeneral = General
lglobal.sectionNetwork = Network/Clientside [World Processor Only]
lglobal.sectionProcessor = Processor
lglobal.sectionLookup = Lookup
lglobal.@this = The logic block executing the code
lglobal.@thisx = X coordinate of block executing the code
lglobal.@thisy = Y coordinate of block executing the code
lglobal.@links = Total number of blocks linked to this processors
lglobal.@ipt = Execution speed of the processor in instructions per tick (60 ticks = 1 second)
lglobal.@unitCount = Total number of types of unit content in the game; used with the lookup instruction
lglobal.@blockCount = Total number of types of block content in the game; used with the lookup instruction
lglobal.@itemCount = Total number of types of item content in the game; used with the lookup instruction
lglobal.@liquidCount = Total number of types of liquid content in the game; used with the lookup instruction
lglobal.@server = True if the code is running on a server or in singleplayer, false otherwise
lglobal.@client = True if the code is running on a client connected to a server
lglobal.@clientLocale = Locale of the client running the code. For example: en_US
lglobal.@clientUnit = Unit of client running the code
lglobal.@clientName = Player name of client running the code
lglobal.@clientTeam = Team ID of client running the code
lglobal.@clientMobile = True is the client running the code is on mobile, false otherwise
logic.nounitbuild = [red]Unit building logic is not allowed here.
lenum.type = Type of building/unit.\ne.g. for any router, this will return [accent]@router[].\nNot a string.
lenum.shoot = Shoot at a position.
@@ -2413,3 +2453,6 @@ lenum.flushtext = Flush print buffer's content to marker, if applicable.\nIf fet
lenum.texture = Texture name straight from game's texture atlas (using kebab-case naming style).\nIf printFlush is set to true, consumes text buffer content as text argument.
lenum.texturesize = Size of texture in tiles. Zero value scales marker width to original texture's size.
lenum.autoscale = Whether to scale marker corresponding to player's zoom level.
lenum.posi = Indexed position, used for line and quad markers with index zero being the first position.
lenum.uvi = Texture's position ranging from zero to one, used for quad markers.
lenum.colori = Indexed position, used for line and quad markers with index zero being the first color.
+44 -1
View File
@@ -501,6 +501,7 @@ editor.default = [lightgray]<par défaut>
details = Détails...
edit = Modifier...
variables = Variables
logic.globals = Built-in Variables
editor.name = Nom :
editor.spawn = Ajouter une unité
editor.removeunit = Retirer l'unité
@@ -681,10 +682,11 @@ objective.commandmode.name = Mode « Commande »
objective.flag.name = Drapeau
marker.shapetext.name = Forme de Texte
marker.minimap.name = Minicarte
marker.point.name = Point
marker.shape.name = Forme
marker.text.name = Texte
marker.line.name = Ligne
marker.quad.name = Quad
marker.background = Fond
marker.outline = Contour
@@ -773,6 +775,7 @@ sector.missingresources = [scarlet]Ressources du Noyau insuffisantes !
sector.attacked = Secteur [accent]{0}[white] attaqué !
sector.lost = Secteur [accent]{0}[white] perdu !
sector.capture = Sector [accent]{0}[white]Captured!
sector.capture.current = Sector Captured!
sector.changeicon = Changer l'Icône
sector.noswitch.title = Impossible de changer de Secteur
sector.noswitch = Vous ne pouvez pas changer de secteur pendant 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.reinforced-message.name = Bloc de Message Renforcé
block.world-message.name = Bloc de Message Global
block.world-switch.name = World Switch
block.illuminator.name = Illuminateur
block.overflow-gate.name = Barrière de Débordement
block.underflow-gate.name = Barrière de Refoulement
@@ -2326,6 +2330,42 @@ lst.sync = Synchronise une variable dans le réseau.\nLimité à 20 fois par sec
lst.makemarker = Crée un marqueur dans le monde.\nUn ID pour identifier le marqueur doit être donné.\nLes marqueurs sont limités à 20,000 par monde.
lst.setmarker = Change une propriété d'un marqueur.\nL'ID utilisé doit être le même que celui de l'instruction "Make Marker".
lst.localeprint = Add map locale property value to the text buffer.\nTo set map locale bundles in map editor, check [accent]Map Info > Locale Bundles[].\nIf client is a mobile device, tries to print a property ending in ".mobile" first.
lglobal.false = 0
lglobal.true = 1
lglobal.null = null
lglobal.@pi = The mathematical constant pi (3.141...)
lglobal.@e = The mathematical constant e (2.718...)
lglobal.@degToRad = Multiply by this number to convert degrees to radians
lglobal.@radToDeg = Multiply by this number to convert radians to degrees
lglobal.@time = Playtime of current save, in milliseconds
lglobal.@tick = Playtime of current save, in ticks (1 second = 60 ticks)
lglobal.@second = Playtime of current save, in seconds
lglobal.@minute = Playtime of current save, in minutes
lglobal.@waveNumber = Current wave number, if waves are enabled
lglobal.@waveTime = Countdown timer for waves, in seconds
lglobal.@mapw = Map width in tiles
lglobal.@maph = Map height in tiles
lglobal.sectionMap = Map
lglobal.sectionGeneral = General
lglobal.sectionNetwork = Network/Clientside [World Processor Only]
lglobal.sectionProcessor = Processor
lglobal.sectionLookup = Lookup
lglobal.@this = The logic block executing the code
lglobal.@thisx = X coordinate of block executing the code
lglobal.@thisy = Y coordinate of block executing the code
lglobal.@links = Total number of blocks linked to this processors
lglobal.@ipt = Execution speed of the processor in instructions per tick (60 ticks = 1 second)
lglobal.@unitCount = Total number of types of unit content in the game; used with the lookup instruction
lglobal.@blockCount = Total number of types of block content in the game; used with the lookup instruction
lglobal.@itemCount = Total number of types of item content in the game; used with the lookup instruction
lglobal.@liquidCount = Total number of types of liquid content in the game; used with the lookup instruction
lglobal.@server = True if the code is running on a server or in singleplayer, false otherwise
lglobal.@client = True if the code is running on a client connected to a server
lglobal.@clientLocale = Locale of the client running the code. For example: en_US
lglobal.@clientUnit = Unit of client running the code
lglobal.@clientName = Player name of client running the code
lglobal.@clientTeam = Team ID of client running the code
lglobal.@clientMobile = True is the client running the code is on mobile, false otherwise
logic.nounitbuild = [red]Les unités contrôlées par des processeurs ne peuvent pas construire ici.
@@ -2482,3 +2522,6 @@ lenum.flushtext = Flush print buffer's content to marker, if applicable.\nIf fet
lenum.texture = Texture name straight from game's texture atlas (using kebab-case naming style).\nIf printFlush is set to true, consumes text buffer content as text argument.
lenum.texturesize = Size of texture in tiles. Zero value scales marker width to original texture's size.
lenum.autoscale = Whether to scale marker corresponding to player's zoom level.
lenum.posi = Indexed position, used for line and quad markers with index zero being the first position.
lenum.uvi = Texture's position ranging from zero to one, used for quad markers.
lenum.colori = Indexed position, used for line and quad markers with index zero being the first color.
File diff suppressed because it is too large Load Diff
+44 -1
View File
@@ -495,6 +495,7 @@ editor.default = [lightgray]<Standar>
details = Detail...
edit = Sunting...
variables = Vars
logic.globals = Built-in Variables
editor.name = Nama:
editor.spawn = Munculkan Unit
editor.removeunit = Hapus Unit
@@ -675,10 +676,11 @@ objective.commandmode.name = Mode Perintah
objective.flag.name = Bendera
marker.shapetext.name = Teks Berbentuk
marker.minimap.name = Peta Kecil
marker.point.name = Point
marker.shape.name = Bentuk
marker.text.name = Teks
marker.line.name = Line
marker.quad.name = Quad
marker.background = Latar Belakang
marker.outline = Garis Luar
@@ -766,6 +768,7 @@ sector.missingresources = [scarlet]Sumber Daya Inti Tidak Cukup
sector.attacked = Sektor [accent]{0}[white] sedang diserang!
sector.lost = Sektor [accent]{0}[white] telah dihancurkan!
sector.capture = Sector [accent]{0}[white]Captured!
sector.capture.current = Sector Captured!
sector.changeicon = Ubah Ikon
sector.noswitch.title = Tidak Dapat beralih Sektor
sector.noswitch = Andak tidak boleh berpindah sektor jika salah satu sektor terkena serangan.\nSektor: [accent]{0}[] di [accent]{1}[]
@@ -1553,6 +1556,7 @@ block.inverted-sorter.name = Penyortir Terbalik
block.message.name = Pesan
block.reinforced-message.name = Reinforced Message
block.world-message.name = World Message
block.world-switch.name = World Switch
block.illuminator.name = Lampu
block.overflow-gate.name = Gerbang Luap
block.underflow-gate.name = Gerbang Luap Terbalik
@@ -2316,6 +2320,42 @@ lst.sync = Sync a variable across the network.\nOnly invoked 10 times a second a
lst.makemarker = Create a new logic marker in the world.\nAn ID to identify this marker must be provided.\nMarkers currently limited to 20,000 per world.
lst.setmarker = Set a property for a marker.\nThe ID used must be the same as in the Make Marker instruction.
lst.localeprint = Add map locale property value to the text buffer.\nTo set map locale bundles in map editor, check [accent]Map Info > Locale Bundles[].\nIf client is a mobile device, tries to print a property ending in ".mobile" first.
lglobal.false = 0
lglobal.true = 1
lglobal.null = null
lglobal.@pi = The mathematical constant pi (3.141...)
lglobal.@e = The mathematical constant e (2.718...)
lglobal.@degToRad = Multiply by this number to convert degrees to radians
lglobal.@radToDeg = Multiply by this number to convert radians to degrees
lglobal.@time = Playtime of current save, in milliseconds
lglobal.@tick = Playtime of current save, in ticks (1 second = 60 ticks)
lglobal.@second = Playtime of current save, in seconds
lglobal.@minute = Playtime of current save, in minutes
lglobal.@waveNumber = Current wave number, if waves are enabled
lglobal.@waveTime = Countdown timer for waves, in seconds
lglobal.@mapw = Map width in tiles
lglobal.@maph = Map height in tiles
lglobal.sectionMap = Map
lglobal.sectionGeneral = General
lglobal.sectionNetwork = Network/Clientside [World Processor Only]
lglobal.sectionProcessor = Processor
lglobal.sectionLookup = Lookup
lglobal.@this = The logic block executing the code
lglobal.@thisx = X coordinate of block executing the code
lglobal.@thisy = Y coordinate of block executing the code
lglobal.@links = Total number of blocks linked to this processors
lglobal.@ipt = Execution speed of the processor in instructions per tick (60 ticks = 1 second)
lglobal.@unitCount = Total number of types of unit content in the game; used with the lookup instruction
lglobal.@blockCount = Total number of types of block content in the game; used with the lookup instruction
lglobal.@itemCount = Total number of types of item content in the game; used with the lookup instruction
lglobal.@liquidCount = Total number of types of liquid content in the game; used with the lookup instruction
lglobal.@server = True if the code is running on a server or in singleplayer, false otherwise
lglobal.@client = True if the code is running on a client connected to a server
lglobal.@clientLocale = Locale of the client running the code. For example: en_US
lglobal.@clientUnit = Unit of client running the code
lglobal.@clientName = Player name of client running the code
lglobal.@clientTeam = Team ID of client running the code
lglobal.@clientMobile = True is the client running the code is on mobile, false otherwise
logic.nounitbuild = [red]Logika unit membangun tidak diperbolehkan di sini.
@@ -2472,3 +2512,6 @@ lenum.flushtext = Flush print buffer's content to marker, if applicable.\nIf fet
lenum.texture = Texture name straight from game's texture atlas (using kebab-case naming style).\nIf printFlush is set to true, consumes text buffer content as text argument.
lenum.texturesize = Size of texture in tiles. Zero value scales marker width to original texture's size.
lenum.autoscale = Whether to scale marker corresponding to player's zoom level.
lenum.posi = Indexed position, used for line and quad markers with index zero being the first position.
lenum.uvi = Texture's position ranging from zero to one, used for quad markers.
lenum.colori = Indexed position, used for line and quad markers with index zero being the first color.
+44 -1
View File
@@ -493,6 +493,7 @@ editor.default = [lightgray]<Predefinito>
details = Dettagli...
edit = Modifica...
variables = Vars
logic.globals = Built-in Variables
editor.name = Nome:
editor.spawn = Piazza un'Unità
editor.removeunit = Rimuovi un'Unità
@@ -668,10 +669,11 @@ objective.destroycore.name = Distruggi nuclei
objective.commandmode.name = Modalità comando
objective.flag.name = Flag
marker.shapetext.name = Shape Text
marker.minimap.name = Minimappa
marker.point.name = Point
marker.shape.name = Forma
marker.text.name = Testo
marker.line.name = Line
marker.quad.name = Quad
marker.background = Sfondo
marker.outline = Outline
objective.research = [accent]Ricerca:\n[]{0}[lightgray]{1}
@@ -756,6 +758,7 @@ sector.missingresources = [scarlet]Risorse del Nucleo Insufficienti
sector.attacked = Settore [accent]{0}[white] sotto attacco!
sector.lost = Settore [accent]{0}[white] perso!
sector.capture = Sector [accent]{0}[white]Captured!
sector.capture.current = Sector Captured!
sector.changeicon = Cambia icona
sector.noswitch.title = Impossibile cambiare settore
sector.noswitch = Non puoi cambiare settore mentre sei sotto attacco.\n\nSectore: [accent]{0}[] on [accent]{1}[]
@@ -1541,6 +1544,7 @@ block.inverted-sorter.name = Filtro Inverso
block.message.name = Messaggio
block.reinforced-message.name = Reinforced Message
block.world-message.name = World Message
block.world-switch.name = World Switch
block.illuminator.name = Lanterna
block.overflow-gate.name = Separatore per Eccesso
block.underflow-gate.name = Separatore per Eccesso Inverso
@@ -2290,6 +2294,42 @@ lst.sync = Sync a variable across the network.\nOnly invoked 10 times a second a
lst.makemarker = Create a new logic marker in the world.\nAn ID to identify this marker must be provided.\nMarkers currently limited to 20,000 per world.
lst.setmarker = Set a property for a marker.\nThe ID used must be the same as in the Make Marker instruction.
lst.localeprint = Add map locale property value to the text buffer.\nTo set map locale bundles in map editor, check [accent]Map Info > Locale Bundles[].\nIf client is a mobile device, tries to print a property ending in ".mobile" first.
lglobal.false = 0
lglobal.true = 1
lglobal.null = null
lglobal.@pi = The mathematical constant pi (3.141...)
lglobal.@e = The mathematical constant e (2.718...)
lglobal.@degToRad = Multiply by this number to convert degrees to radians
lglobal.@radToDeg = Multiply by this number to convert radians to degrees
lglobal.@time = Playtime of current save, in milliseconds
lglobal.@tick = Playtime of current save, in ticks (1 second = 60 ticks)
lglobal.@second = Playtime of current save, in seconds
lglobal.@minute = Playtime of current save, in minutes
lglobal.@waveNumber = Current wave number, if waves are enabled
lglobal.@waveTime = Countdown timer for waves, in seconds
lglobal.@mapw = Map width in tiles
lglobal.@maph = Map height in tiles
lglobal.sectionMap = Map
lglobal.sectionGeneral = General
lglobal.sectionNetwork = Network/Clientside [World Processor Only]
lglobal.sectionProcessor = Processor
lglobal.sectionLookup = Lookup
lglobal.@this = The logic block executing the code
lglobal.@thisx = X coordinate of block executing the code
lglobal.@thisy = Y coordinate of block executing the code
lglobal.@links = Total number of blocks linked to this processors
lglobal.@ipt = Execution speed of the processor in instructions per tick (60 ticks = 1 second)
lglobal.@unitCount = Total number of types of unit content in the game; used with the lookup instruction
lglobal.@blockCount = Total number of types of block content in the game; used with the lookup instruction
lglobal.@itemCount = Total number of types of item content in the game; used with the lookup instruction
lglobal.@liquidCount = Total number of types of liquid content in the game; used with the lookup instruction
lglobal.@server = True if the code is running on a server or in singleplayer, false otherwise
lglobal.@client = True if the code is running on a client connected to a server
lglobal.@clientLocale = Locale of the client running the code. For example: en_US
lglobal.@clientUnit = Unit of client running the code
lglobal.@clientName = Player name of client running the code
lglobal.@clientTeam = Team ID of client running the code
lglobal.@clientMobile = True is the client running the code is on mobile, false otherwise
logic.nounitbuild = [red]Unit building logic is not allowed here.
lenum.type = Type of building/unit.\ne.g. for any router, this will return [accent]@router[].\nNot a string.
lenum.shoot = Shoot at a position.
@@ -2426,3 +2466,6 @@ lenum.flushtext = Flush print buffer's content to marker, if applicable.\nIf fet
lenum.texture = Texture name straight from game's texture atlas (using kebab-case naming style).\nIf printFlush is set to true, consumes text buffer content as text argument.
lenum.texturesize = Size of texture in tiles. Zero value scales marker width to original texture's size.
lenum.autoscale = Whether to scale marker corresponding to player's zoom level.
lenum.posi = Indexed position, used for line and quad markers with index zero being the first position.
lenum.uvi = Texture's position ranging from zero to one, used for quad markers.
lenum.colori = Indexed position, used for line and quad markers with index zero being the first color.
+44 -1
View File
@@ -495,6 +495,7 @@ editor.default = [lightgray]<デフォルト>
details = 詳細...
edit = 編集...
variables = 変数
logic.globals = Built-in Variables
editor.name = 名前:
editor.spawn = ユニットを出す
editor.removeunit = ユニットを消す
@@ -672,10 +673,11 @@ objective.destroycore.name = コアを破壊する
objective.commandmode.name = コマンドモード
objective.flag.name = フラグ
marker.shapetext.name = テキストの形
marker.minimap.name = ミニマップ
marker.point.name = Point
marker.shape.name = 図形
marker.text.name = 文章
marker.line.name = Line
marker.quad.name = Quad
marker.background = 背景
marker.outline = 輪郭
objective.research = [accent]Research:\n[]{0}[lightgray]{1}
@@ -760,6 +762,7 @@ sector.missingresources = [scarlet]資源が足りません
sector.attacked = セクター [accent]{0}[white] が攻撃を受けています!
sector.lost = セクター [accent]{0}[white] 喪失!
sector.capture = Sector [accent]{0}[white]Captured!
sector.capture.current = Sector Captured!
sector.changeicon = アイコンを変更
sector.noswitch.title = セクターを切り替えることができません
sector.noswitch = 既存のセクターが攻撃を受けている間は、セクターを切り替えることはできません。\n\nセクター: [accent]{0}[] on [accent]{1}[]
@@ -1544,6 +1547,7 @@ block.inverted-sorter.name = 反転ソーター
block.message.name = メッセージブロック
block.reinforced-message.name = 強化されたメッセージブロック
block.world-message.name = ワールドメッセージブロック
block.world-switch.name = World Switch
block.illuminator.name = イルミネーター
block.overflow-gate.name = オーバーフローゲート
block.underflow-gate.name = アンダーフローゲート
@@ -2294,6 +2298,42 @@ lst.sync = Sync a variable across the network.\nOnly invoked 10 times a second a
lst.makemarker = Create a new logic marker in the world.\nAn ID to identify this marker must be provided.\nMarkers currently limited to 20,000 per world.
lst.setmarker = Set a property for a marker.\nThe ID used must be the same as in the Make Marker instruction.
lst.localeprint = Add map locale property value to the text buffer.\nTo set map locale bundles in map editor, check [accent]Map Info > Locale Bundles[].\nIf client is a mobile device, tries to print a property ending in ".mobile" first.
lglobal.false = 0
lglobal.true = 1
lglobal.null = null
lglobal.@pi = The mathematical constant pi (3.141...)
lglobal.@e = The mathematical constant e (2.718...)
lglobal.@degToRad = Multiply by this number to convert degrees to radians
lglobal.@radToDeg = Multiply by this number to convert radians to degrees
lglobal.@time = Playtime of current save, in milliseconds
lglobal.@tick = Playtime of current save, in ticks (1 second = 60 ticks)
lglobal.@second = Playtime of current save, in seconds
lglobal.@minute = Playtime of current save, in minutes
lglobal.@waveNumber = Current wave number, if waves are enabled
lglobal.@waveTime = Countdown timer for waves, in seconds
lglobal.@mapw = Map width in tiles
lglobal.@maph = Map height in tiles
lglobal.sectionMap = Map
lglobal.sectionGeneral = General
lglobal.sectionNetwork = Network/Clientside [World Processor Only]
lglobal.sectionProcessor = Processor
lglobal.sectionLookup = Lookup
lglobal.@this = The logic block executing the code
lglobal.@thisx = X coordinate of block executing the code
lglobal.@thisy = Y coordinate of block executing the code
lglobal.@links = Total number of blocks linked to this processors
lglobal.@ipt = Execution speed of the processor in instructions per tick (60 ticks = 1 second)
lglobal.@unitCount = Total number of types of unit content in the game; used with the lookup instruction
lglobal.@blockCount = Total number of types of block content in the game; used with the lookup instruction
lglobal.@itemCount = Total number of types of item content in the game; used with the lookup instruction
lglobal.@liquidCount = Total number of types of liquid content in the game; used with the lookup instruction
lglobal.@server = True if the code is running on a server or in singleplayer, false otherwise
lglobal.@client = True if the code is running on a client connected to a server
lglobal.@clientLocale = Locale of the client running the code. For example: en_US
lglobal.@clientUnit = Unit of client running the code
lglobal.@clientName = Player name of client running the code
lglobal.@clientTeam = Team ID of client running the code
lglobal.@clientMobile = True is the client running the code is on mobile, false otherwise
logic.nounitbuild = [red]ここではユニット構築ロジックは使用できません。
lenum.type = ユニットや建物の種類を取得します。\n例:任意のルーターに対して、 [accent]@router[] を返します。\n文字列ではありません。
lenum.shoot = 指定した座標に向かって撃ちます。
@@ -2430,3 +2470,6 @@ lenum.flushtext = Flush print buffer's content to marker, if applicable.\nIf fet
lenum.texture = Texture name straight from game's texture atlas (using kebab-case naming style).\nIf printFlush is set to true, consumes text buffer content as text argument.
lenum.texturesize = Size of texture in tiles. Zero value scales marker width to original texture's size.
lenum.autoscale = Whether to scale marker corresponding to player's zoom level.
lenum.posi = Indexed position, used for line and quad markers with index zero being the first position.
lenum.uvi = Texture's position ranging from zero to one, used for quad markers.
lenum.colori = Indexed position, used for line and quad markers with index zero being the first color.
+44 -1
View File
@@ -494,6 +494,7 @@ editor.default = [lightgray]<기본값>
details = 설명...
edit = 편집...
variables = 변수
logic.globals = Built-in Variables
editor.name = 이름:
editor.spawn = 기체 생성
editor.removeunit = 기체 삭제
@@ -672,10 +673,11 @@ objective.destroycore.name = 코어 파괴
objective.commandmode.name = 명령 모드
objective.flag.name = 플래그
marker.shapetext.name = 도형과 문자
marker.minimap.name = 미니맵
marker.point.name = Point
marker.shape.name = 도형
marker.text.name = 문자
marker.line.name = Line
marker.quad.name = Quad
marker.background = 배경
marker.outline = 외곽선
@@ -761,6 +763,7 @@ sector.missingresources = [scarlet]코어 자원 부족[]
sector.attacked = [accent]{0}[white] 지역이 공격받고 있습니다![]
sector.lost = [accent]{0}[white] 지역을 잃었습니다![]
sector.capture = Sector [accent]{0}[white]Captured!
sector.capture.current = Sector Captured!
sector.changeicon = 아이콘 바꾸기
sector.noswitch.title = 지역 전환 불가능
sector.noswitch = 기존 지역이 공격받는 동안은 지역을 전환할 수 없습니다.\n\n지역: [accent]{0}[] 중 [accent]{1}[]
@@ -1543,6 +1546,7 @@ block.inverted-sorter.name = 반전 필터
block.message.name = 메모 블록
block.reinforced-message.name = 보강된 메모 블록
block.world-message.name = 월드 메모 블록
block.world-switch.name = World Switch
block.illuminator.name = 조명
block.overflow-gate.name = 포화 필터
block.underflow-gate.name = 불포화 필터
@@ -2293,6 +2297,42 @@ lst.sync = Sync a variable across the network.\nOnly invoked 10 times a second a
lst.makemarker = Create a new logic marker in the world.\nAn ID to identify this marker must be provided.\nMarkers currently limited to 20,000 per world.
lst.setmarker = Set a property for a marker.\nThe ID used must be the same as in the Make Marker instruction.
lst.localeprint = Add map locale property value to the text buffer.\nTo set map locale bundles in map editor, check [accent]Map Info > Locale Bundles[].\nIf client is a mobile device, tries to print a property ending in ".mobile" first.
lglobal.false = 0
lglobal.true = 1
lglobal.null = null
lglobal.@pi = The mathematical constant pi (3.141...)
lglobal.@e = The mathematical constant e (2.718...)
lglobal.@degToRad = Multiply by this number to convert degrees to radians
lglobal.@radToDeg = Multiply by this number to convert radians to degrees
lglobal.@time = Playtime of current save, in milliseconds
lglobal.@tick = Playtime of current save, in ticks (1 second = 60 ticks)
lglobal.@second = Playtime of current save, in seconds
lglobal.@minute = Playtime of current save, in minutes
lglobal.@waveNumber = Current wave number, if waves are enabled
lglobal.@waveTime = Countdown timer for waves, in seconds
lglobal.@mapw = Map width in tiles
lglobal.@maph = Map height in tiles
lglobal.sectionMap = Map
lglobal.sectionGeneral = General
lglobal.sectionNetwork = Network/Clientside [World Processor Only]
lglobal.sectionProcessor = Processor
lglobal.sectionLookup = Lookup
lglobal.@this = The logic block executing the code
lglobal.@thisx = X coordinate of block executing the code
lglobal.@thisy = Y coordinate of block executing the code
lglobal.@links = Total number of blocks linked to this processors
lglobal.@ipt = Execution speed of the processor in instructions per tick (60 ticks = 1 second)
lglobal.@unitCount = Total number of types of unit content in the game; used with the lookup instruction
lglobal.@blockCount = Total number of types of block content in the game; used with the lookup instruction
lglobal.@itemCount = Total number of types of item content in the game; used with the lookup instruction
lglobal.@liquidCount = Total number of types of liquid content in the game; used with the lookup instruction
lglobal.@server = True if the code is running on a server or in singleplayer, false otherwise
lglobal.@client = True if the code is running on a client connected to a server
lglobal.@clientLocale = Locale of the client running the code. For example: en_US
lglobal.@clientUnit = Unit of client running the code
lglobal.@clientName = Player name of client running the code
lglobal.@clientTeam = Team ID of client running the code
lglobal.@clientMobile = True is the client running the code is on mobile, false otherwise
logic.nounitbuild = [red]기체의 건설 로직은 여기서 허용되지 않습니다.
@@ -2448,3 +2488,6 @@ lenum.flushtext = Flush print buffer's content to marker, if applicable.\nIf fet
lenum.texture = Texture name straight from game's texture atlas (using kebab-case naming style).\nIf printFlush is set to true, consumes text buffer content as text argument.
lenum.texturesize = Size of texture in tiles. Zero value scales marker width to original texture's size.
lenum.autoscale = Whether to scale marker corresponding to player's zoom level.
lenum.posi = Indexed position, used for line and quad markers with index zero being the first position.
lenum.uvi = Texture's position ranging from zero to one, used for quad markers.
lenum.colori = Indexed position, used for line and quad markers with index zero being the first color.
+44 -1
View File
@@ -490,6 +490,7 @@ editor.default = [lightgray]<Numatytasis>
details = Detaliau...
edit = Redaguoti...
variables = Vars
logic.globals = Built-in Variables
editor.name = Pavadinimas:
editor.spawn = Atradinti vienetą
editor.removeunit = Panaikinti vienetą
@@ -665,10 +666,11 @@ objective.destroycore.name = Destroy Core
objective.commandmode.name = Command Mode
objective.flag.name = Flag
marker.shapetext.name = Shape Text
marker.minimap.name = Minimap
marker.point.name = Point
marker.shape.name = Shape
marker.text.name = Text
marker.line.name = Line
marker.quad.name = Quad
marker.background = Background
marker.outline = Outline
objective.research = [accent]Research:\n[]{0}[lightgray]{1}
@@ -752,6 +754,7 @@ sector.missingresources = [scarlet]Insufficient Core Resources
sector.attacked = Sector [accent]{0}[white] under attack!
sector.lost = Sector [accent]{0}[white] lost!
sector.capture = Sector [accent]{0}[white]Captured!
sector.capture.current = Sector Captured!
sector.changeicon = Change Icon
sector.noswitch.title = Unable to Switch Sectors
sector.noswitch = You may not switch sectors while an existing sector is under attack.\n\nSector: [accent]{0}[] on [accent]{1}[]
@@ -1531,6 +1534,7 @@ block.inverted-sorter.name = Atbulinis Rūšiuotojas
block.message.name = Žinutė
block.reinforced-message.name = Reinforced Message
block.world-message.name = World Message
block.world-switch.name = World Switch
block.illuminator.name = Šviestuvas
block.overflow-gate.name = Perpildymo Užtvara
block.underflow-gate.name = Neperpildymo Užtvara
@@ -2278,6 +2282,42 @@ lst.sync = Sync a variable across the network.\nOnly invoked 10 times a second a
lst.makemarker = Create a new logic marker in the world.\nAn ID to identify this marker must be provided.\nMarkers currently limited to 20,000 per world.
lst.setmarker = Set a property for a marker.\nThe ID used must be the same as in the Make Marker instruction.
lst.localeprint = Add map locale property value to the text buffer.\nTo set map locale bundles in map editor, check [accent]Map Info > Locale Bundles[].\nIf client is a mobile device, tries to print a property ending in ".mobile" first.
lglobal.false = 0
lglobal.true = 1
lglobal.null = null
lglobal.@pi = The mathematical constant pi (3.141...)
lglobal.@e = The mathematical constant e (2.718...)
lglobal.@degToRad = Multiply by this number to convert degrees to radians
lglobal.@radToDeg = Multiply by this number to convert radians to degrees
lglobal.@time = Playtime of current save, in milliseconds
lglobal.@tick = Playtime of current save, in ticks (1 second = 60 ticks)
lglobal.@second = Playtime of current save, in seconds
lglobal.@minute = Playtime of current save, in minutes
lglobal.@waveNumber = Current wave number, if waves are enabled
lglobal.@waveTime = Countdown timer for waves, in seconds
lglobal.@mapw = Map width in tiles
lglobal.@maph = Map height in tiles
lglobal.sectionMap = Map
lglobal.sectionGeneral = General
lglobal.sectionNetwork = Network/Clientside [World Processor Only]
lglobal.sectionProcessor = Processor
lglobal.sectionLookup = Lookup
lglobal.@this = The logic block executing the code
lglobal.@thisx = X coordinate of block executing the code
lglobal.@thisy = Y coordinate of block executing the code
lglobal.@links = Total number of blocks linked to this processors
lglobal.@ipt = Execution speed of the processor in instructions per tick (60 ticks = 1 second)
lglobal.@unitCount = Total number of types of unit content in the game; used with the lookup instruction
lglobal.@blockCount = Total number of types of block content in the game; used with the lookup instruction
lglobal.@itemCount = Total number of types of item content in the game; used with the lookup instruction
lglobal.@liquidCount = Total number of types of liquid content in the game; used with the lookup instruction
lglobal.@server = True if the code is running on a server or in singleplayer, false otherwise
lglobal.@client = True if the code is running on a client connected to a server
lglobal.@clientLocale = Locale of the client running the code. For example: en_US
lglobal.@clientUnit = Unit of client running the code
lglobal.@clientName = Player name of client running the code
lglobal.@clientTeam = Team ID of client running the code
lglobal.@clientMobile = True is the client running the code is on mobile, false otherwise
logic.nounitbuild = [red]Unit building logic is not allowed here.
lenum.type = Type of building/unit.\ne.g. for any router, this will return [accent]@router[].\nNot a string.
lenum.shoot = Shoot at a position.
@@ -2414,3 +2454,6 @@ lenum.flushtext = Flush print buffer's content to marker, if applicable.\nIf fet
lenum.texture = Texture name straight from game's texture atlas (using kebab-case naming style).\nIf printFlush is set to true, consumes text buffer content as text argument.
lenum.texturesize = Size of texture in tiles. Zero value scales marker width to original texture's size.
lenum.autoscale = Whether to scale marker corresponding to player's zoom level.
lenum.posi = Indexed position, used for line and quad markers with index zero being the first position.
lenum.uvi = Texture's position ranging from zero to one, used for quad markers.
lenum.colori = Indexed position, used for line and quad markers with index zero being the first color.
+44 -1
View File
@@ -498,6 +498,7 @@ editor.default = [lightgray]<Standaard>
details = Details...
edit = Bewerk...
variables = Vars
logic.globals = Built-in Variables
editor.name = Naam:
editor.spawn = Voeg Eenheid toe
editor.removeunit = Verwijder Eenheid
@@ -676,10 +677,11 @@ objective.destroycore.name = Vernietig Core
objective.commandmode.name = Commando Modus
objective.flag.name = Vlag
marker.shapetext.name = Vorm Tekst
marker.minimap.name = Minimap
marker.point.name = Point
marker.shape.name = Vorm
marker.text.name = Tekst
marker.line.name = Line
marker.quad.name = Quad
marker.background = Achtergrond
marker.outline = Omtrek
objective.research = [accent]Onderzoek:\n[]{0}[lightgray]{1}
@@ -763,6 +765,7 @@ sector.missingresources = [scarlet]Onvoeldoende Materialen in Core
sector.attacked = Sector [accent]{0}[white] onder vuur!
sector.lost = Sector [accent]{0}[white] verloren!
sector.capture = Sector [accent]{0}[white]Captured!
sector.capture.current = Sector Captured!
sector.changeicon = Verander icoon
sector.noswitch.title = Kan niet van sector wisselen
sector.noswitch = Je mag niet van sector wisselen terwijl een bestaande sector wordt aangevallen.\n\nSector: [accent]{0}[] op [accent]{1}[]
@@ -1543,6 +1546,7 @@ block.inverted-sorter.name = Omgekeerder Sorteerder
block.message.name = Bericht
block.reinforced-message.name = Gepansterd Bericht
block.world-message.name = Wereldbericht
block.world-switch.name = World Switch
block.illuminator.name = Lamp
block.overflow-gate.name = Overstroom Poort
block.underflow-gate.name = Onderstroom Poort
@@ -2291,6 +2295,42 @@ lst.sync = Sync a variable across the network.\nOnly invoked 10 times a second a
lst.makemarker = Create a new logic marker in the world.\nAn ID to identify this marker must be provided.\nMarkers currently limited to 20,000 per world.
lst.setmarker = Set a property for a marker.\nThe ID used must be the same as in the Make Marker instruction.
lst.localeprint = Add map locale property value to the text buffer.\nTo set map locale bundles in map editor, check [accent]Map Info > Locale Bundles[].\nIf client is a mobile device, tries to print a property ending in ".mobile" first.
lglobal.false = 0
lglobal.true = 1
lglobal.null = null
lglobal.@pi = The mathematical constant pi (3.141...)
lglobal.@e = The mathematical constant e (2.718...)
lglobal.@degToRad = Multiply by this number to convert degrees to radians
lglobal.@radToDeg = Multiply by this number to convert radians to degrees
lglobal.@time = Playtime of current save, in milliseconds
lglobal.@tick = Playtime of current save, in ticks (1 second = 60 ticks)
lglobal.@second = Playtime of current save, in seconds
lglobal.@minute = Playtime of current save, in minutes
lglobal.@waveNumber = Current wave number, if waves are enabled
lglobal.@waveTime = Countdown timer for waves, in seconds
lglobal.@mapw = Map width in tiles
lglobal.@maph = Map height in tiles
lglobal.sectionMap = Map
lglobal.sectionGeneral = General
lglobal.sectionNetwork = Network/Clientside [World Processor Only]
lglobal.sectionProcessor = Processor
lglobal.sectionLookup = Lookup
lglobal.@this = The logic block executing the code
lglobal.@thisx = X coordinate of block executing the code
lglobal.@thisy = Y coordinate of block executing the code
lglobal.@links = Total number of blocks linked to this processors
lglobal.@ipt = Execution speed of the processor in instructions per tick (60 ticks = 1 second)
lglobal.@unitCount = Total number of types of unit content in the game; used with the lookup instruction
lglobal.@blockCount = Total number of types of block content in the game; used with the lookup instruction
lglobal.@itemCount = Total number of types of item content in the game; used with the lookup instruction
lglobal.@liquidCount = Total number of types of liquid content in the game; used with the lookup instruction
lglobal.@server = True if the code is running on a server or in singleplayer, false otherwise
lglobal.@client = True if the code is running on a client connected to a server
lglobal.@clientLocale = Locale of the client running the code. For example: en_US
lglobal.@clientUnit = Unit of client running the code
lglobal.@clientName = Player name of client running the code
lglobal.@clientTeam = Team ID of client running the code
lglobal.@clientMobile = True is the client running the code is on mobile, false otherwise
logic.nounitbuild = [red]Unit building logic is not allowed here.
lenum.type = Type of building/unit.\ne.g. for any router, this will return [accent]@router[].\nNot a string.
lenum.shoot = Shoot at a position.
@@ -2427,3 +2467,6 @@ lenum.flushtext = Flush print buffer's content to marker, if applicable.\nIf fet
lenum.texture = Texture name straight from game's texture atlas (using kebab-case naming style).\nIf printFlush is set to true, consumes text buffer content as text argument.
lenum.texturesize = Size of texture in tiles. Zero value scales marker width to original texture's size.
lenum.autoscale = Whether to scale marker corresponding to player's zoom level.
lenum.posi = Indexed position, used for line and quad markers with index zero being the first position.
lenum.uvi = Texture's position ranging from zero to one, used for quad markers.
lenum.colori = Indexed position, used for line and quad markers with index zero being the first color.
+44 -1
View File
@@ -490,6 +490,7 @@ editor.default = [lightgray]<Default>
details = Details...
edit = Edit...
variables = Vars
logic.globals = Built-in Variables
editor.name = Name:
editor.spawn = Spawn Unit
editor.removeunit = Remove Unit
@@ -665,10 +666,11 @@ objective.destroycore.name = Destroy Core
objective.commandmode.name = Command Mode
objective.flag.name = Flag
marker.shapetext.name = Shape Text
marker.minimap.name = Minimap
marker.point.name = Point
marker.shape.name = Shape
marker.text.name = Text
marker.line.name = Line
marker.quad.name = Quad
marker.background = Background
marker.outline = Outline
objective.research = [accent]Research:\n[]{0}[lightgray]{1}
@@ -752,6 +754,7 @@ sector.missingresources = [scarlet]Insufficient Core Resources
sector.attacked = Sector [accent]{0}[white] under attack!
sector.lost = Sector [accent]{0}[white] lost!
sector.capture = Sector [accent]{0}[white]Captured!
sector.capture.current = Sector Captured!
sector.changeicon = Change Icon
sector.noswitch.title = Unable to Switch Sectors
sector.noswitch = You may not switch sectors while an existing sector is under attack.\n\nSector: [accent]{0}[] on [accent]{1}[]
@@ -1531,6 +1534,7 @@ block.inverted-sorter.name = Inverted Sorter
block.message.name = Message
block.reinforced-message.name = Reinforced Message
block.world-message.name = World Message
block.world-switch.name = World Switch
block.illuminator.name = Illuminator
block.overflow-gate.name = Overflow Gate
block.underflow-gate.name = Underflow Gate
@@ -2278,6 +2282,42 @@ lst.sync = Sync a variable across the network.\nOnly invoked 10 times a second a
lst.makemarker = Create a new logic marker in the world.\nAn ID to identify this marker must be provided.\nMarkers currently limited to 20,000 per world.
lst.setmarker = Set a property for a marker.\nThe ID used must be the same as in the Make Marker instruction.
lst.localeprint = Add map locale property value to the text buffer.\nTo set map locale bundles in map editor, check [accent]Map Info > Locale Bundles[].\nIf client is a mobile device, tries to print a property ending in ".mobile" first.
lglobal.false = 0
lglobal.true = 1
lglobal.null = null
lglobal.@pi = The mathematical constant pi (3.141...)
lglobal.@e = The mathematical constant e (2.718...)
lglobal.@degToRad = Multiply by this number to convert degrees to radians
lglobal.@radToDeg = Multiply by this number to convert radians to degrees
lglobal.@time = Playtime of current save, in milliseconds
lglobal.@tick = Playtime of current save, in ticks (1 second = 60 ticks)
lglobal.@second = Playtime of current save, in seconds
lglobal.@minute = Playtime of current save, in minutes
lglobal.@waveNumber = Current wave number, if waves are enabled
lglobal.@waveTime = Countdown timer for waves, in seconds
lglobal.@mapw = Map width in tiles
lglobal.@maph = Map height in tiles
lglobal.sectionMap = Map
lglobal.sectionGeneral = General
lglobal.sectionNetwork = Network/Clientside [World Processor Only]
lglobal.sectionProcessor = Processor
lglobal.sectionLookup = Lookup
lglobal.@this = The logic block executing the code
lglobal.@thisx = X coordinate of block executing the code
lglobal.@thisy = Y coordinate of block executing the code
lglobal.@links = Total number of blocks linked to this processors
lglobal.@ipt = Execution speed of the processor in instructions per tick (60 ticks = 1 second)
lglobal.@unitCount = Total number of types of unit content in the game; used with the lookup instruction
lglobal.@blockCount = Total number of types of block content in the game; used with the lookup instruction
lglobal.@itemCount = Total number of types of item content in the game; used with the lookup instruction
lglobal.@liquidCount = Total number of types of liquid content in the game; used with the lookup instruction
lglobal.@server = True if the code is running on a server or in singleplayer, false otherwise
lglobal.@client = True if the code is running on a client connected to a server
lglobal.@clientLocale = Locale of the client running the code. For example: en_US
lglobal.@clientUnit = Unit of client running the code
lglobal.@clientName = Player name of client running the code
lglobal.@clientTeam = Team ID of client running the code
lglobal.@clientMobile = True is the client running the code is on mobile, false otherwise
logic.nounitbuild = [red]Unit building logic is not allowed here.
lenum.type = Type of building/unit.\ne.g. for any router, this will return [accent]@router[].\nNot a string.
lenum.shoot = Shoot at a position.
@@ -2414,3 +2454,6 @@ lenum.flushtext = Flush print buffer's content to marker, if applicable.\nIf fet
lenum.texture = Texture name straight from game's texture atlas (using kebab-case naming style).\nIf printFlush is set to true, consumes text buffer content as text argument.
lenum.texturesize = Size of texture in tiles. Zero value scales marker width to original texture's size.
lenum.autoscale = Whether to scale marker corresponding to player's zoom level.
lenum.posi = Indexed position, used for line and quad markers with index zero being the first position.
lenum.uvi = Texture's position ranging from zero to one, used for quad markers.
lenum.colori = Indexed position, used for line and quad markers with index zero being the first color.
+44 -1
View File
@@ -495,6 +495,7 @@ editor.default = [lightgray]<Domyślne>
details = Detale...
edit = Edytuj...
variables = Zmienne
logic.globals = Built-in Variables
editor.name = Nazwa:
editor.spawn = Stwórz Jednostkę
editor.removeunit = Usuń Jednostkę
@@ -670,10 +671,11 @@ objective.destroycore.name = Zniszcz Rdzeń
objective.commandmode.name = Tryb Poleceń
objective.flag.name = Oznaczenie
marker.shapetext.name = Dostosuj Tekst
marker.minimap.name = Minimapa
marker.point.name = Point
marker.shape.name = Figura
marker.text.name = Tekst
marker.line.name = Line
marker.quad.name = Quad
marker.background = Tło
marker.outline = Kontur
objective.research = [accent]Zbadaj:\n[]{0}[lightgray]{1}
@@ -758,6 +760,7 @@ sector.missingresources = [scarlet]Niewystarczające Zasoby Rdzenia
sector.attacked = Sektor [accent]{0}[white] jest atakowany!
sector.lost = Sektor [accent]{0}[white] został stracony!
sector.capture = Sector [accent]{0}[white]Captured!
sector.capture.current = Sector Captured!
sector.changeicon = Zmień Ikonę
sector.noswitch.title = Nie można zmienić sektorów
sector.noswitch = Nie możesz zmieniać sektorów, gdy istniejący sektor jest atakowany.\n\nSektor: [accent]{0}[] na [accent]{1}[]
@@ -1550,6 +1553,7 @@ block.inverted-sorter.name = Odwrotny Sortownik
block.message.name = Wiadomość
block.reinforced-message.name = Wzmocniona Wiadomość
block.world-message.name = World Message
block.world-switch.name = World Switch
block.illuminator.name = Rozświetlacz
block.overflow-gate.name = Brama Przepełnieniowa
block.underflow-gate.name = Brama Niedomiaru
@@ -2312,6 +2316,42 @@ lst.sync = Synchronizuje zmienną poprzez sieć.\nWywoływane maksymalnie 10 raz
lst.makemarker = Stwórz nowy marker logiki.\nMusisz podać ID, aby móc go później zidentyfikować.\nLimit markerów to 20,000.
lst.setmarker = Ustaw właściwości markera.\nID markera musi być takie samo jak podczas jego tworzenia.
lst.localeprint = Add map locale property value to the text buffer.\nTo set map locale bundles in map editor, check [accent]Map Info > Locale Bundles[].\nIf client is a mobile device, tries to print a property ending in ".mobile" first.
lglobal.false = 0
lglobal.true = 1
lglobal.null = null
lglobal.@pi = The mathematical constant pi (3.141...)
lglobal.@e = The mathematical constant e (2.718...)
lglobal.@degToRad = Multiply by this number to convert degrees to radians
lglobal.@radToDeg = Multiply by this number to convert radians to degrees
lglobal.@time = Playtime of current save, in milliseconds
lglobal.@tick = Playtime of current save, in ticks (1 second = 60 ticks)
lglobal.@second = Playtime of current save, in seconds
lglobal.@minute = Playtime of current save, in minutes
lglobal.@waveNumber = Current wave number, if waves are enabled
lglobal.@waveTime = Countdown timer for waves, in seconds
lglobal.@mapw = Map width in tiles
lglobal.@maph = Map height in tiles
lglobal.sectionMap = Map
lglobal.sectionGeneral = General
lglobal.sectionNetwork = Network/Clientside [World Processor Only]
lglobal.sectionProcessor = Processor
lglobal.sectionLookup = Lookup
lglobal.@this = The logic block executing the code
lglobal.@thisx = X coordinate of block executing the code
lglobal.@thisy = Y coordinate of block executing the code
lglobal.@links = Total number of blocks linked to this processors
lglobal.@ipt = Execution speed of the processor in instructions per tick (60 ticks = 1 second)
lglobal.@unitCount = Total number of types of unit content in the game; used with the lookup instruction
lglobal.@blockCount = Total number of types of block content in the game; used with the lookup instruction
lglobal.@itemCount = Total number of types of item content in the game; used with the lookup instruction
lglobal.@liquidCount = Total number of types of liquid content in the game; used with the lookup instruction
lglobal.@server = True if the code is running on a server or in singleplayer, false otherwise
lglobal.@client = True if the code is running on a client connected to a server
lglobal.@clientLocale = Locale of the client running the code. For example: en_US
lglobal.@clientUnit = Unit of client running the code
lglobal.@clientName = Player name of client running the code
lglobal.@clientTeam = Team ID of client running the code
lglobal.@clientMobile = True is the client running the code is on mobile, false otherwise
logic.nounitbuild = [red]Logika budowania jednostek nie jest tu dozwolona.
@@ -2467,3 +2507,6 @@ lenum.flushtext = Flush print buffer's content to marker, if applicable.\nIf fet
lenum.texture = Texture name straight from game's texture atlas (using kebab-case naming style).\nIf printFlush is set to true, consumes text buffer content as text argument.
lenum.texturesize = Size of texture in tiles. Zero value scales marker width to original texture's size.
lenum.autoscale = Whether to scale marker corresponding to player's zoom level.
lenum.posi = Indexed position, used for line and quad markers with index zero being the first position.
lenum.uvi = Texture's position ranging from zero to one, used for quad markers.
lenum.colori = Indexed position, used for line and quad markers with index zero being the first color.
+44 -1
View File
@@ -495,6 +495,7 @@ editor.default = [lightgray]<padrão>
details = Detalhes...
edit = Editar...
variables = Variáveis
logic.globals = Built-in Variables
editor.name = Nome:
editor.spawn = Spawnar unidade
editor.removeunit = Remover unidade
@@ -675,10 +676,11 @@ objective.commandmode.name = Modo de Comando
objective.flag.name = Flag
marker.shapetext.name = Shape Text
marker.minimap.name = Minimapa
marker.point.name = Point
marker.shape.name = Shape
marker.text.name = Texto
marker.line.name = Line
marker.quad.name = Quad
marker.background = Fundo
marker.outline = Contorno
@@ -766,6 +768,7 @@ sector.missingresources = [scarlet]Recursos Insuficientes no Núcleo
sector.attacked = Setor [accent]{0}[white] sob ataque!
sector.lost = Setor [accent]{0}[white] perdido!
sector.capture = Sector [accent]{0}[white]Captured!
sector.capture.current = Sector Captured!
sector.changeicon = Trocar Ícone
sector.noswitch.title = Incapaz de Mudar de Setores
sector.noswitch = Você não pode trocar de setor enquanto um setor existente estiver sob ataque.\n\nSetor: [accent]{0}[] em [accent]{1}[]
@@ -1550,6 +1553,7 @@ block.inverted-sorter.name = Ordenador invertido
block.message.name = Mensagem
block.reinforced-message.name = Reinforced Message
block.world-message.name = World Message
block.world-switch.name = World Switch
block.illuminator.name = Iluminador
block.overflow-gate.name = Portão de Sobrecarga
block.underflow-gate.name = Portão de Sobrecarga Invertido
@@ -2311,6 +2315,42 @@ lst.sync = Sync a variable across the network.\nOnly invoked 10 times a second a
lst.makemarker = Create a new logic marker in the world.\nAn ID to identify this marker must be provided.\nMarkers currently limited to 20,000 per world.
lst.setmarker = Set a property for a marker.\nThe ID used must be the same as in the Make Marker instruction.
lst.localeprint = Add map locale property value to the text buffer.\nTo set map locale bundles in map editor, check [accent]Map Info > Locale Bundles[].\nIf client is a mobile device, tries to print a property ending in ".mobile" first.
lglobal.false = 0
lglobal.true = 1
lglobal.null = null
lglobal.@pi = The mathematical constant pi (3.141...)
lglobal.@e = The mathematical constant e (2.718...)
lglobal.@degToRad = Multiply by this number to convert degrees to radians
lglobal.@radToDeg = Multiply by this number to convert radians to degrees
lglobal.@time = Playtime of current save, in milliseconds
lglobal.@tick = Playtime of current save, in ticks (1 second = 60 ticks)
lglobal.@second = Playtime of current save, in seconds
lglobal.@minute = Playtime of current save, in minutes
lglobal.@waveNumber = Current wave number, if waves are enabled
lglobal.@waveTime = Countdown timer for waves, in seconds
lglobal.@mapw = Map width in tiles
lglobal.@maph = Map height in tiles
lglobal.sectionMap = Map
lglobal.sectionGeneral = General
lglobal.sectionNetwork = Network/Clientside [World Processor Only]
lglobal.sectionProcessor = Processor
lglobal.sectionLookup = Lookup
lglobal.@this = The logic block executing the code
lglobal.@thisx = X coordinate of block executing the code
lglobal.@thisy = Y coordinate of block executing the code
lglobal.@links = Total number of blocks linked to this processors
lglobal.@ipt = Execution speed of the processor in instructions per tick (60 ticks = 1 second)
lglobal.@unitCount = Total number of types of unit content in the game; used with the lookup instruction
lglobal.@blockCount = Total number of types of block content in the game; used with the lookup instruction
lglobal.@itemCount = Total number of types of item content in the game; used with the lookup instruction
lglobal.@liquidCount = Total number of types of liquid content in the game; used with the lookup instruction
lglobal.@server = True if the code is running on a server or in singleplayer, false otherwise
lglobal.@client = True if the code is running on a client connected to a server
lglobal.@clientLocale = Locale of the client running the code. For example: en_US
lglobal.@clientUnit = Unit of client running the code
lglobal.@clientName = Player name of client running the code
lglobal.@clientTeam = Team ID of client running the code
lglobal.@clientMobile = True is the client running the code is on mobile, false otherwise
logic.nounitbuild = [red]Lógica de construção de unidades não é permitida aqui.
@@ -2465,3 +2505,6 @@ lenum.flushtext = Flush print buffer's content to marker, if applicable.\nIf fet
lenum.texture = Texture name straight from game's texture atlas (using kebab-case naming style).\nIf printFlush is set to true, consumes text buffer content as text argument.
lenum.texturesize = Size of texture in tiles. Zero value scales marker width to original texture's size.
lenum.autoscale = Whether to scale marker corresponding to player's zoom level.
lenum.posi = Indexed position, used for line and quad markers with index zero being the first position.
lenum.uvi = Texture's position ranging from zero to one, used for quad markers.
lenum.colori = Indexed position, used for line and quad markers with index zero being the first color.
+44 -1
View File
@@ -490,6 +490,7 @@ editor.default = [lightgray]<padrão>
details = Detalhes...
edit = Editar...
variables = Vars
logic.globals = Built-in Variables
editor.name = Nome:
editor.spawn = Criar unidade
editor.removeunit = Remover unidade
@@ -665,10 +666,11 @@ objective.destroycore.name = Destroy Core
objective.commandmode.name = Command Mode
objective.flag.name = Flag
marker.shapetext.name = Shape Text
marker.minimap.name = Minimap
marker.point.name = Point
marker.shape.name = Shape
marker.text.name = Text
marker.line.name = Line
marker.quad.name = Quad
marker.background = Background
marker.outline = Outline
objective.research = [accent]Research:\n[]{0}[lightgray]{1}
@@ -752,6 +754,7 @@ sector.missingresources = [scarlet]Insufficient Core Resources
sector.attacked = Sector [accent]{0}[white] under attack!
sector.lost = Sector [accent]{0}[white] lost!
sector.capture = Sector [accent]{0}[white]Captured!
sector.capture.current = Sector Captured!
sector.changeicon = Change Icon
sector.noswitch.title = Unable to Switch Sectors
sector.noswitch = You may not switch sectors while an existing sector is under attack.\n\nSector: [accent]{0}[] on [accent]{1}[]
@@ -1531,6 +1534,7 @@ block.inverted-sorter.name = Inverted Sorter
block.message.name = Mensagem
block.reinforced-message.name = Reinforced Message
block.world-message.name = World Message
block.world-switch.name = World Switch
block.illuminator.name = Illuminator
block.overflow-gate.name = Portão Sobrecarregado
block.underflow-gate.name = Portão Desobrecarregado
@@ -2278,6 +2282,42 @@ lst.sync = Sync a variable across the network.\nOnly invoked 10 times a second a
lst.makemarker = Create a new logic marker in the world.\nAn ID to identify this marker must be provided.\nMarkers currently limited to 20,000 per world.
lst.setmarker = Set a property for a marker.\nThe ID used must be the same as in the Make Marker instruction.
lst.localeprint = Add map locale property value to the text buffer.\nTo set map locale bundles in map editor, check [accent]Map Info > Locale Bundles[].\nIf client is a mobile device, tries to print a property ending in ".mobile" first.
lglobal.false = 0
lglobal.true = 1
lglobal.null = null
lglobal.@pi = The mathematical constant pi (3.141...)
lglobal.@e = The mathematical constant e (2.718...)
lglobal.@degToRad = Multiply by this number to convert degrees to radians
lglobal.@radToDeg = Multiply by this number to convert radians to degrees
lglobal.@time = Playtime of current save, in milliseconds
lglobal.@tick = Playtime of current save, in ticks (1 second = 60 ticks)
lglobal.@second = Playtime of current save, in seconds
lglobal.@minute = Playtime of current save, in minutes
lglobal.@waveNumber = Current wave number, if waves are enabled
lglobal.@waveTime = Countdown timer for waves, in seconds
lglobal.@mapw = Map width in tiles
lglobal.@maph = Map height in tiles
lglobal.sectionMap = Map
lglobal.sectionGeneral = General
lglobal.sectionNetwork = Network/Clientside [World Processor Only]
lglobal.sectionProcessor = Processor
lglobal.sectionLookup = Lookup
lglobal.@this = The logic block executing the code
lglobal.@thisx = X coordinate of block executing the code
lglobal.@thisy = Y coordinate of block executing the code
lglobal.@links = Total number of blocks linked to this processors
lglobal.@ipt = Execution speed of the processor in instructions per tick (60 ticks = 1 second)
lglobal.@unitCount = Total number of types of unit content in the game; used with the lookup instruction
lglobal.@blockCount = Total number of types of block content in the game; used with the lookup instruction
lglobal.@itemCount = Total number of types of item content in the game; used with the lookup instruction
lglobal.@liquidCount = Total number of types of liquid content in the game; used with the lookup instruction
lglobal.@server = True if the code is running on a server or in singleplayer, false otherwise
lglobal.@client = True if the code is running on a client connected to a server
lglobal.@clientLocale = Locale of the client running the code. For example: en_US
lglobal.@clientUnit = Unit of client running the code
lglobal.@clientName = Player name of client running the code
lglobal.@clientTeam = Team ID of client running the code
lglobal.@clientMobile = True is the client running the code is on mobile, false otherwise
logic.nounitbuild = [red]Unit building logic is not allowed here.
lenum.type = Type of building/unit.\ne.g. for any router, this will return [accent]@router[].\nNot a string.
lenum.shoot = Shoot at a position.
@@ -2414,3 +2454,6 @@ lenum.flushtext = Flush print buffer's content to marker, if applicable.\nIf fet
lenum.texture = Texture name straight from game's texture atlas (using kebab-case naming style).\nIf printFlush is set to true, consumes text buffer content as text argument.
lenum.texturesize = Size of texture in tiles. Zero value scales marker width to original texture's size.
lenum.autoscale = Whether to scale marker corresponding to player's zoom level.
lenum.posi = Indexed position, used for line and quad markers with index zero being the first position.
lenum.uvi = Texture's position ranging from zero to one, used for quad markers.
lenum.colori = Indexed position, used for line and quad markers with index zero being the first color.
+44 -1
View File
@@ -495,6 +495,7 @@ editor.default = [lightgray]<Prestabilit>
details = Detalii...
edit = Editează...
variables = Vars
logic.globals = Built-in Variables
editor.name = Nume:
editor.spawn = Adaugă Unitate
editor.removeunit = Înlătură Unitate
@@ -672,10 +673,11 @@ objective.destroycore.name = Destroy Core
objective.commandmode.name = Command Mode
objective.flag.name = Flag
marker.shapetext.name = Shape Text
marker.minimap.name = Minimap
marker.point.name = Point
marker.shape.name = Shape
marker.text.name = Text
marker.line.name = Line
marker.quad.name = Quad
marker.background = Background
marker.outline = Outline
objective.research = [accent]Research:\n[]{0}[lightgray]{1}
@@ -760,6 +762,7 @@ sector.missingresources = [scarlet]Resurse din Nucleu Insuficiente
sector.attacked = Sectorul [accent]{0}[white] este atacat!
sector.lost = Ai pierdut sectorul [accent]{0}[white]!
sector.capture = Sector [accent]{0}[white]Captured!
sector.capture.current = Sector Captured!
sector.changeicon = Schimbă Iconița
sector.noswitch.title = Unable to Switch Sectors
sector.noswitch = You may not switch sectors while an existing sector is under attack.\n\nSector: [accent]{0}[] on [accent]{1}[]
@@ -1544,6 +1547,7 @@ block.inverted-sorter.name = Sortator Invers
block.message.name = Mesaj
block.reinforced-message.name = Reinforced Message
block.world-message.name = World Message
block.world-switch.name = World Switch
block.illuminator.name = Iluminator
block.overflow-gate.name = Poartă de Revărsare
block.underflow-gate.name = Poartă de Subversare
@@ -2295,6 +2299,42 @@ lst.sync = Sync a variable across the network.\nOnly invoked 10 times a second a
lst.makemarker = Create a new logic marker in the world.\nAn ID to identify this marker must be provided.\nMarkers currently limited to 20,000 per world.
lst.setmarker = Set a property for a marker.\nThe ID used must be the same as in the Make Marker instruction.
lst.localeprint = Add map locale property value to the text buffer.\nTo set map locale bundles in map editor, check [accent]Map Info > Locale Bundles[].\nIf client is a mobile device, tries to print a property ending in ".mobile" first.
lglobal.false = 0
lglobal.true = 1
lglobal.null = null
lglobal.@pi = The mathematical constant pi (3.141...)
lglobal.@e = The mathematical constant e (2.718...)
lglobal.@degToRad = Multiply by this number to convert degrees to radians
lglobal.@radToDeg = Multiply by this number to convert radians to degrees
lglobal.@time = Playtime of current save, in milliseconds
lglobal.@tick = Playtime of current save, in ticks (1 second = 60 ticks)
lglobal.@second = Playtime of current save, in seconds
lglobal.@minute = Playtime of current save, in minutes
lglobal.@waveNumber = Current wave number, if waves are enabled
lglobal.@waveTime = Countdown timer for waves, in seconds
lglobal.@mapw = Map width in tiles
lglobal.@maph = Map height in tiles
lglobal.sectionMap = Map
lglobal.sectionGeneral = General
lglobal.sectionNetwork = Network/Clientside [World Processor Only]
lglobal.sectionProcessor = Processor
lglobal.sectionLookup = Lookup
lglobal.@this = The logic block executing the code
lglobal.@thisx = X coordinate of block executing the code
lglobal.@thisy = Y coordinate of block executing the code
lglobal.@links = Total number of blocks linked to this processors
lglobal.@ipt = Execution speed of the processor in instructions per tick (60 ticks = 1 second)
lglobal.@unitCount = Total number of types of unit content in the game; used with the lookup instruction
lglobal.@blockCount = Total number of types of block content in the game; used with the lookup instruction
lglobal.@itemCount = Total number of types of item content in the game; used with the lookup instruction
lglobal.@liquidCount = Total number of types of liquid content in the game; used with the lookup instruction
lglobal.@server = True if the code is running on a server or in singleplayer, false otherwise
lglobal.@client = True if the code is running on a client connected to a server
lglobal.@clientLocale = Locale of the client running the code. For example: en_US
lglobal.@clientUnit = Unit of client running the code
lglobal.@clientName = Player name of client running the code
lglobal.@clientTeam = Team ID of client running the code
lglobal.@clientMobile = True is the client running the code is on mobile, false otherwise
logic.nounitbuild = [red]Nu ai voie să construiești cu unitățile folosind procesoare.
@@ -2450,3 +2490,6 @@ lenum.flushtext = Flush print buffer's content to marker, if applicable.\nIf fet
lenum.texture = Texture name straight from game's texture atlas (using kebab-case naming style).\nIf printFlush is set to true, consumes text buffer content as text argument.
lenum.texturesize = Size of texture in tiles. Zero value scales marker width to original texture's size.
lenum.autoscale = Whether to scale marker corresponding to player's zoom level.
lenum.posi = Indexed position, used for line and quad markers with index zero being the first position.
lenum.uvi = Texture's position ranging from zero to one, used for quad markers.
lenum.colori = Indexed position, used for line and quad markers with index zero being the first color.
+46 -3
View File
@@ -495,6 +495,7 @@ editor.default = [lightgray]<По умолчанию>
details = Подробности…
edit = Редактировать…
variables = Переменные
logic.globals = Built-in Variables
editor.name = Название:
editor.spawn = Создать боевую единицу
editor.removeunit = Удалить боевую единицу
@@ -672,10 +673,11 @@ objective.destroycore.name = Уничтожить ядро
objective.commandmode.name = Командовать единицей
objective.flag.name = Флаг
marker.shapetext.name = Фигура с текстом
marker.minimap.name = Миникарта
marker.point.name = Point
marker.shape.name = Фигура
marker.text.name = Текст
marker.line.name = Line
marker.quad.name = Quad
marker.background = Фон
marker.outline = Контур
objective.research = [accent]Исследуйте:\n[]{0}[lightgray]{1}
@@ -761,6 +763,7 @@ sector.missingresources = [scarlet]Недостаточно ресурсов д
sector.attacked = Сектор [accent]{0}[white] атакован!
sector.lost = Сектор [accent]{0}[white] потерян!
sector.capture = Sector [accent]{0}[white]Captured!
sector.capture.current = Sector Captured!
sector.changeicon = Изменить иконку
sector.noswitch.title = Перемещение между секторами
sector.noswitch = Вы не можете переключаться между секторами, пока существующий сектор находится под атакой.\n\nСектор: [accent]{0}[] на [accent]{1}[]
@@ -1544,6 +1547,7 @@ block.inverted-sorter.name = Инвертированный сортировщи
block.message.name = Сообщение
block.reinforced-message.name = Усиленное сообщение
block.world-message.name = Мировое сообщение
block.world-switch.name = World Switch
block.illuminator.name = Осветитель
block.overflow-gate.name = Избыточный затвор
block.underflow-gate.name = Избыточный шлюз
@@ -1903,13 +1907,13 @@ onset.turrets = Боевые единицы эффективны, но [accent]
onset.turretammo = Снабдите турель [accent]бериллиевыми боеприпасами.[]
onset.walls = [accent]Стены[] могут предотвратить повреждение близлежащих построек.\nПоставьте \uf6ee [accent]бериллиевые стены[] вокруг турели.
onset.enemies = Враг на подходе, приготовьтесь защищаться.
onset.defenses = [accent]Set up defenses:[lightgray] {0}
onset.defenses = [accent]Приготовьте оборону:[lightgray] {0}
onset.attack = Враг уязвим. Начните контратаку.
onset.cores = Новые ядра могут быть поставлены на [accent]зоны ядра[].\nНовые ядра функционируют как передовые базы и имеют общий инвентарь между другими ядрами.\nПоставьте \uf725 ядро.
onset.detect = Враг обнаружит вас через 2 минуты.\nПриготовьте оборону, добычу и производство.
onset.commandmode = Удерживайте [accent]shift[], чтобы войти в [accent]режим командования[].\n[accent]Щелкните левой кнопкой мыши и выделите область[] для выбора боевых единиц.\n[accent]Щелкните правой кнопкой мыши[], чтобы приказать выбранным единицам двигаться или атаковать.
onset.commandmode.mobile = Нажмите [accent]Командовать[], чтобы войти в [accent]режим командования[].\nЗажмите палец, затем [accent]выделите область[] для выбора боевых единиц.\n[accent]Нажмите[], чтобы приказать выбранным единицам двигаться или атаковать.
aegis.tungsten = Tungsten can be mined using an [accent]impact drill[].\nThis structure requires [accent]water[] and [accent]power[].
aegis.tungsten = Вольфрам может быть добыт [accent]ударной дрелью[].\nЭта постройка требует [accent]воду[] и [accent]энергию[].
split.pickup = Некоторые блоки можно подобрать боевой единицей ядра.\nВозьмите этот [accent]контейнер[] и поставьте его на [accent]грузовой загрузчик[].\n(Клавиши по умолчанию - [ и ] для поднятия и разгрузки)
split.pickup.mobile = Некоторые блоки можно подобрать боевой единицей ядра.\nВозьмите этот [accent]контейнер[] и поставьте его на [accent]грузовой загрузчик[].\n(Чтобы поднять или разгрузить что-либо, удерживайте палец.)
@@ -2297,6 +2301,42 @@ lst.sync = Sync a variable across the network.\nOnly invoked 10 times a second a
lst.makemarker = Create a new logic marker in the world.\nAn ID to identify this marker must be provided.\nMarkers currently limited to 20,000 per world.
lst.setmarker = Set a property for a marker.\nThe ID used must be the same as in the Make Marker instruction.
lst.localeprint = Add map locale property value to the text buffer.\nTo set map locale bundles in map editor, check [accent]Map Info > Locale Bundles[].\nIf client is a mobile device, tries to print a property ending in ".mobile" first.
lglobal.false = 0
lglobal.true = 1
lglobal.null = null
lglobal.@pi = The mathematical constant pi (3.141...)
lglobal.@e = The mathematical constant e (2.718...)
lglobal.@degToRad = Multiply by this number to convert degrees to radians
lglobal.@radToDeg = Multiply by this number to convert radians to degrees
lglobal.@time = Playtime of current save, in milliseconds
lglobal.@tick = Playtime of current save, in ticks (1 second = 60 ticks)
lglobal.@second = Playtime of current save, in seconds
lglobal.@minute = Playtime of current save, in minutes
lglobal.@waveNumber = Current wave number, if waves are enabled
lglobal.@waveTime = Countdown timer for waves, in seconds
lglobal.@mapw = Map width in tiles
lglobal.@maph = Map height in tiles
lglobal.sectionMap = Map
lglobal.sectionGeneral = General
lglobal.sectionNetwork = Network/Clientside [World Processor Only]
lglobal.sectionProcessor = Processor
lglobal.sectionLookup = Lookup
lglobal.@this = The logic block executing the code
lglobal.@thisx = X coordinate of block executing the code
lglobal.@thisy = Y coordinate of block executing the code
lglobal.@links = Total number of blocks linked to this processors
lglobal.@ipt = Execution speed of the processor in instructions per tick (60 ticks = 1 second)
lglobal.@unitCount = Total number of types of unit content in the game; used with the lookup instruction
lglobal.@blockCount = Total number of types of block content in the game; used with the lookup instruction
lglobal.@itemCount = Total number of types of item content in the game; used with the lookup instruction
lglobal.@liquidCount = Total number of types of liquid content in the game; used with the lookup instruction
lglobal.@server = True if the code is running on a server or in singleplayer, false otherwise
lglobal.@client = True if the code is running on a client connected to a server
lglobal.@clientLocale = Locale of the client running the code. For example: en_US
lglobal.@clientUnit = Unit of client running the code
lglobal.@clientName = Player name of client running the code
lglobal.@clientTeam = Team ID of client running the code
lglobal.@clientMobile = True is the client running the code is on mobile, false otherwise
logic.nounitbuild = [red]Строительство с помощью процессоров здесь запрещено.
@@ -2452,3 +2492,6 @@ lenum.flushtext = Flush print buffer's content to marker, if applicable.\nIf fet
lenum.texture = Texture name straight from game's texture atlas (using kebab-case naming style).\nIf printFlush is set to true, consumes text buffer content as text argument.
lenum.texturesize = Size of texture in tiles. Zero value scales marker width to original texture's size.
lenum.autoscale = Whether to scale marker corresponding to player's zoom level.
lenum.posi = Indexed position, used for line and quad markers with index zero being the first position.
lenum.uvi = Texture's position ranging from zero to one, used for quad markers.
lenum.colori = Indexed position, used for line and quad markers with index zero being the first color.
+44 -1
View File
@@ -495,6 +495,7 @@ editor.default = [lightgray]<Default>
details = Detalji...
edit = Izmeni...
variables = Varijabla
logic.globals = Built-in Variables
editor.name = Ime:
editor.spawn = Prizovi Jedinicu
editor.removeunit = Ukloni Jedinicu
@@ -672,10 +673,11 @@ objective.destroycore.name = Uništi Jezgro
objective.commandmode.name = Upravljački Mod
objective.flag.name = Zastava
marker.shapetext.name = Tekst i Oblik
marker.minimap.name = Minimapa
marker.point.name = Point
marker.shape.name = Oblik
marker.text.name = Tekst
marker.line.name = Line
marker.quad.name = Quad
marker.background = Pozadina
marker.outline = Outline
objective.research = [accent]Izuči:\n[]{0}[lightgray]{1}
@@ -761,6 +763,7 @@ sector.missingresources = [scarlet]Nedovoljnema Resursa u Jezgru
sector.attacked = Sektor [accent]{0}[white] je napadnut!
sector.lost = Sektor [accent]{0}[white] je izgubljen!
sector.capture = Sector [accent]{0}[white]Captured!
sector.capture.current = Sector Captured!
sector.changeicon = Promeni Ikonicu
sector.noswitch.title = Nije Moguće Promeniti Sektor
sector.noswitch = Ne možete promeniti sektor dok je drugi napadnut.\n\nSektor: [accent]{0}[] na [accent]{1}[]
@@ -1546,6 +1549,7 @@ block.inverted-sorter.name = Naopaki Sorter
block.message.name = Poruka
block.reinforced-message.name = Armirana Poruka
block.world-message.name = Svetovna Poruka
block.world-switch.name = World Switch
block.illuminator.name = Svetlo
block.overflow-gate.name = Prelivna Kapija
block.underflow-gate.name = Podlivna Kapija
@@ -2298,6 +2302,42 @@ lst.sync = Sync a variable across the network.\nOnly invoked 10 times a second a
lst.makemarker = Create a new logic marker in the world.\nAn ID to identify this marker must be provided.\nMarkers currently limited to 20,000 per world.
lst.setmarker = Set a property for a marker.\nThe ID used must be the same as in the Make Marker instruction.
lst.localeprint = Add map locale property value to the text buffer.\nTo set map locale bundles in map editor, check [accent]Map Info > Locale Bundles[].\nIf client is a mobile device, tries to print a property ending in ".mobile" first.
lglobal.false = 0
lglobal.true = 1
lglobal.null = null
lglobal.@pi = The mathematical constant pi (3.141...)
lglobal.@e = The mathematical constant e (2.718...)
lglobal.@degToRad = Multiply by this number to convert degrees to radians
lglobal.@radToDeg = Multiply by this number to convert radians to degrees
lglobal.@time = Playtime of current save, in milliseconds
lglobal.@tick = Playtime of current save, in ticks (1 second = 60 ticks)
lglobal.@second = Playtime of current save, in seconds
lglobal.@minute = Playtime of current save, in minutes
lglobal.@waveNumber = Current wave number, if waves are enabled
lglobal.@waveTime = Countdown timer for waves, in seconds
lglobal.@mapw = Map width in tiles
lglobal.@maph = Map height in tiles
lglobal.sectionMap = Map
lglobal.sectionGeneral = General
lglobal.sectionNetwork = Network/Clientside [World Processor Only]
lglobal.sectionProcessor = Processor
lglobal.sectionLookup = Lookup
lglobal.@this = The logic block executing the code
lglobal.@thisx = X coordinate of block executing the code
lglobal.@thisy = Y coordinate of block executing the code
lglobal.@links = Total number of blocks linked to this processors
lglobal.@ipt = Execution speed of the processor in instructions per tick (60 ticks = 1 second)
lglobal.@unitCount = Total number of types of unit content in the game; used with the lookup instruction
lglobal.@blockCount = Total number of types of block content in the game; used with the lookup instruction
lglobal.@itemCount = Total number of types of item content in the game; used with the lookup instruction
lglobal.@liquidCount = Total number of types of liquid content in the game; used with the lookup instruction
lglobal.@server = True if the code is running on a server or in singleplayer, false otherwise
lglobal.@client = True if the code is running on a client connected to a server
lglobal.@clientLocale = Locale of the client running the code. For example: en_US
lglobal.@clientUnit = Unit of client running the code
lglobal.@clientName = Player name of client running the code
lglobal.@clientTeam = Team ID of client running the code
lglobal.@clientMobile = True is the client running the code is on mobile, false otherwise
logic.nounitbuild = [red]Unit building logic is not allowed here.
@@ -2453,3 +2493,6 @@ lenum.flushtext = Flush print buffer's content to marker, if applicable.\nIf fet
lenum.texture = Texture name straight from game's texture atlas (using kebab-case naming style).\nIf printFlush is set to true, consumes text buffer content as text argument.
lenum.texturesize = Size of texture in tiles. Zero value scales marker width to original texture's size.
lenum.autoscale = Whether to scale marker corresponding to player's zoom level.
lenum.posi = Indexed position, used for line and quad markers with index zero being the first position.
lenum.uvi = Texture's position ranging from zero to one, used for quad markers.
lenum.colori = Indexed position, used for line and quad markers with index zero being the first color.
+44 -1
View File
@@ -490,6 +490,7 @@ editor.default = [lightgray]<Default>
details = Details...
edit = Redigera...
variables = Vars
logic.globals = Built-in Variables
editor.name = Namn:
editor.spawn = Spawn Unit
editor.removeunit = Remove Unit
@@ -665,10 +666,11 @@ objective.destroycore.name = Destroy Core
objective.commandmode.name = Command Mode
objective.flag.name = Flag
marker.shapetext.name = Shape Text
marker.minimap.name = Minimap
marker.point.name = Point
marker.shape.name = Shape
marker.text.name = Text
marker.line.name = Line
marker.quad.name = Quad
marker.background = Background
marker.outline = Outline
objective.research = [accent]Research:\n[]{0}[lightgray]{1}
@@ -752,6 +754,7 @@ sector.missingresources = [scarlet]Insufficient Core Resources
sector.attacked = Sector [accent]{0}[white] under attack!
sector.lost = Sector [accent]{0}[white] lost!
sector.capture = Sector [accent]{0}[white]Captured!
sector.capture.current = Sector Captured!
sector.changeicon = Change Icon
sector.noswitch.title = Unable to Switch Sectors
sector.noswitch = You may not switch sectors while an existing sector is under attack.\n\nSector: [accent]{0}[] on [accent]{1}[]
@@ -1531,6 +1534,7 @@ block.inverted-sorter.name = Inverted Sorter
block.message.name = Meddelande
block.reinforced-message.name = Reinforced Message
block.world-message.name = World Message
block.world-switch.name = World Switch
block.illuminator.name = Illuminator
block.overflow-gate.name = Överflödesgrind
block.underflow-gate.name = Underflow Gate
@@ -2278,6 +2282,42 @@ lst.sync = Sync a variable across the network.\nOnly invoked 10 times a second a
lst.makemarker = Create a new logic marker in the world.\nAn ID to identify this marker must be provided.\nMarkers currently limited to 20,000 per world.
lst.setmarker = Set a property for a marker.\nThe ID used must be the same as in the Make Marker instruction.
lst.localeprint = Add map locale property value to the text buffer.\nTo set map locale bundles in map editor, check [accent]Map Info > Locale Bundles[].\nIf client is a mobile device, tries to print a property ending in ".mobile" first.
lglobal.false = 0
lglobal.true = 1
lglobal.null = null
lglobal.@pi = The mathematical constant pi (3.141...)
lglobal.@e = The mathematical constant e (2.718...)
lglobal.@degToRad = Multiply by this number to convert degrees to radians
lglobal.@radToDeg = Multiply by this number to convert radians to degrees
lglobal.@time = Playtime of current save, in milliseconds
lglobal.@tick = Playtime of current save, in ticks (1 second = 60 ticks)
lglobal.@second = Playtime of current save, in seconds
lglobal.@minute = Playtime of current save, in minutes
lglobal.@waveNumber = Current wave number, if waves are enabled
lglobal.@waveTime = Countdown timer for waves, in seconds
lglobal.@mapw = Map width in tiles
lglobal.@maph = Map height in tiles
lglobal.sectionMap = Map
lglobal.sectionGeneral = General
lglobal.sectionNetwork = Network/Clientside [World Processor Only]
lglobal.sectionProcessor = Processor
lglobal.sectionLookup = Lookup
lglobal.@this = The logic block executing the code
lglobal.@thisx = X coordinate of block executing the code
lglobal.@thisy = Y coordinate of block executing the code
lglobal.@links = Total number of blocks linked to this processors
lglobal.@ipt = Execution speed of the processor in instructions per tick (60 ticks = 1 second)
lglobal.@unitCount = Total number of types of unit content in the game; used with the lookup instruction
lglobal.@blockCount = Total number of types of block content in the game; used with the lookup instruction
lglobal.@itemCount = Total number of types of item content in the game; used with the lookup instruction
lglobal.@liquidCount = Total number of types of liquid content in the game; used with the lookup instruction
lglobal.@server = True if the code is running on a server or in singleplayer, false otherwise
lglobal.@client = True if the code is running on a client connected to a server
lglobal.@clientLocale = Locale of the client running the code. For example: en_US
lglobal.@clientUnit = Unit of client running the code
lglobal.@clientName = Player name of client running the code
lglobal.@clientTeam = Team ID of client running the code
lglobal.@clientMobile = True is the client running the code is on mobile, false otherwise
logic.nounitbuild = [red]Unit building logic is not allowed here.
lenum.type = Type of building/unit.\ne.g. for any router, this will return [accent]@router[].\nNot a string.
lenum.shoot = Shoot at a position.
@@ -2414,3 +2454,6 @@ lenum.flushtext = Flush print buffer's content to marker, if applicable.\nIf fet
lenum.texture = Texture name straight from game's texture atlas (using kebab-case naming style).\nIf printFlush is set to true, consumes text buffer content as text argument.
lenum.texturesize = Size of texture in tiles. Zero value scales marker width to original texture's size.
lenum.autoscale = Whether to scale marker corresponding to player's zoom level.
lenum.posi = Indexed position, used for line and quad markers with index zero being the first position.
lenum.uvi = Texture's position ranging from zero to one, used for quad markers.
lenum.colori = Indexed position, used for line and quad markers with index zero being the first color.
+44 -1
View File
@@ -495,6 +495,7 @@ editor.default = [lightgray]<ค่าเริ่มต้น>
details = รายละเอียด...
edit = แก้ไข...
variables = ตัวแปร
logic.globals = Built-in Variables
editor.name = ชื่อ:
editor.spawn = สร้างยูนิต
editor.removeunit = ลบยูนิต
@@ -672,10 +673,11 @@ objective.destroycore.name = ทำลายแกนกลาง
objective.commandmode.name = โหมดสั่งการ
objective.flag.name = ธง
marker.shapetext.name = ข้อความในรูปทรง
marker.minimap.name = มินิแมพ
marker.point.name = Point
marker.shape.name = รูปทรง
marker.text.name = ข้อความ
marker.line.name = Line
marker.quad.name = Quad
marker.background = พื้นหลัง
marker.outline = โครงร่าง
objective.research = [accent]วิจัย:\n[]{0}[lightgray]{1}
@@ -761,6 +763,7 @@ sector.missingresources = [scarlet]ขาดทรัพยากรในกา
sector.attacked = เซ็กเตอร์ [accent]{0}[white] ถูกโจมตี!
sector.lost = เราเสียเซ็กเตอร์ [accent]{0}[white]!
sector.capture = Sector [accent]{0}[white]Captured!
sector.capture.current = Sector Captured!
sector.changeicon = เปลี่ยนไอคอน
sector.noswitch.title = ไม่สามารถเปลี่ยนเซ็กเตอร์ได้
sector.noswitch = คุณไม่สามารถเปลี่ยนเซ็กเตอร์ได้ระหว่างที่อีกเซ็กเตอร์กำลังถูกโจมตีอยู่\n\nเซ็กเตอร์: [accent]{0}[] บนดาว [accent]{1}[]
@@ -1551,6 +1554,7 @@ block.inverted-sorter.name = เครื่องคัดแยกกลับ
block.message.name = กล่องข้อความ
block.reinforced-message.name = กล่องข้อความเสริมกำลัง
block.world-message.name = กล่องข้อความโลก
block.world-switch.name = World Switch
block.illuminator.name = ตัวเปล่งแสง
block.overflow-gate.name = ประตูระบาย
block.underflow-gate.name = ประตูระบายข้าง
@@ -2315,6 +2319,42 @@ lst.sync = Sync a variable across the network.\nOnly invoked 10 times a second a
lst.makemarker = Create a new logic marker in the world.\nAn ID to identify this marker must be provided.\nMarkers currently limited to 20,000 per world.
lst.setmarker = Set a property for a marker.\nThe ID used must be the same as in the Make Marker instruction.
lst.localeprint = Add map locale property value to the text buffer.\nTo set map locale bundles in map editor, check [accent]Map Info > Locale Bundles[].\nIf client is a mobile device, tries to print a property ending in ".mobile" first.
lglobal.false = 0
lglobal.true = 1
lglobal.null = null
lglobal.@pi = The mathematical constant pi (3.141...)
lglobal.@e = The mathematical constant e (2.718...)
lglobal.@degToRad = Multiply by this number to convert degrees to radians
lglobal.@radToDeg = Multiply by this number to convert radians to degrees
lglobal.@time = Playtime of current save, in milliseconds
lglobal.@tick = Playtime of current save, in ticks (1 second = 60 ticks)
lglobal.@second = Playtime of current save, in seconds
lglobal.@minute = Playtime of current save, in minutes
lglobal.@waveNumber = Current wave number, if waves are enabled
lglobal.@waveTime = Countdown timer for waves, in seconds
lglobal.@mapw = Map width in tiles
lglobal.@maph = Map height in tiles
lglobal.sectionMap = Map
lglobal.sectionGeneral = General
lglobal.sectionNetwork = Network/Clientside [World Processor Only]
lglobal.sectionProcessor = Processor
lglobal.sectionLookup = Lookup
lglobal.@this = The logic block executing the code
lglobal.@thisx = X coordinate of block executing the code
lglobal.@thisy = Y coordinate of block executing the code
lglobal.@links = Total number of blocks linked to this processors
lglobal.@ipt = Execution speed of the processor in instructions per tick (60 ticks = 1 second)
lglobal.@unitCount = Total number of types of unit content in the game; used with the lookup instruction
lglobal.@blockCount = Total number of types of block content in the game; used with the lookup instruction
lglobal.@itemCount = Total number of types of item content in the game; used with the lookup instruction
lglobal.@liquidCount = Total number of types of liquid content in the game; used with the lookup instruction
lglobal.@server = True if the code is running on a server or in singleplayer, false otherwise
lglobal.@client = True if the code is running on a client connected to a server
lglobal.@clientLocale = Locale of the client running the code. For example: en_US
lglobal.@clientUnit = Unit of client running the code
lglobal.@clientName = Player name of client running the code
lglobal.@clientTeam = Team ID of client running the code
lglobal.@clientMobile = True is the client running the code is on mobile, false otherwise
logic.nounitbuild = [red]ไม่อนุญาตให้ใช้ลอจิกควบคุมให้ยูนิตสร้างที่นี่
@@ -2471,3 +2511,6 @@ lenum.flushtext = Flush print buffer's content to marker, if applicable.\nIf fet
lenum.texture = Texture name straight from game's texture atlas (using kebab-case naming style).\nIf printFlush is set to true, consumes text buffer content as text argument.
lenum.texturesize = Size of texture in tiles. Zero value scales marker width to original texture's size.
lenum.autoscale = Whether to scale marker corresponding to player's zoom level.
lenum.posi = Indexed position, used for line and quad markers with index zero being the first position.
lenum.uvi = Texture's position ranging from zero to one, used for quad markers.
lenum.colori = Indexed position, used for line and quad markers with index zero being the first color.
+44 -1
View File
@@ -490,6 +490,7 @@ editor.default = [lightgray]<Default>
details = Details...
edit = Edit...
variables = Vars
logic.globals = Built-in Variables
editor.name = isim:
editor.spawn = Spawn Unit
editor.removeunit = Remove Unit
@@ -665,10 +666,11 @@ objective.destroycore.name = Destroy Core
objective.commandmode.name = Command Mode
objective.flag.name = Flag
marker.shapetext.name = Shape Text
marker.minimap.name = Minimap
marker.point.name = Point
marker.shape.name = Shape
marker.text.name = Text
marker.line.name = Line
marker.quad.name = Quad
marker.background = Background
marker.outline = Outline
objective.research = [accent]Research:\n[]{0}[lightgray]{1}
@@ -752,6 +754,7 @@ sector.missingresources = [scarlet]Insufficient Core Resources
sector.attacked = Sector [accent]{0}[white] under attack!
sector.lost = Sector [accent]{0}[white] lost!
sector.capture = Sector [accent]{0}[white]Captured!
sector.capture.current = Sector Captured!
sector.changeicon = Change Icon
sector.noswitch.title = Unable to Switch Sectors
sector.noswitch = You may not switch sectors while an existing sector is under attack.\n\nSector: [accent]{0}[] on [accent]{1}[]
@@ -1531,6 +1534,7 @@ block.inverted-sorter.name = Inverted Sorter
block.message.name = Message
block.reinforced-message.name = Reinforced Message
block.world-message.name = World Message
block.world-switch.name = World Switch
block.illuminator.name = Illuminator
block.overflow-gate.name = Kapali dagatici
block.underflow-gate.name = Underflow Gate
@@ -2278,6 +2282,42 @@ lst.sync = Sync a variable across the network.\nOnly invoked 10 times a second a
lst.makemarker = Create a new logic marker in the world.\nAn ID to identify this marker must be provided.\nMarkers currently limited to 20,000 per world.
lst.setmarker = Set a property for a marker.\nThe ID used must be the same as in the Make Marker instruction.
lst.localeprint = Add map locale property value to the text buffer.\nTo set map locale bundles in map editor, check [accent]Map Info > Locale Bundles[].\nIf client is a mobile device, tries to print a property ending in ".mobile" first.
lglobal.false = 0
lglobal.true = 1
lglobal.null = null
lglobal.@pi = The mathematical constant pi (3.141...)
lglobal.@e = The mathematical constant e (2.718...)
lglobal.@degToRad = Multiply by this number to convert degrees to radians
lglobal.@radToDeg = Multiply by this number to convert radians to degrees
lglobal.@time = Playtime of current save, in milliseconds
lglobal.@tick = Playtime of current save, in ticks (1 second = 60 ticks)
lglobal.@second = Playtime of current save, in seconds
lglobal.@minute = Playtime of current save, in minutes
lglobal.@waveNumber = Current wave number, if waves are enabled
lglobal.@waveTime = Countdown timer for waves, in seconds
lglobal.@mapw = Map width in tiles
lglobal.@maph = Map height in tiles
lglobal.sectionMap = Map
lglobal.sectionGeneral = General
lglobal.sectionNetwork = Network/Clientside [World Processor Only]
lglobal.sectionProcessor = Processor
lglobal.sectionLookup = Lookup
lglobal.@this = The logic block executing the code
lglobal.@thisx = X coordinate of block executing the code
lglobal.@thisy = Y coordinate of block executing the code
lglobal.@links = Total number of blocks linked to this processors
lglobal.@ipt = Execution speed of the processor in instructions per tick (60 ticks = 1 second)
lglobal.@unitCount = Total number of types of unit content in the game; used with the lookup instruction
lglobal.@blockCount = Total number of types of block content in the game; used with the lookup instruction
lglobal.@itemCount = Total number of types of item content in the game; used with the lookup instruction
lglobal.@liquidCount = Total number of types of liquid content in the game; used with the lookup instruction
lglobal.@server = True if the code is running on a server or in singleplayer, false otherwise
lglobal.@client = True if the code is running on a client connected to a server
lglobal.@clientLocale = Locale of the client running the code. For example: en_US
lglobal.@clientUnit = Unit of client running the code
lglobal.@clientName = Player name of client running the code
lglobal.@clientTeam = Team ID of client running the code
lglobal.@clientMobile = True is the client running the code is on mobile, false otherwise
logic.nounitbuild = [red]Unit building logic is not allowed here.
lenum.type = Type of building/unit.\ne.g. for any router, this will return [accent]@router[].\nNot a string.
lenum.shoot = Shoot at a position.
@@ -2414,3 +2454,6 @@ lenum.flushtext = Flush print buffer's content to marker, if applicable.\nIf fet
lenum.texture = Texture name straight from game's texture atlas (using kebab-case naming style).\nIf printFlush is set to true, consumes text buffer content as text argument.
lenum.texturesize = Size of texture in tiles. Zero value scales marker width to original texture's size.
lenum.autoscale = Whether to scale marker corresponding to player's zoom level.
lenum.posi = Indexed position, used for line and quad markers with index zero being the first position.
lenum.uvi = Texture's position ranging from zero to one, used for quad markers.
lenum.colori = Indexed position, used for line and quad markers with index zero being the first color.
+44 -1
View File
@@ -495,6 +495,7 @@ editor.default = [lightgray]<Varsayılan>
details = Detaylar...
edit = Düzenle...
variables = Değişkenler
logic.globals = Built-in Variables
editor.name = İsim:
editor.spawn = Birim Oluştur
editor.removeunit = Birim Kaldır
@@ -672,10 +673,11 @@ objective.destroycore.name = Merkezi Yok Et
objective.commandmode.name = Komuta Et
objective.flag.name = Bayrak
marker.shapetext.name = Şekilli Yazı
marker.minimap.name = Harita
marker.point.name = Point
marker.shape.name = Şekil
marker.text.name = Yazı
marker.line.name = Line
marker.quad.name = Quad
marker.background = Arkaplan
marker.outline = Anahat
objective.research = [accent]Araştır:\n[]{0}[lightgray]{1}
@@ -760,6 +762,7 @@ sector.missingresources = [scarlet]Yetersiz Merkez Kaynakları
sector.attacked = Sektör [accent]{0}[white] saldırı altında!
sector.lost = Sektör [accent]{0}[white] kaybedildi!
sector.capture = Sector [accent]{0}[white]Captured!
sector.capture.current = Sector Captured!
sector.changeicon = İkon Değiştir
sector.noswitch.title = Sektör Değiştirilemiyor
sector.noswitch = Bir Sektör saldırı altındayken başka bir sektöre geçemezsin.\n\nSektör: [accent]{1}[] deki [accent]{0}[]
@@ -1542,6 +1545,7 @@ block.inverted-sorter.name = Ters Ayıklayıcı
block.message.name = Mesaj Bloğu
block.reinforced-message.name = Güçlendirilmiş Mesaj Bloğu
block.world-message.name = Evrensel Mesaj Bloğu
block.world-switch.name = World Switch
block.illuminator.name = Aydınlatıcı
block.overflow-gate.name = Taşma Geçidi
block.underflow-gate.name = Yana Taşma Geçidi
@@ -2295,6 +2299,42 @@ lst.sync = Ağ boyunca bir değişkeni senkronize et.\nSaniyede en fazla 10 kere
lst.makemarker = Dünyada yeni bir İşlemci İşareti koy.\nBu İşarete bir Kimlik adamalısın.\nDünya başına 20.000 limit bulunmakta.
lst.setmarker = Bir İşlemci İşareti için bir arazi seç.\nKimlik, İşaret Koyucudaki ile aynı olmalı.
lst.localeprint = Add map locale property value to the text buffer.\nTo set map locale bundles in map editor, check [accent]Map Info > Locale Bundles[].\nIf client is a mobile device, tries to print a property ending in ".mobile" first.
lglobal.false = 0
lglobal.true = 1
lglobal.null = null
lglobal.@pi = The mathematical constant pi (3.141...)
lglobal.@e = The mathematical constant e (2.718...)
lglobal.@degToRad = Multiply by this number to convert degrees to radians
lglobal.@radToDeg = Multiply by this number to convert radians to degrees
lglobal.@time = Playtime of current save, in milliseconds
lglobal.@tick = Playtime of current save, in ticks (1 second = 60 ticks)
lglobal.@second = Playtime of current save, in seconds
lglobal.@minute = Playtime of current save, in minutes
lglobal.@waveNumber = Current wave number, if waves are enabled
lglobal.@waveTime = Countdown timer for waves, in seconds
lglobal.@mapw = Map width in tiles
lglobal.@maph = Map height in tiles
lglobal.sectionMap = Map
lglobal.sectionGeneral = General
lglobal.sectionNetwork = Network/Clientside [World Processor Only]
lglobal.sectionProcessor = Processor
lglobal.sectionLookup = Lookup
lglobal.@this = The logic block executing the code
lglobal.@thisx = X coordinate of block executing the code
lglobal.@thisy = Y coordinate of block executing the code
lglobal.@links = Total number of blocks linked to this processors
lglobal.@ipt = Execution speed of the processor in instructions per tick (60 ticks = 1 second)
lglobal.@unitCount = Total number of types of unit content in the game; used with the lookup instruction
lglobal.@blockCount = Total number of types of block content in the game; used with the lookup instruction
lglobal.@itemCount = Total number of types of item content in the game; used with the lookup instruction
lglobal.@liquidCount = Total number of types of liquid content in the game; used with the lookup instruction
lglobal.@server = True if the code is running on a server or in singleplayer, false otherwise
lglobal.@client = True if the code is running on a client connected to a server
lglobal.@clientLocale = Locale of the client running the code. For example: en_US
lglobal.@clientUnit = Unit of client running the code
lglobal.@clientName = Player name of client running the code
lglobal.@clientTeam = Team ID of client running the code
lglobal.@clientMobile = True is the client running the code is on mobile, false otherwise
logic.nounitbuild = [red]Birim İnşası Yasak!
@@ -2450,3 +2490,6 @@ lenum.flushtext = Flush print buffer's content to marker, if applicable.\nIf fet
lenum.texture = Texture name straight from game's texture atlas (using kebab-case naming style).\nIf printFlush is set to true, consumes text buffer content as text argument.
lenum.texturesize = Size of texture in tiles. Zero value scales marker width to original texture's size.
lenum.autoscale = Whether to scale marker corresponding to player's zoom level.
lenum.posi = Indexed position, used for line and quad markers with index zero being the first position.
lenum.uvi = Texture's position ranging from zero to one, used for quad markers.
lenum.colori = Indexed position, used for line and quad markers with index zero being the first color.
+44 -1
View File
@@ -497,6 +497,7 @@ editor.default = [lightgray]<За замовчуванням>
details = Подробиці…
edit = Змінити…
variables = Змінні
logic.globals = Built-in Variables
editor.name = Ім’я:
editor.spawn = Створити бойову одиницю
editor.removeunit = Видалити бойову одиницю
@@ -677,10 +678,11 @@ objective.commandmode.name = Режим командування
objective.flag.name = Прапорець
marker.shapetext.name = Форма тексту
marker.minimap.name = Мінімапа
marker.point.name = Point
marker.shape.name = Форма
marker.text.name = Текст
marker.line.name = Line
marker.quad.name = Quad
marker.background = Фон
marker.outline = Контур
@@ -769,6 +771,7 @@ sector.missingresources = [scarlet]Недостатньо ресурсів у я
sector.attacked = Сектор [accent]{0}[white] під атакою!
sector.lost = Сектор [accent]{0}[white] втрачено!
sector.capture = Sector [accent]{0}[white]Captured!
sector.capture.current = Sector Captured!
sector.changeicon = Змінити значок
sector.noswitch.title = Неможливо переключити сектори
sector.noswitch = Ви не можете змінювати сектори, поки поточний сектор піддається атаці.\n\nСектор: [accent]{0}[] на [accent]{1}[]
@@ -1555,6 +1558,7 @@ block.inverted-sorter.name = Зворотний сортувальник
block.message.name = Повідомлення
block.reinforced-message.name = Посилене повідомлення
block.world-message.name = Світове повідомлення
block.world-switch.name = World Switch
block.illuminator.name = Освітлювач
block.overflow-gate.name = Надмірний затвор
block.underflow-gate.name = Недостатній затвор
@@ -2322,6 +2326,42 @@ lst.sync = Sync a variable across the network.\nOnly invoked 10 times a second a
lst.makemarker = Create a new logic marker in the world.\nAn ID to identify this marker must be provided.\nMarkers currently limited to 20,000 per world.
lst.setmarker = Set a property for a marker.\nThe ID used must be the same as in the Make Marker instruction.
lst.localeprint = Add map locale property value to the text buffer.\nTo set map locale bundles in map editor, check [accent]Map Info > Locale Bundles[].\nIf client is a mobile device, tries to print a property ending in ".mobile" first.
lglobal.false = 0
lglobal.true = 1
lglobal.null = null
lglobal.@pi = The mathematical constant pi (3.141...)
lglobal.@e = The mathematical constant e (2.718...)
lglobal.@degToRad = Multiply by this number to convert degrees to radians
lglobal.@radToDeg = Multiply by this number to convert radians to degrees
lglobal.@time = Playtime of current save, in milliseconds
lglobal.@tick = Playtime of current save, in ticks (1 second = 60 ticks)
lglobal.@second = Playtime of current save, in seconds
lglobal.@minute = Playtime of current save, in minutes
lglobal.@waveNumber = Current wave number, if waves are enabled
lglobal.@waveTime = Countdown timer for waves, in seconds
lglobal.@mapw = Map width in tiles
lglobal.@maph = Map height in tiles
lglobal.sectionMap = Map
lglobal.sectionGeneral = General
lglobal.sectionNetwork = Network/Clientside [World Processor Only]
lglobal.sectionProcessor = Processor
lglobal.sectionLookup = Lookup
lglobal.@this = The logic block executing the code
lglobal.@thisx = X coordinate of block executing the code
lglobal.@thisy = Y coordinate of block executing the code
lglobal.@links = Total number of blocks linked to this processors
lglobal.@ipt = Execution speed of the processor in instructions per tick (60 ticks = 1 second)
lglobal.@unitCount = Total number of types of unit content in the game; used with the lookup instruction
lglobal.@blockCount = Total number of types of block content in the game; used with the lookup instruction
lglobal.@itemCount = Total number of types of item content in the game; used with the lookup instruction
lglobal.@liquidCount = Total number of types of liquid content in the game; used with the lookup instruction
lglobal.@server = True if the code is running on a server or in singleplayer, false otherwise
lglobal.@client = True if the code is running on a client connected to a server
lglobal.@clientLocale = Locale of the client running the code. For example: en_US
lglobal.@clientUnit = Unit of client running the code
lglobal.@clientName = Player name of client running the code
lglobal.@clientTeam = Team ID of client running the code
lglobal.@clientMobile = True is the client running the code is on mobile, false otherwise
logic.nounitbuild = [red]Будування за допомогою процесорів заборено.
@@ -2478,3 +2518,6 @@ lenum.flushtext = Flush print buffer's content to marker, if applicable.\nIf fet
lenum.texture = Texture name straight from game's texture atlas (using kebab-case naming style).\nIf printFlush is set to true, consumes text buffer content as text argument.
lenum.texturesize = Size of texture in tiles. Zero value scales marker width to original texture's size.
lenum.autoscale = Whether to scale marker corresponding to player's zoom level.
lenum.posi = Indexed position, used for line and quad markers with index zero being the first position.
lenum.uvi = Texture's position ranging from zero to one, used for quad markers.
lenum.colori = Indexed position, used for line and quad markers with index zero being the first color.
+44 -1
View File
@@ -496,6 +496,7 @@ editor.default = [lightgray]<Mặc định>
details = Chi tiết...
edit = Chỉnh sửa...
variables = Thông số
logic.globals = Built-in Variables
editor.name = Tên:
editor.spawn = Thêm kẻ địch
editor.removeunit = Xóa kẻ địch
@@ -673,10 +674,11 @@ objective.destroycore.name = Phá huỷ căn cứ
objective.commandmode.name = Chế độ ra lệnh
objective.flag.name = Cờ
marker.shapetext.name = Hình dạng văn bản
marker.minimap.name = Bản đồ nhỏ
marker.point.name = Point
marker.shape.name = Hình dạng
marker.text.name = Văn bản
marker.line.name = Line
marker.quad.name = Quad
marker.background = Nền
marker.outline = Đường viền
objective.research = [accent]Nghiên cứu:\n[]{0}[lightgray]{1}
@@ -761,6 +763,7 @@ sector.missingresources = [scarlet]Không đủ tài nguyên căn cứ
sector.attacked = Khu vực [accent]{0}[white] đang bị tấn công!
sector.lost = Khu vực [accent]{0}[white] đã mất!
sector.capture = Sector [accent]{0}[white]Captured!
sector.capture.current = Sector Captured!
sector.changeicon = Thay đổi biểu tượng
sector.noswitch.title = Không thể thay đổi sang khu vực khác
sector.noswitch = Bạn không thể đổi sang khu vực khác khi một khu vực đang bị tấn công.\n\nKhu vực: [accent]{0}[] ở [accent]{1}[]
@@ -1546,6 +1549,7 @@ block.inverted-sorter.name = Bộ lọc ngược
block.message.name = Thông điệp
block.reinforced-message.name = Thông điệp [Gia cố]
block.world-message.name = Thông điệp thế giới
block.world-switch.name = World Switch
block.illuminator.name = Đèn
block.overflow-gate.name = Cổng tràn
block.underflow-gate.name = Cổng tràn ngược
@@ -2296,6 +2300,42 @@ lst.sync = Đồng bộ giá trị biến qua mạng.\nChỉ gọi tối đa 10
lst.makemarker = Create a new logic marker in the world.\nAn ID to identify this marker must be provided.\nMarkers currently limited to 20,000 per world.
lst.setmarker = Set a property for a marker.\nThe ID used must be the same as in the Make Marker instruction.
lst.localeprint = Add map locale property value to the text buffer.\nTo set map locale bundles in map editor, check [accent]Map Info > Locale Bundles[].\nIf client is a mobile device, tries to print a property ending in ".mobile" first.
lglobal.false = 0
lglobal.true = 1
lglobal.null = null
lglobal.@pi = The mathematical constant pi (3.141...)
lglobal.@e = The mathematical constant e (2.718...)
lglobal.@degToRad = Multiply by this number to convert degrees to radians
lglobal.@radToDeg = Multiply by this number to convert radians to degrees
lglobal.@time = Playtime of current save, in milliseconds
lglobal.@tick = Playtime of current save, in ticks (1 second = 60 ticks)
lglobal.@second = Playtime of current save, in seconds
lglobal.@minute = Playtime of current save, in minutes
lglobal.@waveNumber = Current wave number, if waves are enabled
lglobal.@waveTime = Countdown timer for waves, in seconds
lglobal.@mapw = Map width in tiles
lglobal.@maph = Map height in tiles
lglobal.sectionMap = Map
lglobal.sectionGeneral = General
lglobal.sectionNetwork = Network/Clientside [World Processor Only]
lglobal.sectionProcessor = Processor
lglobal.sectionLookup = Lookup
lglobal.@this = The logic block executing the code
lglobal.@thisx = X coordinate of block executing the code
lglobal.@thisy = Y coordinate of block executing the code
lglobal.@links = Total number of blocks linked to this processors
lglobal.@ipt = Execution speed of the processor in instructions per tick (60 ticks = 1 second)
lglobal.@unitCount = Total number of types of unit content in the game; used with the lookup instruction
lglobal.@blockCount = Total number of types of block content in the game; used with the lookup instruction
lglobal.@itemCount = Total number of types of item content in the game; used with the lookup instruction
lglobal.@liquidCount = Total number of types of liquid content in the game; used with the lookup instruction
lglobal.@server = True if the code is running on a server or in singleplayer, false otherwise
lglobal.@client = True if the code is running on a client connected to a server
lglobal.@clientLocale = Locale of the client running the code. For example: en_US
lglobal.@clientUnit = Unit of client running the code
lglobal.@clientName = Player name of client running the code
lglobal.@clientTeam = Team ID of client running the code
lglobal.@clientMobile = True is the client running the code is on mobile, false otherwise
logic.nounitbuild = [red]Lô-gíc xây dựng đơn vị không được phép ở đây.
@@ -2451,3 +2491,6 @@ lenum.flushtext = Flush print buffer's content to marker, if applicable.\nIf fet
lenum.texture = Texture name straight from game's texture atlas (using kebab-case naming style).\nIf printFlush is set to true, consumes text buffer content as text argument.
lenum.texturesize = Size of texture in tiles. Zero value scales marker width to original texture's size.
lenum.autoscale = Whether to scale marker corresponding to player's zoom level.
lenum.posi = Indexed position, used for line and quad markers with index zero being the first position.
lenum.uvi = Texture's position ranging from zero to one, used for quad markers.
lenum.colori = Indexed position, used for line and quad markers with index zero being the first color.
+45 -2
View File
@@ -498,6 +498,7 @@ editor.default = [lightgray]<默认>
details = 详情…
edit = 编辑…
variables = 变量
logic.globals = Built-in Variables
editor.name = 名称:
editor.spawn = 生成单位
editor.removeunit = 移除单位
@@ -678,10 +679,11 @@ objective.commandmode.name = 指挥模式
objective.flag.name = 标签
marker.shapetext.name = 带形状文本
marker.minimap.name = 小地图
marker.point.name = Point
marker.shape.name = 形状
marker.text.name = 文本
marker.line.name = Line
marker.quad.name = Quad
marker.background = 背景
marker.outline = 轮廓
@@ -770,6 +772,7 @@ sector.missingresources = [scarlet]建造核心所需资源不足
sector.attacked = 区块[accent]{0}[white]受到攻击!
sector.lost = 区块[accent]{0}[white]已丢失!
sector.capture = Sector [accent]{0}[white]Captured!
sector.capture.current = Sector Captured!
sector.changeicon = 更改图标
sector.noswitch.title = 无法切换区块
sector.noswitch = 你无法在当前区块遭受攻击时切换区块。\n\n区块:[accent]{0}[]位于[accent]{1}[]
@@ -1556,6 +1559,7 @@ block.inverted-sorter.name = 反向分类器
block.message.name = 信息板
block.reinforced-message.name = 强化信息板
block.world-message.name = 世界信息板
block.world-switch.name = World Switch
block.illuminator.name = 照明器
block.overflow-gate.name = 溢流门
block.underflow-gate.name = 反向溢流门
@@ -1927,7 +1931,7 @@ onset.commandmode = 按住[accent]shift[]键进入[accent]指挥模式[]。\n按
onset.commandmode.mobile = 点击左下角的[accent]指挥[]进入[accent]指挥模式[]。\n按住屏幕,[accent]拖动[]框选单位。\n[accent]点击[]指挥所选单位移动或攻击。
aegis.tungsten = Tungsten can be mined using an [accent]impact drill[].\nThis structure requires [accent]water[] and [accent]power[].
split.pickup = 核心单位可以拾取一些方块。\n拾取这个[accent]强化容器[]并将其放到[accent]载荷装载器[]中。\n(默认使用[拾取,]放下载荷)
split.pickup = 核心单位可以拾取一些方块。\n拾取这个[accent]强化容器[]并将其放到[accent]载荷装载器[]中。\n(默认使用快捷键“[”拾取载荷,“]“放下载荷)
split.pickup.mobile = 核心单位可以拾取一些方块。\n拾取这个[accent]强化容器[]并将其放到[accent]载荷装载器[]中。\n(长按以拾取或放下载荷)
split.acquire = 你需要获取钨来生产单位。
split.build = 单位必须被运输到墙的另一侧。\n在墙壁两侧各放置一个[accent]载荷质量驱动器[]。\n点击其中一个,然后点击另一个以连接它们。
@@ -2321,6 +2325,42 @@ lst.sync = Sync a variable across the network.\nOnly invoked 10 times a second a
lst.makemarker = Create a new logic marker in the world.\nAn ID to identify this marker must be provided.\nMarkers currently limited to 20,000 per world.
lst.setmarker = Set a property for a marker.\nThe ID used must be the same as in the Make Marker instruction.
lst.localeprint = Add map locale property value to the text buffer.\nTo set map locale bundles in map editor, check [accent]Map Info > Locale Bundles[].\nIf client is a mobile device, tries to print a property ending in ".mobile" first.
lglobal.false = 0
lglobal.true = 1
lglobal.null = null
lglobal.@pi = The mathematical constant pi (3.141...)
lglobal.@e = The mathematical constant e (2.718...)
lglobal.@degToRad = Multiply by this number to convert degrees to radians
lglobal.@radToDeg = Multiply by this number to convert radians to degrees
lglobal.@time = Playtime of current save, in milliseconds
lglobal.@tick = Playtime of current save, in ticks (1 second = 60 ticks)
lglobal.@second = Playtime of current save, in seconds
lglobal.@minute = Playtime of current save, in minutes
lglobal.@waveNumber = Current wave number, if waves are enabled
lglobal.@waveTime = Countdown timer for waves, in seconds
lglobal.@mapw = Map width in tiles
lglobal.@maph = Map height in tiles
lglobal.sectionMap = Map
lglobal.sectionGeneral = General
lglobal.sectionNetwork = Network/Clientside [World Processor Only]
lglobal.sectionProcessor = Processor
lglobal.sectionLookup = Lookup
lglobal.@this = The logic block executing the code
lglobal.@thisx = X coordinate of block executing the code
lglobal.@thisy = Y coordinate of block executing the code
lglobal.@links = Total number of blocks linked to this processors
lglobal.@ipt = Execution speed of the processor in instructions per tick (60 ticks = 1 second)
lglobal.@unitCount = Total number of types of unit content in the game; used with the lookup instruction
lglobal.@blockCount = Total number of types of block content in the game; used with the lookup instruction
lglobal.@itemCount = Total number of types of item content in the game; used with the lookup instruction
lglobal.@liquidCount = Total number of types of liquid content in the game; used with the lookup instruction
lglobal.@server = True if the code is running on a server or in singleplayer, false otherwise
lglobal.@client = True if the code is running on a client connected to a server
lglobal.@clientLocale = Locale of the client running the code. For example: en_US
lglobal.@clientUnit = Unit of client running the code
lglobal.@clientName = Player name of client running the code
lglobal.@clientTeam = Team ID of client running the code
lglobal.@clientMobile = True is the client running the code is on mobile, false otherwise
logic.nounitbuild = [red]此处不允许处理器操控单位去建设
@@ -2477,3 +2517,6 @@ lenum.flushtext = Flush print buffer's content to marker, if applicable.\nIf fet
lenum.texture = Texture name straight from game's texture atlas (using kebab-case naming style).\nIf printFlush is set to true, consumes text buffer content as text argument.
lenum.texturesize = Size of texture in tiles. Zero value scales marker width to original texture's size.
lenum.autoscale = Whether to scale marker corresponding to player's zoom level.
lenum.posi = Indexed position, used for line and quad markers with index zero being the first position.
lenum.uvi = Texture's position ranging from zero to one, used for quad markers.
lenum.colori = Indexed position, used for line and quad markers with index zero being the first color.
+44 -1
View File
@@ -495,6 +495,7 @@ editor.default = [lightgray](預設)
details = 詳細資訊……
edit = 編輯……
variables = 變數
logic.globals = Built-in Variables
editor.name = 名稱:
editor.spawn = 重生單位
editor.removeunit = 移除單位
@@ -675,10 +676,11 @@ objective.commandmode.name = 指揮模式
objective.flag.name = 全局Flag
marker.shapetext.name = 稜框+文字標示
marker.minimap.name = 小地圖標示
marker.point.name = Point
marker.shape.name = 稜框標示
marker.text.name = 文字標示
marker.line.name = Line
marker.quad.name = Quad
marker.background = 反黑背景
marker.outline = 描邊
@@ -766,6 +768,7 @@ sector.missingresources = [scarlet]核心資源不足
sector.attacked = 地區 [accent]{0}[white] 遭受攻擊!
sector.lost = 地區 [accent]{0}[white] 戰敗!
sector.capture = Sector [accent]{0}[white]Captured!
sector.capture.current = Sector Captured!
sector.changeicon = 更改圖標
sector.noswitch.title = 無法切換地區
sector.noswitch = 當前地區遭受攻擊時,無法切換地區\n\n地區: [accent]{0}[] 於 [accent]{1}[]
@@ -1552,6 +1555,7 @@ block.inverted-sorter.name = 反向分類器
block.message.name = 訊息板
block.reinforced-message.name = Reinforced Message
block.world-message.name = World Message
block.world-switch.name = World Switch
block.illuminator.name = 照明燈
block.overflow-gate.name = 溢流器
block.underflow-gate.name = 反向溢流器
@@ -2307,6 +2311,42 @@ lst.sync = Sync a variable across the network.\nOnly invoked 10 times a second a
lst.makemarker = Create a new logic marker in the world.\nAn ID to identify this marker must be provided.\nMarkers currently limited to 20,000 per world.
lst.setmarker = Set a property for a marker.\nThe ID used must be the same as in the Make Marker instruction.
lst.localeprint = Add map locale property value to the text buffer.\nTo set map locale bundles in map editor, check [accent]Map Info > Locale Bundles[].\nIf client is a mobile device, tries to print a property ending in ".mobile" first.
lglobal.false = 0
lglobal.true = 1
lglobal.null = null
lglobal.@pi = The mathematical constant pi (3.141...)
lglobal.@e = The mathematical constant e (2.718...)
lglobal.@degToRad = Multiply by this number to convert degrees to radians
lglobal.@radToDeg = Multiply by this number to convert radians to degrees
lglobal.@time = Playtime of current save, in milliseconds
lglobal.@tick = Playtime of current save, in ticks (1 second = 60 ticks)
lglobal.@second = Playtime of current save, in seconds
lglobal.@minute = Playtime of current save, in minutes
lglobal.@waveNumber = Current wave number, if waves are enabled
lglobal.@waveTime = Countdown timer for waves, in seconds
lglobal.@mapw = Map width in tiles
lglobal.@maph = Map height in tiles
lglobal.sectionMap = Map
lglobal.sectionGeneral = General
lglobal.sectionNetwork = Network/Clientside [World Processor Only]
lglobal.sectionProcessor = Processor
lglobal.sectionLookup = Lookup
lglobal.@this = The logic block executing the code
lglobal.@thisx = X coordinate of block executing the code
lglobal.@thisy = Y coordinate of block executing the code
lglobal.@links = Total number of blocks linked to this processors
lglobal.@ipt = Execution speed of the processor in instructions per tick (60 ticks = 1 second)
lglobal.@unitCount = Total number of types of unit content in the game; used with the lookup instruction
lglobal.@blockCount = Total number of types of block content in the game; used with the lookup instruction
lglobal.@itemCount = Total number of types of item content in the game; used with the lookup instruction
lglobal.@liquidCount = Total number of types of liquid content in the game; used with the lookup instruction
lglobal.@server = True if the code is running on a server or in singleplayer, false otherwise
lglobal.@client = True if the code is running on a client connected to a server
lglobal.@clientLocale = Locale of the client running the code. For example: en_US
lglobal.@clientUnit = Unit of client running the code
lglobal.@clientName = Player name of client running the code
lglobal.@clientTeam = Team ID of client running the code
lglobal.@clientMobile = True is the client running the code is on mobile, false otherwise
logic.nounitbuild = [red]單位建造邏輯已被禁止。
@@ -2463,3 +2503,6 @@ lenum.flushtext = Flush print buffer's content to marker, if applicable.\nIf fet
lenum.texture = Texture name straight from game's texture atlas (using kebab-case naming style).\nIf printFlush is set to true, consumes text buffer content as text argument.
lenum.texturesize = Size of texture in tiles. Zero value scales marker width to original texture's size.
lenum.autoscale = Whether to scale marker corresponding to player's zoom level.
lenum.posi = Indexed position, used for line and quad markers with index zero being the first position.
lenum.uvi = Texture's position ranging from zero to one, used for quad markers.
lenum.colori = Indexed position, used for line and quad markers with index zero being the first color.
+1
View File
@@ -164,3 +164,4 @@ summoner
OpalSoPL
BalaM314
Redstonneur1256
ApsZoldat
Binary file not shown.
+1 -3
View File
@@ -2,7 +2,6 @@ uniform sampler2D u_texture;
uniform float u_time;
uniform float u_progress;
uniform vec4 u_color;
uniform vec2 u_uv;
uniform vec2 u_uv2;
uniform vec2 u_texsize;
@@ -14,8 +13,7 @@ void main(){
vec2 coords = (v_texCoords - u_uv) / (u_uv2 - u_uv);
vec2 v = vec2(1.0/u_texsize.x, 1.0/u_texsize.y);
vec4 c = texture2D(u_texture, v_texCoords);
vec4 c = texture2D(u_texture, v_texCoords);
c.a *= u_progress;
c.a *= step(abs(sin(coords.y*3.0 + u_time)), 0.9);
+1
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);
});
UI.loadColors();
batch = new SortedSpriteBatch();
assets = new AssetManager();
assets.setLoader(Texture.class, "." + mapExtension, new MapPreviewLoader());
+18 -5
View File
@@ -19,7 +19,23 @@ public class UnitGroup{
public int collisionLayer;
public volatile float[] positions, originalPositions;
public volatile boolean valid;
public long lastSpeedUpdate = -1;
public float minSpeed = 999999f;
public void updateMinSpeed(){
if(lastSpeedUpdate == Vars.state.updateId) return;
lastSpeedUpdate = Vars.state.updateId;
minSpeed = 999999f;
for(Unit unit : units){
//don't factor in the floor speed multiplier
Floor on = unit.isFlying() ? Blocks.air.asFloor() : unit.floorOn();
minSpeed = Math.min(unit.speed() / on.speedMultiplier, minSpeed);
}
if(Float.isInfinite(minSpeed) || Float.isNaN(minSpeed)) minSpeed = 999999f;
}
public void calculateFormation(Vec2 dest, int collisionLayer){
this.collisionLayer = collisionLayer;
@@ -33,19 +49,16 @@ public class UnitGroup{
cy /= units.size;
positions = new float[units.size * 2];
//all positions are relative to the center
for(int i = 0; i < units.size; i ++){
Unit unit = units.get(i);
positions[i * 2] = unit.x - cx;
positions[i * 2 + 1] = unit.y - cy;
unit.command().groupIndex = i;
//don't factor in the floor speed multiplier
Floor on = unit.isFlying() ? Blocks.air.asFloor() : unit.floorOn();
minSpeed = Math.min(unit.speed() / on.speedMultiplier, minSpeed);
}
if(Float.isInfinite(minSpeed) || Float.isNaN(minSpeed)) minSpeed = 999999f;
updateMinSpeed();
//run on new thread to prevent stutter
Vars.mainExecutor.submit(() -> {
@@ -148,6 +148,10 @@ public class CommandAI extends AIController{
}
}
if(group != null){
group.updateMinSpeed();
}
if(!net.client() && command == UnitCommand.enterPayloadCommand && unit.buildOn() != null && (targetPos == null || (world.buildWorld(targetPos.x, targetPos.y) != null && world.buildWorld(targetPos.x, targetPos.y) == unit.buildOn()))){
var build = unit.buildOn();
tmpPayload.unit = unit;
@@ -2,6 +2,8 @@ package mindustry.ai.types;
import arc.math.*;
import arc.util.*;
import mindustry.*;
import mindustry.entities.*;
import mindustry.entities.units.*;
import mindustry.gen.*;
@@ -29,6 +31,11 @@ public class MissileAI extends AIController{
}
}
@Override
public Teamc target(float x, float y, float range, boolean air, boolean ground){
return Units.closestTarget(unit.team, x, y, range, u -> u.checkTarget(air, ground), t -> ground && (!t.block.underBullets || (shooter != null && t == Vars.world.buildWorld(shooter.aimX, shooter.aimY))));
}
@Override
public boolean retarget(){
//more frequent retarget due to high speed. TODO won't this lag?
+19 -17
View File
@@ -2433,6 +2433,7 @@ public class Blocks{
itemDuration = 140f;
ambientSound = Sounds.pulse;
ambientSoundVolume = 0.07f;
liquidCapacity = 60f;
consumePower(25f);
consumeItem(Items.blastCompound);
@@ -4566,6 +4567,7 @@ public class Blocks{
loopSoundVolume = 0.6f;
deathSound = Sounds.largeExplosion;
targetAir = false;
targetUnderBlocks = false;
fogRadius = 6f;
@@ -5500,23 +5502,6 @@ public class Blocks{
);
}};
mechRefabricator = new Reconstructor("mech-refabricator"){{
requirements(Category.units, with(Items.beryllium, 250, Items.tungsten, 120, Items.silicon, 150));
regionSuffix = "-dark";
size = 3;
consumePower(2.5f);
consumeLiquid(Liquids.hydrogen, 3f / 60f);
consumeItems(with(Items.silicon, 50, Items.tungsten, 40));
constructTime = 60f * 45f;
researchCostMultiplier = 0.75f;
upgrades.addAll(
new UnitType[]{UnitTypes.merui, UnitTypes.cleroi}
);
}};
shipRefabricator = new Reconstructor("ship-refabricator"){{
requirements(Category.units, with(Items.beryllium, 200, Items.tungsten, 100, Items.silicon, 150, Items.oxide, 40));
regionSuffix = "-dark";
@@ -5535,6 +5520,23 @@ public class Blocks{
researchCost = with(Items.beryllium, 500, Items.tungsten, 200, Items.silicon, 300, Items.oxide, 80);
}};
mechRefabricator = new Reconstructor("mech-refabricator"){{
requirements(Category.units, with(Items.beryllium, 250, Items.tungsten, 120, Items.silicon, 150));
regionSuffix = "-dark";
size = 3;
consumePower(2.5f);
consumeLiquid(Liquids.hydrogen, 3f / 60f);
consumeItems(with(Items.silicon, 50, Items.tungsten, 40));
constructTime = 60f * 45f;
researchCostMultiplier = 0.75f;
upgrades.addAll(
new UnitType[]{UnitTypes.merui, UnitTypes.cleroi}
);
}};
//yes very silly name
primeRefabricator = new Reconstructor("prime-refabricator"){{
requirements(Category.units, with(Items.thorium, 250, Items.oxide, 200, Items.tungsten, 200, Items.silicon, 400));
@@ -4063,6 +4063,8 @@ public class UnitTypes{
isEnemy = false;
envDisabled = 0;
range = 60f;
faceTarget = true;
targetPriority = -2;
lowAltitude = false;
mineWalls = true;
@@ -4127,8 +4129,10 @@ public class UnitTypes{
isEnemy = false;
envDisabled = 0;
range = 60f;
targetPriority = -2;
lowAltitude = false;
faceTarget = true;
mineWalls = true;
mineFloor = false;
mineHardnessScaling = false;
@@ -4204,6 +4208,8 @@ public class UnitTypes{
isEnemy = false;
envDisabled = 0;
range = 65f;
faceTarget = true;
targetPriority = -2;
lowAltitude = false;
mineWalls = true;
+3 -2
View File
@@ -86,11 +86,12 @@ public class GameState{
}
public boolean isPaused(){
return is(State.paused);
return state == State.paused;
}
/** @return whether there is an unpaused game in progress. */
public boolean isPlaying(){
return (state == State.playing) || (state == State.paused && !isPaused());
return state == State.playing;
}
/** @return whether the current state is *not* the menu. */
+2 -4
View File
@@ -357,7 +357,8 @@ public class Logic implements ApplicationListener{
//map is over, no more world processor objective stuff
state.rules.disableWorldProcessors = true;
state.rules.objectives.clear();
Call.clearObjectives();
//save, just in case
if(!headless && !net.client()){
@@ -460,9 +461,6 @@ public class Logic implements ApplicationListener{
if(!state.isEditor()){
state.rules.objectives.update();
if(state.rules.objectives.checkChanged() && net.server()){
Call.setObjectives(state.rules.objectives);
}
}
if(state.rules.waves && state.rules.waveTimer && !state.gameOver){
+12 -4
View File
@@ -340,15 +340,23 @@ public class NetClient implements ApplicationListener{
state.rules = rules;
}
//NOTE: avoid using this, runs into packet/buffer size limitations
@Remote(variants = Variant.both)
public static void setObjectives(MapObjectives executor){
state.rules.objectives = executor;
}
@Remote(called = Loc.server)
public static void objectiveCompleted(String[] flagsRemoved, String[] flagsAdded){
state.rules.objectiveFlags.removeAll(flagsRemoved);
state.rules.objectiveFlags.addAll(flagsAdded);
@Remote(variants = Variant.both, called = Loc.server)
public static void clearObjectives(){
state.rules.objectives.clear();
}
@Remote(variants = Variant.both, called = Loc.server)
public static void completeObjective(int index){
var obj = state.rules.objectives.get(index);
if(obj != null){
obj.done();
}
}
@Remote(variants = Variant.both)
+6 -4
View File
@@ -372,18 +372,20 @@ public class Renderer implements ApplicationListener{
});
}
float scaleFactor = 4f / renderer.getDisplayScale();
//draw objective markers
state.rules.objectives.eachRunning(obj -> {
for(var marker : obj.markers){
if(!marker.minimap){
marker.drawWorld();
if(marker.world){
marker.draw(marker.autoscale ? scaleFactor : 1);
}
}
});
for(var marker : state.markers){
if(!marker.isHidden() && !marker.minimap){
marker.drawWorld();
if(marker.world){
marker.draw(marker.autoscale ? scaleFactor : 1);
}
}
+1 -3
View File
@@ -101,8 +101,6 @@ public class UI implements ApplicationListener, Loadable{
@Override
public void loadSync(){
loadColors();
Fonts.outline.getData().markupEnabled = true;
Fonts.def.getData().markupEnabled = true;
Fonts.def.setOwnsTexture(false);
@@ -281,7 +279,7 @@ public class UI implements ApplicationListener, Loadable{
public void showTextInput(String titleText, String text, int textLength, String def, boolean numbers, boolean allowEmpty, Cons<String> confirmed, Runnable closed){
if(mobile){
var description = text;
var description = (text.startsWith("@") ? Core.bundle.get(text.substring(1)) : text);
var empty = allowEmpty;
Core.input.getTextInput(new TextInput(){{
this.title = (titleText.startsWith("@") ? Core.bundle.get(titleText.substring(1)) : titleText);
@@ -115,6 +115,7 @@ public abstract class UnlockableContent extends MappableContent{
var result = Pixmaps.outline(base, outlineColor, outlineRadius);
Drawf.checkBleed(result);
packer.add(page, regName, result);
result.dispose();
}
}
}
@@ -126,6 +127,7 @@ public abstract class UnlockableContent extends MappableContent{
var result = Pixmaps.outline(base, outlineColor, outlineRadius);
Drawf.checkBleed(result);
packer.add(PageType.main, name, result);
result.dispose();
}
}
+13 -2
View File
@@ -301,6 +301,14 @@ public class MapEditor{
if(previous.in(px, py)){
tiles.set(x, y, previous.getn(px, py));
Tile tile = tiles.getn(x, y);
Object config = null;
//fetch the old config first, configs can be relative to block position (tileX/tileY) before those are reassigned
if(tile.build != null && tile.isCenter()){
config = tile.build.config();
}
tile.x = (short)x;
tile.y = (short)y;
@@ -309,9 +317,12 @@ public class MapEditor{
tile.build.y = y * tilesize + tile.block().offset;
//shift links to account for map resize
Object config = tile.build.config();
if(config != null){
Object out = BuildPlan.pointConfig(tile.block(), config, p -> p.sub(offsetX, offsetY));
Object out = BuildPlan.pointConfig(tile.block(), config, p -> {
if(!tile.build.block.ignoreResizeConfig){
p.sub(offsetX, offsetY);
}
});
if(out != config){
tile.build.configureAny(out);
}
@@ -91,6 +91,8 @@ public class MapLocalesDialog extends BaseDialog{
t.button("@edit", Icon.edit, this::editDialog).size(210f, 64f);
}).growX();
resized(this::buildMain);
buttons.button("?", () -> ui.showInfo("@locales.info")).size(60f, 64f).uniform();
shown(this::setup);
@@ -158,7 +160,7 @@ public class MapLocalesDialog extends BaseDialog{
saved = false;
buildMain();
}).padTop(10f).size(400f, 50f).fillX().row();
}).padTop(10f).size(cardWidth, 50f).fillX().row();
}).right();
}
@@ -184,7 +186,7 @@ public class MapLocalesDialog extends BaseDialog{
selectedLocale = name;
buildTables();
}).update(b -> b.setChecked(selectedLocale.equals(name))).size(300f, 50f);
}).update(b -> b.setChecked(selectedLocale.equals(name))).width(200f).minHeight(50f);
p.button(Icon.edit, Styles.flati, () -> localeEditDialog(name)).size(50f);
p.button(Icon.trash, Styles.flati, () -> ui.showConfirm("@confirm", "@locales.deletelocale", () -> {
locales.remove(name);
@@ -196,7 +198,7 @@ public class MapLocalesDialog extends BaseDialog{
}
}
}).row();
langs.button("@add", Icon.add, this::addLocaleDialog).padTop(10f).width(400f);
langs.button("@add", Icon.add, this::addLocaleDialog).padTop(10f).width(250f);
}
private void buildMain(){
@@ -206,7 +208,7 @@ public class MapLocalesDialog extends BaseDialog{
main.image().color(Pal.gray).height(3f).growX().expandY().top().row();
main.pane(p -> {
int cols = Math.max(1, (Core.graphics.getWidth() - 630) / ((int)cardWidth + 10));
int cols = Math.max(1, (int)((Core.graphics.getWidth() / Scl.scl() - 410f) / cardWidth) - 1);
if(props.size == 0){
main.add("@empty").center().row();
return;
@@ -512,7 +514,7 @@ public class MapLocalesDialog extends BaseDialog{
propView.image().color(Pal.gray).height(3f).fillX().top().row();
propView.pane(p -> {
int cols = (Core.graphics.getWidth() - 100) / ((int)cardWidth + 10);
int cols = Math.max(1, (int)((Core.graphics.getWidth() / Scl.scl() - 100f) / cardWidth));
if(cols == 0){
propView.add("@empty").center().row();
return;
@@ -720,7 +722,9 @@ public class MapLocalesDialog extends BaseDialog{
if(!locales.containsKey(key)) return "";
for(var prop : locales.get(key).entries()){
data.append(prop.key).append(" = ").append(prop.value).append("\n");
// Convert \n in plain text to \\n, then convert newlines to \n
data.append(prop.key).append(" = ").append(prop.value
.replace("\\n", "\\\\n").replace("\n", "\\n")).append("\n");
}
return data.toString();
@@ -738,7 +742,9 @@ public class MapLocalesDialog extends BaseDialog{
}else{
int sepIndex = line.indexOf(" = ");
if(sepIndex != -1 && !currentLocale.isEmpty()){
bundles.get(currentLocale).put(line.substring(0, sepIndex), line.substring(sepIndex + 3));
// Convert \n in file to newlines in text, then revert newlines with escape characters
bundles.get(currentLocale).put(line.substring(0, sepIndex), line.substring(sepIndex + 3)
.replace("\\n", "\n").replace("\\\n", "\\n"));
}
}
}
@@ -752,7 +758,9 @@ public class MapLocalesDialog extends BaseDialog{
for(var line : data.split("\\r?\\n|\\r")){
int sepIndex = line.indexOf(" = ");
if(sepIndex != -1){
map.put(line.substring(0, sepIndex), line.substring(sepIndex + 3));
// Convert \n in file to newlines in text, then revert newlines with escape characters
map.put(line.substring(0, sepIndex), line.substring(sepIndex + 3)
.replace("\\n", "\n").replace("\\\n", "\\n"));
}
}
@@ -246,6 +246,38 @@ public class MapObjectivesDialog extends BaseDialog{
show();
}});
setInterpreter(Vertices.class, float[].class, (cont, name, type, field, remover, indexer, get, set) -> cont.table(main -> {
float[] data = get.get();
name(cont, name, remover, indexer);
cont.table(t -> {
t.left().defaults().left();
String[] names = {"x", "y", "color", "u", "v"};
int stride = 6;
int vertices = data.length / stride;
for(int i = 0; i < vertices; i++){
int offset = i * stride;
t.table(row -> {
for(int j = 0; j < names.length; j++){
int index = offset + j;
if("color".equals(names[j])) {
getInterpreter(Color.class).build(row, names[j], new TypeInfo(Color.class), null, null, null, () -> new Color().abgr8888(data[index]), value -> data[index] = value.toFloatBits());
}else{
float scale = j <= 1 ? tilesize : 1;
getInterpreter(float.class).build(row, names[j], new TypeInfo(float.class), null, null, null, () -> data[index] / scale, value -> data[index] = value * scale);
}
row.add().pad(4);
}
}).row();
}
});
}));
// Types that use the default interpreter. It would be nice if all types could use it, but I don't know how to reliably prevent classes like [? extends Content] from using it.
for(var obj : MapObjectives.allObjectiveTypes) setInterpreter(obj.get().getClass(), defaultInterpreter());
for(var mark : MapObjectives.allMarkerTypes) setInterpreter(mark.get().getClass(), defaultInterpreter());
@@ -290,10 +322,12 @@ public class MapObjectivesDialog extends BaseDialog{
t.button(Icon.downOpen, Styles.emptyi, () -> indexer.get(false)).fill().padRight(4f);
}
t.button(Icon.add, Styles.emptyi, () -> getProvider(type.element.raw).get(type.element, res -> {
arr.add(res);
rebuild[0].run();
})).fill();
if(!field.isAnnotationPresent(Immutable.class)) {
t.button(Icon.add, Styles.emptyi, () -> getProvider(type.element.raw).get(type.element, res -> {
arr.add(res);
rebuild[0].run();
})).fill();
}
}).growX().height(46f).pad(0f, -10f, 0f, -10f).get();
main.row().table(Tex.button, t -> rebuild[0] = () -> {
@@ -312,10 +346,10 @@ public class MapObjectivesDialog extends BaseDialog{
getInterpreter((Class<Object>)arr.get(index).getClass()).build(
t, "", new TypeInfo(arr.get(index).getClass()),
field, () -> {
field, field == null || !field.isAnnotationPresent(Immutable.class) ? () -> {
arr.remove(index);
rebuild[0].run();
}, field == null || !field.isAnnotationPresent(Unordered.class) ? in -> {
} : null, field == null || !field.isAnnotationPresent(Unordered.class) ? in -> {
if(in && index > 0){
arr.swap(index, index - 1);
rebuild[0].run();
+12 -2
View File
@@ -192,8 +192,18 @@ public class Units{
/** Returns the nearest enemy tile in a range. */
public static Building findEnemyTile(Team team, float x, float y, float range, Boolf<Building> pred){
return findEnemyTile(team, x, y, range, false, pred);
}
/** Returns the nearest enemy tile in a range. */
public static Building findEnemyTile(Team team, float x, float y, float range, boolean checkUnder, Boolf<Building> pred){
if(team == Team.derelict) return null;
if(checkUnder){
Building target = indexer.findEnemyTile(team, x, y, range, build -> !build.block.underBullets && pred.get(build));
if(target != null) return target;
}
return indexer.findEnemyTile(team, x, y, range, pred);
}
@@ -243,7 +253,7 @@ public class Units{
if(unit != null){
return unit;
}else{
return findEnemyTile(team, x, y, range, tilePred);
return findEnemyTile(team, x, y, range, true, tilePred);
}
}
@@ -255,7 +265,7 @@ public class Units{
if(unit != null){
return unit;
}else{
return findEnemyTile(team, x, y, range, tilePred);
return findEnemyTile(team, x, y, range, true, tilePred);
}
}
@@ -12,10 +12,20 @@ import mindustry.world.meta.*;
public class ArmorPlateAbility extends Ability{
public TextureRegion plateRegion;
public Color color = Color.valueOf("d1efff");
public TextureRegion shineRegion;
public String plateSuffix = "-armor";
public String shineSuffix = "-shine";
/** Color of the shine. If null, uses team color. */
public @Nullable Color color = null;
public float shineSpeed = 1f;
public float z = -1;
/** Whether to draw the plate region. */
public boolean drawPlate = true;
/** Whether to draw the shine over the plate region. */
public boolean drawShine = true;
public float healthMultiplier = 0.2f;
public float z = Layer.effect;
protected float warmup;
@@ -34,24 +44,39 @@ public class ArmorPlateAbility extends Ability{
@Override
public void draw(Unit unit){
if(!drawPlate && !drawShine) return;
if(warmup > 0.001f){
if(plateRegion == null){
plateRegion = Core.atlas.find(unit.type.name + "-armor", unit.type.region);
plateRegion = Core.atlas.find(unit.type.name + plateSuffix, unit.type.region);
shineRegion = Core.atlas.find(unit.type.name + shineSuffix, plateRegion);
}
Draw.draw(z <= 0 ? Draw.z() : z, () -> {
Shaders.armor.region = plateRegion;
Shaders.armor.progress = warmup;
Shaders.armor.time = -Time.time / 20f;
float pz = Draw.z();
if(z > 0) Draw.z(z);
Draw.rect(Shaders.armor.region, unit.x, unit.y, unit.rotation - 90f);
Draw.color(color);
Draw.shader(Shaders.armor);
Draw.rect(Shaders.armor.region, unit.x, unit.y, unit.rotation - 90f);
Draw.shader();
if(drawPlate){
Draw.alpha(warmup);
Draw.rect(plateRegion, unit.x, unit.y, unit.rotation - 90f);
Draw.alpha(1f);
}
Draw.reset();
});
if(drawShine){
Draw.draw(Draw.z(), () -> {
Shaders.armor.region = shineRegion;
Shaders.armor.progress = warmup;
Shaders.armor.time = -Time.time / 20f * shineSpeed;
Draw.color(color == null ? unit.team.color : color);
Draw.shader(Shaders.armor);
Draw.rect(shineRegion, unit.x, unit.y, unit.rotation - 90f);
Draw.shader();
Draw.reset();
});
}
Draw.z(pz);
}
}
}
@@ -174,6 +174,8 @@ public class BulletType extends Content implements Cloneable{
public float fragVelocityMin = 0.2f, fragVelocityMax = 1f;
/** Random range of frag lifetime as a multiplier. */
public float fragLifeMin = 1f, fragLifeMax = 1f;
/** Random offset of frag bullets from the parent bullet. */
public float fragOffsetMin = 1f, fragOffsetMax = 7f;
/** Bullet that is created at a fixed interval. */
public @Nullable BulletType intervalBullet;
@@ -387,14 +389,14 @@ public class BulletType extends Content implements Cloneable{
if(entity instanceof Healthc h){
float damage = b.damage;
float shield = entity instanceof Shieldc s ? Math.max(s.shield(), 0f) : 0f;
if(maxDamageFraction > 0){
float cap = h.maxHealth() * maxDamageFraction;
if(entity instanceof Shieldc s){
cap += Math.max(s.shield(), 0f);
}
float cap = h.maxHealth() * maxDamageFraction + shield;
damage = Math.min(damage, cap);
//cap health to effective health for handlePierce to handle it properly
health = Math.min(health, cap);
}else{
health += shield;
}
if(pierceArmor){
h.damagePierce(damage);
@@ -509,7 +511,7 @@ public class BulletType extends Content implements Cloneable{
public void createFrags(Bullet b, float x, float y){
if(fragBullet != null && (fragOnAbsorb || !b.absorbed)){
for(int i = 0; i < fragBullets; i++){
float len = Mathf.random(1f, 7f);
float len = Mathf.random(fragOffsetMin, fragOffsetMax);
float a = b.rotation() + Mathf.range(fragRandomSpread / 2) + fragAngle + ((i - fragBullets/2) * fragSpread);
fragBullet.create(b, x + Angles.trnsx(a, len), y + Angles.trnsy(a, len), a, Mathf.random(fragVelocityMin, fragVelocityMax), Mathf.random(fragLifeMin, fragLifeMax));
}
@@ -86,9 +86,9 @@ abstract class BuilderComp implements Posc, Statusc, Teamc, Rotc{
buildAlpha = Mathf.lerpDelta(buildAlpha, activelyBuilding() ? 1f : 0f, 0.15f);
}
//validate regardless of whether building is enabled.
validatePlans();
if(!updateBuilding || !canBuild()){
validatePlans();
return;
}
@@ -99,19 +99,18 @@ abstract class BuilderComp implements Posc, Statusc, Teamc, Rotc{
if(Float.isNaN(buildCounter) || Float.isInfinite(buildCounter)) buildCounter = 0f;
buildCounter = Math.min(buildCounter, 10f);
boolean instant = state.rules.instantBuild && state.rules.infiniteResources;
//random attempt to fix a freeze that only occurs on Android
int maxPerFrame = 10, count = 0;
int maxPerFrame = instant ? plans.size : 10, count = 0;
while(buildCounter >= 1 && count++ < maxPerFrame){
var core = core();
if((core == null && !infinite)) return;
while((buildCounter >= 1 || instant) && count++ < maxPerFrame && plans.size > 0){
buildCounter -= 1f;
validatePlans();
var core = core();
//nothing to build, or core doesn't exist
if(buildPlan() == null || (core == null && !infinite)) return;
//find the next build plan
if(plans.size > 1){
int total = 0;
@@ -127,10 +127,10 @@ abstract class StatusComp implements Posc, Flyingc{
return entry;
}
/** Uses a dynamic status effect to override speed. */
/** Uses a dynamic status effect to override speed (in tiles/second). */
public void statusSpeed(float speed){
//type.speed should never be 0
applyDynamicStatus().speedMultiplier = speed / type.speed;
applyDynamicStatus().speedMultiplier = speed / (type.speed * 60f / tilesize);
}
/** Uses a dynamic status effect to change damage. */
@@ -21,18 +21,32 @@ public class SoundEffect extends Effect{
public Effect effect;
public SoundEffect(){
startDelay = -1;
}
public SoundEffect(Sound sound, Effect effect){
this();
this.sound = sound;
this.effect = effect;
}
@Override
public void init(){
if(startDelay < 0){
startDelay = effect.startDelay;
}
}
@Override
public void create(float x, float y, float rotation, Color color, Object data){
if(!shouldCreate()) return;
sound.at(x, y, Mathf.random(minPitch, maxPitch), Mathf.random(minVolume, maxVolume));
if(startDelay > 0){
Time.run(startDelay, () -> sound.at(x, y, Mathf.random(minPitch, maxPitch), Mathf.random(minVolume, maxVolume)));
}else{
sound.at(x, y, Mathf.random(minPitch, maxPitch), Mathf.random(minVolume, maxVolume));
}
effect.create(x, y, rotation, color, data);
}
}
+12 -2
View File
@@ -85,8 +85,10 @@ public abstract class DrawPart{
/** Weapon heat, 1 when just fired, 0, when it has cooled down (duration depends on weapon) */
heat = p -> p.heat,
/** Lifetime fraction, 0 to 1. Only for missiles. */
life = p -> p.life;
life = p -> p.life,
/** Current unscaled value of Time.time. */
time = p -> Time.time;
float get(PartParams p);
static PartProgress constant(float value){
@@ -167,6 +169,14 @@ public abstract class DrawPart{
default PartProgress absin(float scl, float mag){
return p -> get(p) + Mathf.absin(scl, mag);
}
default PartProgress mod(float amount){
return p -> Mathf.mod(get(p), amount);
}
default PartProgress loop(float time){
return p -> Mathf.mod(get(p)/time, 1);
}
default PartProgress apply(PartProgress other, PartFunc func){
return p -> func.get(get(p), other.get(p));
@@ -227,7 +227,7 @@ public class AIController implements UnitController{
}
public Teamc target(float x, float y, float range, boolean air, boolean ground){
return Units.closestTarget(unit.team, x, y, range, u -> u.checkTarget(air, ground), t -> ground);
return Units.closestTarget(unit.team, x, y, range, u -> u.checkTarget(air, ground), t -> ground && (unit.type.targetUnderBlocks || !t.block.underBullets));
}
public boolean retarget(){
+1
View File
@@ -35,6 +35,7 @@ public enum Gamemode{
}, map -> map.teams.size > 1),
editor(true, rules -> {
rules.infiniteResources = true;
rules.instantBuild = true;
rules.editor = true;
rules.waves = false;
rules.waveTimer = false;
+212 -147
View File
@@ -39,8 +39,6 @@ public class MapObjectives implements Iterable<MapObjective>, Eachable<MapObject
* @see #eachRunning(Cons)
*/
public Seq<MapObjective> all = new Seq<>(4);
/** @see #checkChanged() */
protected transient boolean changed;
static{
registerObjective(
@@ -61,12 +59,15 @@ public class MapObjectives implements Iterable<MapObjective>, Eachable<MapObject
registerMarker(
ShapeTextMarker::new,
MinimapMarker::new,
PointMarker::new,
ShapeMarker::new,
TextMarker::new,
LineMarker::new,
TextureMarker::new
TextureMarker::new,
QuadMarker::new
);
registerLegacyMarker("Minimap", PointMarker::new);
}
@SafeVarargs
@@ -96,6 +97,15 @@ public class MapObjectives implements Iterable<MapObjective>, Eachable<MapObject
}
}
public static void registerLegacyMarker(String name, Prov<? extends ObjectiveMarker> prov) {
Class<?> type = prov.get().getClass();
markerNameToType.put(name, prov);
markerNameToType.put(Strings.camelize(name), prov);
JsonIO.classTag(Strings.camelize(name), type);
JsonIO.classTag(name, type);
}
/** Adds all given objectives to the executor as root objectives. */
public void add(MapObjective... objectives){
for(var objective : objectives) flatten(objective);
@@ -114,21 +124,13 @@ public class MapObjectives implements Iterable<MapObjective>, Eachable<MapObject
eachRunning(obj -> {
//objectives cannot get completed on the client, but they do try to update for timers and such
if(obj.update() && !net.client()){
obj.completed = true;
obj.done();
Call.completeObjective(all.indexOf(obj));
}
changed |= obj.changed;
obj.changed = false;
});
}
/** @return True if map rules should be synced. Reserved for {@link Vars#logic}; do not invoke directly! */
public boolean checkChanged(){
boolean has = changed;
changed = false;
return has;
public @Nullable MapObjective get(int index){
return index < 0 || index >= all.size ? null : all.get(index);
}
/** @return Whether there are any qualified objectives at all. */
@@ -137,7 +139,6 @@ public class MapObjectives implements Iterable<MapObjective>, Eachable<MapObject
}
public void clear(){
if(all.size > 0) changed = true;
all.clear();
}
@@ -179,7 +180,7 @@ public class MapObjectives implements Iterable<MapObjective>, Eachable<MapObject
/** Whether this objective has been done yet. This is internally set. */
private boolean completed;
/** Internal value. Do not modify! */
private transient boolean depFinished, changed;
private transient boolean depFinished;
/** @return True if this objective is done and should be removed from the executor. */
public abstract boolean update();
@@ -189,13 +190,9 @@ public class MapObjectives implements Iterable<MapObjective>, Eachable<MapObject
/** Called once after {@link #update()} returns true, before this objective is removed. */
public void done(){
changed();
Call.objectiveCompleted(flagsRemoved, flagsAdded);
}
/** Notifies the executor that map rules should be synced. */
protected void changed(){
changed = true;
state.rules.objectiveFlags.removeAll(flagsRemoved);
state.rules.objectiveFlags.addAll(flagsAdded);
completed = true;
}
/** @return True if all {@link #parents} are completed, rendering this objective able to execute. */
@@ -617,38 +614,26 @@ public class MapObjectives implements Iterable<MapObjective>, Eachable<MapObject
/** Internal use only! Do not access. */
public transient int arrayIndex;
/** Whether to display marker on minimap instead of world. {@link MinimapMarker} ignores this value. */
/** Whether to display marker in the world. */
public boolean world = true;
/** Whether to display marker on minimap. */
public boolean minimap = false;
/** Whether to scale marker corresponding to player's zoom level. {@link MinimapMarker} ignores this value. */
/** Whether to scale marker corresponding to player's zoom level. */
public boolean autoscale = false;
/** Hides the marker, used by world processors. */
protected boolean hidden = false;
/** On which z-sorting layer is marker drawn. */
protected float drawLayer = Layer.overlayUI;
/** Draws the marker. Actual marker position and scale are calculated in {@link #drawWorld()} and {@link #drawMinimap(MinimapRenderer)}. */
public void baseDraw(float x, float y, float scaleFactor){}
/** Called in the main renderer. */
public void drawWorld(){}
/** Called in the small and large map. */
public void drawMinimap(MinimapRenderer minimap){}
/** Whether the marker is hidden */
public boolean isHidden(){
return hidden;
}
public void draw(float scaleFactor){}
/** Control marker with world processor code. Ignores NaN (null) values. */
public void control(LMarkerControl type, double p1, double p2, double p3){
if(Double.isNaN(p1)) return;
switch(type){
case visibility -> hidden = Mathf.equal((float)p1, 0f);
case drawLayer -> drawLayer = (float)p1;
case world -> world = !Mathf.equal((float)p1, 0f);
case minimap -> minimap = !Mathf.equal((float)p1, 0f);
case autoscale -> autoscale = !Mathf.equal((float)p1, 0f);
case drawLayer -> drawLayer = (float)p1;
}
}
@@ -688,34 +673,19 @@ public class MapObjectives implements Iterable<MapObjective>, Eachable<MapObject
/** Position of marker, in world coordinates */
public @TilePos Vec2 pos = new Vec2();
/** Called in the main renderer. */
@Override
public void drawWorld(){
baseDraw(pos.x, pos.y, autoscale ? 4f / renderer.getDisplayScale() : 1f);
}
/** Called in the small and large map. */
@Override
public void drawMinimap(MinimapRenderer minimap){
minimap.transform(Tmp.v1.set(pos.x + 4f, pos.y + 4f));
baseDraw(Tmp.v1.x, Tmp.v1.y, minimap.getScaleFactor(autoscale));
}
@Override
public void control(LMarkerControl type, double p1, double p2, double p3){
super.control(type, p1, p2, p3);
if(!Double.isNaN(p1)){
if(type == LMarkerControl.pos){
pos.x = (float)p1 * tilesize;
}else{
super.control(type, p1, p2, p3);
}
}
if(!Double.isNaN(p2)){
if(type == LMarkerControl.pos){
pos.y = (float)p2 * tilesize;
}else{
super.control(type, p1, p2, p3);
}
}
}
@@ -763,15 +733,15 @@ public class MapObjectives implements Iterable<MapObjective>, Eachable<MapObject
public ShapeTextMarker(){}
@Override
public void baseDraw(float x, float y, float scaleFactor){
public void draw(float scaleFactor){
//in case some idiot decides to make 9999999 sides and freeze the game
int sides = Math.min(this.sides, 300);
Draw.z(drawLayer);
Lines.stroke(3f * scaleFactor, Pal.gray);
Lines.poly(x, y, sides, (radius + 1f) * scaleFactor, rotation);
Lines.poly(pos.x, pos.y, sides, (radius + 1f) * scaleFactor, rotation);
Lines.stroke(scaleFactor, color);
Lines.poly(x, y, sides, (radius + 1f) * scaleFactor, rotation);
Lines.poly(pos.x, pos.y, sides, (radius + 1f) * scaleFactor, rotation);
Draw.reset();
if(fetchedText == null){
@@ -781,11 +751,13 @@ public class MapObjectives implements Iterable<MapObjective>, Eachable<MapObject
// font size cannot be 0
if(Mathf.equal(fontSize, 0f)) return;
WorldLabel.drawAt(fetchedText, x, y + radius * scaleFactor + textHeight * scaleFactor, drawLayer, flags, fontSize * scaleFactor);
WorldLabel.drawAt(fetchedText, pos.x, pos.y + radius * scaleFactor + textHeight * scaleFactor, drawLayer, flags, fontSize * scaleFactor);
}
@Override
public void control(LMarkerControl type, double p1, double p2, double p3){
super.control(type, p1, p2, p3);
if(!Double.isNaN(p1)){
switch(type){
case fontSize -> fontSize = (float)p1;
@@ -799,9 +771,8 @@ public class MapObjectives implements Iterable<MapObjective>, Eachable<MapObject
}
case radius -> radius = (float)p1;
case rotation -> rotation = (float)p1;
case color -> color.set(Tmp.c1.fromDouble(p1));
case color -> color.fromDouble(p1);
case shape -> sides = (int)p1;
default -> super.control(type, p1, p2, p3);
}
}
@@ -814,7 +785,6 @@ public class MapObjectives implements Iterable<MapObjective>, Eachable<MapObject
flags &= ~WorldLabel.flagOutline;
}
}
default -> super.control(type, p1, p2, p3);
}
}
}
@@ -830,73 +800,50 @@ public class MapObjectives implements Iterable<MapObjective>, Eachable<MapObject
}
}
/** Displays a circle on the minimap. */
public static class MinimapMarker extends ObjectiveMarker{
public Point2 pos = new Point2();
/** Displays a circle in the world. */
public static class PointMarker extends PosMarker{
public float radius = 5f, stroke = 11f;
public Color color = Color.valueOf("f25555");
public MinimapMarker(int x, int y){
public PointMarker(int x, int y){
this.pos.set(x, y);
}
public MinimapMarker(int x, int y, Color color){
public PointMarker(int x, int y, Color color){
this.pos.set(x, y);
this.color = color;
minimap = true;
}
public MinimapMarker(int x, int y, float radius, float stroke, Color color){
public PointMarker(int x, int y, float radius, float stroke, Color color){
this.pos.set(x, y);
this.stroke = stroke;
this.radius = radius;
this.color = color;
minimap = true;
}
public MinimapMarker(){}
public PointMarker(){}
@Override
public void baseDraw(float x, float y, float scaleFactor){
public void draw(float scaleFactor){
float rad = radius * tilesize * scaleFactor;
float fin = Interp.pow2Out.apply((Time.globalTime / 100f) % 1f);
Draw.z(drawLayer);
Lines.stroke(Scl.scl((1f - fin) * stroke + 0.1f), color);
Lines.circle(x, y, rad * fin);
Lines.circle(pos.x, pos.y, rad * fin);
Draw.reset();
}
@Override
public void drawWorld(){
minimap = true;
}
@Override
public void drawMinimap(MinimapRenderer minimap){
minimap.transform(Tmp.v1.set(pos.x * tilesize, pos.y * tilesize));
baseDraw(Tmp.v1.x, Tmp.v1.y, minimap.getScaleFactor(autoscale));
}
@Override
public void control(LMarkerControl type, double p1, double p2, double p3){
super.control(type, p1, p2, p3);
if(!Double.isNaN(p1)){
switch(type){
case pos -> pos.x = (int)p1;
case radius -> radius = (float)p1;
case stroke -> stroke = (float)p1;
case color -> color.set(Tmp.c1.fromDouble(p1));
case minimap -> minimap = true;
default -> super.control(type, p1, p2, p3);
}
}
if(!Double.isNaN(p2)){
if(type == LMarkerControl.pos){
pos.y = (int)p2;
}else{
super.control(type, p1, p2, p3);
case color -> color.fromDouble(p1);
}
}
}
@@ -922,7 +869,7 @@ public class MapObjectives implements Iterable<MapObjective>, Eachable<MapObject
public ShapeMarker(){}
@Override
public void baseDraw(float x, float y, float scaleFactor){
public void draw(float scaleFactor){
//in case some idiot decides to make 9999999 sides and freeze the game
int sides = Math.min(this.sides, 200);
@@ -930,14 +877,14 @@ public class MapObjectives implements Iterable<MapObjective>, Eachable<MapObject
if(!fill){
if(outline){
Lines.stroke((stroke + 2f) * scaleFactor, Pal.gray);
Lines.poly(x, y, sides, (radius + 1f) * scaleFactor, rotation);
Lines.poly(pos.x, pos.y, sides, (radius + 1f) * scaleFactor, rotation);
}
Lines.stroke(stroke * scaleFactor, color);
Lines.poly(x, y, sides, (radius + 1f) * scaleFactor, rotation);
Lines.poly(pos.x, pos.y, sides, (radius + 1f) * scaleFactor, rotation);
}else{
Draw.color(color);
Fill.poly(x, y, sides, radius * scaleFactor, rotation);
Fill.poly(pos.x, pos.y, sides, radius * scaleFactor, rotation);
}
Draw.reset();
@@ -945,29 +892,27 @@ public class MapObjectives implements Iterable<MapObjective>, Eachable<MapObject
@Override
public void control(LMarkerControl type, double p1, double p2, double p3){
super.control(type, p1, p2, p3);
if(!Double.isNaN(p1)){
switch(type){
case radius -> radius = (float)p1;
case stroke -> stroke = (float)p1;
case rotation -> rotation = (float)p1;
case color -> color.set(Tmp.c1.fromDouble(p1));
case color -> color.fromDouble(p1);
case shape -> sides = (int)p1;
default -> super.control(type, p1, p2, p3);
}
}
if(!Double.isNaN(p2)){
switch(type){
case shape -> fill = !Mathf.equal((float)p2, 0f);
default -> super.control(type, p1, p2, p3);
}
}
if(!Double.isNaN(p3)){
if(type == LMarkerControl.shape){
outline = !Mathf.equal((float)p3, 0f);
}else{
super.control(type, p1, p2, p3);
}
}
}
@@ -996,7 +941,7 @@ public class MapObjectives implements Iterable<MapObjective>, Eachable<MapObject
public TextMarker(){}
@Override
public void baseDraw(float x, float y, float scaleFactor){
public void draw(float scaleFactor){
// font size cannot be 0
if(Mathf.equal(fontSize, 0f)) return;
@@ -1004,11 +949,13 @@ public class MapObjectives implements Iterable<MapObjective>, Eachable<MapObject
fetchedText = fetchText(text);
}
WorldLabel.drawAt(fetchedText, x, y, drawLayer, flags, fontSize * scaleFactor);
WorldLabel.drawAt(fetchedText, pos.x, pos.y, drawLayer, flags, fontSize * scaleFactor);
}
@Override
public void control(LMarkerControl type, double p1, double p2, double p3){
super.control(type, p1, p2, p3);
if(!Double.isNaN(p1)){
switch(type){
case fontSize -> fontSize = (float)p1;
@@ -1019,7 +966,6 @@ public class MapObjectives implements Iterable<MapObjective>, Eachable<MapObject
flags &= ~WorldLabel.flagBackground;
}
}
default -> super.control(type, p1, p2, p3);
}
}
@@ -1032,7 +978,6 @@ public class MapObjectives implements Iterable<MapObjective>, Eachable<MapObject
flags &= ~WorldLabel.flagOutline;
}
}
default -> super.control(type, p1, p2, p3);
}
}
}
@@ -1053,7 +998,8 @@ public class MapObjectives implements Iterable<MapObjective>, Eachable<MapObject
public @TilePos Vec2 endPos = new Vec2();
public float stroke = 1f;
public boolean outline = true;
public Color color = Color.valueOf("ffd37f");
public Color color1 = Color.valueOf("ffd37f");
public Color color2 = Color.valueOf("ffd37f");
public LineMarker(float x1, float y1, float x2, float y2, float stroke){
this.stroke = stroke;
@@ -1068,44 +1014,46 @@ public class MapObjectives implements Iterable<MapObjective>, Eachable<MapObject
public LineMarker(){}
public void baseLineDraw(float x1, float y1, float x2, float y2, float scaleFactor){
@Override
public void draw(float scaleFactor){
Draw.z(drawLayer);
if(outline){
Lines.stroke((stroke + 2f) * scaleFactor, Pal.gray);
Lines.line(x1, y1, x2, y2);
Lines.line(pos.x, pos.y, endPos.x, endPos.y);
}
Lines.stroke(stroke * scaleFactor, color);
Lines.line(x1, y1, x2, y2);
}
@Override
public void drawWorld(){
baseLineDraw(pos.x, pos.y, endPos.x, endPos.y, autoscale ? 4f / renderer.getDisplayScale() : 1f);
}
@Override
public void drawMinimap(MinimapRenderer minimap){
minimap.transform(Tmp.v1.set(pos.x + 4f, pos.y + 4f));
minimap.transform(Tmp.v2.set(endPos.x + 4f, endPos.y + 4f));
baseLineDraw(Tmp.v1.x, Tmp.v1.y, Tmp.v2.x, Tmp.v2.y, minimap.getScaleFactor(autoscale));
Lines.stroke(stroke * scaleFactor, Color.white);
Lines.line(pos.x, pos.y, color1, endPos.x, endPos.y, color2);
}
@Override
public void control(LMarkerControl type, double p1, double p2, double p3){
super.control(type, p1, p2, p3);
if(!Double.isNaN(p1)){
switch(type){
case endPos -> endPos.x = (float)p1 * tilesize;
case stroke -> stroke = (float)p1;
case color -> color.set(Tmp.c1.fromDouble(p1));
default -> super.control(type, p1, p2, p3);
case color -> color1.set(color2.fromDouble(p1));
}
}
if(!Double.isNaN(p2)){
switch(type){
case endPos -> endPos.y = (float)p2 * tilesize;
default -> super.control(type, p1, p2, p3);
}
}
if(!Double.isNaN(p1) && !Double.isNaN(p2)){
switch (type){
case posi -> ((int)p1 == 0 ? pos : (int)p1 == 1 ? endPos : Tmp.v1).x = (float)p2 * tilesize;
case colori -> ((int)p1 == 0 ? color1 : (int)p1 == 1 ? color2 : Tmp.c1).fromDouble(p2);
}
}
if(!Double.isNaN(p1) && !Double.isNaN(p3)){
switch(type){
case posi -> ((int)p1 == 0 ? pos : (int)p1 == 1 ? endPos : Tmp.v1).y = (float)p3 * tilesize;
}
}
}
@@ -1135,25 +1083,25 @@ public class MapObjectives implements Iterable<MapObjective>, Eachable<MapObject
@Override
public void control(LMarkerControl type, double p1, double p2, double p3){
super.control(type, p1, p2, p3);
if(!Double.isNaN(p1)){
switch(type){
case rotation -> rotation = (float)p1;
case textureSize -> width = (float)p1 * tilesize;
case color -> color.set(Tmp.c1.fromDouble(p1));
default -> super.control(type, p1, p2, p3);
case color -> color.fromDouble(p1);
}
}
if(!Double.isNaN(p2)){
switch(type){
case textureSize -> height = (float)p2 * tilesize;
default -> super.control(type, p1, p2, p3);
}
}
}
@Override
public void baseDraw(float x, float y, float scaleFactor){
public void draw(float scaleFactor){
if(textureName.isEmpty()) return;
if(fetchedRegion == null) setTexture(textureName);
@@ -1164,7 +1112,7 @@ public class MapObjectives implements Iterable<MapObjective>, Eachable<MapObject
Draw.z(drawLayer);
Draw.color(color);
Draw.rect(fetchedRegion, x, y, width * scaleFactor, height * scaleFactor, rotation);
Draw.rect(fetchedRegion, pos.x, pos.y, width * scaleFactor, height * scaleFactor, rotation);
}
@Override
@@ -1172,19 +1120,126 @@ public class MapObjectives implements Iterable<MapObjective>, Eachable<MapObject
this.textureName = textureName;
if(fetchedRegion == null) fetchedRegion = new TextureRegion();
lookupRegion(textureName, fetchedRegion);
}
TextureRegion region = Core.atlas.find(textureName);
if(region.found()){
fetchedRegion.set(region);
}else{
if(Core.assets.isLoaded(textureName, Texture.class)){
fetchedRegion.set(Core.assets.get(textureName, Texture.class));
}else{
fetchedRegion.set(Core.atlas.find("error"));
}
public static class QuadMarker extends ObjectiveMarker{
public String textureName = "white";
public @Vertices float[] vertices = new float[24];
private boolean mapRegion = true;
private transient TextureRegion fetchedRegion;
public QuadMarker() {
for(int i = 0; i < 4; i++){
vertices[i * 6 + 2] = Color.white.toFloatBits();
vertices[i * 6 + 5] = Color.clearFloatBits;
}
}
@Override
public void draw(float scaleFactor){
if(fetchedRegion == null) setTexture(textureName);
Draw.z(drawLayer);
Draw.vert(fetchedRegion.texture, vertices, 0, vertices.length);
}
@Override
public void control(LMarkerControl type, double p1, double p2, double p3){
super.control(type, p1, p2, p3);
if(!Double.isNaN(p1)){
switch(type){
case color -> {
float col = Tmp.c1.fromDouble(p1).toFloatBits();
for(int i = 0; i < 4; i++) vertices[i * 6 + 2] = col;
}
case pos -> vertices[0] = (float)p1 * tilesize;
case posi -> setPos((int)p1, p2, p3);
case uvi -> setUv((int)p1, p2, p3);
}
}
if(!Double.isNaN(p2)){
switch(type){
case pos -> vertices[1] = (float)p1 * tilesize;
}
}
if(!Double.isNaN(p1) && !Double.isNaN(p2)){
switch(type){
case colori -> setColor((int)p1, p2);
}
}
}
@Override
public void setTexture(String textureName){
this.textureName = textureName;
boolean firstUpdate = fetchedRegion == null;
if(fetchedRegion == null) fetchedRegion = new TextureRegion();
Tmp.tr1.set(fetchedRegion);
lookupRegion(textureName, fetchedRegion);
if(firstUpdate){
if(mapRegion){
mapRegion = false;
// possibly from the editor, we need to clamp the values
for(int i = 0; i < 4; i++){
vertices[i * 6 + 3] = Mathf.map(Mathf.clamp(vertices[i * 6 + 3]), fetchedRegion.u, fetchedRegion.u2);
vertices[i * 6 + 4] = Mathf.map(1 - Mathf.clamp(vertices[i * 6 + 4]), fetchedRegion.v, fetchedRegion.v2);
}
}
}else{
for(int i = 0; i < 4; i++){
vertices[i * 6 + 3] = Mathf.map(vertices[i * 6 + 3], Tmp.tr1.u, Tmp.tr1.u2, fetchedRegion.u, fetchedRegion.u2);
vertices[i * 6 + 4] = Mathf.map(vertices[i * 6 + 4], Tmp.tr1.v, Tmp.tr1.v2, fetchedRegion.v, fetchedRegion.v2);
}
}
}
private void setPos(int i, double x, double y){
if(i >= 0 && i < 4){
if(!Double.isNaN(x)) vertices[i * 6] = (float)x * tilesize;
if(!Double.isNaN(y)) vertices[i * 6 + 1] = (float)y * tilesize;
}
}
private void setColor(int i, double c){
if(i >= 0 && i < 4){
vertices[i * 6 + 2] = Tmp.c1.fromDouble(c).toFloatBits();
}
}
private void setUv(int i, double u, double v){
if(i >= 0 && i < 4){
if(fetchedRegion == null) setTexture(textureName);
if(!Double.isNaN(u)) vertices[i * 6 + 3] = Mathf.map(Mathf.clamp((float)u), fetchedRegion.u, fetchedRegion.u2);
if(!Double.isNaN(v)) vertices[i * 6 + 4] = Mathf.map(1 - Mathf.clamp((float)v), fetchedRegion.v, fetchedRegion.v2);
}
}
}
private static void lookupRegion(String name, TextureRegion out){
TextureRegion region = Core.atlas.find(name);
if(region.found()){
out.set(region);
}else{
if(Core.assets.isLoaded(name, Texture.class)){
out.set(Core.assets.get(name, Texture.class));
}else{
out.set(Core.atlas.find("error"));
}
}
}
/** For arrays or {@link Seq}s; does not create element rearrangement buttons. */
@@ -1192,6 +1247,16 @@ public class MapObjectives implements Iterable<MapObjective>, Eachable<MapObject
@Retention(RUNTIME)
public @interface Unordered{}
/** For arrays or {@link Seq}s; does not add the new and delete buttons */
@Target(FIELD)
@Retention(RUNTIME)
public @interface Immutable{}
/** For {@code float[]}; treats it as an array of vertices. */
@Target(FIELD)
@Retention(RUNTIME)
public @interface Vertices{}
/** For {@code byte}; treats it as a world label flag. */
@Target(FIELD)
@Retention(RUNTIME)
+4
View File
@@ -105,6 +105,10 @@ public class Rules{
public boolean coreDestroyClear = false;
/** If true, banned blocks are hidden from the build menu. */
public boolean hideBannedBlocks = false;
/** If true, most blocks (including environmental walls) can be deconstructed. This is only meant to be used internally in sandbox/test maps. */
public boolean allowEnvironmentDeconstruct = false;
/** If true, buildings will be constructed instantly, with no limit on blocks placed per second. This is highly experimental and may cause lag! */
public boolean instantBuild = false;
/** If true, bannedBlocks becomes a whitelist. */
public boolean blockWhitelist = false;
/** If true, bannedUnits becomes a whitelist. */
+1 -1
View File
@@ -31,7 +31,7 @@ public class Schematic implements Publishable, Comparable<Schematic>{
}
public float powerProduction(){
return tiles.sumf(s -> s.block instanceof PowerGenerator p ? p.powerProduction : 0f);
return tiles.sumf(s -> s.block instanceof PowerGenerator p ? p.getDisplayedPowerProduction() : 0f);
}
public float powerConsumption(){
+1 -1
View File
@@ -31,7 +31,7 @@ public class Team implements Comparable<Team>{
derelict = new Team(0, "derelict", Color.valueOf("4d4e58")),
sharded = new Team(1, "sharded", Pal.accent.cpy(), Color.valueOf("ffd37f"), Color.valueOf("eab678"), Color.valueOf("d4816b")),
crux = new Team(2, "crux", Color.valueOf("f25555"), Color.valueOf("fc8e6c"), Color.valueOf("f25555"), Color.valueOf("a04553")),
malis = new Team(3, "malis", Color.valueOf("a27ce5"), Color.valueOf("c195fb"), Color.valueOf("665c9f"), Color.valueOf("484988")),
malis = new Team(3, "malis", Color.valueOf("a27ce5"), Color.valueOf("c7a4f5"), Color.valueOf("896fd6"), Color.valueOf("504cba")),
//TODO temporarily no palettes for these teams.
green = new Team(4, "green", Color.valueOf("54d67d")),//Color.valueOf("96f58c"), Color.valueOf("54d67d"), Color.valueOf("28785c")),
@@ -146,16 +146,30 @@ public class MinimapRenderer{
rect.set((dx - sz) * tilesize, (dy - sz) * tilesize, sz * 2 * tilesize, sz * 2 * tilesize);
Tmp.m2.set(Draw.trans());
float scaleFactor;
var trans = Tmp.m1.idt();
trans.translate(lastX, lastY);
if(!worldSpace){
trans.scl(Tmp.v1.set(scaleFactor = lastW / rect.width, lastH / rect.height));
trans.translate(-rect.x, -rect.y);
}else{
trans.scl(Tmp.v1.set(scaleFactor = lastW / world.unitWidth(), lastH / world.unitHeight()));
}
trans.translate(tilesize / 2f, tilesize / 2f);
Draw.trans(trans);
scaleFactor = 1f / scaleFactor;
for(Unit unit : units){
if(unit.inFogTo(player.team()) || !unit.type.drawMinimap) continue;
float rx = !fullView ? (unit.x - rect.x) / rect.width * w : unit.x / (world.width() * tilesize) * w;
float ry = !fullView ? (unit.y - rect.y) / rect.width * h : unit.y / (world.height() * tilesize) * h;
float scale = Scl.scl(1f) * tilesize * 3;
var region = unit.icon();
Draw.mixcol(unit.team.color, 1f);
float scale = Scl.scl(1f) / 2f * scaling * 32f;
var region = unit.icon();
Draw.rect(region, x + rx, y + ry, scale, scale * (float)region.height / region.width, unit.rotation() - 90);
Draw.rect(region, unit.x, unit.y, scale, scale * (float)region.height / region.width, unit.rotation() - 90);
Draw.reset();
}
@@ -186,15 +200,14 @@ public class MinimapRenderer{
//crisp pixels
dynamicTex.setFilter(TextureFilter.nearest);
if(worldSpace){
region.set(0f, 0f, 1f, 1f);
}
Tmp.tr1.set(dynamicTex);
Tmp.tr1.set(region.u, 1f - region.v, region.u2, 1f - region.v2);
Tmp.tr1.set(0f, 1f, 1f, 0f);
float wf = world.width() * tilesize;
float hf = world.height() * tilesize;
Draw.color(state.rules.dynamicColor, 0.5f);
Draw.rect(Tmp.tr1, x + w/2f, y + h/2f, w, h);
Draw.rect(Tmp.tr1, wf / 2, hf / 2, wf, hf);
if(state.rules.staticFog){
staticTex.setFilter(TextureFilter.nearest);
@@ -202,7 +215,7 @@ public class MinimapRenderer{
Tmp.tr1.texture = staticTex;
//must be black to fit with borders
Draw.color(0f, 0f, 0f, 1f);
Draw.rect(Tmp.tr1, x + w/2f, y + h/2f, w, h);
Draw.rect(Tmp.tr1, wf / 2, hf / 2, wf, hf);
}
Draw.color();
@@ -211,23 +224,21 @@ public class MinimapRenderer{
//TODO might be useful in the standard minimap too
if(fullView){
drawSpawns(x, y, w, h, scaling);
drawSpawns();
if(!mobile){
//draw bounds for camera - not drawn on mobile because you can't shift it by tapping anyway
Rect r = Core.camera.bounds(Tmp.r1);
Vec2 bot = transform(Tmp.v1.set(r.x, r.y));
Vec2 top = transform(Tmp.v2.set(r.x + r.width, r.y + r.height));
Lines.stroke(Scl.scl(3f));
Lines.stroke(Scl.scl(3f) * scaleFactor);
Draw.color(Pal.accent);
Lines.rect(bot.x,bot.y, top.x - bot.x, top.y - bot.y);
Lines.rect(r.x, r.y, r.width, r.height);
Draw.reset();
}
}
LongSeq indicators = control.indicators.list();
float fin = ((Time.globalTime / 30f) % 1f);
float rad = scale(fin * 5f + tilesize - 2f);
float rad = fin * 5f + tilesize - 2f;
Lines.stroke(Scl.scl((1f - fin) * 4f + 0.5f));
for(int i = 0; i < indicators.size; i++){
@@ -244,31 +255,32 @@ public class MinimapRenderer{
offset = build.block.offset / tilesize;
}
Vec2 v = transform(Tmp.v1.set((ix + 0.5f + offset) * tilesize, (iy + 0.5f + offset) * tilesize));
Draw.color(Color.orange, Color.scarlet, Mathf.clamp(time / 70f));
Lines.square(v.x, v.y, rad);
Lines.square((ix + 0.5f + offset) * tilesize, (iy + 0.5f + offset) * tilesize, rad);
}
Draw.reset();
//TODO autoscale markers
state.rules.objectives.eachRunning(obj -> {
for(var marker : obj.markers){
if(marker.minimap){
marker.drawMinimap(this);
marker.draw(1);
}
}
});
for(var marker : state.markers){
if(!marker.isHidden() && marker.minimap){
marker.drawMinimap(this);
if(marker.minimap){
marker.draw(1);
}
}
Draw.trans(Tmp.m2);
}
public void drawSpawns(float x, float y, float w, float h, float scaling){
public void drawSpawns(){
if(!state.rules.showSpawns || !state.hasSpawns() || !state.rules.waves) return;
TextureRegion icon = Icon.units.getRegion();
@@ -277,44 +289,21 @@ public class MinimapRenderer{
Draw.color(state.rules.waveTeam.color, Tmp.c2.set(state.rules.waveTeam.color).value(1.2f), Mathf.absin(Time.time, 16f, 1f));
float rad = scale(state.rules.dropZoneRadius);
float rad = state.rules.dropZoneRadius;
float curve = Mathf.curve(Time.time % 240f, 120f, 240f);
for(Tile tile : spawner.getSpawns()){
float tx = ((tile.x + 0.5f) / world.width()) * w;
float ty = ((tile.y + 0.5f) / world.height()) * h;
float tx = tile.worldx();
float ty = tile.worldy();
Draw.rect(icon, x + tx, y + ty, icon.width, icon.height);
Lines.circle(x + tx, y + ty, rad);
if(curve > 0f) Lines.circle(x + tx, y + ty, rad * Interp.pow3Out.apply(curve));
Draw.rect(icon, tx, ty, icon.width, icon.height);
Lines.circle(tx, ty, rad);
if(curve > 0f) Lines.circle(tx, ty, rad * Interp.pow3Out.apply(curve));
}
Draw.reset();
}
//TODO horrible code, everywhere.
public Vec2 transform(Vec2 position){
if(!worldSpace){
position.sub(rect.x, rect.y).scl(lastW / rect.width, lastH / rect.height);
}else{
position.scl(lastW / world.unitWidth(), lastH / world.unitHeight());
}
return position.add(lastX, lastY);
}
public float scale(float radius){
return worldSpace ? (radius / (baseSize / 2f)) * 5f * lastScl : lastW / rect.width * radius;
}
public float getScaleFactor(boolean zoomAutoScale){
if(!zoomAutoScale){
return worldSpace ? (1 / (baseSize / 2f)) * 5f * lastScl : lastW / rect.width;
}else{
return worldSpace ? (1 / (baseSize / 2f)) * 5f : lastW / 256f;
}
}
public @Nullable TextureRegion getRegion(){
if(texture == null) return null;
+6 -2
View File
@@ -97,8 +97,12 @@ public class MultiPacker implements Disposable{
@Override
public void dispose(){
for(PixmapPacker packer : packers){
packer.dispose();
for(int i = 0; i < PageType.all.length; i ++){
var packer = packers[i];
//the UI packer's image is later used when merging with the font, don't dispose it
if(i != PageType.ui.ordinal()){
packer.forceDispose();
}
}
}
+1 -1
View File
@@ -474,6 +474,6 @@ public class Shaders{
}
public static Fi getShaderFi(String file){
return Core.files.internal("shaders/" + file);
return tree.get("shaders/" + file);
}
}
@@ -203,17 +203,7 @@ public class PlanetRenderer implements Disposable{
}
public void setPlane(Sector sector){
float rotation = -sector.planet.getRotation();
float length = 0.01f;
projector.setPlane(
//origin on sector position
Tmp.v33.set(sector.tile.v).setLength((outlineRad + length) * sector.planet.radius).rotate(Vec3.Y, rotation).add(sector.planet.position),
//face up
sector.plane.project(Tmp.v32.set(sector.tile.v).add(Vec3.Y)).sub(sector.tile.v, sector.planet.radius).rotate(Vec3.Y, rotation).nor(),
//right vector
Tmp.v31.set(Tmp.v32).rotate(Vec3.Y, -rotation).add(sector.tile.v).rotate(sector.tile.v, 90).sub(sector.tile.v).rotate(Vec3.Y, rotation).nor()
);
sector.planet.setPlane(sector, projector);
}
public void fill(Sector sector, Color color, float offset){
+4 -2
View File
@@ -1179,7 +1179,7 @@ public abstract class InputHandler implements InputProcessor, GestureListener{
var last = lastSchematic;
ui.showTextInput("@schematic.add", "@name", "", text -> {
ui.showTextInput("@schematic.add", "@name", 1000, "", text -> {
Schematic replacement = schematics.all().find(s -> s.name().equals(text));
if(replacement != null){
ui.showConfirm("@confirm", "@schematic.replace", () -> {
@@ -1973,11 +1973,13 @@ public abstract class InputHandler implements InputProcessor, GestureListener{
var end = world.build(endX, endY);
if(diagonal && (block == null || block.allowDiagonal)){
if(block != null && start instanceof ChainedBuilding && end instanceof ChainedBuilding
&& block.canReplace(end.block) && block.canReplace(start.block)){
&& block.canReplace(end.block) && block.canReplace(start.block)){
points = Placement.upgradeLine(startX, startY, endX, endY);
}else{
points = Placement.pathfindLine(block != null && block.conveyorPlacement, startX, startY, endX, endY);
}
}else if(block != null && block.allowRectanglePlacement){
points = Placement.normalizeRectangle(startX, startY, endX, endY, block.size);
}else{
points = Placement.normalizeLine(startX, startY, endX, endY);
}
+6 -2
View File
@@ -743,6 +743,11 @@ public class MobileInput extends InputHandler implements GestureListener{
queueCommandMode = false;
}
//cannot rebuild and place at the same time
if(block != null){
rebuildMode = false;
}
if(player.dead()){
mode = none;
manualShooting = false;
@@ -766,7 +771,7 @@ public class MobileInput extends InputHandler implements GestureListener{
renderer.scaleCamera(Core.input.axisTap(Binding.zoom));
}
if(!Core.settings.getBool("keyboard") && !locked){
if(!Core.settings.getBool("keyboard") && !locked && !scene.hasKeyboard()){
//move camera around
float camSpeed = 6f;
Core.camera.position.add(Tmp.v1.setZero().add(Core.input.axis(Binding.move_x), Core.input.axis(Binding.move_y)).nor().scl(Time.delta * camSpeed));
@@ -967,7 +972,6 @@ public class MobileInput extends InputHandler implements GestureListener{
boolean allowHealing = type.canHeal;
boolean validHealTarget = allowHealing && target instanceof Building b && b.isValid() && target.team() == unit.team && b.damaged() && target.within(unit, type.range);
boolean boosted = (unit instanceof Mechc && unit.isFlying());
//reset target if:
// - in the editor, or...
// - it's both an invalid standard target and an invalid heal target
+16
View File
@@ -58,6 +58,22 @@ public class Placement{
return points;
}
/** Normalize two points into a rectangle. */
public static Seq<Point2> normalizeRectangle(int startX, int startY, int endX, int endY, int blockSize){
Pools.freeAll(points);
points.clear();
int minX = Math.min(startX, endX), minY = Math.min(startY, endY), maxX = Math.max(startX, endX), maxY = Math.max(startY, endY);
for(int y = 0; y <= maxY - minY; y += blockSize){
for(int x = 0; x <= maxX - minX; x += blockSize){
points.add(Pools.obtain(Point2.class, Point2::new).set(startX + x * Mathf.sign(endX - startX), startY + y * Mathf.sign(endY - startY)));
}
}
return points;
}
public static Seq<Point2> upgradeLine(int startX, int startY, int endX, int endY){
closed.clear();
Pools.freeAll(points);
+90 -24
View File
@@ -27,45 +27,63 @@ public class GlobalVars{
public static final Rand rand = new Rand();
//non-constants that depend on state
private static int varTime, varTick, varSecond, varMinute, varWave, varWaveTime, varServer, varClient, varClientLocale, varClientUnit, varClientName, varClientTeam, varClientMobile;
private static int varTime, varTick, varSecond, varMinute, varWave, varWaveTime, varMapW, varMapH, varServer, varClient, varClientLocale, varClientUnit, varClientName, varClientTeam, varClientMobile;
private ObjectIntMap<String> namesToIds = new ObjectIntMap<>();
private Seq<Var> vars = new Seq<>(Var.class);
private Seq<VarEntry> varEntries = new Seq<>();
private IntSet privilegedIds = new IntSet();
private UnlockableContent[][] logicIdToContent;
private int[][] contentIdToLogicId;
public void init(){
put("the end", null);
putEntryOnly("sectionProcessor");
putEntryOnly("@this");
putEntryOnly("@thisx");
putEntryOnly("@thisy");
putEntryOnly("@links");
putEntryOnly("@ipt");
putEntryOnly("sectionGeneral");
put("the end", null, false, true);
//add default constants
put("false", 0);
put("true", 1);
put("null", null);
putEntry("false", 0);
putEntry("true", 1);
put("null", null, false, true);
//math
put("@pi", Mathf.PI);
put("π", Mathf.PI); //for the "cool" kids
put("@e", Mathf.E);
put("@degToRad", Mathf.degRad);
put("@radToDeg", Mathf.radDeg);
putEntry("@pi", Mathf.PI);
put("π", Mathf.PI, false, true); //for the "cool" kids
putEntry("@e", Mathf.E);
putEntry("@degToRad", Mathf.degRad);
putEntry("@radToDeg", Mathf.radDeg);
putEntryOnly("sectionMap");
//time
varTime = put("@time", 0);
varTick = put("@tick", 0);
varSecond = put("@second", 0);
varMinute = put("@minute", 0);
varWave = put("@waveNumber", 0);
varWaveTime = put("@waveTime", 0);
varTime = putEntry("@time", 0);
varTick = putEntry("@tick", 0);
varSecond = putEntry("@second", 0);
varMinute = putEntry("@minute", 0);
varWave = putEntry("@waveNumber", 0);
varWaveTime = putEntry("@waveTime", 0);
varServer = put("@server", 0, true);
varClient = put("@client", 0, true);
varMapW = putEntry("@mapw", 0);
varMapH = putEntry("@maph", 0);
putEntryOnly("sectionNetwork");
varServer = putEntry("@server", 0, true);
varClient = putEntry("@client", 0, true);
//privileged desynced client variables
varClientLocale = put("@clientLocale", null, true);
varClientUnit = put("@clientUnit", null, true);
varClientName = put("@clientName", null, true);
varClientTeam = put("@clientTeam", 0, true);
varClientMobile = put("@clientMobile", 0, true);
varClientLocale = putEntry("@clientLocale", null, true);
varClientUnit = putEntry("@clientUnit", null, true);
varClientName = putEntry("@clientName", null, true);
varClientTeam = putEntry("@clientTeam", 0, true);
varClientMobile = putEntry("@clientMobile", 0, true);
//special enums
put("@ctrlProcessor", ctrlProcessor);
@@ -115,6 +133,8 @@ public class GlobalVars{
logicIdToContent = new UnlockableContent[ContentType.all.length][];
contentIdToLogicId = new int[ContentType.all.length][];
putEntryOnly("sectionLookup");
Fi ids = Core.files.internal("logicids.dat");
if(ids.exists()){
//read logic ID mapping data (generated in ImagePacker)
@@ -125,7 +145,7 @@ public class GlobalVars{
contentIdToLogicId[ctype.ordinal()] = new int[Vars.content.getBy(ctype).size];
//store count constants
put("@" + ctype.name() + "Count", amount);
putEntry("@" + ctype.name() + "Count", amount);
for(int i = 0; i < amount; i++){
String name = in.readUTF();
@@ -159,6 +179,9 @@ public class GlobalVars{
vars.items[varWave].numval = state.wave;
vars.items[varWaveTime].numval = state.wavetime / 60f;
vars.items[varMapW].numval = world.width();
vars.items[varMapH].numval = world.height();
//network
vars.items[varServer].numval = (net.server() || !net.active()) ? 1 : 0;
vars.items[varClient].numval = net.client() ? 1 : 0;
@@ -173,6 +196,10 @@ public class GlobalVars{
}
}
public Seq<VarEntry> getEntries(){
return varEntries;
}
/** @return a piece of content based on its logic ID. This is not equivalent to content ID. */
public @Nullable Content lookupContent(ContentType type, int id){
var arr = logicIdToContent[type.ordinal()];
@@ -209,6 +236,11 @@ public class GlobalVars{
/** Adds a constant value by name. */
public int put(String name, Object value, boolean privileged){
return put(name, value, privileged, true);
}
/** Adds a constant value by name. */
public int put(String name, Object value, boolean privileged, boolean hidden){
int existingIdx = namesToIds.get(name, -1);
if(existingIdx != -1){ //don't overwrite existing vars (see #6910)
Log.debug("Failed to add global logic variable '@', as it already exists.", name);
@@ -228,10 +260,44 @@ public class GlobalVars{
namesToIds.put(name, index);
if(privileged) privilegedIds.add(index);
vars.add(var);
if(!hidden){
varEntries.add(new VarEntry(index, name, "", "", privileged));
}
return index;
}
public int put(String name, Object value){
return put(name, value, false);
}
public int putEntry(String name, Object value){
return put(name, value, false, false);
}
public int putEntry(String name, Object value, boolean privileged){
return put(name, value, privileged, false);
}
public void putEntryOnly(String name){
varEntries.add(new VarEntry(0, name, "", "", false));
}
/** An entry that describes a variable for documentation purposes. This is *only* used inside UI for global variables. */
public static class VarEntry{
public int id;
public String name, description, icon;
public boolean privileged;
public VarEntry(int id, String name, String description, String icon, boolean privileged){
this.id = id;
this.name = name;
this.description = description;
this.icon = icon;
this.privileged = privileged;
}
public VarEntry(){
}
}
}
@@ -0,0 +1,61 @@
package mindustry.logic;
import arc.*;
import arc.graphics.*;
import arc.scene.ui.*;
import arc.scene.ui.layout.*;
import arc.util.*;
import mindustry.*;
import mindustry.gen.*;
import mindustry.graphics.*;
import mindustry.ui.*;
import mindustry.ui.dialogs.*;
public class GlobalVarsDialog extends BaseDialog{
public GlobalVarsDialog(){
super("@logic.globals");
addCloseButton();
shown(this::setup);
onResize(this::setup);
}
void setup(){
float prefWidth = Math.min(Core.graphics.getWidth() * 0.9f / Scl.scl(1f) - 240f, 600f);
cont.clearChildren();
cont.pane(t -> {
t.margin(10f).marginRight(16f);
t.defaults().fillX().fillY();
for(var entry : Vars.logicVars.getEntries()){
if(entry.name.startsWith("section")){
Color color = Pal.accent;
t.add("@lglobal." + entry.name).fillX().center().labelAlign(Align.center).colspan(4).color(color).padTop(4f).padBottom(2f).row();
t.image(Tex.whiteui).height(4f).color(color).colspan(4).padBottom(8f).row();
}else{
Color varColor = Pal.gray;
float stub = 8f, mul = 0.5f, pad = 4;
String desc = entry.description;
if(desc == null || desc.isEmpty()){
desc = Core.bundle.get("lglobal." + entry.name, "");
}
String fdesc = desc;
t.add(new Image(Tex.whiteui, varColor.cpy().mul(mul))).width(stub);
t.stack(new Image(Tex.whiteui, varColor), new Label(" " + entry.name + " ", Styles.outlineLabel)).padRight(pad);
t.add(new Image(Tex.whiteui, Pal.gray.cpy().mul(mul))).width(stub);
t.table(Tex.pane, out -> out.add(fdesc).style(Styles.outlineLabel).width(prefWidth).padLeft(2).padRight(2).wrap()).padRight(pad);
t.row();
t.add().fillX().colspan(4).height(4).row();
}
}
}).grow();
}
}
+1 -1
View File
@@ -67,7 +67,7 @@ public enum LAccess{
all = values(),
senseable = Seq.select(all, t -> t.params.length <= 1).toArray(LAccess.class),
controls = Seq.select(all, t -> t.params.length > 0).toArray(LAccess.class),
settable = {x, y, rotation, speed, armor, health, team, flag, totalPower, payloadType};
settable = {x, y, rotation, speed, armor, health, shield, team, flag, totalPower, payloadType};
LAccess(String... params){
this.params = params;
+11 -3
View File
@@ -706,7 +706,7 @@ public class LExecutor{
int address = exec.numi(position);
Building from = exec.building(target);
if(from instanceof MemoryBuild mem && (exec.privileged || from.team == exec.team) && address >= 0 && address < mem.memory.length){
if(from instanceof MemoryBuild mem && (exec.privileged || (from.team == exec.team && !mem.block.privileged)) && address >= 0 && address < mem.memory.length){
mem.memory[address] = exec.num(value);
}
}
@@ -1025,14 +1025,17 @@ public class LExecutor{
exec.textBuffer.setLength(0);
}
}else{
int num1 = exec.numi(p1);
int num1 = exec.numi(p1), xval = packSign(exec.numi(x)), yval = packSign(exec.numi(y));
if(type == LogicDisplay.commandImage){
num1 = exec.obj(p1) instanceof UnlockableContent u ? u.iconId : 0;
}else if(type == LogicDisplay.commandScale){
xval = packSign((int)(exec.numf(x) / LogicDisplay.scaleStep));
yval = packSign((int)(exec.numf(y) / LogicDisplay.scaleStep));
}
//add graphics calls, cap graphics buffer size
exec.graphicsBuffer.add(DisplayCmd.get(type, packSign(exec.numi(x)), packSign(exec.numi(y)), packSign(num1), packSign(exec.numi(p2)), packSign(exec.numi(p3)), packSign(exec.numi(p4))));
exec.graphicsBuffer.add(DisplayCmd.get(type, xval, yval, packSign(num1), packSign(exec.numi(p2)), packSign(exec.numi(p3)), packSign(exec.numi(p4))));
}
}
@@ -2049,6 +2052,11 @@ public class LExecutor{
state.markers.add(id, marker);
}
@Remote(called = Loc.server, variants = Variant.both, unreliable = true)
public static void removeMarker(int id){
state.markers.remove(id);
}
@Remote(called = Loc.server, variants = Variant.both, unreliable = true)
public static void updateMarker(int id, LMarkerControl control, double p1, double p2, double p3){
var marker = state.markers.get(id);
+5 -2
View File
@@ -2,7 +2,7 @@ package mindustry.logic;
public enum LMarkerControl{
remove,
visibility("true/false"),
world("true/false"),
minimap("true/false"),
autoscale("true/false"),
pos("x", "y"),
@@ -18,7 +18,10 @@ public enum LMarkerControl{
textHeight("height"),
labelFlags("background", "outline"),
texture("printFlush", "name"),
textureSize("width", "height");
textureSize("width", "height"),
posi("index", "x", "y"),
uvi("index", "x", "y"),
colori("index", "color");
public final String[] params;
+18 -8
View File
@@ -260,6 +260,13 @@ public class LStatements{
}, 2, cell -> cell.size(165, 50)));
}, Styles.logict, () -> {}).size(165, 40).color(s.color).left().padLeft(2);
}
case translate, scale -> {
fields(s, "x", x, v -> x = v);
fields(s, "y", y, v -> y = v);
}
case rotate -> {
fields(s, "degrees", p1, v -> p1 = v);
}
}
}).expand().left();
}
@@ -1999,11 +2006,14 @@ public class LStatements{
table.table(t -> {
t.setColor(table.color);
fields(t, type.params[i], i == 0 ? p1 : i == 1 ? p2 : p3, i == 0 ? v -> p1 = v : i == 1 ? v -> p2 = v : v -> p3 = v).width(100f);
String value = i == 0 ? p1 : i == 1 ? p2 : p3;
Cons<String> setter = i == 0 ? v -> p1 = v : i == 1 ? v -> p2 = v : v -> p3 = v;
if(type == LMarkerControl.color){
col(t, p1, res -> {
p1 = "%" + res.toString().substring(0, res.a >= 1f ? 6 : 8);
fields(t, type.params[i], value, setter).width(100f);
if(type == LMarkerControl.color || (type == LMarkerControl.colori && i == 1)){
col(t, value, res -> {
setter.get("%" + res.toString().substring(0, res.a >= 1f ? 6 : 8));
build(table);
});
}else if(type == LMarkerControl.drawLayer){
@@ -2013,10 +2023,10 @@ public class LStatements{
o.row();
o.table(s -> {
s.left();
for(var layer : Layer.class.getFields()){
float value = Reflect.get(Layer.class, layer.getName());
s.button(layer.getName() + " = " + value, Styles.logicTogglet, () -> {
p1 = Float.toString(value);
for(var field : Layer.class.getFields()){
float layer = Reflect.get(field);
s.button(field.getName() + " = " + layer, Styles.logicTogglet, () -> {
p1 = Float.toString(layer);
rebuild(table);
hide.run();
}).size(240f, 40f).row();
+5 -2
View File
@@ -26,6 +26,7 @@ public class LogicDialog extends BaseDialog{
Cons<String> consumer = s -> {};
boolean privileged;
@Nullable LExecutor executor;
GlobalVarsDialog globalsDialog = new GlobalVarsDialog();
public LogicDialog(){
super("logic");
@@ -51,7 +52,7 @@ public class LogicDialog extends BaseDialog{
add(buttons).growX().name("canvas");
}
private Color typeColor(Var s, Color color){
public static Color typeColor(Var s, Color color){
return color.set(
!s.isobj ? Pal.place :
s.objval == null ? Color.darkGray :
@@ -65,7 +66,7 @@ public class LogicDialog extends BaseDialog{
);
}
private String typeName(Var s){
public static String typeName(Var s){
return
!s.isobj ? "number" :
s.objval == null ? "null" :
@@ -178,6 +179,8 @@ public class LogicDialog extends BaseDialog{
});
dialog.addCloseButton();
dialog.buttons.button("@logic.globals", Icon.list, () -> globalsDialog.show()).size(210f, 64f);
dialog.show();
}).name("variables").disabled(b -> executor == null || executor.vars.length == 0);
+6
View File
@@ -57,6 +57,12 @@ public class LogicFx{
return map.get(name);
}
/** Adds an effect entry to the map. */
public static void add(String name, EffectEntry entry){
entry.name = name;
map.put(name, entry);
}
public static String[] all(){
return map.orderedKeys().toArray(String.class);
}
+13 -1
View File
@@ -271,8 +271,9 @@ public class ContentParser{
return new Vec3(data.getFloat("x", 0f), data.getFloat("y", 0f), data.getFloat("z", 0f));
});
put(Sound.class, (type, data) -> {
var field = fieldOpt(Sounds.class, data);
if(data.isArray()) return new RandomSound(parser.readValue(Sound[].class, data));
var field = fieldOpt(Sounds.class, data);
return field != null ? field : Vars.tree.loadSound(data.asString());
});
put(Music.class, (type, data) -> {
@@ -445,6 +446,17 @@ public class ContentParser{
if(value.has("consumes") && value.get("consumes").isObject()){
for(JsonValue child : value.get("consumes")){
switch(child.name){
case "remove" -> {
String[] values = child.isString() ? new String[]{child.asString()} : child.asStringArray();
for(String type : values){
Class<?> consumeType = resolve("Consume" + Strings.capitalize(type), Consume.class);
if(consumeType != Consume.class){
block.removeConsumers(b -> consumeType.isAssignableFrom(b.getClass()));
}else{
Log.warn("Unknown consumer type '@' (Class: @) in consume: remove.", type, "Consume" + Strings.capitalize(type));
}
}
}
case "item" -> block.consumeItem(find(ContentType.item, child.asString()));
case "itemCharged" -> block.consume((Consume)parser.readValue(ConsumeItemCharged.class, child));
case "itemFlammable" -> block.consume((Consume)parser.readValue(ConsumeItemFlammable.class, child));
@@ -577,6 +577,10 @@ public class Administration{
changed.run();
}
public boolean isDefault(){
return Structs.eq(get(), defaultValue);
}
private static boolean debug(){
return Config.debug.bool();
}
+1 -1
View File
@@ -39,7 +39,7 @@ public enum Achievement{
issueAttackCommand,
active100Units(SStat.maxUnitActive, 100),
build1000Units(SStat.unitsBuilt, 1000),
buildAllUnits(SStat.unitTypesBuilt, 30),
buildAllUnits(SStat.unitTypesBuilt, 50),
buildT5,
pickupT5,
active10Polys,
-2
View File
@@ -84,8 +84,6 @@ public class Liquid extends UnlockableContent implements Senseable{
super.init();
if(gas){
//gases can't be coolants
coolant = false;
//always "boils", it's a gas
boilPoint = -1;
//ensure no accidental global mutation
+22
View File
@@ -536,4 +536,26 @@ public class Planet extends UnlockableContent{
}
batch.flush(Gl.lineStrip);
}
public Vec3 lookAt(Sector sector, Vec3 out){
return out.set(sector.tile.v).rotate(Vec3.Y, -getRotation());
}
public Vec3 project(Sector sector, Camera3D cam, Vec3 out){
return cam.project(out.set(sector.tile.v).setLength(outlineRad * radius).rotate(Vec3.Y, -getRotation()).add(position));
}
public void setPlane(Sector sector, PlaneBatch3D projector){
float rotation = -getRotation();
float length = 0.01f;
projector.setPlane(
//origin on sector position
Tmp.v33.set(sector.tile.v).setLength((outlineRad + length) * radius).rotate(Vec3.Y, rotation).add(position),
//face up
sector.plane.project(Tmp.v32.set(sector.tile.v).add(Vec3.Y)).sub(sector.tile.v, radius).rotate(Vec3.Y, rotation).nor(),
//right vector
Tmp.v31.set(Tmp.v32).rotate(Vec3.Y, -rotation).add(sector.tile.v).rotate(sector.tile.v, 90).sub(sector.tile.v).rotate(Vec3.Y, rotation).nor()
);
}
}
+1 -1
View File
@@ -236,7 +236,7 @@ public class Sector{
/** Projects this sector onto a 4-corner square for use in map gen.
* Allocates a new object. Do not call in the main loop. */
private SectorRect makeRect(){
protected SectorRect makeRect(){
Vec3[] corners = new Vec3[tile.corners.length];
for(int i = 0; i < corners.length; i++){
corners[i] = tile.corners[i].v.cpy().setLength(planet.radius);
+6 -1
View File
@@ -215,6 +215,8 @@ public class UnitType extends UnlockableContent implements Senseable{
naval = false,
/** if false, RTS AI controlled units do not automatically attack things while moving. This is automatically assigned. */
autoFindTarget = true,
/** If false, 'under' blocks like conveyors are not targeted. */
targetUnderBlocks = true,
/** if true, this unit will always shoot while moving regardless of slowdown */
alwaysShootWhenMoving = false,
@@ -960,13 +962,14 @@ public class UnitType extends UnlockableContent implements Senseable{
getRegionsToOutline(toOutline);
for(var region : toOutline){
if(region instanceof AtlasRegion atlas){
if(region instanceof AtlasRegion atlas && !Core.atlas.has(atlas.name + "-outline")){
String regionName = atlas.name;
Pixmap outlined = Pixmaps.outline(Core.atlas.getPixmap(region), outlineColor, outlineRadius);
Drawf.checkBleed(outlined);
packer.add(PageType.main, regionName + "-outline", outlined);
outlined.dispose();
}
}
@@ -1019,7 +1022,9 @@ public class UnitType extends UnlockableContent implements Senseable{
}
packer.add(PageType.main, name + "-treads" + r + "-" + i, frame);
frame.dispose();
}
slice.dispose();
}
}
}
+1 -1
View File
@@ -430,7 +430,7 @@ public class Weapon implements Cloneable{
}
protected Teamc findTarget(Unit unit, float x, float y, float range, boolean air, boolean ground){
return Units.closestTarget(unit.team, x, y, range + Math.abs(shootY), u -> u.checkTarget(air, ground), t -> ground);
return Units.closestTarget(unit.team, x, y, range + Math.abs(shootY), u -> u.checkTarget(air, ground), t -> ground && (unit.type.targetUnderBlocks || !t.block.underBullets));
}
protected boolean checkTarget(Unit unit, Teamc target, float x, float y, float range){
@@ -1,6 +1,7 @@
package mindustry.ui.dialogs;
import arc.*;
import arc.freetype.FreeTypeFontGenerator.*;
import arc.graphics.*;
import arc.input.*;
import arc.math.*;
@@ -35,6 +36,7 @@ public class JoinDialog extends BaseDialog{
int refreshes;
boolean showHidden;
TextButtonStyle style;
Task fontIgnoreDirtyTask;
String lastIp;
int lastPort, lastColumns = -1;
@@ -413,6 +415,15 @@ public class JoinDialog extends BaseDialog{
net.pingHost(resaddress, resport, res -> {
if(refreshes != cur) return;
//don't recache the texture for a while
if(fontIgnoreDirtyTask == null){
FreeTypeFontData.ignoreDirty = true;
fontIgnoreDirtyTask = Time.runTask(0.6f * 60f, () -> {
FreeTypeFontData.ignoreDirty = false;
fontIgnoreDirtyTask = null;
});
}
if(!serverSearch.isEmpty() && !(group.name.toLowerCase().contains(serverSearch)
|| res.name.toLowerCase().contains(serverSearch)
|| res.description.toLowerCase().contains(serverSearch)
+12 -14
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)
shown(() -> {
if(!settings.getBool("campaignselect") && !content.planets().contains(p -> p.sectors.contains(s -> s.hasBase()))){
if(!settings.getBool("campaignselect") && !content.planets().contains(p -> p.sectors.contains(Sector::hasBase))){
var diag = new BaseDialog("@campaign.select");
Planet[] selected = {null};
@@ -214,7 +214,7 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{
}
//unlock defaults for older campaign saves (TODO move? where to?)
if(content.planets().contains(p -> p.sectors.contains(s -> s.hasBase())) || Blocks.scatter.unlocked() || Blocks.router.unlocked()){
if(content.planets().contains(p -> p.sectors.contains(Sector::hasBase)) || Blocks.scatter.unlocked() || Blocks.router.unlocked()){
Seq.with(Blocks.junction, Blocks.mechanicalDrill, Blocks.conveyor, Blocks.duo, Items.copper, Items.lead).each(UnlockableContent::quietUnlock);
}
}
@@ -372,11 +372,17 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{
super.show();
}
void lookAt(Sector sector){
public void lookAt(Sector sector){
if(sector.tile == Ptile.empty) return;
//TODO should this even set `state.planet`? the other lookAt() doesn't, so...
state.planet = sector.planet;
state.camPos.set(Tmp.v33.set(sector.tile.v).rotate(Vec3.Y, -sector.planet.getRotation()));
sector.planet.lookAt(sector, state.camPos);
}
public void lookAt(Sector sector, float alpha){
float len = state.camPos.len();
state.camPos.slerp(sector.planet.lookAt(sector, Tmp.v33).setLength(len), alpha);
}
boolean canSelect(Sector sector){
@@ -648,10 +654,7 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{
}
}).visible(() -> mode != select),
new Table(c -> {
expandTable = c;
})).grow();
new Table(c -> expandTable = c)).grow();
rebuildExpand();
}
@@ -770,11 +773,6 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{
}
}
public void lookAt(Sector sector, float alpha){
float len = state.camPos.len();
state.camPos.slerp(Tmp.v31.set(sector.tile.v).rotate(Vec3.Y, -sector.planet.getRotation()).setLength(len), alpha);
}
@Override
public void act(float delta){
super.act(delta);
@@ -801,7 +799,7 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{
hoverLabel.touchable = Touchable.disabled;
hoverLabel.color.a = state.uiAlpha;
Vec3 pos = planets.cam.project(Tmp.v31.set(hovered.tile.v).setLength(PlanetRenderer.outlineRad * state.planet.radius).rotate(Vec3.Y, -state.planet.getRotation()).add(state.planet.position));
Vec3 pos = hovered.planet.project(hovered, planets.cam, Tmp.v31);
hoverLabel.setPosition(pos.x - Core.scene.marginLeft, pos.y - Core.scene.marginBottom, Align.center);
hoverLabel.getText().setLength(0);
@@ -36,8 +36,6 @@ public class TraceDialog extends BaseDialog{
c.add(Core.bundle.format("trace.ip", info.ip)).row();
c.button(Icon.copySmall, style, () -> copy(info.uuid)).size(s).padRight(4f);
c.add(Core.bundle.format("trace.id", info.uuid)).row();
c.button(Icon.copySmall, style, () -> copy(player.locale)).size(s).padRight(4f);
c.add(Core.bundle.format("trace.language", player.locale)).row();
}).row();
table.add(Core.bundle.format("trace.modclient", info.modded)).row();
@@ -72,9 +72,9 @@ public class HudFragment{
Events.on(SectorCaptureEvent.class, e -> {
if(e.sector.isBeingPlayed()){
ui.announce(Core.bundle.format("sector.capture", ""), 5f);
ui.announce("@sector.capture.current", 5f);
}else{
showToast(Core.bundle.format("sector.capture", e.sector.name() + " "));
showToast(Core.bundle.format("sector.capture", e.sector.name()));
}
});
+23 -1
View File
@@ -219,6 +219,8 @@ public class Block extends UnlockableContent implements Senseable{
public int unitCapModifier = 0;
/** Whether the block can be tapped and selected to configure. */
public boolean configurable;
/** If true, this block does not have pointConfig with a transform called on map resize. */
public boolean ignoreResizeConfig;
/** If true, this building can be selected like a unit when commanding. */
public boolean commandable;
/** If true, the building inventory can be shown with the config. */
@@ -245,6 +247,8 @@ public class Block extends UnlockableContent implements Senseable{
public boolean allowDiagonal = true;
/** Whether to swap the diagonal placement modes. */
public boolean swapDiagonalPlacement;
/** Whether to allow rectangular placement, as opposed to a line. */
public boolean allowRectanglePlacement = false;
/** Build queue priority in schematics. */
public int schematicPriority = 0;
/**
@@ -322,6 +326,8 @@ public class Block extends UnlockableContent implements Senseable{
public float deconstructThreshold = 0f;
/** If true, this block deconstructs immediately. Instant deconstruction implies no resource refund. */
public boolean instantDeconstruct = false;
/** If true, this block constructs immediately. This implies no resource requirement, and ignores configs - do not use, this is for performance only! */
public boolean instantBuild = false;
/** Effect for placing the block. Passes size as rotation. */
public Effect placeEffect = Fx.placeBlock;
/** Effect for breaking the block. Passes size as rotation. */
@@ -378,7 +384,7 @@ public class Block extends UnlockableContent implements Senseable{
/** Dump timer ID.*/
protected final int timerDump = timers++;
/** How often to try dumping items in ticks, e.g. 5 = 12 times/sec*/
protected final int dumpTime = 5;
public int dumpTime = 5;
public Block(String name){
super(name);
@@ -952,6 +958,14 @@ public class Block extends UnlockableContent implements Senseable{
consumeBuilder.remove(cons);
}
public void removeConsumers(Boolf<Consume> b){
consumeBuilder.removeAll(b);
//the power was removed, unassign it
if(!consumeBuilder.contains(c -> c instanceof ConsumePower)){
consPower = null;
}
}
public ConsumeLiquid consumeLiquid(Liquid liquid, float amount){
return consume(new ConsumeLiquid(liquid, amount));
}
@@ -1280,6 +1294,8 @@ public class Block extends UnlockableContent implements Senseable{
}
}
Seq<Pixmap> toDispose = new Seq<>();
//generate paletted team regions
if(teamRegion != null && teamRegion.found()){
for(Team team : Team.all){
@@ -1304,6 +1320,7 @@ public class Block extends UnlockableContent implements Senseable{
Drawf.checkBleed(out);
packer.add(PageType.main, name + "-team-" + team.name, out);
toDispose.add(out);
}
}
@@ -1323,6 +1340,7 @@ public class Block extends UnlockableContent implements Senseable{
Pixmap out = last = Pixmaps.outline(region, outlineColor, outlineRadius);
Drawf.checkBleed(out);
packer.add(PageType.main, atlasRegion.name, out);
toDispose.add(out);
}
var toOutline = new Seq<TextureRegion>();
@@ -1336,6 +1354,7 @@ public class Block extends UnlockableContent implements Senseable{
Drawf.checkBleed(outlined);
packer.add(PageType.main, regionName + "-outline", outlined);
toDispose.add(outlined);
}
}
@@ -1353,12 +1372,15 @@ public class Block extends UnlockableContent implements Senseable{
packer.add(PageType.main, "block-" + name + "-full", base);
editorBase = new PixmapRegion(base);
toDispose.add(base);
}else{
if(gen[0] != null) packer.add(PageType.main, "block-" + name + "-full", Core.atlas.getPixmap(gen[0]));
editorBase = gen[0] == null ? Core.atlas.getPixmap(fullIcon) : Core.atlas.getPixmap(gen[0]);
}
packer.add(PageType.editor, name + "-icon-editor", editorBase);
toDispose.each(Pixmap::dispose);
}
public int planRotation(int rot){
+17 -7
View File
@@ -50,6 +50,7 @@ public class Build{
if(tile.build != null){
prevBuild.add(tile.build);
tile.build.onDeconstructed(unit);
tile.build.dead = true;
}
tile.setBlock(sub, team, rotation);
@@ -122,6 +123,14 @@ public class Build{
}
});
//complete it immediately
if(result.instantBuild){
Events.fire(new BlockBuildBeginEvent(tile, team, unit, false));
result.placeBegan(tile, tile.block, unit);
ConstructBlock.constructFinish(tile, result, unit, (byte)rotation, team, null);
return;
}
Block previous = tile.block();
Block sub = ConstructBlock.get(result.size);
var prevBuild = new Seq<Building>(9);
@@ -190,6 +199,11 @@ public class Build{
if(tile == null) return false;
//floors have different checks
if(type.isFloor()){
return type.isOverlay() ? tile.overlay() != type : tile.floor() != type;
}
//campaign darkness check
if(world.getDarkness(x, y) >= 3){
return false;
@@ -199,10 +213,6 @@ public class Build{
return false;
}
if((type.isFloor() && tile.floor() == type) || (type.isOverlay() && tile.overlay() == type)){
return false;
}
if(!type.canPlaceOn(tile, team, rotation)){
return false;
}
@@ -223,7 +233,7 @@ public class Build{
(check.floor().isDeep() && !type.floating && !type.requiresWater && !type.placeableLiquid) || //deep water
(type == check.block() && check.build != null && rotation == check.build.rotation && type.rotate && !((type == check.block && check.team() == Team.derelict))) || //same block, same rotation
!check.interactable(team) || //cannot interact
!check.floor().placeableOn || //solid wall
!check.floor().placeableOn || //solid floor
(!checkVisible && !check.block().alwaysReplace) || //replacing a block that should be replaced (e.g. payload placement)
!(((type.canReplace(check.block()) || (type == check.block && state.rules.derelictRepair && check.team() == Team.derelict)) || //can replace type OR can replace derelict block of same type
(check.build instanceof ConstructBuild build && build.current == type && check.centerX() == tile.x && check.centerY() == tile.y)) && //same type in construction
@@ -281,9 +291,9 @@ public class Build{
return false;
}
/** Returns whether the tile at this position is breakable by this team */
/** @return whether the tile at this position is breakable by this team */
public static boolean validBreak(Team team, int x, int y){
Tile tile = world.tile(x, y);
return tile != null && tile.block().canBreak(tile) && tile.breakable() && tile.interactable(team);
return tile != null && tile.block() != Blocks.air && (tile.block().canBreak(tile) && (tile.breakable() || state.rules.allowEnvironmentDeconstruct)) && tile.interactable(team);
}
}
@@ -75,15 +75,13 @@ public class ConstructBlock extends Block{
if(block instanceof OverlayFloor overlay){
tile.setOverlay(overlay);
tile.setBlock(Blocks.air);
}else if(block instanceof Floor floor){
tile.setFloorUnder(floor);
tile.setBlock(Blocks.air);
}else{
tile.setBlock(block, team, rotation);
}
if(tile.build != null){
if(tile.build != null && tile.build.block == block){
tile.build.health = block.health * healthf;
if(config != null){
@@ -100,11 +98,11 @@ public class ConstructBlock extends Block{
//make sure block indexer knows it's damaged
indexer.notifyHealthChanged(tile.build);
}
//last builder was this local client player, call placed()
if(tile.build != null && !headless && builder == player.unit()){
tile.build.playerPlaced(config);
//last builder was this local client player, call placed()
if(!headless && builder == player.unit()){
tile.build.playerPlaced(config);
}
}
if(fogControl.isVisibleTile(team, tile.x, tile.y)){
@@ -29,6 +29,7 @@ public class StackConveyor extends Block implements Autotiler{
public @Load("@-stack") TextureRegion stackRegion;
/** requires power to work properly */
public @Load(value = "@-glow") TextureRegion glowRegion;
public @Load(value = "@-edge-glow", fallback = "@-glow") TextureRegion edgeGlowRegion;
public float glowAlpha = 1f;
public Color glowColor = Pal.redLight;
@@ -154,7 +155,7 @@ public class StackConveyor extends Block implements Autotiler{
Draw.z(Layer.blockAdditive);
Draw.color(glowColor, glowAlpha * power.status);
Draw.blend(Blending.additive);
Draw.rect(glowRegion, x, y, rotation * 90);
Draw.rect(state == stateLoad ? edgeGlowRegion : glowRegion, x, y, rotation * 90);
Draw.blend();
Draw.color();
Draw.z(Layer.block - 0.1f);
@@ -77,19 +77,22 @@ public class Floor extends Block{
public int blendId = -1;
protected TextureRegion[][] edges;
protected Seq<Block> blenders = new Seq<>();
protected Seq<Floor> blenders = new Seq<>();
protected Bits blended = new Bits(256);
protected int[] dirs = new int[8];
protected TextureRegion edgeRegion;
public Floor(String name){
super(name);
variants = 3;
this(name, 3);
}
public Floor(String name, int variants){
super(name);
this.variants = variants;
placeableLiquid = true;
allowRectanglePlacement = true;
instantBuild = true;
placeEffect = Fx.rotateBlock;
}
@Override
@@ -174,18 +177,23 @@ public class Floor extends Block{
}
packer.add(PageType.environment, name + "-edge", result);
result.dispose();
}
@Override
public void drawBase(Tile tile){
Mathf.rand.setSeed(tile.pos());
Draw.rect(variantRegions[Mathf.randomSeed(tile.pos(), 0, Math.max(0, variantRegions.length - 1))], tile.worldx(), tile.worldy());
Draw.rect(variantRegions[variant(tile.x, tile.y)], tile.worldx(), tile.worldy());
Draw.alpha(1f);
drawEdges(tile);
drawOverlay(tile);
}
public int variant(int x, int y){
return Mathf.randomSeed(Point2.pack(x, y), 0, Math.max(0, variantRegions.length - 1));
}
public void drawOverlay(Tile tile){
Floor floor = tile.overlay();
if(floor != Blocks.air && floor != this){
@@ -233,8 +241,8 @@ public class Floor extends Block{
for(int i = 0; i < 8; i++){
Point2 point = Geometry.d8[i];
Tile other = tile.nearby(point);
//special case: empty is, well, empty, so never draw emptyness on top, as that would just be an incorrect black texture
if(other != null && other.floor().cacheLayer == layer && other.floor().edges() != null && other.floor() != Blocks.empty){
//special case: empty is, well, empty, so never draw emptiness on top, as that would just be an incorrect black texture
if(other != null && other.floor().cacheLayer == layer && other.floor().edges(tile.x, tile.y) != null && other.floor() != Blocks.empty){
if(!blended.getAndSet(other.floor().id)){
blenders.add(other.floor());
dirs[i] = other.floorID();
@@ -255,8 +263,7 @@ public class Floor extends Block{
Point2 point = Geometry.d8[i];
Tile other = tile.nearby(point);
if(other != null && doEdge(tile, other, other.floor()) && other.floor().cacheLayer == realCache && other.floor().edges() != null && other.floor() != Blocks.empty){
if(other != null && doEdge(tile, other, other.floor()) && other.floor().cacheLayer == realCache && other.floor().edges(tile.x, tile.y) != null && other.floor() != Blocks.empty){
if(!blended.getAndSet(other.floor().id)){
blenders.add(other.floor());
}
@@ -270,12 +277,12 @@ public class Floor extends Block{
protected void drawBlended(Tile tile, boolean checkId){
blenders.sort(a -> a.id);
for(Block block : blenders){
for(Floor block : blenders){
for(int i = 0; i < 8; i++){
Point2 point = Geometry.d8[i];
Tile other = tile.nearby(point);
if(other != null && other.floor() == block && (!checkId || dirs[i] == block.id)){
TextureRegion region = edge((Floor)block, 1 - point.x, 1 - point.y);
TextureRegion region = block.edge(tile.x, tile.y, 1 - point.x, 1 - point.y);
Draw.rect(region, tile.worldx(), tile.worldy());
}
}
@@ -302,17 +309,23 @@ public class Floor extends Block{
return blendId;
}
/** Returns the edge array that should be used to draw at the specified tile position. */
protected TextureRegion[][] edges(int x, int y){
return blendGroup.asFloor().edges;
}
protected TextureRegion edge(int x, int y, int rx, int ry){
return edges(x, y)[rx][2 - ry];
}
@Deprecated
protected TextureRegion[][] edges(){
return ((Floor)blendGroup).edges;
return edges(0, 0);
}
/** @return whether the edges from {@param other} should be drawn onto this tile **/
protected boolean doEdge(Tile tile, Tile otherTile, Floor other){
return (other.realBlendId(otherTile) > realBlendId(tile) || edges() == null);
}
TextureRegion edge(Floor block, int x, int y){
return block.edges()[x][2 - y];
return (other.realBlendId(otherTile) > realBlendId(tile) || edges(tile.x, tile.y) == null);
}
public static class UpdateRenderState{
@@ -325,5 +338,4 @@ public class Floor extends Block{
this.floor = floor;
}
}
}
@@ -69,6 +69,8 @@ public class OreBlock extends OverlayFloor{
packer.add(PageType.editor, "editor-block-" + name + "-full", image);
packer.add(PageType.main, "block-" + name + "-full", image);
}
image.dispose();
}
}

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