From 8be8e8627dd0adb5847ba67be5699e032551206d Mon Sep 17 00:00:00 2001 From: rubenwardy Date: Fri, 14 Sep 2018 15:00:44 +0100 Subject: [PATCH] Improve chapters in basics section --- _en/basics/{folders.md => getting_started.md} | 66 +++++++-- _en/basics/lua.md | 137 ++++++++++-------- static/objects_bones.png | Bin 0 -> 23872 bytes 3 files changed, 124 insertions(+), 79 deletions(-) rename _en/basics/{folders.md => getting_started.md} (58%) create mode 100644 static/objects_bones.png diff --git a/_en/basics/folders.md b/_en/basics/getting_started.md similarity index 58% rename from _en/basics/folders.md rename to _en/basics/getting_started.md index 8a3f3f0..762a1db 100644 --- a/_en/basics/folders.md +++ b/_en/basics/getting_started.md @@ -1,10 +1,12 @@ --- -title: Folder Structure +title: Getting Started layout: default root: ../.. idx: 1.1 description: Learn how to make a mod folder, including init.lua, depends.txt and more. -redirect_from: /en/chapters/folders.html +redirect_from: +- /en/chapters/folders.html +- /en/basics/folders.html --- ## Introduction @@ -29,32 +31,51 @@ A "mod name" is used to refer to a mod. Each mod should have a unique mod name. Mod names can include letters, numbers, and underscores. A good mod name should describe what the mod does, and the folder which contains the components of a mod needs to be given the same name as the mod name. +To find out if a mod name is available, try searching for it on +[content.minetest.net](https://content.minetest.net). -### Mod Folder Structure Mod name (eg: "mymod") - init.lua - the main scripting code file, which runs when the game loads. - - (optional) depends.txt - a list of mods that need to be loaded before this mod. + - mod.conf - a list of mods that need to be loaded before this mod. - (optional) textures/ - images used by the mod, commonly in the format modname_itemname.png. - (optional) sounds/ - sounds used by the mod. - (optional) models/ - 3d models used by the mod. ...and any other Lua files to be included. -Only the init.lua file is required in a mod for it to run on game load; however, -the other items are needed by some mods to perform their functionality. +Only the init.lua file is actually required in a mod for it to run on game load; +however, mod.conf is recommended and other components may be needed +to perform a mod's functionality. ## Dependencies -The depends text file allows you to specify which mods this mod requires to run and what -needs to be loaded before this mod. +A dependency is another mod which the mod requires to be loaded before itself. +The mod may require the other's mods code, items, or other resources to be available. +There are two types of dependencies: hard and optional dependencies. +Both require the mod to be loaded first, but a hard dependency will cause the mod to +fail to load if the required mod isn't available. +An optional dependency is useful if you want to optionally support another mod if the +user wishes to use it. -**depends.txt** +### mod.conf + +Dependencies should be listed in mod.conf. +The file is used for mod metadata such as the mod's name, description, and other information. + + name = mymod + description = Adds foo, bar, and bo + depends = modone, modtwo + optional_depends = modthree + +### depends.txt + +For compatibility with 0.4.x versions of Minetest, you'll need to also provide +a depends.txt file: modone modtwo modthree? -As you can see, each modname is on its own line. - +Each modname is on its own line. Mod names with a question mark following them are optional dependencies. If an optional dependency is installed, it is loaded before the mod; however, if the dependency is not installed, the mod still loads. @@ -67,7 +88,6 @@ Mods can be grouped into mod packs which allow multiple mods to be packaged and moved together. They are useful if you want to supply multiple mods to a player but don't want to make them download each one individually. -### Mod Pack Folder Structure modpackfolder/ - modone/ - modtwo/ @@ -83,8 +103,9 @@ Are you confused? Don't worry, here is an example which puts all of this togethe mymod/ - textures/ - - mymod_node.png - - init.lua - depends.txt + - init.lua + - mod.conf ### depends.txt @@ -108,7 +129,20 @@ minetest.register_node("mymod:node", { }) {% endhighlight %} -This mod has the name "mymod". It has two text files: init.lua and depends.txt.\\ -The script prints a message and then registers a node – which will be explained in the next chapter.\\ -The depends text file adds a dependency on the default mod which is in minetest_game.\\ +### mod.conf + name = mymod + descriptions = Adds a node + depends = default + +This mod has the name "mymod". It has three text files: init.lua, mod.conf, +and depends.txt.\\ +The script prints a message and then registers a node – +which will be explained in the next chapter.\\ +There's a single dependency, the +[default mod](https://content.minetest.net/metapackages/default/) which is +usually found in Minetest Game.\\ There is also a texture in textures/ for the node. + +Please note that a *game* is not a modpack. +Games have their own organisational structure which will be explained in the +Games chapter. diff --git a/_en/basics/lua.md b/_en/basics/lua.md index c1deb46..394a193 100644 --- a/_en/basics/lua.md +++ b/_en/basics/lua.md @@ -1,5 +1,5 @@ --- -title: Lua Scripts +title: Lua Scripting layout: default root: ../.. idx: 1.2 @@ -12,19 +12,22 @@ redirect_from: /en/chapters/lua.html In this chapter we will talk about scripting in Lua, the tools required, and go over some techniques which you will probably find useful. -* Tools - * Recommended Editors - * Integrated Programming Environments -* Coding in Lua - * Selection -* Programming -* Local and Global -* Including other Lua Scripts +* [Code Editors](#code-editors) + * [Integrated Programming Environments](#integrated-programming-environments) +* [Coding in Lua](#coding-in-lua) + * [Program Flow](#program-flow) + * [Variable Types](#variable-types) + * [Arithmetic Operators](#arithmetic-operators) + * [Selection](#selection) + * [Logical Operators](#logical-operators) +* [Programming](#programming) +* [Local and Global Scope](#local-and-global-scope) +* [Including other Lua Scripts](#including-other-lua-scripts) -## Tools +## Code Editors -A text editor with code highlighting is sufficient for writing scripts in Lua. -Code highlighting gives different colors to different words and characters +A code editor with code highlighting is sufficient for writing scripts in Lua. +Code highlighting gives different colours to different words and characters depending on what they mean. This allows you to spot mistakes. {% highlight lua %} @@ -46,13 +49,12 @@ end For example, keywords in the above snippet are highlighted such as if, then, end, return. table.insert is a function which comes with Lua by default. -### Recommended Editors - +Here is a list of common editors well suited for Lua. Other editors are available, of course. -* Windows: [Notepad++](http://notepad-plus-plus.org/), [Atom](http://atom.io/) -* Linux: Kate, Gedit, [Atom](http://atom.io/) -* OSX: [Atom](http://atom.io/) +* Windows: [Notepad++](http://notepad-plus-plus.org/), [Atom](http://atom.io/), [VS Code](https://code.visualstudio.com/) +* Linux: Kate, Gedit, [Atom](http://atom.io/), [VS Code](https://code.visualstudio.com/) +* OSX: [Atom](http://atom.io/), [VS Code](https://code.visualstudio.com/) ### Integrated Programming Environments @@ -71,14 +73,16 @@ One such IDE is Eclipse with the Koneki Lua plugin: ## Coding in Lua +### Program Flow + Programs are a series of commands that run one after another. We call these commands "statements." - -Program flow is important, it allows you to direct or skip over -statements. There are three main types of flow: +Program flow is how these statements are executed. +Different types of flow allow you to skip or jump over sets of commands. +There are three main types of flow: * Sequence: Just run one statement after another, no skipping. -* Selected: Skip over statements depending on conditions. +* Selection: Skip over sequences depending on conditions. * Iteration: Repeating, looping. Keep running the same statements until a condition is met. @@ -92,30 +96,37 @@ a = a + 10 print("Sum is "..result) {% endhighlight %} -Whoa, what happened there? a, b, and result are **variables**. They're like what -you get in mathematics, A = w * h. The equals signs are **assignments**, so -"result" is set to a + b. Variable names can be longer than one character -unlike in mathematics, as seen with the "result" variable. Lua is **case sensitive**. -A is a different variable than a. +Whoa, what happened there? -The word "local" before they are first used means that they have local scope, -I'll discuss that shortly. +a, b, and result are *variables*. Local variables are declared +by using the local keyword, and then given an initial value. +Local will be discussed in a bit, as it's part of a very important concept called +*scope*. + +The `=` means *assignment*, so `result = a + b` means set "result" to a + b. +Variable names can be longer than one character unlike in mathematics, as seen with the "result" variable. +It's also worth noting that Lua is *case-sensitive*; A is a different variable than a. ### Variable Types +A variable will be only one of the following types and can change type after an +assignment. +It's good practice to make sure a variable is only ever nil or a single non-nil type. + | Type | Description | Example | |----------|----------------------------------------------------|-------------------------------------------| -| Integer | Whole number | local A = 4 | -| Float | Decimal | local B = 3.2, local C = 5 / 2 | -| String | A piece of text | local D = "one two three" | -| Boolean | True or False | local is_true = false, local E = (1 == 1) | -| Table | Lists | Explained below | -| Function | Can run. May require inputs and may return a value | local result = func(1, 2, 3) | +| Nil | Not initialised. The variable is empty, it has no value | `local A`, `D = nil` | -Not an exhaustive list. Doesn't contain every possible type. +| Number | A whole or decimal number. | `local A = 4` | +| String | A piece of text | `local D = "one two three" | +| Boolean | True or False | `local is_true = false`, `local E = (1 == 1)`` | +| Table | Lists | Explained below | +| Function | Can run. May require inputs and may return a value | `local result = func(1, 2, 3)` | ### Arithmetic Operators +Not an exhaustive list. Doesn't contain every possible operator. + | Symbol | Purpose | Example | |--------|----------------|---------------------------| | A + B | Addition | 2 + 2 = 4 | @@ -125,17 +136,12 @@ Not an exhaustive list. Doesn't contain every possible type. | A ^ B | Powers | 2 ^ 2 = 22 = 4 | | A .. B | Join strings | "foo" .. "bar" = "foobar" | -A string in programming terms is a piece of text. - -Not an exhaustive list. Doesn't contain every possible operator. - ### Selection The most basic selection is the if statement. It looks like this: {% highlight lua %} local random_number = math.random(1, 100) -- Between 1 and 100. - if random_number > 50 then print("Woohoo!") else @@ -177,7 +183,6 @@ and return a value which can be stored. {% highlight lua %} local A = 5 local is_equal = (A == 5) - if is_equal then print("Is equal!") end @@ -191,16 +196,14 @@ of items, and then turning it into steps that a computer can understand. Teaching you the logical process of programming is beyond the scope of this book; however, the following websites are quite useful in developing this: -### Codecademy -[Codecademy](http://www.codecademy.com/) is one of the best resources for learning to 'code', -it provides an interactive tutorial experience. +* [Codecademy](http://www.codecademy.com/) is one of the best resources for + learning to 'code', it provides an interactive tutorial experience. +* [Scratch](https://scratch.mit.edu) is a good resource when starting from + absolute basics, learning the problem solving techniques required to program.\\ + Scratch is **designed to teach children** how to program, it isn't a serious + programming language. -### Scratch -[Scratch](https://scratch.mit.edu) is a good resource when starting from absolute basics, -learning the problem solving techniques required to program.\\ -Scratch is **designed to teach children** how to program, it isn't a serious programming language. - -## Local and Global +## Local and Global Scope Whether a variable is local or global determines where it can be written to or read to. A local variable is only accessible from where it is defined. Here are some examples: @@ -257,7 +260,7 @@ dump() is a function that can turn any variable into a string so the programmer see what it is. The foo variable will be printed as "bar", including the quotes which show it is a string. -This is sloppy coding, and Minetest will in fact warn you about this: +This is sloppy coding, and Minetest will in fact warn about this: [WARNING] Assigment to undeclared global 'foo' inside function at init.lua:2 @@ -276,12 +279,12 @@ one() two() {% endhighlight %} -Nil means **not initialised**. The variable hasn't been assigned a value yet, -doesn't exist, or has been uninitialised. (ie: set to nil) +Remember that nil means **not initialised**. +The variable hasn't been assigned a value yet, +doesn't exist, or has been uninitialised (ie: set to nil). -The same goes for functions. Functions are variables of a special type. -You should make functions as local as much as possible, -as other mods could have functions of the same name. +The same goes for functions. Functions are variables of a special type, and +should be made local, as other mods could have functions of the same name. {% highlight lua %} local function foo(bar) @@ -289,8 +292,7 @@ local function foo(bar) end {% endhighlight %} -If you want your functions to be accessible from other scripts or mods, it is recommended that -you add them all into a table with the same name as the mod: +API tables should be used to allow other mods to call the functions, like so: {% highlight lua %} mymod = {} @@ -305,15 +307,24 @@ mymod.foo("foobar") ## Including other Lua Scripts -You can include Lua scripts from your mod or another mod like this: +The recommended way to include other Lua scripts in a mod is to use *dofile*. {% highlight lua %} dofile(minetest.get_modpath("modname") .. "/script.lua") {% endhighlight %} "local" variables declared outside of any functions in a script file will be local to that script. -You won't be able to access them from any other scripts. +A script can return a value, which is useful for sharing private locals: -As for how you divide code up into files, it doesn't matter that much. -The most important thing is that your code is easy to read and edit. -You won't need to use it for smaller projects. +{% highlight lua %} +-- script.lua +return "Hello world!" + +-- init.lua +local ret = dofile(minetest.get_modpath("modname") .. "/script.lua") +print(ret) -- Hello world! +{% endhighlight %} + +Later chapters will discuss how to split up the code of a mod in a lot of detail. +However, the simplistic approach for now is to have different files for different +types of things - nodes.lua, crafts.lua, craftitems.lua, etc. diff --git a/static/objects_bones.png b/static/objects_bones.png new file mode 100644 index 0000000000000000000000000000000000000000..2e663bc9e4f7450a9364f8dbbdd49fd0ef8af257 GIT binary patch literal 23872 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 literal 0 HcmV?d00001