Skip to content

Automatic LCDs Guide

Author: MMaster Source page

(Edited by Chan)


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 a 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, landing gear, 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 (read this!)

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.

[!warning] 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’s an 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 the `[ ]

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.

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.


Commands Guide [READ THIS!]

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. See below for example.

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 grid blocks filtering

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.

Same construct blocks filtering

Make sure you have read “Same grid blocks filtering” section of this guide.

What is construct?

Construct includes blocks on grids connected by pistons and rotors but NOT by connectors.

How to use it?

Usage is very similar to how same grid blocks are filtered. You can filter only blocks that are part of the same construct as programmable block running this script like this: Inventory {C:Block name}

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

How to display all blocks of same construct?

Normally you would use * to display all blocks or T:* to display only blocks of the same grid. This works even with C: modifier: Inventory {C:}*

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

How to display blocks from group that are part of the same construct?

Group modifier G and construct modifier C can be used together like this: Inventory {CG:Group name}

This command displays inventory of blocks in group named ‘Group name’ that belong to same construct as programmable block.

What is LCD_TAG?

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.

Note: If you already use Custom Data to display stuff on Programmable block screens (check ‘How to use with cockpits?’ section of the guide to understand how): Add the line to the beginning of Custom Data and separate it from the commands by using line --- eg: _LCD_TAG = [LCD]


@0 AutoLCD Echo “Text on main screen” @1 AutoLCD Echo “Text on keyboard screen”_

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 efficiently 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.

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.

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 InventoryXSif you also want to hide 0 items lines.

This command has some default quotas set for vanilla items. Its 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)

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, engineerplushie, sabiroidplushie (tool) s-10, s-10e, s-20a, mr-20, mr-8p, mr-50a, mr-30e, ro-1, pro-1, welderitem, welder2item, welder3item, welder4item anglegrinderitem, anglegrinder2item, anglegrinder3item, anglegrinder4item handdrillitem, handdrill2item, handdrill3item, handdrill4item (ammo) 5.56x45mm s-10mag s-10emag s-20amag mr-20mag mr-8pmag mr-50amag mr-30emag gatlingammo rockets autocannonmag assaultcannonshell srailgunsabot lrailgunsabot artilleryshell (oxygen) oxygenbottle (gas) hydrogenbottle (physicalobject) spacecredit

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 -oreInventory 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).

Examples

InvList * +all -ore InvListS * +ingot InvListNB Cargo +ingot -scrap InvListX {Red Storage} +ingot:300000 InvListX [STORAGE] +component InvListX {Cargo Container} +all -tool -ammo InvListXS {Large Cargo Container 3} +ingot:1000 +component:50 InvList {Oxygen Storage} +oxygen:100

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 CargoAllcommand to show cargo of all blocks.

Arguments

No arguments: all containers on ship/stationFirst 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 batteriesFirst 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 batteriesFirst 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 batteriesFirst 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 blocksFirst 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 limited 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 barFirst 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. Use ChargeSum variant (also ChargeSumX and ChargeSumBar) to show single entry for all jump drives matching the name filter.

Arguments

No arguments: nothing will be displayed!First argument: filters jump drives based on name or group Second argument: text to display for ChargeSum entry (instead of usual jump drive name)

Examples

Charge Charge {My Jump Drive} Charge {G:Jump Drives 1} ChargeSum {Jump Drive} {Jump Drives Charge}

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. Use ChargeSumTime variant (also ChargeSumTimeX) to show single entry (longest charge time) for all jump drives matching the name filter.

Arguments

No arguments: nothing will be displayed!First argument: filters jump drives based on name or group Second argument: text to display for ChargeSumTime entry (instead of usual jump drive name)

Examples

ChargeTime ChargeTime {My Jump Drive} ChargeTime {G:Jump Drives 1} ChargeSumTime {Jump Drive} {Full Charge Time}

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 Construction) 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/stationFirst 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 shipsFirst 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 blocksFirst 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 * reactorBlockCount [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 blocksFirst 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 blocksFirst 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 blocksFirst 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 * assembler: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 filterSecond 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
  1. 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 filterSecond 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 Third argument: number of lines to display per block / text that will end output per block

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. That’s 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.

How to use third argument

Details {My block} {Text to look for:} 2 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 until it displays 2 lines, it will not display any line after that (for that block).

Details {My block} {Text to look for:} {Text to stop} 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 until it finds line that contains “Text to stop” - it will NOT display this line or any line after it (for that block).

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 listFirst argument: name filter Next arguments: filters blocks based on type like in BlockCount command

Examples

Amount {G:Weapons} launcher,gatlinggunAmount {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 tanksFirst 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 lineNext 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 centered headers between commands.

Arguments

No arguments: empty lineNext 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 lineNext 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 outputNext 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 timeNext arguments: text to be shown before the time

Examples

TimeTime 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 dateNext 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):

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 tt

06: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)

mm

Minutes with a leading zero

MM

Month number with leading zero

MMM

Abbreviated Month Name (e.g. Dec)

MMMM

Full month name (e.g. December)

ss

Seconds with leading zero

t

Abbreviated AM / PM (e.g. A or P)

y

Year, no leading zero (e.g. 2001 would be 1)

yy

Year, leading 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 panelFirst 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 shipFirst 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/s2First 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 deceleration of the ship. StopTime displays time it will take the ship to stop.

StopDistanceBest and StopTimeBest shows values based on highest deceleration 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 shipFirst 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/stationFirst argument: filters containers based on name Second argument: maximum mass value (in kg) Third 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/stationFirst 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 coordinatesFirst 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 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!

Programmable blocks and in-game scripts are part of vanilla game and people can use in-game scripts that they write themselves or ones that they subscribed to in workshop. Server owners do not need to subscribe to the in-game scripts or add them to mod list (in fact they MUST NOT put it to mod list or their server won’t start).

The only requirement is to have “Experimental mode” enabled in server options and in-game scripts enabled in world settings so programmable blocks are available and usable.

How to add modded items

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);

At the bottom of that list of Add lines there are few examples of modded items:

// MODDED ITEMS // (subType, mainType, quota, display name, short name, alt. short name, used) // * if used is true, item will be shown in inventory even for 0 items // * if used is false, item will be used only for display name and short name // AzimuthSupercharger Add(“AzimuthSupercharger”, “Component”, 1600, “Supercharger”, “supercharger”, "", false);

Arguments

First argument is item subType (you need to get this from the mod author)2nd is item type (you need to get this from the mod author) 3rd is default quota 4th is name of the item you want displayed on LCD 5th is short name that you want to use in commands like “Inventory * +shortname” 6th is alternative short name Last argument is true or false:

  • if true - item will be shown in inventory even for 0 items
  • if false - item will not be shown unless it is already in specified inventory

Order is important!

In order for the script to work properly in all cases Items of one item type should be together.This means that if you plan to add Ore item you should add it after last Ore item in the list NOT at the end of the list. Same for ingots, etc.

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). Add line “SlowMode = true” (without quotes) to the Custom Data of the programmable block to enable slow mode. - You need to click Recompile in programmable block control panel for the change to take effect.

If you already use Custom Data to display stuff on Programmable block screens: Add the line to the beginning of Custom Data and separate it from the commands by using line --- eg: _LCD_TAG = [LCD] SlowMode = true


@0 AutoLCD Echo “Text on main screen” @1 AutoLCD Echo “Text on keyboard screen”_

or

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

Changing the scroll speed

You can change the number of lines that the script scrolls in single step. Add line “SCROLL_LINES = 2” (without quotes) to the Custom Data of the programmable block to make the script scroll 2 lines in one step instead of default 1. - You need to click Recompile in programmable block control panel for the change to take effect.

If you already use Custom Data to display stuff on Programmable block screens: Add the line to the beginning of Custom Data and separate it from the commands by using line --- eg: _LCD_TAG = [LCD] SlowMode = true SCROLL_LINES = 2


@0 AutoLCD Echo “Text on main screen” @1 AutoLCD Echo “Text on keyboard screen”_

or

You can change line “SCROLL_LINES = 1;” at the top of the script to “SCROLL_LINES = 2;”

How to stop the script from changing Content Type of the panels?

You can add line “SKIP_CONTENT_TYPE = true” (without quotes) to Custom Data of the programmable block to disable automatic panel content type change. - You need to click Recompile in programmable block control panel for the change to take effect.

If you already use Custom Data to display stuff on Programmable block screens: Add the line to the beginning of Custom Data and separate it from the commands by using line --- eg: _LCD_TAG = [LCD] SlowMode = true SKIP_CONTENT_TYPE = true


@0 AutoLCD Echo “Text on main screen” @1 AutoLCD Echo “Text on keyboard screen”_

or

You can change line “SKIP_CONTENT_TYPE = false;” at the top of the script to “SKIP_CONTENT_TYPE = true;”

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 PowerPower // 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:

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 :)

Adding !LINK or changing something does not take effect even though script properly works

Try to recompile the script in programmable block. Some things are cached while the script is running and for very few special cases your changes won’t be detected until you recompile the script.

***** 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 technically 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.

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.