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.
Contents
Using console
As of 49.1 the commands now require a ! in front of them.
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 ¬) (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. :D
!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. >:O (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 of course) 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.
- 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.
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:
!delete 200,100
This deletes the particle you just created.
The !Load command loads a specific save number. This loads save number 500000:
!Load 500000
The !bubble command creates a bubble of soap at a specific point. It is hard to create them without this.
!bubble 100,100
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.
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.
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[1].type is diamond and return 1 if true, 0 if not.
Running scripts
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
file "filename" you might need or not need the quotes, i'm not sure. It also 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, and ctype
Admins/TPT-devs please fill in this section with which particle types are effected by the "tmp", "life", and "ctype" variables, and what those effects are with each particle type that uses them. Please also give some example code.
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 can also be achieved by sparking QRTZ manually.
- WIRE: The different types of WIRE(Electron head, tail, wire) are distinguished by it's ctype. Try experimenting with ctypes DUST, WATR and none.
tmp
Tmp is a value used for various element properties. Only a few elements actually use it, so if you try setting it and nothing happens... Then that's exactly right, only specific elements use it. If you don't know how it is used for an element, you're better off not messing with it. NOTE: this is NOT temperature (which is called 'temp').
life
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.
E.G.:
- DEUT has a property that says it can multiply itself based on its temperature. You may 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 provided lag doesn't get to it first!
- Another closely studied use of the life variable is what it does to ACID. Acid is corosive, no? 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. These are just a few of the countless things that can be done with my favorite, the life variable.
- 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. On INST it has a life of 1. 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.
Basic "moving solids"
Many people ask for them, but no. Movable solid objects such as balls, strings, and gears will not be coming without a complete rewrite of the Powder Toy Program. So to keep the masses satisfied, here's how to make a basic moving solid ball.
Only SPNG works!
Currently, SPNG is the best working solid for this. Others, like GOO and BCLN work to a small extent, and most elements don't work at all.
Making it work
Make a large ball (or cube) of SPNG in the rough middle of the screen. This will be the solid that will move. Go into console. Write the following:
!set vx spng -1 to make it go left
or
!set vy spng -1 to make it go up
Any other directions or speeds won't work.
A better moving solid is included in Jacob1's mod, which you can get on the forums. It is a bouncing ball that moves around and also rotates. Anythig more complicated is extremely hard to do.