<?xml version="1.0"?>
<ModInfo>
<ID>00000000-0000-0000-0000-000000000000</ID>
<Name>My Awesome World Map Water Mod</Name>
<Author>Some Person</Author>
<Version>1.00</Version>
<ReleaseDate>2019-12-25</ReleaseDate>
<Category>World Textures</Category>
<Description>Retextures for all water on the World Map.</Description>
<ReleaseNotes>This is my first version!</ReleaseNotes>
<Link>https://forums.qhimm.com/</Link>
<PreviewFile>preview.gif</PreviewFile>
</ModInfo>
Mod Folders: Files needed for your mod should follow a folder structure. Each folder should be named so that you can easily identify them. You can manipulate which folders are active based on the mod settings you specify, or game conditions or other variables. 7th Heaven will check the mod paths in the order they're specified in its mod.xml file. The subfolders in your mod should follow the FF7 game folder structure. An example folder structure is below:
|- mymodfolder
|- mod.xml
|- menu_us.lgp
|- cloud.tex
|- earith.tex
|- sewer
|- char.lgp
|- aaba.p
|- junon
|- char.lgp
|- aaba.p
|- vgmstream
|- fan2.ogg
To activate a subfolder in your mod based on a setting variable that you're using in 'Configure Mod', use <ModFolder Folder="NameOfSubFolder" ActiveWhen="MySetting = 1"/>. More on using the Configure Mod settings later.
<ModInfo>
<ModFolder Folder="MyModFolder\ModSubFolder" ActiveWhen="MySetting = 1" />
</ModInfo>
Conditional Folders: Conditional folders allow you to activate a folder of your mod when certain conditions are met, such as with runtime variables like a random number, counter, time, or game memory address. The below example is based on a mod with the folder structure as listed above in the 'Mod Folders' section.
<?xml version="1.0"?>
<ModInfo>
<Conditional Folder="sewer">
<RuntimeVar Var="Short:0xCC15D0:2" Values="0xD5,0x160" />
</Conditional>
<Conditional Folder="junon">
<RuntimeVar Var="Short:0xDC08DC:2" Values="300..400" />
</Conditional>
</ModInfo>
What this means, if you activate this mod:
<?xml version="1.0"?>
<ModInfo>
<ModFolder Folder="HolidayOutfits" ActiveWhen="outfits = 1" />
<ModFolder Folder="MusicStyle\Dance\vgmstream" ActiveWhen="music = 1" />
<ModFolder Folder="MusicStyle\Pop\vgmstream" ActiveWhen="music = 2" />
<ModFolder Folder="MusicStyle\Rock\vgmstream" ActiveWhen="music = 3" />
<ConfigOption>
<Type>Bool</Type>
<Default>0</Default>
<ID>outfits</ID>
<Name>Holiday Outfit Models</Name>
<Description>This changes main characters outfits to Christmas style.</Description>
<Option Value="0" Name="" PreviewFile="preview\hollyoff.jpg" />
<Option Value="1" Name="" PreviewFile="preview\hollyon.jpg" />
</ConfigOption>
<ConfigOption>
<Type>List</Type>
<Default>3</Default>
<ID>music</ID>
<Name>Choose Music Style</Name>
<Description>This lets you change the genre of music you hear in the game.</Description>
<Option Value="0" Name="Default Game"/>
<Option Value="1" Name="Dance" PreviewFile="preview\dance.ogg"/>
<Option Value="2" Name="Pop" PreviewFile="preview\pop.ogg"/>
<Option Value="3" Name="Rock" PreviewFile="preview\rock.ogg" />
</ConfigOption>
</ModInfo>
Treeview Style: New in 7th Heaven 2.0! In addition to the regular list style, you can now show your mod settings in a grouped Treeview style. You will trigger the Treeview style by placing at least 3 equal signs '===' at the beginning of the Name of the config option. The ===Name=== will become the header/group of the treeview. This was designed this way to maintain full backwards compatibility with older 7th Heaven versions. Note: You CANNOT switch back and forth between list items and the treeview! It is ALL or NOTHING. Once you trigger the TreeView style, all Config Options must then have a header--a Parent/Child relationship. See example below.
<ConfigOption>
<Type>List</Type>
<Default>0</Default>
<ID>CharacterThemesHeader</ID>
<Name>===Character Themes===</Name>
<Description>Character Themes - Expand arrows on the left for track selection options.</Description>
<Option Value="0" Name=""/>
</ConfigOption>
<ConfigOption>
<Type>List</Type>
<Default>1</Default>
<ID>oggearis</ID>
<Name>Aerith's Theme</Name>
<Description>Plays during scenes with Aeris and Sephiroth in the Forgotten City and during the subsequent battle with Jenova-LIFE.</Description>
<Option Value="0" Name="No Change" PreviewFile="off.png"/>
<Option Value="1" Name="Default Mix" PreviewFile="on.png" PreviewAudio="\vgmstream\earis.ogg"/>
</ConfigOption>
<ConfigOption>
<Type>List</Type>
<Default>1</Default>
<ID>oggbarret</ID>
<Name>Barret's Theme</Name>
<Description>Plays as the background to Sector 7 and the 7th Heaven after Cloud agrees to attack the Sector 5 Reactor.</Description>
<Option Value="0" Name="No Change" PreviewFile="off.png"/>
<Option Value="1" Name="Default Mix" PreviewFile="on.png" PreviewAudio="\vgmstream\barret.ogg"/>
</ConfigOption>
<ConfigOption>
<Type>List</Type>
<Default>1</Default>
<ID>oggsid2</ID>
<Name>Cid's Theme</Name>
<Description>Plays when meeting Cid and during prominent scenes featuring him.</Description>
<Option Value="0" Name="No Change" PreviewFile="off.png"/>
<Option Value="1" Name="Default Mix" PreviewFile="on.png" PreviewAudio="\vgmstream\sid2.ogg"/>
</ConfigOption>
<ConfigOption>
<Type>List</Type>
<Default>0</Default>
<ID>NextGroupHeader</ID>
<Name>===Next Header===</Name>
<Description>This is the start of the next group of options.</Description>
<Option Value="0" Name=""/>
</ConfigOption>
Mod Operators: You can add operators that change the behavior of when a mod folder becomes active. Supported operators are 'And', 'Or', and 'Not'. See examples below.
<!--The folder would be active if BOTH MySetting AND MySetting2 do NOT equal 1-->
<ModFolder Folder="MyModSubFolder" >
<ActiveWhen>
<Not>
<And>
<Option>MySetting = 1</Option>
<Option>MySetting2 = 1</Option>
</And>
</Not>
</ActiveWhen>
</ModFolder>
<!--The folder would be active if EITHER MySetting OR MySetting2 equal 1-->
<ModFolder Folder="MyModSubFolder" >
<ActiveWhen>
<Or>
<Option>MySetting = 1</Option>
<Option>MySetting2 = 1</Option>
</Or>
</ActiveWhen>
</ModFolder>
<!--Your mod REQUIRES that any version of the modID specified is activated-->
<Compatibility>
<Require ModID="00000000-0000-0000-0000-000000000000">Name of Other Mod</Require>
</Compatibility>
<!--Your mod FORBIDS that any version of the modID specified is activated-->
<Compatibility>
<Forbid ModID="00000000-0000-0000-0000-000000000000">Name of Other Mod</Forbid>
</Compatibility>
<!--Your mod FORBIDS that versions 1.0 and 2.0 of the modID specified is activated (but 3.0 would work)-->
<Compatibility>
<Forbid ModID="00000000-0000-0000-0000-000000000000" Versions="1.0,2.0">Name of Other Mod</Forbid>
</Compatibility>
Mod Compatibility Settings:
You can specify that if your mod has certain settings enabled, that other settings must also be set (either in your own mod or other mods) in order for them to be compatible with each other. This example shows that if your mod has a setting turned on 'MySettingVariable', that another mod (Qhimm Catalog 3.0 Minigames) must have its 'Wonder Square - Tweaks' setting set to 0. Instead of using the 'Require' tag, you can also use 'Forbid'. So for example, if a setting has 4 options in a drop down list and all of them except the value of 0 works fine with your mod, you would specify <Forbid>0</Forbid>. That way, all options are selectable EXCEPT 0. The 'ModID' can specify your own mod's mod ID, or another (external of your mod) mod's ID. So, you could specify that if a specific setting in your own mod is selected, that another option be forced to a specific setting in your own mod as well.
<!--This specifies that if MySettingVariable has a value of 1 that-->
<!--the Qhimm Catalog 3.0 Minigames mod must have Wonder Square turned off.-->
<!--Otherwise the 2 mods would be incompatible.-->
<Compatibility>
<Setting>
<MyID>MySettingVariable</MyID>
<MyValue>1</MyValue>
<ModID>fae201ee-9fa5-4163-ab56-2b478111449d</ModID>
<TheirID>Wonder Square - Tweaks</TheirID>
<Require>0</Require>
</Setting>
</Compatibility>
Mod Load Order:
You can specify in your mod.xml file that your mod requires being above (Before) or below (After) other mod IDs in order to work correctly using the <OrderConstraints> tag. 7th Heaven 2.0's Auto Sort feature will take this into account when auto-sorting the mods. First, mods will be sorted by category, then alphabetically by name, then by the settings specified in the mod load order in mod.xml (AFTER is processed FIRST and BEFORE is processed SECOND). You can specify one or many mods at a time.
<!--Specifies that your mod should be placed below (After) the modIDs specified-->
<OrderConstraints>
<After>00000000-0000-0000-0000-000000000000</After>
<After>00000000-0000-0000-0000-000000000001</After>
<After>00000000-0000-0000-0000-000000000002</After>
</OrderConstraints>
<!--Specifies that your mod should be placed above (Before) the modIDs specified-->
<OrderConstraints>
<Before>00000000-0000-0000-0000-000000000000</Before>
<Before>00000000-0000-0000-0000-000000000001</Before>
<Before>00000000-0000-0000-0000-000000000002</Before>
</OrderConstraints>
<Mod>
<ID>BFAE987C-C1E6-42E6-8139-FF809142D72E</ID>
<Author>Iros</Author>
<Link>http://forums.qhimm.com/</Link>
<Name>Test music/patching</Name>
<MetaVersion>2</MetaVersion>
<Description>Testing music in a IRO archive</Description>
<Tags>
<string>Music</string>
</Tags>
<LatestVersion>
<Link>iros://Url/http$www.myserver.com/Music1.iro</Link>
<Version>1.2</Version>
<ReleaseDate>2014-09-04</ReleaseDate>
<CompatibleGameVersions>Original</CompatibleGameVersions>
<PreviewImage></PreviewImage>
<ReleaseNotes></ReleaseNotes>
</LatestVersion>
<Patch VerFrom="1.0" VerTo="1.1">iros://Url/http$www.myserver.com/Music_0_to_1.irop</Patch>
<Patch VerFrom="1.1" VerTo="1.2">iros://Url/http$www.myserver.com/Music_1_to_2.irop</Patch>
</Mod>
Backup Links for Patches: New in 7th Heaven 2.2: You can specify more than 1 link for 7H to attempt to download patches from.
<Mod>
<ID>BFAE987C-C1E6-42E6-8139-FF809142D72E</ID>
<Author>Iros</Author>
<Link>http://forums.qhimm.com/</Link>
<Name>Test music/patching</Name>
<MetaVersion>2</MetaVersion>
<Description>Testing music in a IRO archive</Description>
<Tags>
<string>Music</string>
</Tags>
<LatestVersion>
<Link>iros://Url/http$www.myserver.com/Music1.iro</Link>
<Version>1.2</Version>
<ReleaseDate>2014-09-04</ReleaseDate>
<CompatibleGameVersions>Original</CompatibleGameVersions>
<PreviewImage></PreviewImage>
<ReleaseNotes></ReleaseNotes>
</LatestVersion>
<Patch VerFrom="1.0" VerTo="1.1">iros://Url/http$www.myserver.com/Music_0_to_1.irop</Patch>
<Patch VerFrom="1.0" VerTo="1.1">iros://Url/http$www.backupserver.com/Music_0_to_1.irop</Patch>
<Patch VerFrom="1.1" VerTo="1.2">iros://Url/http$www.myserver.com/Music_1_to_2.irop</Patch>
<Patch VerFrom="1.1" VerTo="1.2">iros://Url/http$www.backupserver.com/Music_1_to_2.irop</Patch>
<!--The below example works to specify multiple versions at once:-->
<Patch VerFrom="1.0,1.1" VerTo="1.2" DownloadSize="0">iros://Url/http$www.myserver.com/Music_1x_1.2.irop</Patch>
</Mod>