Topic: Idee für neuen Stamm: die Allianz

usingUser
Avatar
Topic Opener
Joined: 2024-01-19, 19:54 UTC+1.0
Posts: 42
Version: 1.2.1
Ranking
Pry about Widelands
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?


Top Quote
Nordfriese
Avatar
Joined: 2017-01-17, 18:07 UTC+1.0
Posts: 2187
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: 42
Version: 1.2.1
Ranking
Pry about Widelands
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?


Top Quote
kaputtnik
Avatar
Joined: 2013-02-18, 20:48 UTC+1.0
Posts: 2710
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: 42
Version: 1.2.1
Ranking
Pry about Widelands
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

Top Quote
kaputtnik
Avatar
Joined: 2013-02-18, 20:48 UTC+1.0
Posts: 2710
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: 2710
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: 42
Version: 1.2.1
Ranking
Pry about Widelands
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

Top Quote
Nordfriese
Avatar
Joined: 2017-01-17, 18:07 UTC+1.0
Posts: 2187
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