Mod specification

Contents

Overview

This is a specification of how Spring will support mods and switching between them.

Spring looks for games in the folders "maps", "base" and "mods", and all their subfolders. It is recommended to put your game in a subfolder of /mods. Spring supports multiple subfolders within /mods: /mods/my_nifty_game/game.sdd and /mods/my_nifty_game/game_support.sdz are both correct.

On startup, Spring will search these folders and their subfolders for files called "modinfo.lua". This file declares all dependencies of this game, such as additional graphics, sounds and the like.

The general idea is that this file should be used as a manifest file to let Spring know what to do with the archive it is found inside, so each archive file in the mods directory is supposed to have one. Archive files that do not contain this file are ignored, and aren't available to Spring's Virtual File System.

Modinfo.lua Example

Modinfo.lua, like any Lua language file, can contain active code, should you want it to. But it is mainly just designed to refer Spring's Virtual File System (VFS) to the correct game files and any dependencies of your project.

Here is an example:

return
{
	game='myNiftyGame',
	shortGame='mNg',
	name='My Nifty Game',
	mutator='official',
	version='1.0',
	description='The Awesome Game I Made.',
	url='http://www.my_nifty_url.com/',
	modtype=1,
	depend= {
		depend01.sdd,
		depend02.sdd,
		},
}


Dependencies are files that your game depends on to operate. This may be anything- a map, another game, a folder named "my_nifty_sounds.sdd" that has a bunch of sounds in it and a modinfo.lua file to identify it as a valid file archive to Spring- basically anything goes, so long as it, like your game, is identified as a usable archive by having a modinfo.lua file in it.

These files are loaded in the order listed. So if depend02.sdd contains a file with the same name as depend01.sdd, it will overwrite that file.

Modtype determines whether Spring's archive system sees the game as a game, or as an "invisible" file that can only be called as a Dependency. If set to any number except for 1, it will not be visible to end-users as a "game", but you can still refer to it in the depend table.

Replacements

When releasing new versions of a mod it is recommended that a new unique filename is used. In this manner it would be possible for the lobby to download archives from a fast webserver based on the filename.

But if a new name is used for a support archive with content for example, it would break other mods that depend on the archive. To avoid this, replacements can be used.

Replacements simply specifies which other archives this one replaces. So if a new archive specifies that it replaces old_archive.sdz, any other mod that depends on old_archive.sdz would now use the new one instead.

It is probably not always a good idea to use this for new versions of a mod however, since if you hide the old version people would not be able to switch between the old and the new version. So only use replacements when you are sure that it is what you want.

Distribution

If a player does not have a certain game's files when trying to join a game online, the Lobbies are designed to let them know that they don't have the game. If you have uploaded your game to the various services that are supported by the Lobby applications, players can automatically download the game. Also, SpringDownloader allows players to share the game's file with others easily. Modinfo.lua lets both the Lobby application and Spring know what your game is, and whether it "knows" where it can be downloaded from.

Retrieved from "http://springrts.com/wiki/Mod_specification"

This page has been accessed 5,356 times. This page was last modified 10:20, 25 February 2010.


 
 

Page editing toolbox

Browse
Main Page
Community portal
Current events
Recent changes
Random page
Help
Donations
Edit
View source
Editing help
This page
Discuss this page
Post a comment
Printable version
Context
Page history
What links here
Related changes
My pages
Log in
Special pages
New pages
File list
Statistics
Bug reports
More...

Site layout created by Roflcopter.