Merge branch minetest_modding_book:master into master
This commit is contained in:
commit
f0fa254acb
@ -1,6 +1,7 @@
|
||||
---
|
||||
title: Front Cover
|
||||
layout: default
|
||||
description: An easy guide to learn how to create mods for Minetest
|
||||
homepage: true
|
||||
no_header: true
|
||||
root: ..
|
||||
|
@ -27,28 +27,27 @@ Capire la struttura base della cartella di una mod è un requisito essenziale pe
|
||||
|
||||
## Cosa sono i giochi e le mod?
|
||||
|
||||
Il punto forte di Minetest è l'abilità di sviluppare facilmente giochi senza il bisogno di crearsi da zero il motore grafico, gli algoritmi voxel o tutta la parte network.
|
||||
Il punto forte di Minetest è l'abilità di sviluppare facilmente giochi senza il bisogno di crearsi da zero il motore grafico, gli algoritmi voxel o tutta la parte di rete.
|
||||
|
||||
In Minetest, un gioco è una collezione di moduli che lavorano insieme per fornire il contenuto e il comportamento di un gioco.
|
||||
In Minetest, un gioco è un insieme di moduli che lavorano fianco a fianco per fornire il contenuto e il comportamento di un gioco.
|
||||
Un modulo, solitamente conosciuto come "mod", è una collezione di script e risorse, e in teoria ne potrebbe bastare uno per creare un intero gioco.
|
||||
Tuttavia, questo non accade spesso, perché riduce la comodità di poter sostituire o calibrare alcune parti di quest'ultimo in maniera indipendente dalle altre.
|
||||
Tuttavia, questo non accade spesso, perché ridurrebbe la comodità di poter sostituire o calibrare alcune parti in maniera indipendente dalle altre.
|
||||
|
||||
È poi anche possibile distribuire le mod come a sé stanti, nel qual caso sono sempre mod nel senso più tradizionale del termine: modifiche.
|
||||
Esse calibrano o espandono le proprietà di un gioco.
|
||||
È poi anche possibile distribuire singolarmente le varie mod, che diventano mod nel senso più tradizionale del termine: modifiche, per calibrano o espandere le proprietà di un gioco.
|
||||
|
||||
Indipendentemente da come le si voglia usare (specifiche per un gioco o come estensioni generiche) usano la stessa API.
|
||||
|
||||
Questo libro coprirà le parti principali della API di Minetest, ed è pensato sia per gli sviluppatori del motore di gioco (Minetest, in C++) che per i creatori di mod.
|
||||
Questo libro coprirà le parti principali dell'API di Minetest, ed è pensato sia per chi sviluppa il motore di gioco (Minetest, in C++) che per chi crea mod.
|
||||
|
||||
|
||||
## Dove vengono salvate le mod?
|
||||
|
||||
<a name="mod-locations"></a>
|
||||
|
||||
Ogni mod ha la sua cartella personale dove viene messo il suo codice in Lua, le sue texture,
|
||||
i suoi modelli e i suoi file audio. Minetest fa un check in più punti e questi punti sono generalmente chiamati *percorsi di caricamento mod* (*mod load paths*).
|
||||
Ogni mod ha la sua cartella personale dove viene messo il suo codice in Lua, le sue texture, i suoi modelli e i suoi file audio.
|
||||
Minetest esegue controlli in più posti e questi posti sono generalmente chiamati *percorsi di caricamento mod* (*mod load paths*).
|
||||
|
||||
Per un dato mondo/salvataggio, vengono controllati tre punti.
|
||||
Per un dato mondo/salvataggio, vengono controllati tre percorsi.
|
||||
Essi sono, in ordine:
|
||||
|
||||
1. Mod di gioco. Queste sono le mod che compongono il gioco che il mondo sta eseguendo.
|
||||
@ -58,15 +57,15 @@ Essi sono, in ordine:
|
||||
3. Mod del mondo. Il luogo dove mettere le mod che sono specifiche di un dato mondo.
|
||||
Es: `minetest/worlds/world/worldmods/`
|
||||
|
||||
Minetest controllerà questi punti nell'ordine sopraelencato.
|
||||
Se incontra una mod con lo stesso nome di una incontrata in precedenza, l'ultima verrà caricata al posto della prima.
|
||||
Questo significa, per esempio, che è possibile sovrascriverne una di gioco se ve n'è una omonima nelle globali.
|
||||
Minetest controllerà questi percorsi nell'ordine sopraelencato.
|
||||
In caso dovesse incontrare una mod con lo stesso nome di una incontrata in precedenza, l'ultima verrebbe caricata al posto della prima.
|
||||
Ciò significa, per esempio, che è possibile sovrascriverne una di gioco se ve n'è una omonima nelle globali.
|
||||
|
||||
La posizione di ogni percorso dipende da quale sistema operativo si sta usando, e da come è stato installato Minetest.
|
||||
|
||||
* **Windows:**
|
||||
* Per le build portatili, per esempio da un file .zip, vai dove hai estratto lo zip e cerca le cartelle `games`, `mods` e `worlds`.
|
||||
* Per le build installate, per esempio da un setup.exe, guarda in C:\\\\Minetest o C:\\\\Games\\Minetest.
|
||||
* Per le versioni portatili, per esempio da un file .zip, vai dove hai estratto lo zip e cerca le cartelle `games`, `mods` e `worlds`.
|
||||
* Per le versioni installate, per esempio da un setup.exe, guarda in C:\\\\Minetest o C:\\\\Games\\Minetest.
|
||||
* **GNU/Linux:**
|
||||
* Per le installazioni di sistema, guarda in `~/.minetest`.
|
||||
Attenzione che `~` equivale alla cartella home dell'utente, e che i file e le cartelle che iniziano con un punto (`.`) sono nascosti di default.
|
||||
@ -81,12 +80,12 @@ La posizione di ogni percorso dipende da quale sistema operativo si sta usando,
|
||||
![Find the mod's directory]({{ page.root }}/static/folder_modfolder.jpg)
|
||||
|
||||
Il *nome mod* è usato per riferirsi a una mod e ognuna di esse dovrebbe averne uno unico.
|
||||
Questi possono includere lettere, numeri e trattini bassi, e un buon nome dovrebbe descrivere brevemente cosa fa la mod (è anche consigliato nominare la cartella della mod allo stesso modo).
|
||||
Questi possono includere lettere, numeri e trattini bassi, e un buon nome dovrebbe descrivere brevemente cosa fa la mod (è anche consigliato rinominare la cartella della mod con il nome di quest'ultima).
|
||||
Per scoprire se un nome è disponibile, prova a cercarlo su
|
||||
[content.minetest.net](https://content.minetest.net).
|
||||
|
||||
|
||||
mymod
|
||||
lamiamod
|
||||
├── init.lua (necessario) - Viene eseguito al lancio del gioco.
|
||||
├── mod.conf (consigliato) - Contiene la descrizione e le dipendneze.
|
||||
├── textures (opzionale)
|
||||
@ -95,8 +94,8 @@ Per scoprire se un nome è disponibile, prova a cercarlo su
|
||||
│ └── ... qualsiasi file audio
|
||||
└── ... qualsiasi altro tipo di file o cartelle
|
||||
|
||||
Solo il file init.lua è necessario in una mod per eseguirla al lanciare un gioco;
|
||||
tuttavia, mod.conf è consigliato e altri componenti potrebbero essere richiesti a
|
||||
Solo il file init.lua è necessario in una mod per eseguirla quando si avvia un gioco;
|
||||
tuttavia è consigliato anche mod.conf, e altri componenti potrebbero essere richiesti a
|
||||
seconda di quello che si vuole fare.
|
||||
|
||||
## mod.conf
|
||||
@ -111,13 +110,11 @@ Per esempio:
|
||||
|
||||
### Dipendenze
|
||||
|
||||
Una dipendenza avviene quando una mod ne richiede un'altra da avviare prima di essa.
|
||||
Una mod potrebbe infatti richiedere il codice di quest'ultima, i suoi oggetti o altre risorse.
|
||||
Una dipendenza è quando (all'avvio) una o più mod vengono richieste da un'altra mod.
|
||||
I motivi sono vari: potrebbe per esempio aver bisogno di parti del loro codice, degli oggetti, o in generale di risorse che queste forniscono.
|
||||
|
||||
Ci sono due tipi di dipendenze: forti e opzionali.
|
||||
Entrambe richiedono che la mod richiesta venga caricata prima, con la differenza che se la dipendenza è forte e la mod non viene trovata, l'altra fallirà nel caricare, mentre se è opzionale, verranno semplicemente caricate meno feature.
|
||||
|
||||
Una dipendenza opzionale è utile se si vuole integrare opzionalmente un'altra mod; può abilitare contenuti extra se l'utente desidera usare entrambe le mod in contemporanea.
|
||||
Entrambe richiedono che la mod richiesta venga caricata prima, con la differenza che se la dipendenza è forte e la mod non viene trovata, l'altra non verrà caricata, mentre se è opzionale, verranno semplicemente caricate meno funzionalità.
|
||||
|
||||
Le dipendenze sono specificate in un elenco separato da virgole in mod.conf.
|
||||
|
||||
@ -127,7 +124,7 @@ Le dipendenze sono specificate in un elenco separato da virgole in mod.conf.
|
||||
## Pacchetti mod (mod pack)
|
||||
|
||||
Le mod possono essere raggruppate in pacchetti che permettono di confezionarne e spostarne più alla volta.
|
||||
Sono comodi se si vogliono fornire più mod al giocatore, ma non si vuole al tempo stesso fargliele scaricare una per una.
|
||||
Sono comodi se si vogliono fornire più mod a chi gioca, ma non si vuole al tempo stesso fargliele scaricare una per una.
|
||||
|
||||
pacchettomod1
|
||||
├── modpack.lua (necessario) - segnala che è un pacchetto mod
|
||||
@ -151,7 +148,7 @@ Segue un esempio che mette insieme tutto ciò discusso finora:
|
||||
|
||||
### init.lua
|
||||
```lua
|
||||
print("Questo file parte al caricamento!")
|
||||
print("Questo file parte all'avvio!")
|
||||
|
||||
minetest.register_node("lamiamod:nodo", {
|
||||
description = "Questo è un nodo",
|
||||
@ -168,5 +165,5 @@ minetest.register_node("lamiamod:nodo", {
|
||||
Questa mod ha come nome "lamiamod". Ha due file di testo: init.lua e mod.conf.\\
|
||||
Lo script stampa un messaggio e poi registra un nodo – che sarà spiegato nel prossimo capitolo.\\
|
||||
C'è una sola dipendenza, la [mod default](https://content.minetest.net/metapackages/default/), che
|
||||
si trova solitamente nel Minetest Game.\\
|
||||
si trova solitamente in Minetest Game.\\
|
||||
C'è anche una texture in textures/ per il nodo.
|
||||
|
@ -1,5 +1,6 @@
|
||||
---
|
||||
title: Copertina
|
||||
description: An easy guide to learn how to create mods for Minetest
|
||||
layout: default
|
||||
homepage: true
|
||||
no_header: true
|
||||
@ -18,16 +19,14 @@ idx: 0.1
|
||||
## Introduzione
|
||||
|
||||
Il moddaggio su Minetest è supportato grazie a script in Lua.
|
||||
Questo libro mira a insegnarti come creare le tue mod, iniziando dalle basi.
|
||||
Ogni capitolo si concentra su un punto specifico dell'API, portandoti in breve tempo
|
||||
a fare le tue mod.
|
||||
Questo libro mira a insegnarti come si crea una mod, iniziando dalle basi: ogni capitolo si concentra su un aspetto specifico dell'API, così da arrivare in breve tempo a farti creare i tuoi contenuti.
|
||||
|
||||
Oltre che [leggere questo libro online](https://rubenwardy.com/minetest_modding_book),
|
||||
Oltre che [leggere questo libro su internet](https://rubenwardy.com/minetest_modding_book),
|
||||
puoi anche [scaricarlo in HTML](https://github.com/rubenwardy/minetest_modding_book/releases).
|
||||
|
||||
### Riscontri e Contributi
|
||||
|
||||
Hai notato un errore o vuoi darmi il tuo parere? Assicurati di farmelo presente.
|
||||
Hai notato un errore o vuoi dirmi la tua? Assicurati di farmelo presente.
|
||||
|
||||
* Apri una [Segnalazione su GitLab](https://gitlab.com/rubenwardy/minetest_modding_book/-/issues).
|
||||
* Rispondi alla [Discussione sul Forum](https://forum.minetest.net/viewtopic.php?f=14&t=10729).
|
||||
|
@ -16,12 +16,20 @@ layout: compress
|
||||
<title>{% if page.homepage %}{% else %}{{ page.title }} - {% endif %}Minetest Modding Book</title>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width">
|
||||
<meta name="description" content="An easy guide to learn how to create mods for Minetest">
|
||||
<meta name="keywords" content="Minetest, modding, book, tutorial, guide, easy">
|
||||
<meta name="author" content="rubenwardy">
|
||||
<meta name="flattr:id" content="gl763e">
|
||||
|
||||
<link rel="canonical" href="https://rubenwardy.com/minetest_modding_book{{ page.url }}">
|
||||
<meta name="og:url" content="https://rubenwardy.com/minetest_modding_book{{ page.url }}">
|
||||
<meta name="og:title" content="{{ page.title | escape }}">
|
||||
<meta name="og:author" content="rubenwardy">
|
||||
<meta name="og:site_name" content="Minetest Modding Book">
|
||||
{% if page.description %}
|
||||
<meta name="og:description" content="{{ page.description | escape | strip }}">
|
||||
<meta name="description" content="{{ page.description | escape | strip }}">
|
||||
{% endif %}
|
||||
{% if page.image %}
|
||||
<meta name="og:image" content="{{ page.image | absolute_url }}">
|
||||
{% endif %}
|
||||
|
||||
{% assign oldSegment = "/" | append: language | append: "/" %}
|
||||
{% for other_lang in site.data.languages %}
|
||||
@ -33,8 +41,12 @@ layout: compress
|
||||
{% endunless %}
|
||||
{% endfor %}
|
||||
|
||||
{% if page.noindex %}
|
||||
<meta name="robots" content="noindex">
|
||||
{% endif %}
|
||||
|
||||
<style>body,html,nav{background:#333}nav,nav li,nav li a{display:block}body,html,main,nav li{margin:0;padding:0}main,nav{position:absolute;top:0}body,html{font-size:17px;color:#000}#container{width:100%;max-width:1100px;margin:auto;position:relative}nav{left:0;width:280px;list-style:none;color:#fff}nav li a{padding:5px;color:#ccc;text-decoration:none}main{left:280px;right:0}article{background:#fff;padding:0 20px 20px}</style>
|
||||
<link rel="stylesheet" href="{{ page.root }}/static/style.css?v=3">
|
||||
<link rel="stylesheet" href="{{ page.root }}/static/style.css?v=4">
|
||||
</head>
|
||||
<body>
|
||||
<div id="container">
|
||||
|
@ -66,6 +66,41 @@ layout: base
|
||||
<li>{% if next %}<a href="{{ page.root }}{{ next.url}}">{{ next.title }} ></a>{% endif %}</li>
|
||||
</ul>
|
||||
|
||||
{% if language == "en" %}
|
||||
<aside class="feedback">
|
||||
<h2>
|
||||
{% unless page.homepage %}Confused?{% endunless %}
|
||||
Have an idea to make the book better?
|
||||
</h2>
|
||||
<p>
|
||||
Please let me know using the form below.
|
||||
</p>
|
||||
<form method="POST" action="https://api.rubenwardy.com/comment/">
|
||||
<input type="hidden" name="url" value="{{ page.url | absolute_url }}">
|
||||
<input type="hidden" name="redirect_to" value="https://rubenwardy.com/minetest_modding_book/comment_received.html">
|
||||
<input type="hidden" name="name" value="Anonymous">
|
||||
<label for="username" class="form-label">Username</label>
|
||||
<input type="text" id="username" name="username">
|
||||
<div class="form-group">
|
||||
<label for="message" class="form-label">Message</label>
|
||||
<textarea class="form-control" id="message" name="message" rows="3" required="" minlength="5" maxlength="1800"></textarea>
|
||||
<small id="messageHelp" class="form-text text-muted">
|
||||
Max 1800 characters. What is missing? What confused you?
|
||||
What did you find unclear? What other feedback do you have?
|
||||
</small>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="email" class="form-label">Email address (optional)</label>
|
||||
<input type="email" class="form-control" id="email" name="email" aria-describedby="emailHelp" maxlength="320">
|
||||
<small id="emailHelp" class="form-text text-muted">
|
||||
Optional, if you'd like to receive a response.
|
||||
</small>
|
||||
</div>
|
||||
<button type="submit" class="btn btn-primary">Send Feedback</button>
|
||||
</form>
|
||||
</aside>
|
||||
{% endif %}
|
||||
|
||||
<footer>
|
||||
© 2014-{{ site.time | date: '%Y' }}
|
||||
{% if language == "en" %}
|
||||
|
121
_sass/_feedback.scss
Normal file
121
_sass/_feedback.scss
Normal file
@ -0,0 +1,121 @@
|
||||
.feedback {
|
||||
background: white;
|
||||
padding: 1em;
|
||||
|
||||
input[name='username'], label[for='username'] {
|
||||
display: none;
|
||||
}
|
||||
|
||||
h2 {
|
||||
border: none;
|
||||
margin-top: 0;
|
||||
}
|
||||
}
|
||||
|
||||
.btn {
|
||||
--color-primary-dark: #007DB8;
|
||||
--color-primary-dark-highlight: #06aed5;
|
||||
|
||||
display: inline-block;
|
||||
padding: 0.375rem 0.75rem;
|
||||
margin: 0.25rem 0.25rem 0.25rem 0;
|
||||
font-size: 0.9375rem;
|
||||
line-height: 1.5;
|
||||
border-radius: 0.25rem;
|
||||
background: transparent;
|
||||
border: 1px solid transparent;
|
||||
color: white;
|
||||
transition: color 0.15s ease-in-out, filter 0.15s ease-in-out,
|
||||
background-color 0.15s ease-in-out, border-color 0.15s ease-in-out,
|
||||
box-shadow 0.15s ease-in-out;
|
||||
cursor: pointer;
|
||||
box-sizing: border-box;
|
||||
text-align: center;
|
||||
|
||||
&:hover {
|
||||
color: white;
|
||||
text-decoration: none;
|
||||
background-color: rgba(255, 255, 255, 0.25);
|
||||
}
|
||||
|
||||
&.active {
|
||||
color: var(--color-primary-dark);
|
||||
}
|
||||
|
||||
img.icon {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
object-fit: contain;
|
||||
}
|
||||
}
|
||||
|
||||
.btn-primary {
|
||||
background-color: var(--color-primary-dark);
|
||||
border-color: var(--color-primary-dark);
|
||||
|
||||
&:hover {
|
||||
background-color: var(--color-primary-dark-highlight);
|
||||
border-color: var(--color-primary-dark-highlight);
|
||||
}
|
||||
}
|
||||
|
||||
.form-group {
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
|
||||
button, input {
|
||||
overflow: visible;
|
||||
}
|
||||
|
||||
input, button, select, optgroup, textarea {
|
||||
margin: 0;
|
||||
font-family: inherit;
|
||||
font-size: inherit;
|
||||
line-height: inherit;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
label {
|
||||
display: inline-block;
|
||||
margin-bottom: 0.5rem;
|
||||
}
|
||||
|
||||
.form-control {
|
||||
display: block;
|
||||
width: 100%;
|
||||
height: calc(1.5em + 1.5rem + 2px);
|
||||
padding: 0.75rem 1rem;
|
||||
font-size: 0.9375rem;
|
||||
font-weight: 400;
|
||||
line-height: 1.5;
|
||||
color: #52575C;
|
||||
background-color: #fff;
|
||||
background-clip: padding-box;
|
||||
border: 1px solid #ced4da;
|
||||
border-radius: 0.25rem;
|
||||
transition: border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;
|
||||
transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
|
||||
transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;
|
||||
}
|
||||
|
||||
.text-muted {
|
||||
color: #7A8288 !important;
|
||||
}
|
||||
.form-text {
|
||||
display: block;
|
||||
margin-top: 0.25rem;
|
||||
}
|
||||
|
||||
small, .small {
|
||||
font-size: 80%;
|
||||
font-weight: 400;
|
||||
}
|
||||
|
||||
textarea.form-control {
|
||||
height: auto;
|
||||
}
|
||||
|
||||
textarea {
|
||||
overflow: auto;
|
||||
resize: vertical;
|
||||
}
|
@ -198,3 +198,10 @@ header span {
|
||||
position: relative;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@import "content";
|
||||
@import "code";
|
||||
@import "notice";
|
||||
@import "table";
|
||||
@import "feedback";
|
||||
|
29
comment_received.html
Normal file
29
comment_received.html
Normal file
@ -0,0 +1,29 @@
|
||||
---
|
||||
title: Thanks for your feedback
|
||||
layout: base
|
||||
root: .
|
||||
sitemap: false
|
||||
noindex: true
|
||||
---
|
||||
|
||||
<main>
|
||||
<article>
|
||||
<h1>Minetest Modding Book</h1>
|
||||
|
||||
<h2>Thanks for sharing your feedback!</h2>
|
||||
|
||||
<p>
|
||||
You're helping to make the modding book better.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<a href="{{ '/index.html' | relative_url }}">
|
||||
Back to the book
|
||||
</a>
|
||||
</p>
|
||||
</article>
|
||||
|
||||
<footer>
|
||||
© 2014-{{ site.time | date: '%Y' }}
|
||||
</footer>
|
||||
</main>
|
@ -19,6 +19,6 @@ root: .
|
||||
</article>
|
||||
|
||||
<footer>
|
||||
© 2014-20
|
||||
© 2014-{{ site.time | date: '%Y' }}
|
||||
</footer>
|
||||
</main>
|
||||
|
@ -2,7 +2,3 @@
|
||||
---
|
||||
|
||||
@import "main";
|
||||
@import "content";
|
||||
@import "code";
|
||||
@import "notice";
|
||||
@import "table";
|
||||
|
Loading…
Reference in New Issue
Block a user