|||||oy #####R /----------------------------------------\ #####R < Scripting for ToME with lua > #####R \----------------------------------------/ So, you want to patch ToME eh? Maybe you've had a look at how the edit files work, maybe even added your own race/class, but want to go further and add new racial (U) or magic (m) powers. Well these help files will show a little bit of how to do that. I am not a master at this kind of thing. I wrote a small script, with much help from DarkGod, and he subsequently asked me to write these help files. I was looking forward to when the lua help files came out so that I could look at them myself. Little did I know I'd be asked to write them. Therefore I apologise for any inaccuracies or errors that you find, and if you care to let me know of any improvements which could be made (especially if you're an experienced programmer/scripter), I'd love to know. Email me at [[[[[gfearoffours@moppy.co.uk]. #####R=== The example scripts === These help files take the form of a tutorial, adding a line at a time to a script, and explaining important concepts along the way. To see it all in action, I strongly suggest that you download my example script pack from [[[[[Ghttp://www.moppy.co.uk/angband.htm]. As well as including all the scripts covered in these help files, they also include the addition of my "hina" race which has a Lua scripted racial power which you might like to look at. There's also a quest which I will be including documentation for as a tutorial soon. Plus there's all the other lua scripts in the lib\scpt directory to look at. Most of what you see in these files has been learned from those files anyway! The source code is invaluable as well. There's a searchable and browsable version of the latest ToME source code available online at [[[[[Ghttp://www.t-o-m-e.net/cvs.php]. Use it! If you don't want to download and install the example scripts, then just follow the tutorials with a text editor open! But I'll say it again, it's a lot easier if you download and install the example scripts. This file goes on to explain the concepts of scripting, programming, variables and functions. If you're familiar with these concepts, you might as well take a look at how to add a power to the U menu in the *****lua_pow.txt*0[Scripting a racial power] file. #####R=== Defining some basic stuff === Computers don't do anything that they're not told to do. When we script, or program, we must assume they know nothing. We have to tell them each little bit of information from the ground up. A program, or a script (we'll talk about exact differences later) is like a set of instructions. Let's imagine that people responded to programs, and that we had a program called "Housework". Its series of instructions might look something like this: #####BDo the Washing up. #####BClean the kitchen. #####BDust the shelves. #####BHoover the lounge. Each step above could be called a function, as they are all actions that need to be carried out. Now to you and me, we'd understand that program just fine, but if someone didn't know HOW to wash, or what hoovering was, they'd soon run into problems. For those people we'd need to define each function clearly. Thus "do the washing up" might be - #####BRun hot water into bowl. #####BAdd washing up liquid. #####BPut dirty plates into bowl #####BScrub plates till clean #####BPlace clean plates on rack to dry, There's still plenty of problems here though. We've not said to turn the tap off, or what the bowl is, or to wash any dirty cutlery, mugs, saucepans, etc., etc. Whilst this might seem fairly obvious to a person, this is how we need to think when writing programs for computers. Lets look now at some of the terms we're going to be using, in the rest of these help files, and what they mean... #####R=== Variables and Constants === A variable is a way to store information in a computer. Just as you store things in your own memory, you can store things in the computer's memory. And just as things change in your memory, so things can change in the computer's memory. This factor of change is why they're called "variables" and not "statics". For instance, you may have a friend's email address committed to memory, but things change over time, they get a new ISP or domain, and so their email address changes. You commit this new address to memory, and eventually forget the old one. The thing you have stored in your memory is the same (your friend's address) but the value (property) of what you have stored has changed (from friend@old-address.com to friend@new-address.com). Variables are the building blocks out of which you will create your patch. A variable which will *never* change its value is called a constant. #####R===Functions=== A function is a series of steps or statements, grouped together and given one name. When you want to carry out those steps, you simply ask the computer to carry out that function. To go back to our original example, rather than saying, "I'd like you to run some hot water into a bowl, add the washing up liquid, put the dirty plates into it, and then scrub them till they're clean", we just say "do the washing up". This is where we come to the difference between scripting and programming. With scripting we can use the functions and variables that exist in the ToME code. Maintainers like DarkGod have already made sure that the computer knows how to "do the washing up", including turning the tap off and what the bowl is. All we need to do in our script is say "do the washing up". Or to look at it in a more relevant way, the game has been coded so that when a magic missile is fired, a bolt or beam spell with a black line of asterisks will be drawn in the direction indicated by the player, the mana of that spell will be used up, the monster will take the appropriate amount of damage, and so on. All we need to do in our script is say "fire a magic missile". As you script, you will still be designing your own functions, and variables, but the hardest parts have been done for you! Not every function and global variable in the source-code has been exported to use in your scripting. But the ones that have are easily identifiable by looking in any source files with the extension .pkg . Chris Hadgis has written some excellent documentation which outline the use of the most important functions in some of these files. They outline the functions from the OK, the first tutorial proper is on *****lua_pow.txt*0[adding a racial power] . [[[[[gThis file by fearoffours (fearoffours@moppy.co.uk)]