Difference between revisions of "Lua"
(Created page with "======= The Lua Console ======= You may open the Lua Console by hitting the ''[`]'' key. (Also known as the tilde ''[~]'' key) [[http://img97.imageshack.us/img97/6811/tildekey1.j...") |
(No difference)
|
Revision as of 10:46, 28 September 2011
Contents
- 1 = The Lua Console =
- 2 = Quick Introduction to Scripts =
- 3 How to run a script
- 4 Variable Types
- 5 General Arguments
- 6 Game
- 7 tpt.set_pause
- 8 tpt.set_pause(number state)
- 9 tpt.set_console(number state)
- 10 tpt.set_shortcuts(number state)
- 11 tpt.set_gravity(number x, number y)
- 12 tpt.set_gravity(number x, number y, number width, number height)
- 13 tpt.set_gravity(number x, number y, number width, number height, number value)
- 14 tpt.reset_gravity_field(number x, number y)
- 15 tpt.reset_gravity_field(number x, number y, number width, number height)
- 16 tpt.set_pressure(number x, number y)
- 17 tpt.set_pressure(number x, number y, number width, number height)
- 18 tpt.set_pressure(number x, number y, number width, number height, number value)
- 19 tpt.reset_velocity(number x, number y)
- 20 tpt.reset_velocity(number x, number y, number width, number height)
- 21 tpt.hud(number toggle)
- 22 tpt.newtonian_gravity(number toggle)
- 23 tpt.ambient_heat(number toggle)
- 24 tpt.decorations_enable(number toggle)
- 25 tpt.heat(number toggle)
- 26 tpt.active_menu(number menu)
- 27 tpt.display_mode(number display)
- 28 tpt.setfpscap(number fpscap)
- 29 tpt.setfire(number strength)
- 30 tpt.setwindowsize(number scale, toggle fullscreen)
- 31 tpt.reset_spark()
- 32 tpt.set_property(string property, object value)
- 33 tpt.set_property(string property, object value, string type)
- 34 tpt.set_property(string property, object value, number index)
- 35 tpt.set_property(string property, object value, number index, string type)
- 36 tpt.set_property(string property, object value, number x, number y)
- 37 tpt.set_property(string property, object value, number x, number y, string type)
- 38 tpt.set_property(string property, object value, number x, number y, number width, number height)
- 39 tpt.set_property(string property, object value, number x, number y, number width, number height, string type)
- 40 tpt.get_property(string property, number index)
- 41 tpt.get_property(string property, number x, number y)
- 42 tpt.create(number x, number y, string type)
- 43 tpt.delete(number index)
- 44 tpt.delete(number x, number y)
- 45 tpt.start_getPartIndex()
- 46 tpt.next_getPartIndex()
- 47 tpt.getPartIndex()
- 48 tpt.get_numOfParts()
- 49 tpt.textwidth(string text)
- 50 tpt.drawtext(number x, number y, string text)
- 51 tpt.drawtext(number x, number y, string text, number red, number green, number blue)
- 52 tpt.drawtext(number x, number y, string text, number red, number green, number blue, number alpha)
- 53 tpt.drawpixel(number x, number y)
- 54 tpt.drawpixel(number x, number y, number red, number green, number blue)
- 55 tpt.drawpixel(number x, number y, number red, number green, number blue, number alpha)
- 56 tpt.drawrect(number x, number y, number width, number height)
- 57 tpt.drawrect(number x, number y, number width, number height, number red, number green, number blue)
- 58 tpt.drawrect(number x, number y, number width, number height, number red, number green, number blue, number alpha)
- 59 tpt.fillrect(number x, number y, number width, number height)
- 60 tpt.fillrect(number x, number y, number width, number height, number red, number green, number blue)
- 61 tpt.fillrect(number x, number y, number width, number height, number red, number green, number blue, number alpha)
- 62 tpt.log(string text)
- 63 tpt.message_box(string title, string message)
- 64 tpt.input(string title, string message)
- 65 tpt.input(string title, string message, string text)
- 66 tpt.register_step(function func)
- 67 tpt.unregister_step(function func)
- 68 tpt.register_mouseclick(function func)
- 69 tpt.unregister_mouseclick(function func)
- 70 tpt.register_keypress(function func)
- 71 tpt.unregister_keypress(function func)
- 72 tpt.get_name()
- 73 tpt.throw_error(string text)
- 74 tpt.setdebug(number mode)
- 75 tpt.throw_error("")
- 76 tpt.getscript("")
- 77 tpt.hud()
- 78 tpt.newtonian_gravity()
- 79 tpt.ambient_heat()
- 80 tpt.decorations_enable()
- 81 tpt.heat()
- 82 tpt.active_menu()
- 83 tpt.display_mode()
- 84 tpt.set_glow()
= The Lua Console =
You may open the Lua Console by hitting the [`] key. (Also known as the tilde [~] key) [here to view key]
Or [¬].
- BEFORE YOU FRET, YOU CAN STILL USE OLD COMMANDS. JUST PLACE AN '!' (without quotes) BEFORE THE COMMAND IN THE CONSOLE**
!set type dust metl
The equivalent command in TPT's Lua is tpt.set_property("type", "metl", "dust") (see https://powdertoy.co.uk/Wiki.html?id=lua#tptset_property )
But, try to learn the Lua interface. It may be a lot more useful to you than you think. //(This wiki does not teach you the Lua language. This is simply an API. But, you may research Lua on your own http://www.lua.org/manual/5.1/ )//
The new Lua Console now provides the ability to create scripts using Lua, a very simple scripting language.
With the ability to script with Lua, users are now able to create simple modifications to the game without editing source code easily.
= Quick Introduction to Scripts =
How to run a script
To run a script, place the .lua file in the root folder of powder toy (where the powder toy executable is located). Open the console (see below) and type in **dofile("filename.lua")** where "filename.lua" is the the script you wish to run.
Variable Types
__The different variable types are:__
* //string//
Represents a word, character, or phrase. //string// variables must begin and end with double-quotes. (")
- Example:** local str = "This is a string variable."
* //number//
Represents a number. Numbers may be floating-point or fixed-point types (meaning they may have decimals [floating-point] or may be numbers with no fraction [fixed-point].)
- Example:** local num = 1234
* //boolean//
Represents a switch that is either on (true) or off (false).
- Example:** local bool = true
* //function//
Represents a method or function in lua.
- Example:** function func(arguments)
- NOTE:** Functions that use a //function// as an argument do not include the () at the end. Only the name must be given.
* //table//
Tables are a group of variables. Tables can also act as an array. Tables can carry any type of variables, and can even mix different types of variables.
- Example:** local tbl = {}
This creates a blank table.
- Example:** local tbl = {1, 2, 3, "string"}
Creates a table with the elements 1, 2, 3 and "string".
You can call these variables in this manner:
tbl[1] --returns 1
tbl[2] --returns 2
tbl[3] --returns 3
tbl[4] --returns "string"
- Example:**
local tbl = {} tbl.x = 7 tbl.y = 5 tbl.str = "this is a string" tbl.sqr = function(v) return v * v end
Creates a table with the variables x, y, str, and the function sqr.
You can call these variables in this manner:
tbl.x --returns 7 tbl.y --returns 5 tbl.str --returns "this is a string" tbl.sqr(2) --returns 4 (remember this is a function that takes 'v' and squares it. )
* //object//
Acts as a wildcard. It can be represented as any of the above, but this does **not** mean it **can** be any type, it depends on the function.
General Arguments
__The arguments given here are general, here are some examples:__
//string// **property**
This is to specify what property of a particle to change. REMINDER: This is a //string// variable, meaning it is a word that must begin and end with double-quotes. (") The different available properties are:
"type"
"life"
"ctype"
"temp"
"tmp"
"vx"
"vy"
"x"
"y"
Any other given strings will result with an invalid property error.
//object// **value**
What you are setting the current property to. Since this is an **object** variable, it's type will depend on the function.
//string// **type**
A //string// which is the code-name of an element "dust" "watr" "spng".
//number// **index**
A specific particle number by it's index.
//number// **state**
0 or 1, 0 for off, 1 for on.
//number// **Width** and //number// **Height**
Represent a rectangle.
//number// **x** and //number// **y**
Represents a 2-Dimensional coordinate.
//string// **text**
Represents text
//number// **toggle**
Represents either 1 for on or 0 for off
//number// **menu**
Represents a menu, eg 1 = Walls, 2 = Electronics
//number// **display**
Represents a display mode, eg 4 = Fire, 6 = Heat
Lua API
- The Powder Toy exposes the following methods to the Lua API:**
Game
tpt.set_pause
Set the paused state of the game
tpt.set_pause(number state)
tpt.set_console
Set the visibility state of the console
tpt.set_console(number state)
tpt.set_shortcuts
Set whether keyboard shortcuts are enabled
tpt.set_shortcuts(number state)
tpt.set_gravity
Sets values on the gravity map, 3 overloads
tpt.set_gravity(number x, number y)
tpt.set_gravity(number x, number y, number width, number height)
tpt.set_gravity(number x, number y, number width, number height, number value)
tpt.reset_gravity_field
Resets regions on the gravity velocity map, 2 overloads
tpt.reset_gravity_field(number x, number y)
tpt.reset_gravity_field(number x, number y, number width, number height)
tpt.set_pressure
Sets values on the pressure map, 3 overloads
tpt.set_pressure(number x, number y)
tpt.set_pressure(number x, number y, number width, number height)
tpt.set_pressure(number x, number y, number width, number height, number value)
tpt.reset_velocity
Resets regions on the velocity map, 2 overloads
tpt.reset_velocity(number x, number y)
tpt.reset_velocity(number x, number y, number width, number height)
tpt.hud
Toggles HUD State
tpt.hud(number toggle)
tpt.newtonian_gravity
Toggles Newtonian Gravity State
tpt.newtonian_gravity(number toggle)
tpt.ambient_heat
Toggles Ambient Heat State
tpt.ambient_heat(number toggle)
tpt.decorations_enable
Toggles visibility of decorations
tpt.decorations_enable(number toggle)
tpt.heat
Toggles Heat Simulation State
tpt.heat(number toggle)
Changes activated menu
tpt.display_mode
Changes activated display mode
tpt.display_mode(number display)
tpt.setfpscap
Changes the maximum FPS.
tpt.setfpscap(number fpscap)
tpt.setfire
Changes the strength of the games glowing effects. tpt.setfire(1) is default.
tpt.setfire(number strength)
tpt.setwindowsize
Changes the window settings. Scale is either 1 or 2. Returns a number, probably to indicate success.
tpt.setwindowsize(number scale, toggle fullscreen)
Particles
tpt.reset_spark
Removes electrified wires from the simulation, resetting to the original material
tpt.reset_spark()
tpt.set_property
Set various properties of particles for given criteria, 8 overloads
tpt.set_property(string property, object value)
tpt.set_property(string property, object value, string type)
tpt.set_property(string property, object value, number index)
tpt.set_property(string property, object value, number index, string type)
tpt.set_property(string property, object value, number x, number y)
tpt.set_property(string property, object value, number x, number y, string type)
tpt.set_property(string property, object value, number x, number y, number width, number height)
tpt.set_property(string property, object value, number x, number y, number width, number height, string type)
object tpt.get_property
Get various properties of a particle. Returns an //object//
tpt.get_property(string property, number index)
tpt.get_property(string property, number x, number y)
tpt.create
Create a particle at location.
tpt.create(number x, number y, string type)
tpt.delete
Delete a specific particle, or location.
tpt.delete(number index)
tpt.delete(number x, number y)
tpt.start_getPartIndex
Start the iterator for receiving all indecies of the particles. (Used to help get particle indecies, see tpt.next_getPartIndex)
tpt.start_getPartIndex()
boolean tpt.next_getPartIndex
Jump to the next available particle index. Returns false if the iterator has reached the end of all particle indecies. Returns true if a new index was available. (Used to help get particle indecies, see tpt.getPartIndex)
tpt.next_getPartIndex()
number tpt.getPartIndex
Get the current index iterator.
tpt.getPartIndex()
number tpt.get_numOfParts
Returns the number of particles currently on the screen.
tpt.get_numOfParts()
Drawing
number tpt.textwidth
Measures (in pixels) the width of a given //string//. Returns a //number//
tpt.textwidth(string text)
tpt.drawtext
Draw text to the screen (for one frame, only useful in scripts), 3 overloads
tpt.drawtext(number x, number y, string text)
tpt.drawtext(number x, number y, string text, number red, number green, number blue)
tpt.drawtext(number x, number y, string text, number red, number green, number blue, number alpha)
tpt.drawpixel
Draws a pixel on the screen (for one frame, only useful in scripts), 3 overloads
tpt.drawpixel(number x, number y)
tpt.drawpixel(number x, number y, number red, number green, number blue)
tpt.drawpixel(number x, number y, number red, number green, number blue, number alpha)
tpt.drawrect
Draws a rectangle on the screen (for one frame, only useful in scripts), 3 overloads
tpt.drawrect(number x, number y, number width, number height)
tpt.drawrect(number x, number y, number width, number height, number red, number green, number blue)
tpt.drawrect(number x, number y, number width, number height, number red, number green, number blue, number alpha)
tpt.fillrect
Draws a filled in rectangle on the screen (for one frame, only useful in scripts), 3 overloads
tpt.fillrect(number x, number y, number width, number height)
tpt.fillrect(number x, number y, number width, number height, number red, number green, number blue)
tpt.fillrect(number x, number y, number width, number height, number red, number green, number blue, number alpha)
Input/Output
tpt.log
Log a message to the console
tpt.log(string text)
tpt.message_box
Display an OK-Only message box with a title and message.
tpt.message_box(string title, string message)
string tpt.input
Ask the user to input some text. Returns a string of what ever the user says. The argument "text" is pre-entered text (optional).
tpt.input(string title, string message)
tpt.input(string title, string message, string text)
Events
tpt.register_step
Register a function to be run on every frame
tpt.register_step(function func)
tpt.unregister_step
Unregister a previously registered function
tpt.unregister_step(function func)
tpt.register_mouseclick
Register a function to be run every time the mouse clicks\\ \\ Passes: (//number mousex, number mousey, number button, number event//)
tpt.register_mouseclick(function func)
tpt.unregister_mouseclick
Unregister a previously registered function
tpt.unregister_mouseclick(function func)
tpt.register_keypress
Register a function to be run every time a key is pressed\\ \\ Passes: (//string key, number key, number modifier//)
tpt.register_keypress(function func)
tpt.unregister_keypress
Unregister a previously registered function
tpt.unregister_keypress(function func)
Misc
string tpt.get_name
Get the current username, returns a //string//
tpt.get_name()
tpt.throw_error
Displays an error message
tpt.throw_error(string text)
tpt.setdebug
Sets the "debug mode". Only odd numbers seem to do anything for now.
tpt.setdebug(number mode)
Mod's with Lua Functions
Me4502's Mod
NOTICE: THESE FUNCTIONS ARE AVAILABLE IN VERSION 3.0b11 OR LATER
String Property Additions
"collision" "airdrag" "flammable" "weight" "falldown" "gravity" "explosive" "meltable" "hardness" "name" "airloss" "loss" "hotair" "actas"
New Functions
tpt.throw_error("")
tpt.getscript("")
For the following, 1 in the ()'s is on 0 is off
tpt.hud()
tpt.newtonian_gravity()
tpt.ambient_heat()
tpt.decorations_enable()
tpt.heat()
For the following the number of the value you want goes into the ()'s
tpt.display_mode()
tpt.set_glow()
Simple Example Code
-- This line is a comment. Anything written after the -- is considered a Comment and will not be read by Lua.
-- Set the console's state to 0. This will hide the console. tpt.set_console(0)
-- Here we define our main function for the script function ClassicPowder() local ox = 125 -- This will be our offset for the different elements we will create. local y = 4 -- where on the y (vertical) axis where we will create our elements.
local x = ox -- where on the x (horizontal) axis where we will create our elements. we will start the x value with what ever ox is above. for i=0, 10 do -- this is a for loop. everything between the do and end will loop until i hits 10. i increases by 1 every loop. tpt.create(x + i, y, "DUST") --create a dust particle end
x = x + ox -- increase the x axis value by the offset x (ox) value above. for i=0, 10 do tpt.create(x + i, y, "WATR") --create a water particle end
x = x + ox for i=0, 10 do tpt.create(x + i, y, "SALT") end
x = x + ox for i=0, 10 do tpt.create(x + i, y, "OIL") end
return false end
-- Register the step function ClassicPowder. This will make the ClassicPowder function run every tick of Powder Toy. tpt.register_step(ClassicPowder)