Browse Source

move additional modding info to Modding section of webapp

master
poikilos 6 years ago
committed by Jacob Gustafson
parent
commit
d0ca7ac024
  1. 198
      webapp/views/pages/getting-started.ejs
  2. 230
      webapp/views/pages/modding.ejs

198
webapp/views/pages/getting-started.ejs

@ -221,202 +221,8 @@ games, <b>and your server uses ENLIVEN</b>, consider visiting the
Minetest - Feedback Forum</a> issue on the EnlivenMinetest GitHub
project. Otherwise, contact a moderator of your server (you can still
visit the link to get an idea of what mods are available for Minetest
servers).
<h3>Modding</h3>
<p>There are other modding books out there, but they often just rehash
the documentation of Minetest without explaining much. The Modding
section of the ENLIVEN Getting Started guide is here to help explain
some of the assumptions and jargon.
</p>
<p>Modding is easy in Minetest, because it is designed to be modded.
The Minetest client downloads the "game" (collection of mods and
modpacks) each time you connect to a server, so you don't have to
install anything yourself. Automatic "game" downloading also means that
each server can be very different, but load quickly, offering you many
experiences to try easily.</p>
<p>Anyone can make a "game" using Minetest by
writing mods or combining existing mods. Most "games" are based on
games that are included in the Minetest/games directory--however, some
games that differ drastically in gameplay can be made if one heavily
edits or replaces mods that provide core functionality. Must of
Minetest's core functionality is written in Lua.
</p>
<p>Examples are a good way to get started. Since mods are scripted in
Lua, every mod is open source. Almost every one is released under
some sort of public license as well, which usually allows you to modify,
reuse, and redistribute the code (usually under the condition that you
credit the original author). The license file sometimes has no file
extension, so you may have to pick a program to open it in Windows.
You can open it (or any other text file) in Notepad. However, Geany
is recommended since there is more than one undo step. For Lua
programming, you can install ZeroBrane Studio (which is free) then
install
"<a href="https://github.com/poikilos/MinetestIDE">MinetestIDE</a>"
which patches ZeroBrane Studio to provide code completion
(a form of autocomplete with API usage tips for coding).
</p>
<p>Every mod, at minimum, must have a file called init.lua. You
should also add a description.txt describing it, a README.md or other
readme file explaining more, and a LICENSE.md or other license file
MIT License is used for Minetest itself, that is recommended. Some
people consider using GPL v3 to prevent the program from being used
on popular mobile devices, since the GPL v3 specifies that a user must
be able to not only reprogram but also replace the program with their
recompiled version--this may not be possible if your version shares a
namespace and key with the application you are changing, and you may not
have the same connectivity or functionality without using the same key.
Therefore, components or mods using GPL v3 may prevent their inclusion
into future version of Minetest "games", as several versions of
Minetest (often by other names) are on Google Play and the iOS App
Store.
You can find the MIT License online and paste it into Notepad or Geany.
Be sure to fill
in your name and the year you created the mod. Having a license will
make sure others feel safe using your mod and redistributing it if
that's what you want.</p>
<p>
API means application programming interface. It is just the set of
classes and/or functions you use to change the behavior of an existing
program such as Minetest. Mods that add significant features, such as
Mobs Redo or codermobs, usually have their own API. You can see all of
the functions in the api.lua file if the author has followed naming
conventions and placed public features there. In addition, many mods
have a api.txt or similarly named files. You can start by opening up
your minetest directory on your computer (after installing or otherwise
installing Minetest) and doing a search for api, or just open the
following files depending on what you want to do:
</p>
<ul>
<li>minetest/doc/menu_lua_api.txt</li>
<li>minetest/doc/fst_api.txt</li>
<li>minetest/doc/lua_api.txt</li>
<li>minetest/doc/client_lua_api.txt</li>
<li>minetest/games/Bucket_Game/mods/codercore/areas/api.md</li>
<li>minetest/games/Bucket_Game/mods/codercore/craft_guide/api_craft_guide.lua</li>
<li>minetest/games/Bucket_Game/mods/codermobs/mobs/api_new.txt</li>
<li>minetest/games/Bucket_Game/mods/codermobs/mobs/api.txt</li>
<li>minetest/games/Bucket_Game/mods/coderbuild/hopper/api.txt</li>
<li>minetest/games/Bucket_Game/mods/coderbuild/magmatools/textures/magmatools_tool_magmapick.png</li>
<li>minetest/games/Bucket_Game/mods/coderbuild/castle/castle_gates/api.txt</li>
<li>minetest/games/Bucket_Game/mods/coderbuild/ambience/api.txt</li>
<li>minetest/games/Bucket_Game/mods/coderbuild/bonemeal/api.txt</li>
<li>minetest/games/Bucket_Game/mods/coderbuild/flowerpot/api.md</li>
<li>minetest/games/Bucket_Game/mods/coderfood/farming/api.txt</li>
</ul>
<p>
Remember, you can always look at examples as well. You can find a mod
that does something similar to what you want, looking at all of the .lua
files in a mod like that may help.
</p>
<h4>Changing Existing Mods</h4>
<p>A public license allows you to change and rerelease the mod,
in addition to just being "open source." Many
mods are on GitHub, GitLab, or notabug.org to allow easy
forking. Forking is when someone other than the project owner
makes improvements or fixes (often forking implies keeping it separate
and not having your changes pulled in to the project owner's version).
If the changes
are applicable to everyone, you would usually fork it by clicking "fork"
which allows you to download your own copy of the mod with "GitHub
Desktop" for GitHub on Windows or a public licensed program like "Git
Cola." Then you would make or paste in your changes, go back to the
program and stage all tracked and untracked changes (not required on
GitHub Desktop), name the commit, click commit, then click push. Then
you can go back to the repository online where you got the mod and click
"pull request" comparing across forks to the "head" from your
repository, allowing the owner to "accept" the request or comment on
changes you need to make or regretfully decline. Usually pull requests
are preceeded by discussion, often at an issue on the issue tracker.
Unless you are fixing something, you likely will have to present
something the project owner already wants or is trivial but helpful.
If the owner declines,
you can always keep your repository and use and distribute your version
of the mod if the license allows that. In some cases, you can instead
just make a mod that overrides an existing mod--that would require
putting the mod in depends.txt, clearing crafting recipes, and other
similar steps--see <a href="https://github.com/poikilos/homedecor_ua">
github.com/poikilos/homedecor_ua</a> for an example.
</p>
<h4>Craftitems and Nodes</h4>
A node is drawn as a block, 3d mesh, or other drawtype and
is placeable. A craftitem can't be placed, so the only way to get rid
of it is to drop it, and like other things dropped it will become a
floating sprite waiting to be picked up by clicking. There are also
other types of entities in Minetest such as mobs and particles.
All items that aren't nodes are called craftitems even if they aren't
used in recipes. You can use the name of a node or craftitem when
defining a crafting recipe. However, you must depend on the mod being
used to ensure that it is loaded before your mod, if the item comes
from a different mod. You can depend on another mod by adding its name
to the depends.txt file in your mod.
<h4>Mobs</h4>
Creating passive or hostile Non-Player Characters or Enemy Characters
requires a mob api such as Simple Mobs, Mobs Redo, or codermobs
which share anestry in that order. Codermobs is included in Bucket_Game
and hence new versions of ENLIVEN. Some other mob frameworks include:
mobf, Jordan4Ibanez' OpenAI, and others.
<h5>Codermobs</h5>
Bucket_Game (the basis for ENLIVEN) has codermobs as the modding
framework. It is a general purpose API based on Mobs Redo but with
additional features and fixes. If you want to test your mob or do
performance testing, you can spawn one or more mobs with one command:
<pre>
"/se" (or "/spawnentity") now supports all of the following modes.
This feature will show up in the next snapshot. For now, you can see
it working in the online copy of Wonder World.
/se Ent
/se Ent Num
/se Ent Pos
/se Ent Pos Num
/se Ent Num Pos
For example: /se codermobs:badger 5
The Num parameter is presently limited to 10. The limit may be increased
or decreased at a later date.
Note: Spaces are permitted, though optional, before or after commas in
positions.
-OldCoder
</pre>
<h4>Creating New Ores</h4>
Creating new ores or other blocks may be confusing after you learn the
API. If you want about 48 blocks before you find another cluster of
your ore, then the clust_scarcity should be 48*48*48 since the game is
3D. The chance of finding a cluster is 1 out of the clust_scarcity
number. The cluster size (clust_size) only affects the size of the
"vein" (though technically there are multiple shapes of clusters allowed
and vein is not recommended since it is hundreds of times slower).
Minetest uses the generic term cluster to refer to all patterns of ore
deposits. The number of ores in the cluster is determined by
clust_num_ores. If your clust_size is 3, then that would be a 3*3*3
cube (but you just specify 3, not 27 there) and the maximum number of
ores you could set for clust_num_ores is 27, though that is not
recommended because then the person would find a 3*3*3 area that is
completely ore (that would give the person 27 ore each time they found
a cluster). Generally, the ore is a node (drawn as a block) and the gem
or metal is a craftitem (drawn as a sprite). You normally should set the
drop of the ore to a separate craftitem (however, if it is something
you have to smelt such as a metal, you could drop the ore node, then
provide a "cooking" crafting recipe to get the metal).</p>
<p>the absheight option should only be used for ores that should appear
in mountains. It forces an ore that occurs in a negative range to also
appear in the corresponding positive range. Another confusing parameter
of the register_ore function is y_min.
Most programmers are more concerned with y_max, which is how deep a
player must dig to have a chance of mining the ore.
y_min is the value below which the
ore stops. Sometimes people set this to a very low number that normally
won't be reached, such as -31000. This number may be useful for certain
cases where an ore shouldn't occur below a certain point, such as amber
(all nodes generated in this way are called ores in Minetest even if
they are not technically a metal or mineral ore and even if they
cannot be smelted nor drop a mineral--they still use the
minetest.register_ore function).</p>
servers). Check out the Modding section as well, and you may be able to
help more than you think!
</main>
<footer>

230
webapp/views/pages/modding.ejs

@ -23,27 +23,225 @@
<ul>
<li><a href="https://git.minetest.org/minetest/minetest/src/branch/master/doc/lua_api.txt">doc/lua_api.txt</a> on minetest.org (drastically improved over the original github version)</li>
</ul>
<h3>Historical Resources</h3>
(may only apply to minetest.net (same as GitHub.com/minetest) releases which have a heavily changed API without backward compatibility)
<ul>
<li><a href="https://rubenwardy.com/minetest_modding_book/en/index.html">The Minetest Modding Book</a> on rubenwardy.com</li>
</ul>
<h2>Tips</h2>
* In singleplayer, you have the `privs` privilege. You can give yourself
all privileges by typing: "/grant singleplayer all" (The same can be
done with your own username if you are hosting a world).
done with your own username if you are hosting a world). You can use
"/giveme itemname quantity" where quantity is optional and itemname
can be found by pushing question mark at the bottom of inventory (i)
then clicking the item on the crafting guide on the right (see also
"Common Items for Moderators to Spawn" further down.
* You can test small pieces of code using the "Run Lua" and "Formspec
Tester" features of the CoderEdit or WorldEdit GUI if you have the
privilege.
<h2>Common Items for Moderators to Spawn</h2>
<h2>Introduction</h2>
<p>There are other modding books out there, but they often just rehash
the documentation of Minetest without explaining much. The Modding
section of the ENLIVEN Getting Started guide is here to help explain
some of the assumptions and jargon.
</p>
<p>Modding is easy in Minetest, because it is designed to be modded.
The Minetest client downloads the "game" (collection of mods and
modpacks) each time you connect to a server, so you don't have to
install anything yourself. Automatic "game" downloading also means that
each server can be very different, but load quickly, offering you many
experiences to try easily.</p>
<p>Anyone can make a "game" using Minetest by
writing mods or combining existing mods. Most "games" are based on
games that are included in the Minetest/games directory--however, some
games that differ drastically in gameplay can be made if one heavily
edits or replaces mods that provide core functionality. Must of
Minetest's core functionality is written in Lua.
</p>
<p>Examples are a good way to get started. Since mods are scripted in
Lua, every mod is open source. Almost every one is released under
some sort of public license as well, which usually allows you to modify,
reuse, and redistribute the code (usually under the condition that you
credit the original author). The license file sometimes has no file
extension, so you may have to pick a program to open it in Windows.
You can open it (or any other text file) in Notepad. However, Geany
is recommended since there is more than one undo step. For Lua
programming, you can install ZeroBrane Studio (which is free) then
install
"<a href="https://github.com/poikilos/MinetestIDE">MinetestIDE</a>"
which patches ZeroBrane Studio to provide code completion
(a form of autocomplete with API usage tips for coding).
</p>
<p>Every mod, at minimum, must have a file called init.lua. You
should also add a description.txt describing it, a README.md or other
readme file explaining more, and a LICENSE.md or other license file
MIT License is used for Minetest itself, that is recommended. Some
people consider using GPL v3 to prevent the program from being used
on popular mobile devices, since the GPL v3 specifies that a user must
be able to not only reprogram but also replace the program with their
recompiled version--this may not be possible if your version shares a
namespace and key with the application you are changing, and you may not
have the same connectivity or functionality without using the same key.
Therefore, components or mods using GPL v3 may prevent their inclusion
into future version of Minetest "games", as several versions of
Minetest (often by other names) are on Google Play and the iOS App
Store.
You can find the MIT License online and paste it into Notepad or Geany.
Be sure to fill
in your name and the year you created the mod. Having a license will
make sure others feel safe using your mod and redistributing it if
that's what you want.</p>
<p>
API means application programming interface. It is just the set of
classes and/or functions you use to change the behavior of an existing
program such as Minetest. Mods that add significant features, such as
Mobs Redo or codermobs, usually have their own API. You can see all of
the functions in the api.lua file if the author has followed naming
conventions and placed public features there. In addition, many mods
have a api.txt or similarly named files. You can start by opening up
your minetest directory on your computer (after installing or otherwise
installing Minetest) and doing a search for api, or just open the
following files depending on what you want to do:
</p>
<ul>
<li>minetest/doc/menu_lua_api.txt</li>
<li>minetest/doc/fst_api.txt</li>
<li>minetest/doc/lua_api.txt</li>
<li>minetest/doc/client_lua_api.txt</li>
<li>minetest/games/Bucket_Game/mods/codercore/areas/api.md</li>
<li>minetest/games/Bucket_Game/mods/codercore/craft_guide/api_craft_guide.lua</li>
<li>minetest/games/Bucket_Game/mods/codermobs/mobs/api_new.txt</li>
<li>minetest/games/Bucket_Game/mods/codermobs/mobs/api.txt</li>
<li>minetest/games/Bucket_Game/mods/coderbuild/hopper/api.txt</li>
<li>minetest/games/Bucket_Game/mods/coderbuild/magmatools/textures/magmatools_tool_magmapick.png</li>
<li>minetest/games/Bucket_Game/mods/coderbuild/castle/castle_gates/api.txt</li>
<li>minetest/games/Bucket_Game/mods/coderbuild/ambience/api.txt</li>
<li>minetest/games/Bucket_Game/mods/coderbuild/bonemeal/api.txt</li>
<li>minetest/games/Bucket_Game/mods/coderbuild/flowerpot/api.md</li>
<li>minetest/games/Bucket_Game/mods/coderfood/farming/api.txt</li>
</ul>
<p>
Remember, you can always look at examples as well. You can find a mod
that does something similar to what you want, looking at all of the .lua
files in a mod like that may help.
</p>
<h2>Changing Existing Mods</h2>
<p>A public license allows you to change and rerelease the mod,
in addition to just being "open source." Many
mods are on GitHub, GitLab, or notabug.org to allow easy
forking. Forking is when someone other than the project owner
makes improvements or fixes (often forking implies keeping it separate
and not having your changes pulled in to the project owner's version).
If the changes
are applicable to everyone, you would usually fork it by clicking "fork"
which allows you to download your own copy of the mod with "GitHub
Desktop" for GitHub on Windows or a public licensed program like "Git
Cola." Then you would make or paste in your changes, go back to the
program and stage all tracked and untracked changes (not required on
GitHub Desktop), name the commit, click commit, then click push. Then
you can go back to the repository online where you got the mod and click
"pull request" comparing across forks to the "head" from your
repository, allowing the owner to "accept" the request or comment on
changes you need to make or regretfully decline. Usually pull requests
are preceeded by discussion, often at an issue on the issue tracker.
Unless you are fixing something, you likely will have to present
something the project owner already wants or is trivial but helpful.
If the owner declines,
you can always keep your repository and use and distribute your version
of the mod if the license allows that. In some cases, you can instead
just make a mod that overrides an existing mod--that would require
putting the mod in depends.txt, clearing crafting recipes, and other
similar steps--see <a href="https://github.com/poikilos/homedecor_ua">
github.com/poikilos/homedecor_ua</a> for an example.
</p>
<h2>Craftitems and Nodes</h2>
A node is drawn as a block, 3d mesh, or other drawtype and
is placeable. A craftitem can't be placed, so the only way to get rid
of it is to drop it, and like other things dropped it will become a
floating sprite waiting to be picked up by clicking. There are also
other types of entities in Minetest such as mobs and particles.
All items that aren't nodes are called craftitems even if they aren't
used in recipes. You can use the name of a node or craftitem when
defining a crafting recipe. However, you must depend on the mod being
used to ensure that it is loaded before your mod, if the item comes
from a different mod. You can depend on another mod by adding its name
to the depends.txt file in your mod.
<h2>Mobs</h2>
Creating passive or hostile Non-Player Characters or Enemy Characters
requires a mob api such as Simple Mobs, Mobs Redo, or codermobs
which share anestry in that order. Codermobs is included in Bucket_Game
and hence new versions of ENLIVEN. Some other mob frameworks include:
mobf, Jordan4Ibanez' OpenAI, and others.
<h3>Codermobs</h3>
Bucket_Game (the basis for ENLIVEN) has codermobs as the modding
framework. It is a general purpose API based on Mobs Redo but with
additional features and fixes. If you want to test your mob or do
performance testing, you can spawn one or more mobs with one command:
<pre>
glass default:obsidian_glass
glass moreblocks:wood_tile
glass technic:concrete
stairs:stair_wood stairs:stair_desert_stonebrick
stairs:stair_wood stairs:stair_desert_stonebrick
stairs:stair_wood stairs:stair_goldblock
"/se" (or "/spawnentity") now supports all of the following modes.
This feature will show up in the next snapshot. For now, you can see
it working in the online copy of Wonder World.
/se Ent
/se Ent Num
/se Ent Pos
/se Ent Pos Num
/se Ent Num Pos
For example: /se codermobs:badger 5
The Num parameter is presently limited to 10. The limit may be increased
or decreased at a later date.
Note: Spaces are permitted, though optional, before or after commas in
positions.
</pre>
<p style="text-align:right; width=100%">-OldCoder</p>
<h2>Creating New Ores</h2>
Creating new ores or other blocks may be confusing after you learn the
API. If you want about 48 blocks before you find another cluster of
your ore, then the clust_scarcity should be 48*48*48 since the game is
3D. The chance of finding a cluster is 1 out of the clust_scarcity
number. The cluster size (clust_size) only affects the size of the
"vein" (though technically there are multiple shapes of clusters allowed
and vein is not recommended since it is hundreds of times slower).
Minetest uses the generic term cluster to refer to all patterns of ore
deposits. The number of ores in the cluster is determined by
clust_num_ores. If your clust_size is 3, then that would be a 3*3*3
cube (but you just specify 3, not 27 there) and the maximum number of
ores you could set for clust_num_ores is 27, though that is not
recommended because then the person would find a 3*3*3 area that is
completely ore (that would give the person 27 ore each time they found
a cluster). Generally, the ore is a node (drawn as a block) and the gem
or metal is a craftitem (drawn as a sprite). You normally should set the
drop of the ore to a separate craftitem (however, if it is something
you have to smelt such as a metal, you could drop the ore node, then
provide a "cooking" crafting recipe to get the metal).</p>
<p>the absheight option should only be used for ores that should appear
in mountains. It forces an ore that occurs in a negative range to also
appear in the corresponding positive range. Another confusing parameter
of the register_ore function is y_min.
Most programmers are more concerned with y_max, which is how deep a
player must dig to have a chance of mining the ore.
y_min is the value below which the
ore stops. Sometimes people set this to a very low number that normally
won't be reached, such as -31000. This number may be useful for certain
cases where an ore shouldn't occur below a certain point, such as amber
(all nodes generated in this way are called ores in Minetest even if
they are not technically a metal or mineral ore and even if they
cannot be smelted nor drop a mineral--they still use the
minetest.register_ore function).</p>
<h2>Appendices</h2>
<h3>Common Items for Moderators to Spawn</h3>
(list of item names for /giveme itemname)
<pre>
glass
default:obsidian_glass
moreblocks:wood_tile
technic:concrete
stairs:stair_desert_stonebrick
stairs:stair_wood
stairs:stair_goldblock
stairs:stair_lapis_brick
mossycobble lapis:lapis_brick
@ -66,7 +264,11 @@ lapis:base_lapis_brick
lapis:base_lapis_block
lapis:column_lapis_block
default:fence_aspen_wood
</pre>
</pre><h3>Historical Resources</h3>
(may only apply to minetest.net (same as GitHub.com/minetest) releases which have a heavily changed API without backward compatibility)
<ul>
<li><a href="https://rubenwardy.com/minetest_modding_book/en/index.html">The Minetest Modding Book</a> on rubenwardy.com</li>
</ul>
</div>
</div>
</div>

Loading…
Cancel
Save