AddonStructure/de

From The Battle for Wesnoth Wiki
< AddonStructure
Revision as of 13:15, 13 February 2022 by RufDerMacht (talk | contribs) (began to translate. 2B continue)


Innerhalb dieser und anderer Seiten im Wiki wird immer wieder Bezug genommen auf ein Verzeichnis, in denen die benutzerdefinierten Inhalte für Wesnoth gespeichert werden. Es wird hier mit userdata bezeichnet, obwohl ein Verzeichnis diesen Namens nicht (mehr) existiert. Die Bezeichnung hat sich aus praktischen Gründen eingebürgert.

Wie man den Pfad dieses Verzeichnis herausfindet und darauf zugreift, wird ausführlich unter EditingWesnoth erklärt.

Neue, benutzerdefinierte Inhalte, kurz UMC (User Made Content), werden auch als Add-ons und im Deutschen auch als Erweiterungen bezeichnet. Sie werden damit von den Inhalten unterschieden, die bereits vom Spiel mitgebracht werden. Man kann beim Erzeugen neuer Inhalte aber in hohem Maße auf bereits vorhandene Spieldaten zurückgreifen.
Um neue Inhalte zu erschaffen, ist es zunächst notwendig, im Verzeichnis userdata/data/add-ons/ ein neues Unterverzeichnis mit einem beliebigen Namen anzulegen. In diesem und allen weiteren Verzeichnisnamen sind KEINE Leerzeichen erlaubt. Statt dessen können Unter_Striche oder Binde-Striche verwendet werden.

In der Folge (und auch auf anderen Seiten im Wiki) wird ein derartiges Unterverzeichnis vorausgesetzt!

Die Datei _main.cfg

Im nachfolgende Beipiel gehen wir davon aus, eine neue Erweiterung namens A_Simple_Addon zu erzeugen.

  1. Dazu legen wir zunächst das Verzeichnis userdata/data/add-ons/A_Simple_Addon an.
  2. Danach erzeugen wir innerhalb des neuen Ordners eine Textdatei namens _main.cfg. Ohne diese Datei wird das Spiel nicht einmal bemerken, dass dein Add-on existiert. Der Name der Datei bedeutet in etwa "Hauptkonfigurationsdatei".

Die Datei _main.cfg weist das Spiel an, wie die Inhalte des Add-ons geladen werden sollen. Hier ein sehr einfaches Beispiel:

#textdomain wesnoth-A_Simple_Addon
[textdomain]
    name="wesnoth-A_Simple_Addon"
    path="data/add-ons/A_Simple_Addon/translations"
[/textdomain]

#ifdef MULTIPLAYER
[binary_path]
    path=data/add-ons/A_Simple_Addon
[/binary_path]

{~add-ons/A_Simple_Addon/scenarios}
#endif

The [textdomain] WML tag specifies where the game should look for translations to the strings in the add-on. The textdomain should be the add-on's directory name prefixed with "wesnoth-", to ensure that it does not conflict with other textdomains that might be specified on a given system and is compatible with WesCamp.

Note: A textdomain is only required if your add-on contains text meant to be translated. In the case of, for example, a music pack, no textdomain is needed.

All tags save for [campaign] and [textdomain] must be enclosed in an #ifdef preprocessor conditional - including those substituted through inclusion (see PreprocessorRef for more information). This is to make sure your content only loads at the correct time and does not conflict with other add-ons. In the example above, the scenarios will be loaded when you enter multiplayer mode. In a campaign, you can set up a specific flag to allow your content to only load when that campaign is played.

Note: Only code must be included from this file. You do not need to include binary content (such as sounds, images, or music). Those may be referred to simply by path relative to the one specified in [binary_path]. Also, including the units directory cannot be done by a simple path inclusion; it also must be wrapped in a [units][/units] tag pair, as such:

[units]
    {~add-ons/A_Simple_Addon/units}
[/units]

The Directory Structure

What to create next depend on what type of content you are creating. For example, campaigns or map packs will have scenarios and maps directories, while a music pack would have only music. Here we will assume you are creating a campaign or single-scenario add-on.

Create the following directories:

  • userdata/data/add-ons/A_Simple_Addon/scenarios
  • userdata/data/add-ons/A_Simple_Addon/maps

All map files used in scenarios go in maps (see BuildingMaps. All configuration (‘.cfg’) files for scenarios go in scenarios (see BuildingScenarios).

If you have additional custom content such as images, sounds or music, it's necessary to create additional directories. Even for other custom content, creating directories to organise it is recommended.

Directory structure defined by the engine

You may name the directories containing code (such as scenarios and macros) anything you like, but the binary content directories listed below must be named as such and be relative to your [binary_path]. This is because when trying to resolve an image path, Wesnoth will look under images/, and likewise for sounds and music, in as explained in the BinaryPathWML page.

  • userdata/data/add-ons/A_Simple_Addon/images
  • userdata/data/add-ons/A_Simple_Addon/music
  • userdata/data/add-ons/A_Simple_Addon/sounds

Some subdirectories of images are also supported by the engine:

  • userdata/data/add-ons/A_Simple_Addon/images/attacks Icons for each attack, see UnitTypeWML#Attacks's documentation for icon
  • userdata/data/add-ons/A_Simple_Addon/images/terrain Terrain graphics

While Lua can be embedded in WML files, the following directory is supported for loading them via Lua's wesnoth.require "module_name".

  • userdata/data/add-ons/A_Simple_Addon/lua

If you set up a textdomain, create a translations directory, even if it remains empty. Failure to do so generates a warning in stderr. This path must be the same as specified in the [textdomain] tag.

  • userdata/data/add-ons/A_Simple_Addon/translations

Directory structure defined by convention

The names of these directories are not prescribed by the engine, but the current "best practice" is:

  • userdata/data/add-ons/A_Simple_Addon/ai Lua files for the RCA_AI
  • userdata/data/add-ons/A_Simple_Addon/masks files for TerrainMaskWML
  • userdata/data/add-ons/A_Simple_Addon/units
  • userdata/data/add-ons/A_Simple_Addon/utils containing WML macros

The "images" directory is prescribed by the engine, but can also use subdirectories:

  • userdata/data/add-ons/A_Simple_Addon/images/halo for [halo_frame], etc
  • userdata/data/add-ons/A_Simple_Addon/images/items
  • userdata/data/add-ons/A_Simple_Addon/images/portraits for [unit_type]profile=
  • userdata/data/add-ons/A_Simple_Addon/images/story backgrounds for [story] screens
  • userdata/data/add-ons/A_Simple_Addon/images/units for [unit_type]image=, etc

Finally, the customary fallback for not putting stuff in the parent directory:

  • userdata/data/add-ons/A_Simple_Addon/images/misc

See also