Specification¶
The fomod format initially arose from the need to provide users with a simpler way of installing mods without the need to download multiple files.
It was created and initially maintaned by a currently unknown developer.
The fomod files (discussed below) can be thought of as a blueprint for a mod manager or an independent mod installer to create a GUI (graphical user interface) to simplify user installation.
Structure¶
A fomod installers requires a specific package
structure. Assuming the current directory (.
)
is the package:
.
├── example.plugin
└── readme.txt
A fomod
folder is needed and within it two files
that are going to be described below: Info
and Config.
A final structure should resemble:
.
├── fomod
│ ├── info.xml
│ └── ModuleConfig.xml
├── example.plugin
└── readme.txt
Info File¶
There is no defined schema for this file but it is required anyway. A proposed schema to fit the majority of mod managers could be:
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" version="5.x">
<xs:element name="fomod">
<xs:annotation>
<xs:documentation>
The following tags are to be filled in according
to their tags, shouldn't be hard to figure out.
</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:sequence>
<xs:element name="Name" type="xs:string" minOccurs="0"/>
<xs:element name="Author" type="xs:string" minOccurs="0"/>
<xs:element name="Version" minOccurs="0">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="MachineVersion" type="xs:string"/>
<xs:annotation>
<xs:documentation>
This attribute is used for providing a
machine-readable version.
Examples can be found here - https://en.wikipedia.org/wiki/Software_versioning
Semantic versioning is recommended - https://semver.org/
</xs:documentation>
</xs:annotation>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="Description" type="xs:string" minOccurs="0"/>
<xs:element name="Website" type="xs:string" minOccurs="0"/>
<xs:element name="Id" type="xs:string" minOccurs="0"/>
<xs:any processContents="skip" minOccurs="0" maxOccurs="unbounded">
<xs:annotation>
<xs:documentation>
This element is used solely for allowing extensions
since this is merely a proposed schema.
</xs:documentation>
</xs:annotation>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
Config File¶
You can find a complete reference for this file here. However, since it is generally easier to understand, it is recommended that you look through the actual schema.