Modding:Setting up your Development Environment

From Vintage Story Wiki
Jump to navigation Jump to search
Other languages:
Deutsch • ‎English • ‎Nederlands • ‎русский

This page was last verified for Vintage Story version 1.16.4.


Software

When you are ready to begin coding mods for Vintage Story, you probably would want to set up a development environment that simplifies the process of coding and testing your creations. There are several applications that aid you in the development of mods. Here are some suggestions:

  • Visual Studio Community is a free and very powerful development environment and covered in below guide. This is also the tool the Vintage Story Team uses to build the game. It also has a MacOS Version.
  • Jetbrains Rider is a freemium and modern development environment with seamless support for Visual Studio projects, keybindings and layouts. It is an enterprise product and some features are locked behind a license (code duplication checking, web dev tools), but the features that you need for VS mod development are all free. The indexing / go to reference features and built-in decompiling features are very powerful, as you are able to click on a method Vintage Story uses and it'll show you the code behind it. Do note that it currently has one bug + workaround documented here.
  • MonoDevelop is another IDE that is more lightweight than Visual Studio Community.
  • Notepad++ your very basic text editing tool with some extra features. You can code mods in any text editor, really. It does however lack instant context sensitive feedback while programming, which is very helpful. If you choose this way, you can use the game itself to trial and error mods by reloading them while the game is running.

Install Development Tool

VintageStory is developed in C#. Choose one of the above IDEs or other alternatives. We suggest using Visual Studio Community for Windows. For Linux you may want to use Visual Studio Code, Rider or MonoDevelop.

After you download an IDE, you can now either get the mod template project or manually set up a mod project. The mod template offers a convenience tool to set up multiple mod projects and to quickly pack up and have a ready-to-ship mod.

Installation Guide on Windows / macOS with Visual Studio

OS Repo Command
Windows download exe Run downloaded file
macOS download dmg Run downloaded file

Installation Guide on Linux / macOS with MonoDevelop

You can use the MonoDevelop IDE to make VS mods on Linux. The download instructions are below, choose your OS and follow the link to add the repo, then run the install command.

OS Repo Command
Debian 8-10 repo sudo apt-get install monodevelop
Ubuntu 14.04-20.04 repo sudo apt-get install monodevelop
CentOS / RedHat repo yum install monodevelop
Using Flatpak Download Flatpak flatpak install --user --from https://download.mono-project.com/repo/monodevelop.flatpakref
macOS build guide Use Visual Studio or build from source
Other compile from source Follow the instructions to compile from source

Installation Guide on Linux / macOS with Visual Studio Code

You can use Visual Studio Code to make VS mods on Linux. The download instructions are below, choose your OS and follow the link to download it.

OS Download Command
Debian 8-10 download deb sudo dpkg -i /path/to/vscode/file.deb && sudo apt-get install -f
Ubuntu 18.04-20.04 download deb sudo apt install /path/to/vscode/file.deb
CentOS / RedHat / Fedora / SUSE download rpm rpm -ih /path/to/vscode/file.rpm
Arch package yay -S visual-studio-code-bin
Using Snap Download snapd sudo snap install code --classic
macOS download zip Run downloaded file
Other compile from source Follow the instructions to compile from source

Installation Guide on Windows / Linux / macOS with JetBrains Rider

You can use Jetbrains Rider to make VS mods on Linux. The download instructions are below, choose your OS and follow the link to download it.

OS Download Command
Windows download exe Run downloaded file
Arch package yay -S rider mono mono-msbuild
Using Toolbox Download Toolbox Follow the given instructions for your OS
Using Snap Download snapd sudo snap install rider --classic
macOS download dmg Run downloaded file
Other download .tar.gz sudo tar -xzf ideaIU.tar.gz -C /opt && cd /opt/idea-dir-edit-me && sudo ./idea.sh

Mod templates

Setup using the official Mod template

To get started download the VSModTemplate solution from GitHub. Now you simply need to extract the zip archive to your desired destination.

VSMods9.png

Navigate to vsmodtemplate-x.y.z and double click VSMods.sln (only works if Visual Studio is installed). Alternatively you can also start Visual Studio hit File -> Open -> Project/Solution..., navigate to the extracted folder and select VSMods.sln.

But before you can start to work, you have to set up the ModTools first.

Run ModTools

The ModTools allow you to do various tasks rather easily by typing in a command. Each platform requires a different way to start it. Please note, the mod tools have only been tested with Visual Studio and MonoDevelop, but they are not required to mod the game, it merely simplifies some of the tasks.

Windows

Double-click vsmodtools.exe.

Linux

Open a terminal and navigate to this folder and enter mono vsmodtools.exe.

Mac OS

Double-click modtools.command.

ModTools.png

Setup

Syntax: setup [optional path]


Before doing anything else you have to setup your workspace. Just type in setup and it will automatically try to locate your Vintage Story installation directory. If it cannot find it, you will be asked to type in the full path. Once you have entered your path, it will update your project files so you can start to work with it. Now open the project again and run your first test by clicking Start VSMods10.png. If everything has been set up correctly, Vintage Story should start.

Project Setup (ZIP)

The source mod system lets you build zip mods that can ship source code besides their assets. The source code is compiled during run-time by the modloader engine. This has the great advantage of being open and easy to modify on the run, but also comes with one major disadvantage, which is that the inbuilt source code compiler can only compile code up until C# 6.0, so newer language features are not supported. If this is a showstopper for you, we advise you to build a compiled mod.

Add Mod

Syntax: add <modid>


Adds a new mod project to your workspace, also generates an assets, a src folder and a modinfo.json file. The mod will be added to your visual studio solution and will be loaded by Vintage Story. Make sure to fill in all additional information in modinfo.json.

Delete Mod

Syntax: delete <modid>


Before executing, make sure your project is closed, otherwise you might run into some difficulties. Running this command will delete the given mod completely (irreversible).

Pack Mod

Syntax: pack <modid>


Creates a mod zip file and places it in /releases/<modid>/<modid>_v<modversion>.zip. This file is ready for use and can be shared with other people.


Syntax: pack-all


Packs all mods in your workspace at once.

Project Setup (Compiled Zip)

Both dll and zip mods have their advantages and disadvantages, so why not combine them together? This project setup is very similar to zip. Instead of adding the source code to the zip file, it uses the compiled dll. This allows you to have all the dll benefits while still having the zip mod asset structure.

Add Mod

Syntax: add <modid> compiled


Adds a compiled zip mod template to your workspace. The difference is that it uses a compiled dll instead of the actual source code. All other commands are equal to the zip ones.

Set Mod

Syntax: set <modid> <source|compiled>


Sets the given zip mod either to source or compiled. This can be useful if you want to change the type of your mod later on.

Project Setup (DLL)

Dll mods are way more powerful than source mods, but they have two major downsides. Firstly, they are not able to carry assets which will be loaded by the game, secondly because they are so powerful they can be dangerous. Besides that dll mods can (unlike the others) have cross mod references, provide APIs and use C# 7. We recommend this type of mod for more experienced mod developers.

Add Mod

Syntax: add-dll <modid>


Adds a new mod project to your workspace. A generated AssemblyInfo.cs file will be in your properties folder, it contains the mod information (name, author, version, description etc.) so make sure to change them before you spread the mod to other people. The mod will be added to your visual studio solution and will be loaded by VintageStory.

Delete Mod

Syntax: delete <modid>


Before executing, make sure your project is closed, otherwise you might run into some difficulties. Running this command will delete the given mod completely (irreversible).

Release Mod

Once you launch VintageStory in your workspace, the DLL mod will be compiled. You can find it in your mods folder, with the give name: <modid>.dll. If you want to upload this mod or share it with your friends this is the file you need to use.

Manual setup

  • Create a new project
  • Add at least a library reference to the VintageStoryApi.dll (on Windows it's located in the installation directory)
  • Open the project properties. Under debug select "Start external program" select the VintageStory.exe. Also adjust the working directory to where the executable is located.
  • If you compile to a .dll file, set up a ModInfo attribute in your AssemblyInfo.cs (example)
    • Add the following command line arguments: -openWorld="modsamplestest" -pcreativebuilding --addModPath="C:\path\to\your\bin\folder" --addOrigin="C:\path\to\your\assets\folder\if\you\have\any"
  • If want to ship a source mod or mod with assets, set up a modinfo.json (example). Make sure your folders are set up in a way that the modPath contains the modinfo.json and a folder named "src" containing your source files. Optionally it can also contain an assets folder for your assets.
    • Add the following command line arguments: -openWorld="modsamplestest" -pcreativebuilding --addModPath="C:\path\to\your\modPath"
  • I recommend adding the RedirectLogs.cs file to your project, so that you can see the log output in your visual studio output window. Be sure not to ship your mod with it though.
  • Run the project and hope for the best :D
  • To ship a mod have a look at Mod Packaging

If you are having troubles, you might be able to learn from the vsmodexamples project

Moving Forward

If you've successfully managed to setup your development environment and can run Vintage Story through the VSMods project in your IDE then it's time to get started on your first code mod. At this point there are many options you can choose from as code mods can alter almost any aspect of the game. However, the best place to start is likely one again with Blocks and Items (since you should be familiar with making them using JSONS by this point).

Head over to the Advanced Blocks page to make your first advanced code block.

Or head over to the Advanced Items page to make your first advanced code item.


Modding
Template:Navbox/modding/code require C# coding
Basics

Getting Started | Mod Types | Simple Examples | Theme Pack

Asset System | Textures | Items | Recipes | Blocks | Entities | Model Creator | Animation Basics | VTML & Icons | Mod Packaging & Release | Modinfo | Debugging

Advanced

JSON Patching | Advanced JSON Items | The Remapper | Server-Client Considerations | Compatibility with other mods

Setting Up Your Development Environment (General - Windows - Linux)

Advanced Blocks | Advanced Items | Item-Block Interactions | Block Behavior | Block Entities | Particle Effects | World Access | Inventory Handling | Chat Commands | GUIs | Server-Client Networking | Monkey patching (Harmony)

Data Management

Savegame Data Storage | ModConfig File | Chunk Data Storage | Tree Attribute

Worldgen

WorldGen Concepts | Terrain | Ores | Trees | WorldGen API

Rendering

Shaders and Renderers

Property Overview

Item | Entity | Block | Block Behaviors | Block Classes | Block Entities | Block Entity Behaviors

Workflows & Infrastructure

Modding Efficiency Tips | Mod-engine compatibility | Mod Extensibility | Load Order

Additional Resources

List of server commands | List of client commands | Client startup parameters | Creative Starter Guide | ServerBlockTicking | Bot System | WorldEdit | Cinematic Camera

Example Mods | API Docs | GitHub Repository