Space Engineers

Space Engineers

4,112 ratings
MMaster's Automatic LCDs 2 Full Guide
By MMaster
Complete guide for Automatic LCDs 2 script for Space Engineers.

It will answer all your questions how to get LCDs to display dynamic info about your ship or station. You will find detailed information about how the commands are used with examples so you can fully use all the features as they were designed and implemented.

Read the guide and give your ships some awesome status displays that everyone will envy!
Rate  
Favorite
Favorited
Unfavorite
Overview
Welcome to the Full Guide for my Automatic LCDs 2 script for Space Engineers!

Workshop link: http://steamcommunity.com/sharedfiles/filedetails/?id=822950976

Unfortunately there is not enough space in description of the steam workshop page to fit full guide. Well.. there was, but thanks to your suggestions I added more commands and more cool stuff and it doesn't fit there anymore. So I made this ultimate guide to answer all your questions! ;-)

This guide will give you full insight into how to use all the features of Automatic LCDs 2. You will find out what are the commands, what are the arguments of the commands and how to use them. It also contains full list of all commands with detailed description along with examples of use.

If you didn't watch the basics video guide yet, please do so now to better understand what this guide is about.


Example world
http://steamcommunity.com/sharedfiles/filedetails/?id=1205019270
Basic Terms
What is command line?
Command line is line of text representing some command with it's arguments.
Command Argument Argument

What is command?
Command is first word of the command line telling the script what function do you want it to perform.
Command

What are arguments?
Arguments are rest of the words of the command line after the command word.
Argument Argument

What is block?
Block is every machine, button, cockpit, everything on your ship that is accessible through control panel. Armors are not blocks. Script only works with blocks.
Every block has its name that you can set in control panel and main type.

What is block main type?
Block main type is the generic type of the block like assembler, refinery, reactor, solar, door, landinggear, container, .., etc.
For example container corresponds to all small, medium and large containers.

What is item?
Item is everything that can be stored in container. Item has its type and sub-type.

What is item type and sub-type?
Type is main type of item like Ore, Ingot, Component, Ammo and Tool.
Sub-type is the name of the item like Stone, Iron, Steelplate, Construction, .., etc.
One-time setup [Custom Data support!]
When you want to start using Automatic LCDs you need to first subscribe to it. Which you probably already did, but just in case here is the link:

http://steamcommunity.com/sharedfiles/filedetails/?id=822950976

Note: When you subscribe to this you will not see it in the list of mods in game, because it is not a mod. It is in-game script that works in vanilla game without any mods. So don't worry if you don't see it in list of mods - if you subscribed to it just follow this guide.

Programmable blocks and in-game scripts are now in "Experimental mode" in game that you need to turn on in game options.
Also don't forget to enable in-game scripts in advanced world settings.

1. Load this script into programmable block.
- Open Programmable block control panel
- Click Edit (If you don't see Edit button you need to Enable in-game scripts in Advanced World settings)
- Click Browse Scripts
- Find Automatic LCDs 2 and select it
- Click Copy to editor
- Click OK.

The initial setup is now complete. You don't need to touch the programmable block anymore.

2. Build a few LCD panels. You can use even Wide LCD or Text panel.

3. Add [LCD] to the end of the name of your panels. (including [ ] )
German client users: your [LCD] will probably not work. Use !LCD! instead.

4. Use Debug or Monospace font of any size you like on your LCDs.

I highly recommend touching the programmable block now and then to update the script if there were any new features added or bugs fixed. Look at 'How to update' section to learn how to update scripts in your programmable blocks.
Check the steam workshop page regularly or follow my twitter for notifications.
This guide will always be updated.

Next you need to set some commands to those LCDs.
Commands are entered into Custom Data that you can find in control panel of each LCD.
How to update?
Script cannot update itself inside your programmable blocks. You need to load new version of script to your programmable block to overwrite the old one. You can do that in exactly the same way as when you first loaded the script into programmable block.

Make sure that you use Automatic LCDs 2 script to get all new features!

Open your programmable block, click Edit, click Browse Workshop, select Automatic LCDs 2, click OK, Check code, Click Ok. Done. Your script is now updated.

Note: If you are experiencing errors on translated version of script please write to the script page of author of that translation. I can't update translations.
Commands Guide
All commands usually work without entering any arguments unless command description says otherwise.

You can enter one command per line in Custom Data of LCD
Time Base Stats - Time:
Echo
Power
Echo
Cargo


Those lines will display text "Base Stats - Time:" following with current time
Next it will show empty line.
Show power stats
Empty line
Show cargo stats

You can also separate commands on single line with ;
Time Base Stats - Time: ;Echo;Power;Echo;Cargo
This line would do exactly the same thing as the lines above.

You can specify filters and other things by using command arguments. Arguments of each command are explained separately for each command.

Each argument is always just one word - which means everything not separated by space.
+ore,ingot - this is single word
+ore/stone +ingot - two words

First argument usually specifies filter for name of blocks
* means all blocks
Inventory *
This will show all items from all blocks.

Inventory Storage
This will show all items from blocks which have Storage in name.

Inventory [CARGO]
This will show all items from blocks which have [CARGO] (including [ ]) in name.

You can enter multiple words in single argument by using { and }. I recommend always using { and } even if you use just one word.

Inventory {My Cargo Container}
This will show inventory of blocks which have "My Cargo Container" (without quotes) in name. So all of these would be shown: My Cargo Container 1, My Cargo Container A, Second My Cargo Container. Also if you use eg "Container 1" it will show even "Container 10" and "Container 100", etc. You need to chose unique names for your blocks to prevent this.

You can also enter Block Group name instead of blocks name
Inventory {G:Block Group}
This will only show inventory of blocks from group named Block Group (exact name).

Your commands are too long to fit on single line?
You can use a \ to tell the script to continue the command on the next line, just make sure there is nothing after the \ not even a space.
e.g: InvList * +ore/iron, \
silicon, \
magnesium


You don't have { and } on your keyboard?
Try this:
Instead of Alt Gr + 0 use Alt + Strg (Ctrl) + 0 for } and + 7 for {
Same ship blocks filtering [NEW!]
Make sure you read Commands Guide section before this.

As you know almost every command has first argument used for name filtering which can be used to filter blocks by block name or block group name. This name filter now supports more than that. You can use it to tell the script to only look for blocks which are part of the same grid as the one where the programmable block is.

This is very useful if you connect ships to your station or ship and you don't want to see blocks of the connected ships on station LCDs. You can also use this script on multiple ships that connect together without worries that they will conflict once connected.

Script now only updates LCDs which are part of the same grid as programmable block. If you would like to change this please take look at What is LCD_TAG? section to learn how to change LCD_TAG.

What is the grid?
Simplest way to describe the grid is to say that it is single ship. However this is not always true. Blocks connected by pistons, rotors or connectors are not on the same grid!
Blocks connected by merge blocks are part of the same grid. If you connect your ships using merge blocks take a look at section 'How to use with docked ships?'

How to use it?
Usage is very similar to how block groups are filtered. As you know you can filter block groups like this:
Inventory {G:Group name}

You can filter only blocks that are part of the same grid as programmable block running this script like this:
Inventory {T:Block name}

This command would display only inventory of blocks which have 'Block name' in their name and also belong to same grid as programmable block.

How to display all blocks of same grid?
Normally you would use * to display all blocks. This works even with T: modifier:
Inventory T:*

This command displays inventory of all blocks that are part of the same grid as programmable block.

How to display blocks from group that are part of the same grid?
Group modifier G and This grid modifier T can be used together like this:
Inventory {TG:Group name}

This command displays inventory of blocks in group named 'Group name' that belong to same grid as programmable block.

LCDs that are connected using rotors, pistons or connectors are not updating?
By default the script only updates LCDs that are part of the same grid as programmable block.
You can change this behavior by changing LCD_TAG from "T:[LCD]" to "[LCD]".
Look at 'What is LCD_TAG?' section of this guide to learn more about LCD_TAG.
What is LCD_TAG? NEW!
LCD_TAG is used to tell the script which LCDs are managed by the script. As all of you know the script looks for LCDs that have [LCD] in their name by default.
This is because the LCD_TAG is set to "T:[LCD]" by default which means that it will look for LCDs on the same grid with [LCD] in their name.

You can however change this to whatever you like. You can tell the script to manage LCDs in certain group or even tell it to manage all LCDs regardless of name.

How to change the LCD_TAG?
You can change the LCD_TAG by editing the Custom Data of programmable block that runs the script. Let's explain it by example:

You have LCDs connected using rotors and you want them to be managed by the script.
1. Open control panel of programmable block that contains Automatic LCDs 2
2. Click on Custom Data
3. Write following line to Custom Data:
LCD_TAG = [LCD]
4. Click Ok
5. Click Recompile button in Programmable Block control panel
6. Script will now update all panels containing [LCD] even on connected grids

If you don't understand why it now looks even on connected grids please read the 'Same grid filtering' section of this guide.

How to tell the script to manage all LCDs regardless of name?
LCD_TAG follows the same name filtering rules as commands. So you can set the Custom Data to:
LCD_TAG = *
and the script will manage completely all LCDs on all connected grids.

How to tell the script to manage all LCDs in group?
Same as with name filtering, you can set the Custom Data to:
LCD_TAG = G:Group name

WARNING
Do not chose tags containing other tags!
BAD:

First Programmable Block: LCD_TAG = "Bridge [LCD]"
Second Programmable Block: LCD_TAG = "[LCD]
GOOD:
First Programmable Block: LCD_TAG = "[Bridge LCD]"
Second Programmable Block: LCD_TAG = "[LCD]


You also can't change the LCD_TAG during run. You need to recompile the script every time you change the LCD_TAG otherwise the script will still look for old tag.

How to set LCD_TAG and show stuff on the Programmable block screen?

You need to separate the LCD_TAG in the Custom Data from the commands by using 3 dashes (---) on single line like this:
LCD_TAG = [My LCD]
---
@0 AutoLCD
Echo Text on PB screen

Joining LCDs together
It is now possible to join multiple LCDs together so they will look and work like single panel. Because of the limitations of text alignment it is only possible to join LCDs up and down. Not left to right. So the widest LCD you can have is Wide LCD. But you can have many of them under each other to form single big one.

You can do that by adding !LINK:GROUP NUMBER to the name of the LCD. Where:
GROUP is your custom name for this group of LCDs. It has nothing to do with ingame groups of blocks. Just make up some name.
NUMBER is position of LCD in array of LCDs. It doesn't matter what number you choose. They just need to go one after another. So the topmost LCD will have the lowest number. For example 1. LCD under it will have 2, etc.
!LINK needs to be in capital letters and there needs to be space between GROUP name and NUMBER.

The command line will be taken from first LCD in group.

All joined LCDs will be automatically set to the same font as the first LCD in group.


Example
You have 3 LCDs under each other.
Call the top LCD "Text panel [LCD] !LINK:A 1"
Call the middle one "Text Panel [LCD] !LINK:A 2"
and last one "Text Panel [LCD] !LINK:A 3"

You can have another group of LCDs joined and you just need to change the group from A to for example B.
How to use with cockpits?
You can use this script on cockpit screens as well as screens of other blocks. In order to do that you have to mark the cockpit (or other block) with the LCD_TAG as you did with LCDs. So by default you add [LCD] to the name of the cockpit in order for the cockpit to be recognized by the script.

As soon as you do that the first screen on the cockpit will be controlled by the Automatic LCDs 2 and should display the usual message that you should write commands to custom data of the panel. If you need only this screen, you can write commands to Custom Data of the cockpit just as you do with LCDs.

In order to use other screens you have to tell the script which screen you want to write to. Here is example of how the Custom Data of cockpit can look like:

@0 AutoLCD
Echo This will be shown on first screen
@1 AutoLCD
Echo This will be shown on second screen
@2 AutoLCD
Echo This will be shown on third screen


As you can see there are special headers telling the script which screen you want to write to. They need to be on their own separate line.

Header looks like this:
@<screen index> AutoLCD

Where <screen index> is the index of the screen you want to write to. 0 is the first screen, 1 is the second screen, etc. The 'AutoLCD' part just needs to be there.

Easy way to know the index of the screen is when you look at the control panel of the cockpit, find the list of the LCD panels and pick one. For example 'Keyboard' screen is 4th in the list of the LCD panels which means its index is 3 (because first one is 0). So if you would want to write only to the Keyboard screen your custom data would look like this:
@3 AutoLCD
Echo This text will be on keyboard
Echo other screens won't be changed


You can use this on any block that has LCD panel screens. Script will not touch screens that you haven't specified so you can use this with other scripts too. Read 'Compatibility with other scripts' if you want to know how Automatic LCDs can share Custom Data with other scripts.

Unfortunately you are not able to use manual scrolling or panel linking on those screens.

How to set LCD_TAG and show stuff on the Programmable block screen?

You need to separate the LCD_TAG in the Custom Data from the commands by using 3 dashes (---) on single line like this:
LCD_TAG = [My LCD]
---
@0 AutoLCD
Echo Text on PB screen

How to use with docked ships?
If you want to dock or merge a ship that is using this script with another ship or station that is also using this script you can run into some problems which can be easily prevented if you know how.

Script now only updates LCDs which are part of the same grid
This means that LCDs which are connected using connectors, pistons or rotors will not be updated to prevent conflicts between docked ships. This does not apply when ships are connected using merge block because in that case they behave like single ship in game.

LCDs are updating much slower when more ships are docked using merge block
If there are more ships using this script docked together using merge block then the programmable blocks will not split the work efficently automatically.
I recommend using different LCD_TAG for each ship and station. Look at Tips and Tricks section of this guide to learn how to do that. This will ensure that programmable blocks always update only LCDs on the ship/station they are intended for.

LCDs are showing items, power, cargo, etc of all docked ships
This will happen if you use no arguments to commands or if you use * or if you use same names for groups / blocks on both ships. Make sure you read Same ship blocks filtering section to learn how to filter only blocks of the same ship.
Keep in mind that the same ship filtering doesn't work if the ships are connected using merge block.
I recommend making groups of blocks named based on ship they are on and always using group filtering in commands.

Example:
Ship named ALICE
- uses LCD_TAG = "[ALICE LCD]";
- has all storage blocks in group "ALICE Storage"
- has all power blocks in group "ALICE Power"
- has 1 LCD named "LCD Power [ALICE LCD]" with command "Power {G:ALICE Power}"
- has 1 LCD named "LCD Cargo [ALICE LCD]" with command "Cargo {G:ALICE Storage};Inventory {G:ALICE Storage}"

If you follow this convention for all your ships and stations then you should have no problems with docking or merging ships together. Never use * or no argument if you plan to dock the ship and you don't want to see things from other ships when docked.
Command: Inventory
Displays inventory summary for certain item types. It automatically adds 0 items lines for vanilla game items. Script will automatically display even modded items if they are in the inventories, but it will not report missing modded items.

If you don't want to display missing items (0 items lines) use InventoryX instead of Inventory (good for displaying contents of container). This will also disregard default quotas so unless you set quota yourself it will be 0 and no visual bar will be shown.
If you don't want to display ore counts in ingot display use InventoryS or InventoryXS if you also want to hide 0 items lines.

This command has some default quotas set for vanilla items. It's quota is considered maximum quota which means that this is the maximum number of items you ever expect to have. So you can easily see just by looking at the progress bar around how many items you have.

It also reports modded items found in inventories, but it will not show those if you don't have any in inventories.

You can completely disable progress bar by setting the quota to 0.

You can also use InventoryNB (no bars) variant to hide all progress bars.
InventoryNN (no numbers) hides all numbers.
InventoryNNB (no numbers or bars) hides all numbers and bars.
This also works with other variants (like InventoryXNNB).

Advanced: If you know something about how items in SE internals work, you can translate or add modded items to be reported when 0 of them is in the inventory. Look into Modded Items discussion on the Steam Workshop page for more info.

Arguments
No arguments: displays all items on current ship/station.
First argument: filters blocks based on name - look into Command Guide section for more info.
Next arguments: specify included/excluded item types and can override default quotas.

Item type and quota specification:
Operator + or - adds or removes items from display.
+all adds all item types to display
-ore removes ores from display
You need to add something for - operator to work!

Use main types in specification:
ore (all ores)
ingot (all ingots)
component (all components)
ammo (all ammo boxes)
tool (all tools + hand guns)
oxygen (oxygen containers - currently only Oxygen Bottles)

Or sub types:
(both ore and ingot)
iron, gold, nickel, platinum, cobalt, magnesium, silicon, silver, uranium
(ore) ice
(ingot) scrap
(component)
construction, metalgrid, interiorplate, steelplate, girder, smalltube, largetube, motor, display, bpglass, computer, reactor, thruster, gravgen, medical, radio, detector, explosives, solarcell, powercell, superconductor, canvas
(tool)
automaticrifleitem, preciseautomaticrifleitem, rapidfireautomaticrifleitem, ultimateautomaticrifleitem welderitem, welder2item, welder3item, welder4item
anglegrinderitem, anglegrinder2item, anglegrinder3item, anglegrinder4item
handdrillitem, handdrill2item, handdrill3item, handdrill4item
(ammo) nato_5p56x45mm, nato_25x184mm, missile200mm
(oxygen) oxygenbottle
(gas) hydrogenbottle

You can use modded items names usually found out by removing spaces from what the display shows in all items summary.
So for example: Super_Mega Large Bullet would be super_megalargebullet


Or both:
ingot/iron (only iron ingots), ingot/uranium (only processed uranium)
You can combine that like this:
+ingot/iron,gold (add iron and gold ingots)
+ingot,component (add ingots and components)
+steelplate,construction (steelplates and construction components)

To override progress bar quotas:
+ingot:10000
Adds all ingots with all of them having max progress bar value 10000.

+component:1000 +steelplate:10000,construction:9000
Adds all components with quota 1000
Next it overrides steelplate and construction components with different quotas.

Examples
Inventory * +all -ore
Inventory Cargo +ingot -scrap
Inventory {Red Storage} +ingot:300000
Inventory [STORAGE] +component
Inventory {Cargo Container} +all -tool -ammo
Inventory {Large Cargo Container 3} +ingot:1000 +component:50
Inventory {Oxygen Storage} +oxygen:100
Command: InvList
This command is exactly the same as Inventory, but it doesn't display items categories.

You can use InvListX to remove 0 items lines just like in Inventory command.
If you don't want to display ore counts in ingot display use InvListS or InvListXS if you also want to hide 0 items lines.
You can also use InvListNB (no bars) variant to hide all progress bars.
InvListNN (no numbers) hides all numbers.
InvListNNB (no numbers or bars) hides all numbers and bars.
This also works with other variants (like InvListXNNB).

Command: Missing [New MissingList]
Displays items which are low in stock (lower than set quota).
This works almost the same as Inventory command, but it shows only items which are lower than set quota.
This quota is different from the Inventory command quota, because it is minimum quota. You can use this command to only show items which are very low in stock so just by looking at it you will see what needs your immediate attention. That is why default quota is set to 1 so only when you have 0 items they will show up there - which I think almost always needs your immediate attention.

Usage of the command is exactly the same as Inventory command and you can override the quotas in the same way.

You can also use MissingList variant to remove the lines with category names.
You can also use MissingNB (no bars) variant to hide all progress bars.
MissingNN (no numbers) hides all numbers.
MissingNNB (no numbers or bars) hides all numbers and bars.
This also works with other variants (like MissingListNNB).

Examples
Missing * +component:50 +ingot:100 +ammo:10
Missing {Resource Storage} +ore:2000
Command: Cargo
Displays used cargo space of specified cargo containers. Only from cargo containers.

Use CargoX to show only percentage without the progress bars or actual volume.
Use CargoP to show only percentage and progress bars without exact volume.
Use CargoBar to show only progress bar with no text.

Note: doesn't work with drills and any other blocks other than containers. Use CargoAll command to show cargo of all blocks.

Arguments
No arguments: all containers on ship/station
First argument: filters containers based on name

Examples
Cargo
Cargo Storage
Cargo {Large Cargo Container 5}
Command: CargoAll
Displays used cargo space of specified blocks. All blocks including cargo containers, refineries input, assemblers input, reactors, welders, .. etc.

Use CargoAllX to show only percentage without the progress bars or actual volume.
Use CargoAllP to show only percentage and progress bars without exact volume.
Use CargoAllBar to show only progress bar with no text.

Usage is exactly the same as Cargo.
Command: Power
Displays power statistics for specified blocks.
Automatically separates reactors, engines, solar panels, wind turbines and batteries. Works with modded blocks. It shows maximum achievable power output for solar panels. That means that if there is no sun shining on solar panels then the maximum is 0 W.

Use PowerX to show simple variant with only percentage and no progress bars.
Use PowerP to show only percentage and progress bars without exact power readings.
Use PowerV to show only exact power values, but no percentage and progress bars.

Use PowerIn to show only input of batteries and PowerOut to show only output of batteries. Variants PowerInX, PowerOutX and PowerInP and PowerOutP work too.

Custom Titles
This command by default writes "Reactors:", "Engines:", "Turbines:", "Batteries:" and "Solars:" in the output. Now you can override that by using second argument like this:

To display only power blocks from group Batteries with title "My Accumulators:"
Power {G:Batteries} {My Accumulators}

Note that you need to enclose the second argument in {}.

Arguments
No arguments: all reactors, engines, wind turbines, solars and batteries
First argument: filters blocks based on name
Second argument: override titles (Reactors, Engines, Turbines, Solars, Batteries) with your custom text

Examples
Power
Power {Small Reactor}
Power {Large Reactor}
Power {Battery 2}
Power {Main Power}
Command: PowerStored
Displays power charge (stored power) of battery.

Use PowerStoredX to show simple variant with only percentage and no progress bar.
Use PowerStoredP to show only percentage and progress bars without exact power readings.
Use PowerStoredV to show only exact power values, but no percentage and progress bars.

Arguments
No arguments: all batteries
First argument: filters blocks based on name
Second argument: override titles (Reactors, Solar, Batteries) with your custom text (read Custom Titles in Power command description to understand how it works)

Examples
PowerStored
PowerStored {Main Battery}
Command: PowerSummary
Displays total power output for specified blocks.

Use PowerSummaryX to show simple variant with only percentage and no progress bar.
Use PowerSummaryP to show only percentage and progress bars without exact power readings.
Use PowerSummaryV to show only exact power values, but no percentage and progress bars.

Arguments
No arguments: all reactors, solars and batteries
First argument: filters blocks based on name

Examples
PowerSummary
PowerSummary {Small Reactor}
Command: PowerUsed & PowerUsedTop
Displays power usage of specified blocks.
PowerUsedTop variant shows top X blocks from the specified blocks sorted by power usage.

Arguments
No arguments: displays power usage of all blocks
First argument: filters blocks based on name
Second argument: number of blocks to display (only works for PowerUsedTop)

NOTE (Bug): the game reports power usage of all thrusters on single thruster and all other thrusters report no power use - because of this it is not possible to separate thrusters and all of them except for one will report 0 power use and that single thruster will report power usage of all thrusters.

Examples
Power use of refineries:
PowerUsed {Refinery}
Top 5 most power using blocks on ship:
PowerUsedTop {T:*} 5
Top 10 most power using blocks on ship and connected ships:
PowerUsedTop * 10
Command: PowerTime
Displays estimated time after which power will be depleted. You can also filter blocks by using name filter to limit the estimation to only some blocks. For example you may be interested in seeing only batteries on your ship and this command will show you time after which those batteries will be depleted at current power draw rate or time after which the batteries will be fully charged.

It doesn't work with Hydrogen Engines, because the calculations required to calculate time until hydrogen depletion are really complicated and unfortunately they also require a lot of code to be added which currently doesn't fit into the programmable block limits. I'm sorry about that.

You can set your own time quota and this command will even display progress bar with percentage showing how much remaining power time there is out of your total specified quota.

Make sure you own all the reactors and batters as well as programmable block or it will not work correctly!

NOTE: in-game scripts have very limitted access to things which are needed to estimate power time. I've done everything I could think of to estimate the time with as much precision as possible, but it is not perfect. It is just an estimation. On the other side, during my testing I found it to be more precise than the Fuel Time displayed on game HUD in some situations.

Use PowerTimeX to show simple variant with only percentage and no progress bars.
Use PowerTimeP to show only percentage and progress bars without exact time.
Use PowerTimeBar to show only progress bar with no text.
Note: These commands (PowerTimeX, PowerTimeP and PowerTimeBar) only work if you specify time quota.

Arguments
No arguments: displays power time of the ship without any progress bar
First argument: filters blocks based on name or group
Second argument: time quota hours
Third argument: time quota minutes
Forth argument: time quota seconds

Examples
Power time of whole ship:
PowerTime
Power time of whole ship with time quota 5 days (120 hours):
PowerTime * 120
Power time of group Batteries (showing either charge time or depleted time):
PowerTime {G:Batteries}
Power time of all blocks that have Reactor in name with quota set to 1hour 30minutes:
PowerTime Reactor 1 30
Power time of battery with deplete/charge time quota set to 45 seconds:
PowerTime {Battery 31} 0 0 45
Command: Charge
Displays jump drive charge with progress bar for every jump drive matching name/group filter.

You can use ChargeX to display only percentage without actual values or progress bars.
Use ChargeBar to show only progress bars with no text.

Arguments
No arguments: nothing will be displayed!
First argument: filters jump drives based on name or group

Examples
Charge
Charge {My Jump Drive}
Charge {G:Jump Drives 1}
Command: ChargeTime
Displays estimated time remaining to charge jump drive with progress bar for every jump drive matching name/group filter.

Note: This is just estimated time by script. It will probably not be exactly correct and it is possible that it will jump up and down, because of how in-game scripting works and because of the fact that the game doesn't expose such information without dirty hacks and the script has to calculate it itself.

You can use ChargeTimeX to display only time without progress bars.

Arguments
No arguments: nothing will be displayed!
First argument: filters jump drives based on name or group

Examples
ChargeTime
ChargeTime {My Jump Drive}
ChargeTime {G:Jump Drives 1}
Command: Damage
Displays damaged and partially built ship/station blocks. Script only has access to blocks which are visible in control panel so no armor blocks, conveyor tubes, etc are considered.

You can use DamageX command to show only percentage without the hull numbers.
You can now also use word NoC (No Contruction) which will make Damage commands display only damaged blocks and not show blocks that were grinded / not fully constructed.
You can also use DamageC to only show only blocks that are not fully constructed.
Possible variants: DamageNoC, DamageXNoC, DamageC and DamageXC

Arguments
No arguments: all blocks on ship/station
First argument: filters blocks based on name
Second argument: maximum percentage to show eg: Damage * 30 will show only blocks that have less than 30% of integrity

Examples
Damage
Damage {Large Thruster}
Damage [IMPORTANT]
Damage {Reactor} 50
Command: Docked
Displays list of names of docked ships on specified connectors.
Doesn't show connectors that are not connected unless you use DockedE variant in which case it will show "-" when the connector is not connected to anything.
You can also make it show connectors to which the ships are connected if you use DockedCN which you can also combine with empty connectors variant as DockedCNE.

WARNING: You should definitely use same grid filtering like {T:*} (look for the 'Same grid filtering' section above), otherwise as soon as other ships connect you will also see their connectors connection!

Arguments
No arguments: shows list of all docked ships
First argument: filters connectors based on name and only shows ships connected to those

Examples
Docked {T:*}
Docked {T:Connector 1}
DockedCNE {TG:Dock Connectors Group}
Command: BlockCount
Displays number of blocks of specified type
Separates different sub types of blocks

Arguments
No arguments: displays all blocks
First argument: filters blocks based on name, displays blocks of all types.
Next arguments: filter blocks based on type

Use main block type name like:
reactor, thruster, container, refinery, assembler, solar, battery, beacon, antenna, gyro, sensor, connector, spotlight, interlight, landgear, program, timer, rotor, piston, projector, merge, sound, collector, door, spheregrav, gravgen, drill, grinder, welder, gatlingturret, missileturret, interiorturret, gatlinggun, reloadlauncher, launcher, mass, warhead, light, control, cockpit, medi, remote, button, camera, detector, laserantenna, airvent, oxygenerator, sorter, oxyfarm, cryo, jumpdrive, tank (both hydrogen and oxygen), parachute, windturbine, hydrogenengine

Hangar door uses same type as door so you will have to filter those by name if you want to have them separately.

Types separated by space or ,

Example:
BlockCount * reactor
BlockCount [BACKUP] reactor
BlockCount * refinery,assembler
BlockCount * thruster gyro reactor,solar,battery
Command: EnabledCount
Displays number of enabled blocks of specified type.
Separates different sub types of blocks.

Arguments
No arguments: displays all blocks
First argument: filters blocks based on name, displays blocks of all types.
Next arguments: filter blocks based on type (look at BlockCount command for list of types).

Examples
EnabledCount * reactor
EnabledCount * assembler
Command: ProdCount
Displays number of producing blocks of specified type.

Arguments
No arguments: displays all blocks
First argument: filters blocks based on name, displays blocks of all types.
Next arguments: filter blocks based on type (look at BlockCount command for list of types).

Example
ProdCount * refinery,assembler
Command: Working
Displays all blocks of specified type showing their working state.
State is one of ON/OFF, IDLE/WORK, LOCK/UNLOCK/READY, OPEN/CLOSED and laser antenna states.

If you use group of multiple blocks and you want to have just one line showing the status, filter only single block from the group of blocks. So single door instead of whole group of doors or just one specific thruster from group of thrusters, etc.

It may not work for some localized games, but working command for battery now shows batteries charge state as (+) 100.0% or (-) 55.5% .. (+) meaning battery is charging (-) meaning its not charging. The number of percent is portion of full capacity filled.

Arguments
No arguments: displays all blocks
First argument: filters blocks based on name, displays blocks of all types.
Next arguments: filter blocks based on type (look at BlockCount command for list of types).

You can filter states like this:
Working * assembler:work reactor:on

If you want to filter state of all block types you can do it like this:
Working * :work :on
Notice that there is no type specified just :state

You can use WorkingX to filter states based only on ON/OFF state:
WorkingX * assember:on
This will show all assemblers that are ON (does not matter if IDLE or WORK)

Examples
Working * missileturret,gatlingturret,interturret
Working * refinery:off refinery:idle refinery:work
Working * door:open
Working {G:Main Assemblers} assembler:idle assembler:off
Working Red refinery,assembler
Working * battery
Command: PropBool (NEW!)
Shows boolean properties of blocks. You can cusomize the text displayed when the property is true or false.
Boolean properties are properties that can have just one of 2 values - true or false.
Like On/Off, Open/Closed, Handbrake, Collect All, etc etc.

You can find list of all properties on wiki by awesome Malware:
https://github.com/malware-dev/MDK-SE/wiki/List-Of-Terminal-Properties-and-Actions

Look only for properties that are of Type bool.
Eg: OnOff, Open, ShowOnHUD, Depressurize, slaveMode, UseConveyor, ControlThrusters, ControlWheels, DampenersOverride, HandBrake, HorizonIndicator, MainCockpit, DrainAll, AnyoneCanUse, Force weld, ShareInertiaTensor, Override, Autolock, EnableIdleMovement, Shoot, TargetCharacter, TargetLargeShips, TargetMeteors, TargetMissiles, TargetNeutrals, TargetSmallShips, TargetStations, isPerm, SetFaction, TakeOwnership, Auto-Refill, Stockpile, AutoDeploy, etc.

They are case sensitive! Make sure you enter them exactly without any spaces before or after them. e.g. use {AutoDeploy} not {Auto Deploy} nor { AutoDeploy } nor {autodeploy}.

All of them should be self explanatory and always correspond to one of the properties you can see in the block control panel.
There are a lot of properties for many different blocks and listing them all here along with what they do would take a lot of space so I'm leaving that up to you to try.
Mods may also add their own bool properties which you can use here too.

There are 2 variants of this command:
1. PropBool {block name} {PropertyName} {Text before value} {true text} {false text}
- displays bool property PropertyName of first found block with block name like this:
if property is true it will show: Text before value true text
if property is false it will show: Text before value false text

Arguments
First argument: name filter
Second argument: property name (eg. Handbrake)
Third argument: text on the left side of screen
Fourth argument: text on the right side of screen show when property is true
Fifth argument: text on the right side of screen show when property is false

Examples
PropBool {Cockpit 1} {HandBrake} {Handbrake} {On} {Off}
- displays "Handbrake On" if handbrake is enabled on Cockpit 1
PropBool {Door 1} {Open} {Door status:} {Open} {Closed}
- displays "Door status: Open" if Door 1 is open; "Door status: Closed" if Door 1 is closed
PropBool {Connector 3} {CollectAll} {Connector 3 is set to } {Collect All} {Don't Collect}
- displays "Connector 3 is set to Collect All" if its set to Collect All otherwise it displays "Connector 3 is set to Don't Collect


2. PropsBool {blocks name} {PropertyName} {true text} {false text}
- displays bool property PropertyName of multiple blocks (showing block names on left side) like this:
Blocks name 1 true text
Blocks name 2 false text
Blocks name 3 false text


Arguments
First argument: name filter
Second argument: property name (eg. Handbrake)
Third argument: text on the right side of screen show when property is true
Fourth argument: text on the right side of screen show when property is false

Examples
PropsBool {Assembler} {OnOff} {Enabled} {Disabled}
- displays all assemblers that contain "Assembler" in their name with "Enabled" or "Disabled" on the right depending if they are On or Off.
PropsBool {Door} {Open} {Open} {Closed}
- displays all doors that contain "Door" in their name with Open or Closed on the right depending on if they are open or not
PropsBool {Turret} {Shoot} {Fire at Will} {Hold Fire}
- displays all turrets with "Turret" in their name with "Fire at Will" or "Hold Fire" on the right depending on if turret is set to Shoot or not
Command: Details
Displays details text from control panel for every block matching name/group filter.
For example: Projector details showing needed parts.
Details command can also start output on line where the user specified text is found.

DetailsX variant can be used to skip first line which should be the "Type: " line
DetailsNoN variant hides the names of blocks. (can also be used as DetailsNoNX)

Arguments
No arguments: nothing will be displayed!
First argument: filters blocks based on name or group
Second argument: text to look for in details text

Projectors now update automatically!

Due to game limitations some blocks do NOT automatically update the details text until you look at them in control panel. This is VERY important as you always need to look at the block in control panel if you want the LCD to show updated text. This does not apply to all blocks!
Open control panel on your ship / station, find your block and click on it. Thats all.
You need to do this every time you want to update the text on LCD.

Examples
Details {Projector 2}
Details {G:Batteries}
DetailsX Reactor


How to use second argument
Details {My block} {Text to look for:}
The command above will get the details text from block My Block and if it finds "Text to look for:" in the details text it will display it and any text after that otherwise if the text is not found the output will be empty.
Command: Amount
Displays list of all blocks with number of items / max number of items that fit inventory.
Usable for all blocks that take just single type of item like weapons, reactors & oxygen generator.
Automatically figures out maximum number of items. Works with modded weapons / ammo.

If it is used on inventory containing more items it will not show correct numbers!

Use AmountX to hide progress bars.
Use AmountBar to show only progress bars with no text.


For example for Missile Turret with 2 missiles loaded it would show:
Missile Turret 2/6 (with default inventory size)
or
Gatling Turret 15/24 (note that only 23 ammo fits to gatling turret even when there is enough space to fit 24 - probably game bug)

Usage is similar to BlockCount & Working command.

Arguments
No arguments: displays all turrets, guns, reactors and oxygen generators list
First argument: name filter
Next arguments: filters blocks based on type like in BlockCount command

Examples
Amount {G:Weapons} launcher,gatlinggun
Amount {Small Reactor} reactor
AmountX {G:Turrets} missileturret,gatlingturret
Command: Oxygen
DIsplays pressure of specified Air Vents, average output of Oxygen Farms and average fullness of Oxygen Tanks.

Note: If you would like to display only leaking air vents you can use Working command and filter only LCDs that show LEAK using filtering described in Working command.

Arguments
No arguments: all air vents, oxygen farms and oxygen tanks
First argument: filters blocks based on name

Examples
Oxygen
Oxygen Vent
Oxygen {Oxygen Tank}
Oxygen {Oxygen Farm}
Oxygen {G:Oxygen Room}
Command: Tanks
Shows fullness of tanks (and hydrogen engines when keen adds support for it) of specified type in liters and percentage with progress bar. This will work with modded gases too.
You need to specify type of tanks like Hydrogen or Oxygen. You can only specify one type.

Type is from name of the tank type (whatever you see in G-menu). So if modded tank will be called "Soup Tank" then you can use "Soup" as type here to display only those tanks.

Note: This is not exactly true. It uses the name of the type of gas that is in the tank, but there is no easy way to find that out in the game (creator of the gas mod can tell you what it is).

Variant TanksV shows only exact volume filled and maximum volume.
Variant TanksP shows percentage with progress bar.
TanksX variant shows only percentage without progress bar.
TanksBar variant shows only progress bar with no text.

Arguments
First argument: name filter (mandatory)
Second argument: type filter (mandatory)

Examples
Tanks * Hydrogen
Tanks {G:Room 1} Hydrogen
Tanks * Oxygen
Command: Echo
Displays single line of text. Use this to type whatever you want between commands or just add empty lines.

Arguments
No arguments: empty line
Next arguments: text to be displayed

Examples
Echo
Echo MMaster's Automatic LCD
Echo Small;Power Small;Echo Large;Power Large
Command: Center
Displays single centered line of text. Use this to type centerd headers between commands.

Arguments
No arguments: empty line
Next arguments: text to be displayed centered

Examples
Center Centered Text
Center MMaster's Automatic LCD
Center Small Power;Power Small;Center Large Power;Power Large
Command: Right
Displays single line of text aligned to the right.

Arguments
No arguments: empty line
Next arguments: text to be displayed aligned to the right of LCD

Examples
Right This text will appear aligned to the right
Right MMaster's Automatic LCD
Command: HScroll
Displays single line of text slowly scrolling from Right to Left across the whole width of LCD. Use HScrollR to scroll from Left to Right.

If you want to have larger space between the end of the text and start of the repeated text you can add spaces to the end of the text.

Arguments
No arguments: no output
Next arguments: text to be displayed and scrolled horizontally

Examples
HScroll This text will scroll from right to left
HScrollR This text will scroll from left to right
Command: CustomData (NEW!)
Displays scrolling text read from Custom Data of other block.

This is very useful when using different mods / scripts that write something to Custom Data of block and you would like to append it to your Automatic LCDs displays.

Example: CustomData {Other Programmable Block} will append Custom Data contents of first Programmable Block named Other Programmable Block.

Takes no arguments except for name of block you wish to read the Custom Data from.
Command: TextLCD
Displays scrolling text read from other LCD.

This is very useful when using different mods / scripts that type something on LCD and you would like to append it to your Automatic LCDs displays. This way you can have one LCD hidden that will be used by your mod / script and use TextLCD command to read that text and write it to one of the Automatic LCDs. Example: TextLCD {Other LCD} will append contents of first LCD named Other LCD.

Takes no arguments except for name of the other LCD.
Command: Time [Center!]
Displays single line of text followed by current time.

You can use offset in hours to adjust time to your time zone like this:
Time-2 - shows current time -2 hours
Time+1 - shows current time +1 hour
Time+0.5 - shows current time +0.5 hours (30 minutes)

You can use TimeC to center the text. You can also combine it with offset e.g TimeC+2.

Arguments
No arguments: display only current time
Next arguments: text to be shown before the time

Examples
Time
Time MMaster's Text Panel Time:
Time+1 Time plus 1 hour:
TimeC Centered time:
TimeC+2 Centered time plus 1 hour:
Command: Date [Center!]
Displays single line of text followed by current date. Same as in time case you can offset it by hours so your date is switching at correct time. Like this:
Date-2 - offset by -2 hours
Date+0.5 - offset by 0.5 hours (30 minutes)

You can use DateC to display centered date. You can also combine it with offset eg: DateC+2.

Arguments
No arguments: display only current date
Next arguments: text to be shown before the date

Examples
Date
Date Current date:
Date+1 Date plus one hour:
DateC Centered date:
DateC-2 Centered date - 2 hours:
Command: DateTime
DateTime command can be used to display current date and time with custom format on single line.

You can offset the displayed time by number of hours by adding +1 or -1 or any number of hours you want to offset the displayed time and date in the same way as it works in Time command:
DateTime+2

You can center the text by using DateTimeC. You can also combine it: DateTimeC-2

Arguments
No arguments: displays date and time using default local short format.
Next arguments: specify format to display (look below for explanation)

Custom formats examples

Let's learn by example (explanation below):
Command
Display text
DateTime MM/dd/yyyy
08/22/2015
DateTime dddd, dd MMMM yyyy
Tuesday, 22 August 2015
DateTime dddd, dd MMMM yyyy HH:mm
Tuesday, 22 August 2015 06:30
DateTime dddd, dd MMMM yyyy hh:mm tt
Tuesday, 22 August 2015 06:30 AM
DateTime dddd, dd MMMM yyyy H:mm
Tuesday, 22 August 2015 6:30
DateTime dddd, dd MMMM yyyy h:mm tt
Tuesday, 22 August 2015 6:30 AM
DateTime dddd, dd MMMM yyyy HH:mm:ss
Tuesday, 22 August 2015 06:30:07
DateTime MM/dd/yyyy HH:mm
08/22/2015 06:30
DateTime MM/dd/yyyy hh:mm tt
08/22/2015 06:30 AM
DateTime MM/dd/yyyy H:mm
08/22/2015 6:30
DateTime MM/dd/yyyy h:mm tt
08/22/2015 6:30 AM
DateTime MM/dd/yyyy h:mm tt
08/22/2015 6:30 AM
DateTime MM/dd/yyyy h:mm tt
08/22/2015 6:30 AM
DateTime MM/dd/yyyy HH:mm:ss
08/22/2015 06:30:07
DateTime MMMM dd
August 22
DateTime MMMM dd
August 22
DateTime HH:mm
06:30
DateTime hh:mm tt
06:30 AM
DateTime H:mm
6:30
DateTime h:mm tt
6:30 AM
DateTime HH:mm:ss
06:30:07
DateTime dddd, dd MMMM yyyy HH:mm:ss
Tuesday, 22 August 2015 06:30:07
DateTime yyyy MMMM
2015 August

Custom formats
As you may have noticed from examples above some character combinations are substituted by parts of date and time and some are not.

If you would want to write message like:
Hi, the time is: 22:00
You could use this command (which would not work correctly):
DateTime Hi, the time is: H:mm

What would it actually show? Something like this:
22i, P10e Pi0e i49: 22:00

Why is that? Because some characters were replaced (you can find list of character combinations that are replaced in table below)

So how to get around it? You can use special character to mark what is not supposed to be replaced. So if we would like to fix our previous example we would do this:
DateTime \Hi, \t\he \ti\me i\s: H:mm

This command would show message we expected because we prefixed all characters, that would be otherwise replaced, with \


List of format character groups
d
Represents the day of the month as a number from 1 through 31. A single-digit day is formatted without a leading zero
dd
Represents the day of the month as a number from 01 through 31. A single-digit day is formatted with a leading zero
ddd
Represents the abbreviated name of the day of the week (Mon, Tues, Wed etc)
dddd
Represents the full name of the day of the week (Monday, Tuesday etc)
h
12-hour clock hour (e.g. 7)
hh
12-hour clock, with a leading 0 (e.g. 07)
H
24-hour clock hour (e.g. 19)
HH
24-hour clock hour, with a leading 0 (e.g. 19)
m
Minutes
mm
Minutes with a leading zero
M
Month number
MM
Month number with leading zero
MMM
Abbreviated Month Name (e.g. Dec)
MMMM
Full month name (e.g. December)
s
Seconds
ss
Seconds with leading zero
t
Abbreviated AM / PM (e.g. A or P)
tt
AM / PM (e.g. AM or PM
y
Year, no leading zero (e.g. 2001 would be 1)
yy
Year, leadin zero (e.g. 2001 would be 01)
yyy
Year, (e.g. 2001 would be 2001)
yyyy
Year, (e.g. 2001 would be 2001)
Command: Countdown
Countdown command is used to show days, hours, minutes and seconds remaining to specified date and time. It displays EXPIRED after the countdown ended.

You can align the output by using CountdownC to center and CountdownR to align text to the right.

Note that the time and date is game host time or whatever you see with DateTime command without any offset (format is different).

Arguments
You need to enter target date and time in the following format:
22:00 28.2.2015

It needs to be in that exact format in that exact order.
So first is hours in 24-hour format then : then minutes with a leading zero then space then day of month then . then month number then . and then full year

Examples
Countdown 22:00 31.12.2015
CountdownC 0:00 1.1.2016
CountdownR 11:30 24.12.2015
Command: Pos
Displays world position of the LCD panel on single line.
Use PosXYZ to show X,Y,Z on separate lines.
Use PosGPS to show position in GPS format.

Arguments
No arguments: displays location of LCD panel
First argument: displays location of first found block matching this name filter

Examples
Pos
PosXYZ
Pos {Small Reactor 1}
PosXYZ {Cockpit}
PosGPS {Cockpit}
Command: Altitude
Displays altitude of the ship above ground.
AltitudeSea displays altitude above sea level.

Takes no arguments.
Command: Speed
Shows current speed of ship in m/s.

SpeedKmh and SpeedMph to show speed in km/h or mph.

Arguments:
No arguments: displays current speed of ship
First argument: maximum speed in m/s (displays visual bar)

Examples:
Speed 100

Sets maximum speed to 100 m/s even if using SpeedKmh or SpeedMph variants!
So for 100 km/h you would need to set max to 100 / 3.6 = 28 m/s
Command: Accel
Shows current acceleration of ship.

Arguments:
No arguments: shows current acceleration in m/s2
First argument: maximum acceleration in m/s2 (displays visual bar)

Examples:
Accel 10

Shows acceleration with visual bar with max acceleration 10 m/s2
Command: Gravity
Displays natural, artificial and total gravitational acceleration (in m/s²).

If you want to display just one of the above you can use variants:
GravityNatural shows natural (planet) gravity.
GravityArtificial shows artificial gravity.
GravityTotal shows total gravity.

Takes no arguments.
Command: StopDistance & StopTime
StopDistance displays stopping distance of the ship based on highest recently measured decceleration of the ship.
StopTime displays time it will take the ship to stop.

StopDistanceBest and StopTimeBest shows values based on highest decceleration ever achieved by the ship. Only use this if your ship has balanced thrusters to all sides.

These values are estimates and will be most accurate during the breaking.

Takes no arguments.
Command: ShipMass
Displays total mass of the ship. Optionally it can also display it as percentage with progress bar if you specify maximum mass.

You can specify maximum mass by using arguments to the command. First argument specifies maximum mass value while second argument specifies metric unit prefix of the maximum mass such as k, M, G, T. Default prefix is k (as in kg). If you enter "1 M" it means 1Mg (1 ton).
Do not miss that there needs to be space between value and unit prefix.

ShipMassBase will show base mass of the ship without the items.

Arguments
No arguments: displays mass of the ship
First argument: maximum mass value (in kg)
Second argument: override metric unit prefix of max mass. (k, M, G, T, P, E, Z, Y)

Examples
Mass of whole ship:
ShipMass
Mass of whole ship with progress bar, 100kg maximum mass:
ShipMass 100
Mass of whole ship with progress bar, 10000kg (10 tons) maximum mass:
ShipMass 10000
Same as one above (10 tons max mass):
ShipMass 10 M
Percent of max mass of all items in all blocks without progress bar
1 000 000kg (1 000 tons) maximum mass:
ShipMassBase
Base mass of the ship without the mass of the items in containers and other blocks.
Command: Mass
Displays mass of items in selected blocks. Optionally it can also display it as percentage with progress bar if you specify maximum mass.

Note: If you want to see total mass of the ship you can use commands: ShipMass & ShipMassBase

You can specify maximum mass by using arguments to the command. Second argument specifies maximum mass value while third argument specifies metric unit prefix of the maximum mass such as k, M, G, T. Default prefix is k (as in kg). If you enter "1 M" it means 1Mg (1 ton).
Do not miss that there needs to be space between value and unit prefix.

Following only works if you specify maximum mass:
Use MassX to show only percentage without the progress bars or actual mass.
Use MassP to show only percentage and progress bars without exact mass.

Arguments
No arguments: all containers on ship/station
First argument: filters containers based on name
Second argument: maximum mass value (in kg)
Thrid argument: override metric unit prefix of max mass. (k, M, G, T, P, E, Z, Y)

Examples
Mass of all items in all blocks:
Mass
Mass of all items in all blocks with progress bar, 100kg maximum mass:
Mass * 100
Mass of all items in all blocks with progress bar, 10000kg (10 tons) maximum mass:
Mass * 10000
Same as one above (10 tons max mass):
Mass * 10 M
Percent of max mass of all items in all blocks without progress bar
1 000 000kg (1 000 tons) maximum mass:
MassX * 1 G
Percent of max mass of all items in all blocks with progress bar (without value)
2 000kg (2 tons) maximum mass:
MassP * 2000
Mass of items in specific containers:
Mass {Large Cargo Container 5}
Command: Occupied
Displays if first found ship control block (cockpit, remote control or cryo chamber) is occupied.

If you have multiple cockpits and/or remote controls and/or cryo chambers you should specify name filter so it displays status of block you want.

It doesn't display disconnected players in cryo chambers. Game tells the script that the chamber is empty when the player disconnects

Arguments
No arguments: first found ship control block on ship/station
First argument: filters based on name

Examples
Occupied
Occupied Cockpit
Occupied {Remote Control}
Occupied {Cryo Chamber 3}
Command: Dampeners
Shows if dampeners are turned on or off.

Takes no arguments.

Examples
Dampeners
Command: Distance
Shows distance of the specified block from the specified GPS waypoint.

Arguments
No arguments: shows warning about missing / invalid gps coordinates
First argument: filters block based on name to display distance from
Second argument: GPS waypoint as copied from in-game GPS UI

Examples
Distance {Merge Block} {GPS:Station Dock:222:333:444:}
Distance {Cockpit} {GPS:Name:111:222:333:}
Manual Scrolling
You can now disable the automatic scrolling on the LCDs and use manual scrolling with buttons.

First you need to add "!NOSCROLL" (without quotes) to the name of the LCD to stop it from scrolling automatically.
After that you can Run the programmable block that runs the script with arguments:
scrollUp {name of LCD} <number of lines>
or
scrollDown {name of LCD} <number of lines>

so for example running the programmable block with argument:
scrollDown {My LCD 1} 2
will scroll the text on the LCD named "My LCD 1" 2 lines down.

You can also add this to button panel and setup action on button to Run the programmable block with argument. It needs to be the same programmable block that runs the script that shows the text on the screen on that particular LCD.
Margins on left and right side of LCD
You can now add spaces on the left and right side of the LCD by adding
!MARGIN:<number of spaces> to the name of the LCD.

For example if you add
!MARGIN:3 it will add 3 spaces on the left side and 3 spaces on the right side and the contents of the LCDs will be in between those spaces.
Monospace font
Script can now automatically detect the font on the LCD and adjust the display based on that.
2 fonts are supported: Debug and Monospace

If you use custom font scroll down to the bottom of script, then scroll a bit up until you find AddCharsSize lines. Monospace font name and size definition is above those.
Booting screens and LCD clear
This script now supports boot screens and clearing of all LCDs.

LCD clear function
When you Run the programmable block with argument "clear" (without quotes) it will clear all LCDs. You can use this to turn off your LCDs without having to actually turn them off where they would say "OFFLINE".

Example use of LCD clear:
Setup Timer block with following actions:
1. Run the LCDs programmable block with argument "clear"
2. Turn off the programmable block

Setup button to Trigger now the Timer block that you just created.
Setup 2nd button to turn on the programmable block

First button will shutdown all LCDs and stop executing the script.
Second button will boot up the script again.

LCDs boot screens
Unfortunately there is no easy way to find out that you turned off/on your ship so the script doesn't automatically display boot screens after turn the power sources off and on. You can however use the LCD clear function to reset the LCDs when you turn on your ship/station. There is also special "boot" argument to start the boot sequence whenever you need it. Just Run the programmable block with "boot" (without quotes) as argument.

Example use of LCD boot when you start ship / station with button:
Setup Timer block with following actions:
1. Run the LCDs programmable block with argument "clear"
2. Turn off the programmable block
3. Turn off your reactors / thrusters / whatever you need

Setup button to Trigger now the Timer block that you just created.

Setup Timer block with following actions:
1. Turn on your reactors / thrusters / whatever you need
2. Turn on the programmable block

Setup 2nd button to Trigger now the 2nd Timer block that you just created.

First button will shutdown all LCDs, stop executing the script and turn off your ship/station.
Second button will turn on your ship and boot up the script again.

If you are a bit more advanced, you can customize the boot screens:
To customize the boot texts (except for progress bar part) open the script in programmable block and scroll down a bit, where you will find this:
/* BOOT FRAMES
* Each @"<text>" marks single frame, add as many as you want each will be displayed for one second
* @"" is multiline string so you can write multiple lines
*/
@"
Initializing systems"
,
@"
Verifying connections"
,
@"
Loading commands"
/* END OF BOOT FRAMES */

Change the text inside @"" to whatever you want, remove some frames or add more. Don't miss that the texts need to be separated with comma (,).

You can disable initial automatic boot by changing
ENABLE_BOOT = true;
in script to:
ENABLE_BOOT = false;
Dedicated server setup
Automatic LCDs 2 is not a mod so you don't need to do anything in dedicated server setup to use it except for having enabled in-game scripts in your world.

Do not add Automatic LCDs 2 to your mod list or your dedicated server will not start!
How to Translate?
It is now possible to easily translate the script to your own language. You need to only translate item names and messages at the bottom of the script.

Can you publish translated script?
Please do NOT publish it without first talking to me and getting my permission.

Generally I have these rules which we agreed on with other translators:
- Do NOT modify anything in the code. Only translate the messages and item names.
- Make sure you are willing to take care of the translation even after few months
- Translated script description needs to have link to the main script
- Add me as the contributor of your translated script

That's it. Once we agree and you have your translation ready I will properly credit you and add link to the translated script to this guide as well as main script page.


How to translate item names?
When you look into the script and scroll down a bit you will find item definitions that look like this:
Add("Ice", "Ore");
Add("Stone", "Ingot", 40000, "Gravel", "gravel");
Add("Iron", "Ingot", 300000);


As you can see only second one contains changed display name, but you can add your own to any of them. Let me show you how to translate those 3 items:
Add("Ice", "Ore", 0, "Lad");
Add("Stone", "Ingot", 40000, "Strk", "gravel");
Add("Iron", "Ingot", 300000, "Zelezo");


On first line I added default quota 0 and then new display name of the item.
On second line I just changed "Gravel" to "Strk" (which is gravel in slovak language), but you can see there is one more gravel mentioned there. I recommend you don't change that one.
On third line there was already default quota set so I just added display name change which changes "Iron" to "Zelezo".
Do NOT change the first two strings or the script will not work correctly!

How to translate messages?
At the bottom of the script you will find list of all messages displayed by the script. They look like this:
// TRANSLATION STRINGS
// msg id, text
{ "A1", "EMPTY" }, // amount
{ "B1", "Booting up..." },
{ "C1", "count" },
{ "C2", "Cargo Used" },
{ "C3", "Invalid countdown format, use:" },


You can change the second string on the line to equivalent in your language, but do NOT change the first string. I also recommend you keep the text as short as possible.
For example:
{ "W9", "ON" },

Can be changed to:
{ "W9", "ZAPNUTE" },

but that would be too long and would not fit on display of most people. So instead you can use some abbreviation like:
{ "W9", "ZAP" },

How to keep your translation up-to-date with the main script?
This is why I've separated the messages from the main code so you don't need to walk through code to find what needs to be translated. When I update the main script you can just copy-paste the item lines and message lines from your old translated version to new script and just translate any new items/messages that were added in the update.
German, French, Spanish, Portuguese / Brazilian, Russian, Chinese Translations
German version
Thanks a lot to JD.Horx for translating:
http://steamcommunity.com/sharedfiles/filedetails/?id=858003266

French version
Thanks a lot to =SW42=Hydeki_ for translating:
http://steamcommunity.com/sharedfiles/filedetails/?id=822980231

Spanish version
Thanks a lot to Makarov for translating:
http://steamcommunity.com/sharedfiles/filedetails/?id=698634650

Portuguese / Brazilian version
Thanks a lot to Arthur_Gamer_HD for translating:
http://steamcommunity.com/sharedfiles/filedetails/?id=1709871421

Russian version
Alex2K decided to make it private so currently there is no official RU version :(

Chinese version
Thanks a lot to lengchen for translating:
https://steamcommunity.com/sharedfiles/filedetails/?id=1686705560

Note: If you are experiencing errors on translated version of script please write to the script page of author of that translation. I can't update translations.
Tips & Tricks (SlowMode!)
You HAVE to RECOMPILE after changing following values.

How to use LCDs that are connected using rotors, pistons or connectors?
By default the script only updates LCDs that are part of the same grid as programmable block. First, I do recommend reading about 'Same grid filtering' in separate section of this guide.
You can change this behavior by changing LCD_TAG from "T:[LCD]" to "[LCD]".
Read 'What is LCD_TAG?' section to learn more about LCD_TAG.

How to slow down the script?
SlowMode setting can considerably slow down the script (4-5 times less processing per second).

At the top of the script (right under LCD_TAG setting) you can set SlowMode = true; to enable slow mode.

Do you want to change some text that the script says?
You need script to not show "Total Output" but only "Total"? Or is there anything else that doesn't fit your needs? You can change anything the script says at the bottom of the script. Look at 'How to Translate?' section to learn how to make the script say what you need.

You can use comments in Custom Data like this:
// Following line will display Power
Power
// This one will display Cargo
Cargo

Line that starts with // is ignored by the script. But // in middle of the command is not considered comment!
Compatibility with other scripts
Keen has added MyIni format that scripters can use to parse Custom Data. This was added explicitly to make life easier for scripters when they need to use Custom Data and share it with other scripts. This was written by Malware (the creator of MDK framework for Space Engineers in-game scripting and father of Programmable Block) and I've been discussing with him how to make it compatible with Automatic LCDs without people having to learn new syntax so he came up with great solution.

Scripts can use the MyIni format which looks something like this:

[Script 1]
variable=value
variable2=value2
[Script 2]
variable=value3
variable4=value4


If people also want to write Automatic LCDs commands to the same block where the Custom Data is already used by script that uses MyIni format then they can simply add 3 dashes on its own line and continue with Automatic LCDs commands like this:

[Script 1]
variable=value
variable2=value2
[Script 2]
variable=value3
variable4=value4
---
@0 AutoLCD
Echo This will be completely ignored by the MyIni parser.


Anything under the --- is ignored by the MyIni parser that other scripts use. Anything before the --- is completely ignored by the Automatic LCDs so this way Automatic LCDs can share Custom Data with other scripts and coexist peacefully :)

NOTE: Some scripts overwrite the Custom Data and if you already have some Automatic LCDs commands there they will remove them. If those scripts support the MyIni format then you can write your commands like this to make them not remove the commands (or set them up first and then use the format like explained above):

[AutoLCD]
---
@0 AutoLCD
Echo This will be completely ignored by the MyIni parser.
FAQ
Can I change the rate of script updates?

This script doesn't work like other scripts on the workshop. Script updates dynamically as it needs and time between updates of most of the commands is several seconds depending on complexity of the command. There is not a single update time you can modify because the script doesn't work that way. The script automatically limits itself and spreads the calculations over time to have minimal impact on the game performance. That's why the more commands you use the longer it will take to update all of them. Unfortunately even if I figured out some way to let you configure update rates, I just can't leave the update rates configurable for people, because the script would have very bad impact on game with high refresh rates and many people would not realize that - trust me, we've been there.
I'm also in contact with developers and other modders making sure the script is as optimized as possible.

You can have 100 scripts running on your server with 1.0 sim speed. If you would like to see the performance test it starts at 1:56 of the showcase video which is the first one in the screenshots on the main script page or here:
https://www.youtube.com/watch?v=bHiPCfp6vfE

The game had problems rendering so many ships and my FPS was tanking, but sim speed was still at 1.0.

I will always try to make sure that the script performs as well as possible while giving you good enough refresh rates. Unfortunately it can't be completely real time, because the impact would be just too huge.

Programmable Block Edit button is greyed out. What should I do?
You need to enable in-game scripts in Advanced World settings. You can find them on Load screen, when you select your save and click Edit Settings button, then Advanced button and scroll down you will find lots of check boxes, one of them says In-game scripts - make sure it is enabled.
Troubleshooting
Read this if you have trouble.

READ THIS: Programmable blocks and in-game scripts are now in "Experimental mode" in game that you need to turn on in game options.
Also don't forget to enable in-game scripts in advanced world settings.

You don't have the 'Edit' button in programmable block?
Read the big blue text above and then the smaller text below it :)

*** Check your ownership ***
Always make sure that the programmable block and LCDs have the same ownership as the blocks you want to show on the LCDs. I highly recommend you own all the blocks unless you know how ownership works. Just open the control panel, select one of the blocks on your ship, press CTRL+A and change the ownership on the right side to 'Me'.

Programmable block gets damaged in multiplayer?
Script limiter plugin used on some dedicated servers is "burning down" the PB.

Script limiter is unreliable and dependent on things outside of the game (like other processes eating the CPU etc). Admins use it because its the only way to stop scripts from slowing down the server unfortunately in the process it kills even innocent scripts when the server is overloaded.

I can't stop it. Its techinically impossible because of how the script limiter works. The script is independent on number of screens or number of commands .. it always uses the same number of instructions and instead slows down the updates of the screens.

Technical details: Script limiter counts real time it took script to execute. Because of how computers and operating systems work the real time it takes to execute some code is dependent on other things running on the computer. So if one thing is using a lot of CPU then other things will take longer to complete. This is why even scripts that do almost nothing can take a lot of time to complete if the computer is overloaded by for example doing backups, scanning for viruses, calculating the answer to ultimate question, etc. Because the scripts get less CPU time it takes much longer to complete even simple tasks. This is why its almost impossible to make the script survive script limiter actions if the server is overloaded from doing other stuff many times even outside of the SE game itself.

Problems?
0. Check ownership of blocks
1. If your LCDs are on separate grid (behind rotor, piston, connector) they will not be updated. Read LCDs that are connected using rotors, pistons or connectors are not updating? section of Troubleshooting section of the guide.
2. Make sure you don't have space after ; when using multiple commands on single line
3. Please check this guide for command description and try some examples if those work.
4. Make sure you carefully read the command description in this guide and that you understand what it is saying. If you don't understand what it is saying please let me know and I will modify it to be more clear.
5. Compare what the command description says with what you are entering.
6. If you are 100% sure and you checked everything at least 10 times and it doesn't work please report it and I will try to help you.

Programmable block reports 'Exception'.
If programmable block control panel shows 'Exception' please report it in he 'BUG REPORTS' discussion on main script page.

You don't have { and } on your keyboard?
Try this:
schlachter125
Instead of Alt Gr + 0 use Alt + Strg (Ctrl) + 0 for } and + 7 for {

LCDs that are connected using rotors, pistons or connectors are not updating?
By default the script only updates LCDs that are part of the same grid as programmable block. First, I do recommend reading about 'Same grid filtering' in separate section of this guide.
You can change this behavior by changing LCD_TAG from "T:[LCD]" to "[LCD]".
Look at Tips and tricks section of this guide to learn more about LCD_TAG.

If some of your LCDs are sometimes offline:
it's probably a game bug and it's happening to more people. Someone said that loading game, returning to main menu and loading again helps.

If you can't see more than one screen at time and if you turn off a screen, the other one starts working
It's a game bug. Restart game/server. Try answers for offline bug above.

This script cannot cause your LCD to go offline.

Does your LCD just say ONLINE instead of showing things?
Make sure that you named your LCD so it contains [LCD] . If you did, you are most probably using german client which has problems with [ ] characters that you type in game. You can use copy-paste to overcome it or simply use alternate built-in tag I made for you !LCD!

It's just blank screen?
Your command is wrong or there is simply nothing to show. Check your command syntax in full guide, try examples. Make sure that there is nothing in front of the command in LCD Public Title (game sometimes likes to hide the 'Public title' text). Always press Home before entering command to make sure there is no text at the beginning of LCD Public Title that you don't want to have there.

No command works.
Check if Programmable block didn't crash by looking at it's control panel bottom right corner.
Check other troubleshooting sections.
If there is no exception and everything is running as it should:
I really recommend that you watch the Video guide even if you don't understand spoken English. Also make sure you read this guide carefully. Read the command guide to make sure you enter the commands right. Try some example from this guide.

Programmable block reports 'Index out of bounds'.
Make sure that you updated the script to latest version with all the fixes. Check that script has permissions to write to LCDs!
If you did then I probably messed up: please report as soon as possible to bug section with all the things the bug section wants you to report. If you fill it right I promise it will be fixed very soon.

I need to see what assembler/refinery is producing like on your screenshot
It is not possible to find out what assembler or refinery is doing from the script. What you see on screenshot are names of assemblers and refineries. I use scripts Crafting Component Quotas and Selective Refining. Crafting Components Quotas can rename your assemblers like you see on screenshot.

How to report problems?
First make sure that you've read whole Troubleshooting section and Tips and Tricks section of this guide and followed steps mentioned there. Example world covers a lot of features so always make sure that you looked there if the commands work there.

Please try to run each command by itself to figure out which command causes the issue.

What to report?
1. Are you sure everything on your ship has ownership set to Me?
2. Are your LCDs on the same grid (not separated by rotor, piston or connector) as programmable block?
3. Does the programmable block report some exception in control panel?
4. What commands do you use? Please state exact commands as you have it in LCD Title or Custom Data.
Special Thanks
I would really like to thank:
Keen Software House for this awesome game
Malware for his work on Programmable Block and awesome MDK framework. If you want to start programming in-game scripts definitely start here:
https://github.com/malware-dev/MDK-SE/wiki/Quick-Introduction-to-Space-Engineers-Ingame-Scripts

Watch Twitter: https://twitter.com/MattsPlayCorner
if you want to see some more crazy stuff from me in the future :)
< >
2,133 Comments
s1601019 Jun 2 @ 6:13am 
So I am using the Mass command to display my current cargo's mass. The mass of my cargo is 3,286 kg. Yet, the LCD is displaying "3,286,000" which is way too much and super confusing. Also it's displaying my ship's mass in tonnes, is there a way of changing this to kilograms, instead? It would be so much easier to read when everything uses the same unit.
Kham May 31 @ 12:41pm 
@Niekjes10 not directly however you can group everything in the connected grid and then run the damage command against that group.

@Slimazl I'm not 100% sure I understand what you're asking. Do you mean like scrolling one page at a time? If so them I'm afraid not. You might be able to simulate that using the manual scroll and having timer blocks trigger the scroll function though. Not something I've tried personally.

@Chad the video was made a long time ago back when timers were required to run the script, since that time Keen gave scripts the ability to auto run without timer blocks so you don't need them any more.
chad May 31 @ 12:25pm 
In the example video you comment that a timer block is necessary. What for? Also, for a future update, please consider adding an argument to divide the acceleration by a value. One could divide by 9.8 and see their acceleration in g's instead of m/s^2.
Shlimazl May 27 @ 10:40pm 
Is there a command similar to @NoScroll which would make the display scroll cyclically in one direction instead of up and down?
Niekjes10 May 27 @ 2:41pm 
is it possible to only show the damage of connected grids, but excluding the grid the script is on
Niekjes10 May 27 @ 12:58pm 
@Majikian if you want to hide the no damaged blocks found massage you need to change the code in the programmable block. open de programable block, click on edit, scroll down to line 900, it should say "{ "D3", "No damaged blocks found." }," and just remove the no damage blocks found so it looks like this "{ "D3", "" }," . then click on check code and then it should work
Firedrake_13 May 25 @ 10:37am 
@Talezteller You should have a [LCD] tag somewhere in the cockpit name. Then you need to edit the custom data for the cockpit. for cargo capacity all you would need would be @0 AutoLCD and then on the next line Cargo or CargoX or whatever, depending on filters you want to use, progress bars and the like. for the other lcds in the cockpit they would be @1 AutoLCD, @2 AutoLCD etc....read through the guide...it'll help you a LOT.:)
derkylos May 19 @ 3:46am 
So...what is "Sea Level"? Because I have a ship parked on an ice lake and "AltitudeSea" is giving me -116m...
Talezteller May 18 @ 11:34am 
I am trying to get the displays in the cockpit of my mining ship to display the free space in the cargo, but the script doesn't seem to recognise the cockpit as an lcd, I have added the tag to the cockpit's name but nothing is changing on any of the screens. I'm not running any other scripts that might interfere.
Kham May 17 @ 2:04pm 
@Kuera yep you can mix up cockpit screens between the new vanilla built in scripts and this however you want. Just make sure you don't have anything listed in Custom Data for that screen (I think that one is @0 AutoLCD) and then set that screen to 'Script' instead of 'Text and Images'.