Gescheitertes Experiment: Open-Source Schreibwettbewerb
So dann trete ich mal meinen virtuellen Gang nach Canossa an und die Bitte in diesem Fall ist: Erspart Euch bitte Kommentare im Stil von “hätt ich Dir gleich sagen können” – die Beteiligung war schockierend genug: Eine Einsendung!
Dann möchte ich mich noch entschuldigen, dass es so lange gedauert hat mit der Ankündigung, aber ich habe gerade echt viel um die Ohren und bitblokes.de ist derzeit nun mal Teil meiner Freizeit.
Das Gute an der Sache ist, dass wir uns über den Gewinner absolut einig sind … 🙂
Natürlich betreibt man in so einem Fall zuminedst in seinem Gehirn eine Fehler-Analyse. Eine Sache war wohl meine eigene Naivität zu glauben, dass Mundpropaganda funktioniert. Mich hatte auch Leute angeschrieben, die per E-Mail benachrichtigt werden wollten, wenn der Wettbewerb losgeht. Müssen wohl alle von der selben Klasse gewesen sein.
Vielleicht war es auch ein bisschen dämlich von mir, den Einsendeschluss in die Faschingswoche zu legen. Ich frage mich dennoch, ob wir mehr Einsendungen für einen Wettbewerb “Sende einen Screenshots mit den meisten Frags ever unter Shooter XYZ ein!” bekommen hätten. Dennoch überlegen wir (die Juroren und ich) uns, die Sache zu wiederholen – allerdings nur dann, wenn wir einen Weg finden, die Schulen direkt zu adressieren.
Egal – es hat nicht funktioniert und der Gewinner steht fest. Ich will deswegen diesen Post auch gleich nutzen, um den Artikel des Gewinners vorzustellen. Im Artikel linken die Einsender auf eine englische Übersetzung. Auf Nachfrage ist diese aus der selben Feder. Sie wurde erschaffen, weil die Mehrheit der Minetest-C55-Nutzer Englisch sprechen. In der selben E-Mail hat mir Nils von den Gewinnern auch geschrieben, dass er sich wundert, dass die Beteiligung bescheiden sei. Seiner Meinung nach würden sich genug Schüler für Computer interessieren und er hat die Frage der Faulheit als Ursache in den Raum gestellt.
Bedanken möchte ich mich vielmals bei den willigen Juroren Matthias, Moritz, Ole und Patrick, sowie O’Reilly und Terrashop, die Preise zur Verfügung gestellt hätten.
Über die Aufbesserug der Klassenlasse von 200 Euro darf sich die Klasse 9d des Hölderlin Gymnasiums aus Nürtingen. Der Text wurde von Florian geschrieben und das HTML sowie die Screenshots von Nils vorbereitet. Vielen Dank, dass ihr Euch die Mühe gemacht habt und deswegen habt ihr den Preis auch verdient. Der nachfolgende Text ist einfach via Copy&Paste eingefügt.
Minetest-c55 Modding in Lua
Einführung:
Minetest-c55 (test.mine.bz) ist ein Minecraft-Klon, entwickelt vom finnischen Programmierer ‘celeron55’. Es verfügt unter anderem über eine sogenannte ScriptAPI, die zur Programmierung von Mods eingesetzt wird. Dieses Tutorial soll erklären, wie die Entwicklung von Mods funktioniert.
Vorraussetzungen:
Um dieses Tutorial richtig verstehen zu können, sollten Sie grundlegende Kenntnisse in der Programmierung, bevorzugt Lua haben.
Kapitel 0: Anlegen eines Mods
Um einen Mod zu programmieren, muss unter dem Verzeichnis ~/.minetest/usermods ein Ordner mit dem Namen des Mods angelegt werden. Darin muss zum einen die Datei ‘init.lua’, die die Programme enthält und ein weiterer Ordner mit dem Namen ‘textures’ angelegt werden.
Kapitel 1: Der erste Mod!
Als ersten Mod werden Sie einen Holzblock erstellen, der zu Dekorationszwecken verwendet werden kann. Dazu wird der Ordner ‘tutorial’ und die dazugehörigen Dateien wie in Kapitel 0 beschrieben erstellt.
In die init.lua muss der folgende Quellcode eingefügt werden:
minetest.register_node("tutorial:holz",{ tile_images = {"holz.png"}, material = minetest.digprop_constanttime(1), })
In den Ordner textures muss die Datei ‘holz.png’. Diese befindet sich im selben Ordner wie dieses Tutorial. Wenn minetest nun gestartet wird, wird dabei automatisch der Quellcode kompiliert und geladen.
Nun ‘ingame’ das Chatfenster mit ‘T’ öffnen und sich durch /giveme tutorial:holz einen Holzblock erschummeln. Fertig ist der erste Mod!
Nehmen wir einmal den Quellcode auseinander:
Die Funktion minetest.register_node ist dafür verantwortlich, neue Blöcke zum Spiel hinzuzufügen.
Als Parameter müssen zum einen der Namen des neuen Blocks (“tutorial:holz”) sowie eine Lua-Tabelle mit verschiedenen Parametern übergeben werden.
Darunter befindet sich tile_images, welches die Textur des Blocks vorgibt, und mit Komma getrennt material, was die Eigenschaften bezüglich der Abbaugeschwindigkeit angibt. minetest.digprop_constanttime(1) gibt demzufolge an, dass der Spieler, egal welches Werkzeug er verwendet, 1 Sekunde zum Abbauen des Blocks braucht.
Alternativ könnte man zum Beispiel auch
material = minetest.digprop_woodlike(1.5),
verwenden. Dadurch braucht das Abbauen des Blocks 1.5 mal so lang, als bei einem normalen Holzblock.
Außerdem bevorzugt dieser Wert auch Äxte, da diese Holz schneller abbauen als andere Werkzeuge.
Kapitel 2: Crafting!
Obwohl das Spiel Minetest im Gegensatz zu MineCraft das Wort nicht im Namen trägt, ist Crafting dennoch ein grundlegender Bestandteil des Spielprinzips. Als Crafting bezeichnet man das Herstellen von Gegenständen, indem man andere Gegenstände kombiniert.
So wird z.B. eine Steinaxt aus Stöcken und Steinen hergestellt:
Um das Deko-Holz aus Kapitel 1 auch craften zu können , müssen Sie den folgenden Code in die init.lua einfügen:
minetest.register_craft({ output = '"tutorial:holz" 2', recipe = { {'default:wood', 'default:wood', ''}, {'default:wood', 'default:wood', ''}, {'', '', ''}, } })
Die Funktion minetest.register_craft() registriert einen Crafting-Vorgang. Der Parameter output gibt an, welcher Gegenstand beim Vorgang herauskommt, hier unser Holz. Die 2 gibt an, dass 2 Blöcke Holz entstehen. Das Rezept unten gibt an, woraus das Holz ‘gecraftet’ werden kann;
Jeder String steht für ein Feld beim Crafting. Probieren Sie auch andere Kombinationen aus!
Was bedeutet eigentlich das default vor wood?
‘default’ steht ,wie tutorial:* für den tutorial-mod, für den default-mod. Dieser definiert alle grundlegenden im Spiel vorkommende Gegenstände.
Der default mod findet sich bei einer run-in-place-version von minetest unter minetest/data/mods/default/init.lua.
Darin enthalten ist auch z.B. default:wood.
Kaptiel 3: ABMs & Positionen!
ABMs sind Arbeitsbeschaffungsmaßnahmen für Blöcke, Sie verschaffen unserem Tutorial-Holz sinnlose Aufgaben. Wie wäre es, wenn das Tutorial-Holz einfach nach einer bestimmten Zeit wieder zu normalem Holz wird?
Dazu müssen Sie diesen Code noch an die init.lua dranhängen:
minetest.register_abm( {nodenames = {"tutorial:holz"}, interval = 30, chance = 1, action = function(pos) minetest.env:add_node(pos, {name="default:wood"}) end, })
Die Funktion minetest.register_abm registriert eine für jeden Block einer Sorte auszuführende Aktion. nodenames = {"tutorial:holz"} gibt an, dass die Aktion für alle Tutorial-Holzblöcke ausgeführt wird. Probieren Sie doch auch einmal “default:stone”, um auch alle Steinblöcke zu verwandeln. interval = 30 bedeutet, dass die Aktion alle 30 Sekunden ausgeführt wird und chance = 1 dass die Wahrscheinlichkeit dafür 1 (also immer) beträgt. Als Aktion (action) kann nun eine Funktion gesetzt werden, die pos (die Position des tutorial-Holzblockes) als Parameter hat.
Mit minetest.env:add_node(pos, NodeTable) kann nun ein Block an der Position pos mit den Attributen in NodeTable hinzugefügt werden. Um zu definieren, dass es sich um einen Default-Holzblock handelt, reicht es den Namen anzugeben.
Lehnen Sie sich jetzt zurück und schauen Sie zu, wie sich Ihre Freunde aufregen, dass Ihre Kreationen aus Deko-Holz wieder zu Standard-Holz werden.
Angenommen, Sie wollen jetzt aber erreichen, dass auf jedem Erde-mit-Gras-Block hohes Gras wächst (also default:junglegrass). Dazu müssen Sie die Position pos modifizieren können.
Dazu müssen Sie wissen, dass pos eine Tabelle ist die die folgenden Variablen enthält: x, y, z.
x und z sind Koordinaten in der Blockwelt nach Vorne-Hinten, Rechts-Links.
y hingegen ist die Oben-Unten-Koordinate (je höher, desto größer y).
Um nun hohes Gras über Erde-mit-Gras Blöcken wachsen zu lassen, können Sie den folgenden Code verwenden:
minetest.register_abm( {nodenames = {"default:dirt_with_grass"}, interval = 1, chance = 100, action = function(pos) pos.y=pos.y+1 minetest.env:add_node(pos, {name="default:junglegrass"}) end, })
Die Zeile pos.y=pos.y+1 manipuliert die Position so, dass es sich nun um die Position direkt über dem Erde-mit-Gras-Block handelt. Das Ausführ-Intervall beträgt hier 1 Sekunde, die Wahrscheinlichkeit, dass die Funktion aber wirklich ausgeführt wird liegt bei 1/100. So wird Ihr minetest-Garten langsam, aber sicher mit hohem Gras überwuchert.
Dies ist nur eine kurze Einführung in Minetest Lua Modding. Eine englische Fassung dieses Tutorials finden Sie unter https://github.com/Jeija/minetest-modding-tutorial/blob/master/mtmoddeven.txt. Die englische Fassung ist umfangreicher als die deutsche Version.
Ich hoffe, dass Sie hiermit schon einen kurzen Einblick in die Modprogrammierung erhalten haben und diese Kenntnisse auch bei anderen Programmen hilfreich sind.
Für weitere Informationen steht Ihnen das Wiki von Minetest zur Verfügung.
Beide Links dienen nur als Kurzreferenz. Außerdem können Sie im Minetestforum Ihre Fragen loswerden oder Ihre selbstgeschriebenen Mods präsentieren.
Schade, aber cooler Beitrag.
> "hätt ich Dir gleich sagen können"
Nur wer hinfällt, kann aufstehen 😉
Hallo,
das tut mir leid. Ich hatte von dem Wettbewerb gar nichts mitbekommen, aber hätte auch nicht viel ändern können, da ich keinen engen Kontakt zu Schulen habe.
Die Idee finde ich aber super und das es nur eine Einsendung gab ist wirklich schade. Vielleicht kann man es unter Startschwierigkeiten verbuchen?
Lass Dich nicht entmutigen.
LG Helena
[...] hat Jürgen Donauer von BITblokes.de einen Schreibwettbewerb für Schulen veranstaltet. Das Experiment ist leider gescheitert, da es nur eine einzige Einsendung gab. Jürgen Donauer denkt, dass vor allem fehlende Propaganda [...]
"Natürlich betreibt man in so einem Fall _zumindest_"
"Mich _hatten_ auch Leute angeschrieben"
"Über die _Aufbesserung_ der _Klassenkasse_"