Using The Console
The Powder Toy now uses the Lua console, which lets you do more than the old console. If you just want to do simple things, this console has easier and shorter commands.
As of 49.1 the commands now require a ! in front of them, and are also Lua enabled(Lua Scripts)
The console in Powder Toy is essentially a window that you can bring up that allows you to directly trigger commands coded into TPT. Because of its closeness to the code itself, you can do interesting things with it that wouldn't ordinarily be possible with just pointing and clicking, or even elaborate hacking.
Opening the console is easy. You press the ~ key (on some keyboards it's ` or ¬ or ^/° on QWERTZ-keyboards) (with or without pressing shift, it's immediately left of the 1 key, above Tab on most keyboards) and the game will pause, bringing down a black window that you can type into.
Compared to most consoles, Powder Toy's is actually fairly intuitive and easy to mess with, but you'll still probably have to try a few times to memorize the order of words to type in.
The most relevant, or at least the most immediately cool and useful command that most people will want to know is the Set command. The syntax goes like this:
!set [What variable to set] [the identity of the particle/s to be set] [the value it changes to]
In other words, say I want to change particle #25 into metal. I would type:
!set type 25 metl
More relevantly, you can use the keyword "All" or even an element name in place of that number. So the command:
!set type all metl
Would turn every particle in the save to metal.
!set type metl watr
...Would turn every particle of metal in the save to water. And so on.
!set type metl none
Would remove all metal particles from the save.
The word "Type" is also interchangeable. The following keywords can be used as well:
- Type: This sets a particle's identity. You can use this to change what an element is.
- Temp: This sets a particle's temperature. You can use it to melt a whole save all at once. (please note: the temp is read as Kelvin which you get by adding 273.15 to Celsius)
- Ctype: This sets the temporary state of an element. This has many uses, making lava that freezes into NEUT for example. To do this, draw on some lava then go to console and type "!set ctype lava neut" (without the quotes) and then hit enter. Then draw something at room temp below it, and unpause it. When the lava hits the cooler object it will freeze into neut. Ctype is also used to choose what element CLNE and its variants will create.
- Life: This sets a particle's life expectancy. This variable however is used for many varied things, like the timing of spark and the colors of fire.
- X, Y, VX, VY: These set the X and Y positions of particles in the field. VX and VY respectively set their velocities.
- Tmp: This is used for varying things, like the colors of Quartz.
- Tmp2: Like a second Tmp, used for less things.
- Pavg, Pavg, and flags are rarely used.
The !Quit command is a straight forward one; it closes the powder toy straight away.
The Create command is also pretty straight-forward. By typing the elements name and the coordinates you want it at, you can create a particle of any element. For example:
!create METL 200,100
This will create a pixel of METL (metal) at point (200,100) on TPT's grid.
The !delete/!kill commands are also similar, they delete a particle at a point:
This deletes the particle you just created.
The !load command loads a specific save number. This loads save number 500000:
The !bubble command creates a bubble of soap at a specific point. It is hard to create them without this.
The !reset command can do a lot of things. !reset velocity sets the velocity of all particles to 0. !reset pressure resets the pressure map, like pressing the = key. !reset sparks gets rid of all sparks on the screen and sets their type to their ctype. !reset temp sets all particles back to their default temperature they have when you draw them.
This wiki page does not cover the other commands yet. The page of the console essentially describes how to use it, and with these examples, take and figure it out.
Some other commands: !file !sound !python !reset
The if command can only be used in scripts. It checks if a particle at index i is the type j
!if type 1,dmnd
This would check if parts.type is diamond and return 1 if true, 0 if not.
You can run console commands stored in a file by creating a text document and writing a script.
When you have done that, open the console in the Powder Toy and type in
'dofile("your filename here")'. It might say scripts are not enabled.
The script will be done once, and you can use any normal commands, if, else, endif, and end. Running scripts with Lua gives you a lot more options for what to do, and lets you run it every frame.
Hints and tips on using tmp, life, tmp2, and ctype
- Clone (BCLN, PCLN, CLNE): ctype is the element being generated by the clone. For example, you can make all the clne on the screen generate neutrons with the console/script command "!set ctype clne neut"
- State changes (ICE, LAVA): ctype is the element to melt/freeze into. For example, you can make lava freeze into bomb like this "!set ctype lava bomb". That actually gets some interesting results.
- SPRK: ctype is the element covered by the spark.
- Color (PHOT, FILT, FWRK, GLOW, BRAY): ctype is used to store various bits of information about color. There is currently no simple way to change this with console.
- PIPE: Ctype distinguishes the different types of pipe (red/green/blue/unallocated). There is currently no simple way to change this with console (but experiment with setting ctype to none, dust, watr, oil, fire). For more information on pipe, see Using PIPE element.
- QRTZ: QRTZ growth uses ctype. For example, the natural way is to pour SLTW on it. The SLTW changes the ctype to DUST. "!set ctype qrtz sprk" will cause rapid, unnatural growth. This used to be caused by sparking QRTZ manually.
- WWLD: The different types of WWLD(Electron head, tail, wire) are distinguished by it's ctype. Try experimenting with ctypes DUST, WATR and none.
- Using ctype, you can make molten ice and molten diamond with this code: for molten ice, put ice then type " !set ctype ice lava " then type " !set temp ice 500 " and the ice in the world will become molten ice. Molten diamond occurs when you place lava then
use " !set ctype lava dmnd ". This goes along with the above mentioned state changes.
Tmp is a value used for various element properties. Only a few elements use it. NOTE: this is NOT temperature (which is called 'temp'). Tmp can also change the channels of WIFI (but the "temp" or temperature value control the tmp value and it has no sense to change the tmp from the console).
- PIPE: the type of the element currently contained in the pipe. Use '!set tmp pipe 0' to remove all particles from all pipes.
- CRAY: the length of the beam. Use !set tmp cray 0 to set it to default.
- DRAY: how many particles to copy (default is 0, or until blank space). Use !set tmp dray 0 to set it to default.
- FILT: tmp changes the operator on FILT:
0: "set" mode (default): FILT's spectrum is copied into PHOT particles that pass through it
1: "and" mode: A bitwise and is performed on PHOT's and FILT's spectrums and the result is stored in the PHOT particle, any wavelengths not present in FILT will be removed from PHOT.
2: "or" mode: Performs a bitwise or: all wavelengths present in FILT are "enabled" in PHOT, if not already.
3: "sub" mode: Performs a bitwise and-not: all wavelengths present in FILT are subtracted from PHOT.
4: "red shift" mode: The wavelengths of a photon are red-shifted. The distance of the shift is calculated from the temperature in a way similar to its non-ctype mode of operation. Tmp value is ignored.
5: "blue shift" mode: Like "red shift", but the shifting direction is opposite, wavelengths are moved towards the blue end.
6: "nop" mode: No spectrum changes are performed. Useful if you want to cross beams of PHOT and ARAY without mangling the spectrum.
7: "xor" mode: Performs a bitwise xor: all wavelengths present in FILT are "flipped" in PHOT's spectrum, that is, if some color was on, it turns off, and vice versa.
8: "not" mode: Performs a bitwise not: all wavelengths of PHOT are flipped. Note that FILT's spectrum is ignored.
9: "QRTZ scattering" mode: Randomizes photons' velocity and randomly changes their color, just like QRTZ.
Changing the tmp value of SING can allow the manual change of the amount of matter it has consumed, useful for making bombs.
Anything else is the same as nop mode, but it is recommended to use 6 for nop in case new modes are added. Use !set tmp filt <operator number>.
Use this with with fire or plasma to make it have more or less time until it burns out. For example, "!set life fire 1000" to make it last for a VERY long time (even to the point it is unrealistically still glowing even after its temperature has cooled to room temperature, same with plasma). Use with fuse to make it be in the already burning state by reducing this number to something really low like 1 (command for that is "!set life fuse 1"). You can use it to basically put any element into a state that uses the same special property but use it either much more, better, longer, shorter, worse, or less.
- DEUT has a property that says it can multiply itself based on its temperature. It is possible to use life to make it obey this property but at the same time make it use it vastly more. As in, 99999 life deut makes it expand across the whole screen.
- Another closely studied use of the life variable is what it does to ACID. Acid is corosive. It has a set life value of 75 that cannot be raised without editing the game engine. The more particles acid corrodes away the lesser its life value becomes. If set below fifty any particle can destroy acid.
- Switches, like SWCH, HSWC, PCLN, and PUMP, also use life to turn on and off.
- Portals use life to generate their effects. This is one of the only times life goes into negative naturally.
- Stickman's health can be changed by editing his life.
- SPRK uses not only ctype, but life as well. SPRK on most metals has a life of 4. This shows how long the spark will remain on the material. The material afterward then uses life to calculate when it can be sparked again.
- Coal uses life to slowly burn. It starts with a life of 110. Contact with fire decreases life, and when life reaches 0, it is replaced with a particle of fire,
tmp2 is similar to tmp, except it is less used due to it being a secondary property.
- QRTZ/PQRT: tmp2 changes the colour of them. Use !set tmp2 qrtz <number between 0 and 10>
- VIRS/VIRG/VRSS: Used to set the element being infected. Use !set tmp2 virs <element id or name>
- CRAY: Used for types of life.
- DRAY: Used for spacing between original and duplicate. Use !set tmp2 dray <spacing>
- PIPE/STOR: Used for types of life (but not possible to do normally)
Complex Console Commands
There are many console commands that can be used to manipulate things such as gravity for elements. Here are some examples. tpt.el.metl.gravity=5 changes all METL particles in the save to have a gravity of five and therefore travel downward. tpt.el.gas.diffusion=10 changes the diffusion (or how far the particles spread apart) to a higher level. These are just a few examples of the hundreds of the complex commands unknown to many TPT users.
Click on the following link to check out the video tutorial: http://youtu.be/mhlk98L5_0s