Topic: Idee für neuen Stamm: die Allianz

usingUser
Avatar
Topic Opener
Joined: 2024-01-19, 19:54 UTC+1.0
Posts: 58
Version: 1.2.1
Ranking
Likes to be here
Posted at: 2025-09-06, 21:20 UTC+2.0

Nach „etwas“ Vorlaufzeit bin ich nun so weit, daß ich mich an die Umsetzung wagen will.
In welchem Verzeichnis liegen die Daten, die zum Spielen verwendet werden, z. B. die verfügbaren Stämme? Unter GNU/Linux wären die Stämme ja unter /usr/share/games/widelands/data/tribes, jedoch gibt es ja auch andere Systeme und hartgecoded ist ja bekanntlich nicht so elegant…
Gibt es dafür (Umgebungs-) Variablen? Wo find' ich die?


Gerade arbeite ich eher sporadisch an einer Idee für einen neuen Satz Stämme: die Allianz in unterschiedlichen Varianten.

Top Quote
Nordfriese
Avatar
Joined: 2017-01-17, 18:07 UTC+1.0
Posts: 2194
OS: Debian Testing
Version: Latest master
Ranking
One Elder of Players
Location: 0x55555d3a34c0
Posted at: 2025-09-07, 11:43 UTC+2.0

usingUser wrote

In welchem Verzeichnis liegen die Daten, die zum Spielen verwendet werden, z. B. die verfügbaren Stämme? Unter GNU/Linux wären die Stämme ja unter /usr/share/games/widelands/data/tribes, jedoch gibt es ja auch andere Systeme und hartgecoded ist ja bekanntlich nicht so elegant…
Gibt es dafür (Umgebungs-) Variablen? Wo find' ich die?

Im Hauptmenü findest du unter »Über Widelands« → »Technische Information« den Pfad zum Data-Verzeichnis. Beachte, falls du Widelands über ein All-in-One-Format wie Flatpak, Snap oder AppImage installiert hast, sind die Dateien darin gebündelt und liegen nicht frei zugänglich auf dem Dateisystem. In dem Fall kannst du sie als Zip von der Release-Seite herunterladen.

Beim Start von Widelands kann mit der Option --datadir ein beliebiges anderes Data-Verzeichnis als das Standardverzeichnis angegeben werden.


Top Quote
usingUser
Avatar
Topic Opener
Joined: 2024-01-19, 19:54 UTC+1.0
Posts: 58
Version: 1.2.1
Ranking
Likes to be here
Posted at: 2025-09-26, 17:21 UTC+2.0

Was macht z. B. die Zeile dirname .. "starting_conditions/headquarters.lua"; ? Wo stehen die Umgebungsvariablen, die in den Luaskripten benutzt werden? Wie setze ich eine blockübergreifend fest oder veränder' die?


Gerade arbeite ich eher sporadisch an einer Idee für einen neuen Satz Stämme: die Allianz in unterschiedlichen Varianten.

Top Quote
kaputtnik
Avatar
Joined: 2013-02-18, 20:48 UTC+1.0
Posts: 2725
OS: Archlinux
Version: current master
Ranking
One Elder of Players
Location: Germany
Posted at: 2025-09-26, 17:53 UTC+2.0

usingUser wrote

Was macht z. B. die Zeile dirname .. "starting_conditions/headquarters.lua";

Die zwei Punkte sind ein "verbingungsoperator" (concatenation operator) für strings. In diesem Fall wird in der variablen ein string stehen und dieser string wird mit dem folgenden string verbunden. zB:

dirname = "addons/NAME/VERZEICHNIS/"

new_dir = dirname .. "starting_conditions/headquarters.lua"

print(new_dir)  -- schreibt in Konsole: "addons/NAME/VERZEICHNIS/starting_conditions/headquarters.lua"

? Wo stehen die Umgebungsvariablen, die in den Luaskripten benutzt werden? Wie setze ich eine blockübergreifend fest oder veränder' die?

Umgebungsvariablen im eigentlichen Sinne gibt es nicht. Es gibt globale variablen und lokale variablen. Letztere sind nur in einem gewissen Kontext (Funktion oder Datei) gültig.

GLOBAL_VAR = "hallo"    -- diese variable ist Global. Wird sie zb in init.lua gesetzt kann man in jeder anderen Datei oder Funktion darauf zugreifen
local local_var = "     -- ein lokale variable. Sie ist nur in der Datei oder Funktion zugreifbar wo sie definiert wurde

Generell gilt jedoch das man möglichst nur lokale Variablen einsetzen sollte, da es sonst leicht zu Fehlern führt die man nur schwer finden kann. Zb aus versehen überschrieben wird. Muss man globale variable nutzen sollten sie klar als solche gekennzeichnet werden, zB nur in Großbuchstaben notieren.

Bitte erwarte nicht das wir hier eine Einführung in lua geben. Es gibt im Internet genug Informationsquellen zu lua.


Top Quote
usingUser
Avatar
Topic Opener
Joined: 2024-01-19, 19:54 UTC+1.0
Posts: 58
Version: 1.2.1
Ranking
Likes to be here
Posted at: 2025-09-27, 14:34 UTC+2.0

Danke kaputtnik für die Variablenunterscheidung. Mir liegt fern, hier eine Luaeinführung zu erfragen. Eher war mein Gedanke, nach einer Art Übersicht zum Projekt oder der Codestruktur des Spiels zu fragen.

Ich probier's mal mit ganz konkreten Fragen:

  • Welche ist die allererste Addondatei (und wo liegt die, wenn die Addons unter Widelandsverzeichnis/addons abgespeichert werden), die aufgerufen wird, wenn ich ich Addon einbinde?
  • (Wie) Kann ich mein Addon testen, ohne jedes Mal das Spiel zu starten? Einfach den Luacode auszuführen ist bestimmt zu einfach. Falls doch: Wie binde ich das Spiel in meine Skripte ein, wenn ich sie mit $ lua init.lua starte?

Edited by kaputtnik: Bitte füge vor Aufzählungen eine Leerzeile ein

Edited: 2025-09-27, 16:01 UTC+2.0

Gerade arbeite ich eher sporadisch an einer Idee für einen neuen Satz Stämme: die Allianz in unterschiedlichen Varianten.

Top Quote
kaputtnik
Avatar
Joined: 2013-02-18, 20:48 UTC+1.0
Posts: 2725
OS: Archlinux
Version: current master
Ranking
One Elder of Players
Location: Germany
Posted at: 2025-09-27, 16:38 UTC+2.0

usingUser wrote

Danke kaputtnik für die Variablenunterscheidung. Mir liegt fern, hier eine Luaeinführung zu erfragen. Eher war mein Gedanke, nach einer Art Übersicht zum Projekt oder der Codestruktur des Spiels zu fragen.

Ich probier's mal mit ganz konkreten Fragen:

  • Welche ist die allererste Addondatei (und wo liegt die, wenn die Addons unter Widelandsverzeichnis/addons abgespeichert werden), die aufgerufen wird, wenn ich ich Addon einbinde?

Der Einsprungspunkt ist immer die Datei init.lua. Wenn das Programm ein add-on findet wird diese Datei aufgerufen. Außerdem muss noch die Datei addon vorhanden sein die eine Beschreibung des add-ons beinhaltet.

Grundlegende Verzeichnisstuktur:

addons
  - my_wonderful_addon.wad       -- Verzeichnis des add-ons
     -addon                      -- Datei mit Beschreibung
     - init.lua                  -- Haupteinsprungspunkt
     - icon.png                  -- optional, wird im addon-manager angezeigt
  • (Wie) Kann ich mein Addon testen, ohne jedes Mal das Spiel zu starten? Einfach den Luacode auszuführen ist bestimmt zu einfach. Falls doch: Wie binde ich das Spiel in meine Skripte ein, wenn ich sie mit $ lua init.lua starte?

Ich verstehe nicht ganz. Ein add-on für widelands funktioniert nur mit widelands. Das Spiel muss ja erst mal einiges initialisieren um überhaupt ein add-on laden zu können. Es gibt aber verschiedene Möglichkeiten das testen zu vereinfachen. Hierzu muss widelands aber aus der Konsole mit optionen gestartet werden. Man kann zB eine Kofigurationsdatei anlegen die alle notwendigen Parameter zum starten eines Spiels beinhaltet. Ein Muster für eine solche Konfigurationsdatei findest du hier:

https://codeberg.org/wl/widelands/src/commit/9ab9046082b3dde9a8ce0da899e6135ccee82b1f/data/templates/new_game_template

Man kann die Datei anpassen, im homeverzeichnis von widelands (.widelands) abspeichern und das Spiel so starten. Angenommen die Datei heißt "test_tribe"

./widelands --new_game_from_template=test_tribe

Damit wird ein neues Spiel mit den Angaben aus der Konfigurationsdatei gestartet ohne das man sich erst durch die Menüs klicken muss.


Top Quote
kaputtnik
Avatar
Joined: 2013-02-18, 20:48 UTC+1.0
Posts: 2725
OS: Archlinux
Version: current master
Ranking
One Elder of Players
Location: Germany
Posted at: 2025-09-27, 16:40 UTC+2.0

Am einfachsten wird es sein wenn Du das add-on europeans_tribe installierst und Dich etwas damit auseinandersetzt. Dann hast Du wenigstens schon mal die Grundstruktur…


Top Quote
usingUser
Avatar
Topic Opener
Joined: 2024-01-19, 19:54 UTC+1.0
Posts: 58
Version: 1.2.1
Ranking
Likes to be here
Posted at: 2025-09-27, 17:45 UTC+2.0

Die Europäer habe ich sogar als Orientierungspunkt genommen. Nur hat mich der Ordner initialization verwirrt. Scheinbar übernimmt der eine ähnliche Funktion wie die init.lua

Momentan sieht meine Dateistruktur wie folgt aus, wobei ich mich gerade nur auf die einfache Allianz konzentriere.

addons
├── allianz-einfach.wad
│   ├── addon
│   ├── init.lua
│   ├── postload.lua
│   ├── preload.lua
│   ├── register.lua
│   └── tribes
│       └── einfache-allianz
│           ├── functions.lua
│           ├── init.lua
│           ├── tips.lua
│           └── units.lua
├── allianz-ui.wad
│   ├── addon
│   ├── init.lua
│   ├── postload.lua
│   ├── preload.lua
│   └── register.lua
├── allianz-umfangreich.wad
│   ├── addon
│   ├── init.lua
│   ├── postload.lua
│   ├── preload.lua
│   ├── register.lua
│   └── tribes
│       └── umfangreiche-allianz
│           ├── init.lua
│           ├── tips.lua
│           └── units.lua
└── notizen.md
Edited: 2025-09-27, 17:45 UTC+2.0

Gerade arbeite ich eher sporadisch an einer Idee für einen neuen Satz Stämme: die Allianz in unterschiedlichen Varianten.

Top Quote
Nordfriese
Avatar
Joined: 2017-01-17, 18:07 UTC+1.0
Posts: 2194
OS: Debian Testing
Version: Latest master
Ranking
One Elder of Players
Location: 0x55555d3a34c0
Posted at: 2025-09-27, 18:01 UTC+2.0

Dokumentation: https://www.widelands.org/documentation/add-ons/#tribes

Der Einstiegspunkt hängt vom Add-On-Typ ab. Für Tribes-Add-Ons, die ein neues Volk erstellen, ist /tribes/irgendein_verzeichnisname/init.lua der Punkt, wo das Volk definiert wird. Modifikationen an bestehenden Einheiten werden in den Einstiegspunkten /postload.lua und /preload.lua durchgeführt (wobei preload aber kaum verwendet wird, in der Regel werden alle Modifikationen in der postload durchgeführt).

Für alle Arten von neuen Objekten sollte es ein Verzeichnis pro Objekt geben, wo seine eigene init.lua und zugehörige register.lua sowie andere objektspezifische Assets wie Graphiken liegen.


Top Quote
usingUser
Avatar
Topic Opener
Joined: 2024-01-19, 19:54 UTC+1.0
Posts: 58
Version: 1.2.1
Ranking
Likes to be here
Posted at: 2025-11-07, 19:25 UTC+1.0

Nachdem ich ein paar Ansätze ausprobiert habe, würde ich gern wieder um Rat oder einen Hinweis fragen.
Um wenigstens ein absehbares Erfolgserlebnis zu haben, habe ich data/tribes aus dem Gitrepo in mein Addonverzeichnis im Heimverzeichnis kopiert, die Verzeichnisse der anderen Stämme rausgelöscht und jedes Vorkommen von „frisian[s]“ durch „allianz“ ersetzt -- sowohl von den Datei- und Verzeichnisnamen wie auch in den Dateien.
Jetzt müßten doch eigentlich die Stämme funktionieren und in sich abgeschlossen sein und dementsprechend die Erweiterung funktionieren, nur wurde mir der alte Stamm unter neuem Namen nicht angezeigt, wenn ich ein Spiel anfangen wollte. Oder lieg ich da falsch? Könnte ich vielleicht ein preload.lua oder postload.lua vergessen haben…?


Gerade arbeite ich eher sporadisch an einer Idee für einen neuen Satz Stämme: die Allianz in unterschiedlichen Varianten.

Top Quote