Modding:Asset System: Difference between revisions

From Vintage Story Wiki
No edit summary
(34 intermediate revisions by 4 users not shown)
Line 1: Line 1:
__FORCETOC__
Vintage Story loads most of its game content from so called assets. Those can be found inside the <code>assets</code> directory inside your [[Vintagestory folder]]. Things such as blocks, items, world generation, recipes, etc. are all loaded from assets during startup.


= Asset System =
These assets are easily modifiable and using the integrated mod system you can easily add your own stuff without having to mess with coding. You can also read some [[Basic Modding Examples|examples]] to learn about what you can do with it.
 
Vintage Story loads most of its game content from so called assets. Those can be found inside your [[Vintagestory folder]]. Things such as blocks, items, world generation, recipes, etc. are all loaded from assets during startup.
 
These assets are easily modifiable and using the integrated mod system you can add your own stuff without having to mess with coding.


== Categories ==
== Categories ==
Line 11: Line 7:
Here is an overview of categories:
Here is an overview of categories:
<table id="treeviewtable" class="table table-bordered tt-table" style='table-layout: fixed'>
<table id="treeviewtable" class="table table-bordered tt-table" style='table-layout: fixed'>
   <tr style='background-color: gray;'>
   <tr style=''>
     <th width='300' align='left'>Name</th>
     <th width='300' align='left'>Name</th>
     <th width='200' align='left'>Affects Gameplay</th>
     <th width='200' align='left'>Affects Gameplay</th>
Line 27: Line 23:
     <td>true</td>
     <td>true</td>
     <td>universal</td>
     <td>universal</td>
     <td>Blocks</td>
     <td>Defines all the blocks that are in the game</td>
   </tr>
   </tr>
   <tr>
   <tr>
Line 33: Line 29:
     <td>true</td>
     <td>true</td>
     <td>universal</td>
     <td>universal</td>
     <td>Items</td>
     <td>Defines all the Items that are in the game</td>
   </tr>
   </tr>
   <tr>
   <tr>
Line 45: Line 41:
     <td>true</td>
     <td>true</td>
     <td>universal</td>
     <td>universal</td>
     <td></td>
     <td>Contains some commonly used lists of properties</td>
   </tr>
   </tr>
   <tr>
   <tr>
Line 69: Line 65:
     <td>false</td>
     <td>false</td>
     <td>universal</td>
     <td>universal</td>
     <td>Blocks</td>
     <td>Contains the 3d models for all the items, blocks and creatures</td>
   </tr>
   </tr>
   <tr>
   <tr>
Line 93: Line 89:
     <td>true</td>
     <td>true</td>
     <td>server only</td>
     <td>server only</td>
     <td>Recipes for all kinds of machinery</td>
     <td>The crafting, knapping, smithing and clay forming recipes</td>
   </tr>
   </tr>
   <tr>
   <tr>
Line 99: Line 95:
     <td>true</td>
     <td>true</td>
     <td>server only</td>
     <td>server only</td>
     <td></td>
     <td>How metals can be combined to create alloys</td>
   </tr>
   </tr>
   <tr>
   <tr>
Line 105: Line 101:
     <td>true</td>
     <td>true</td>
     <td>server only</td>
     <td>server only</td>
     <td>Recipes for Workbench</td>
     <td>Recipes for 3x3 grid crafting</td>
   </tr>
   </tr>
   <tr>
   <tr>
Line 111: Line 107:
     <td>true</td>
     <td>true</td>
     <td>server only</td>
     <td>server only</td>
     <td></td>
     <td>Recipes for smithing on the anvil</td>
   </tr>
   </tr>
   <tr>
   <tr>
Line 117: Line 113:
     <td>true</td>
     <td>true</td>
     <td>server only</td>
     <td>server only</td>
     <td></td>
     <td>Contains all the configuration for world generation</td>
   </tr>
   </tr>
   <tr>
   <tr>
Line 123: Line 119:
     <td>true</td>
     <td>true</td>
     <td>server only</td>
     <td>server only</td>
     <td></td>
     <td>Defines how the terrain should look and with what it should be decorated with</td>
   </tr>
   </tr>
   <tr>
   <tr>
Line 129: Line 125:
     <td>true</td>
     <td>true</td>
     <td>server only</td>
     <td>server only</td>
     <td></td>
     <td>Defines the shapes of trees</td>
   </tr>
   </tr>
   <tr>
   <tr>
     <td scope="row"><div class="tt" data-tt-id="p_entities" data-tt-parent="root">entities</div></td>
     <td scope="row"><div class="tt" data-tt-id="p_entity" data-tt-parent="root">entity</div></td>
     <td>true</td>
     <td>true</td>
     <td>server only</td>
     <td>server only</td>
     <td>Entities</td>
     <td>Creatures and other entities</td>
   </tr>
   </tr>
   <tr>
   <tr>
Line 141: Line 137:
     <td>false</td>
     <td>false</td>
     <td>client only</td>
     <td>client only</td>
     <td></td>
     <td>Contains GLSL source code, that defines how the game is rendered</td>
   </tr>
   </tr>
   <tr>
   <tr>
Line 147: Line 143:
     <td>false</td>
     <td>false</td>
     <td>client only</td>
     <td>client only</td>
     <td></td>
     <td>Contains GLSL source code, that defines how the game is rendered</td>
   </tr>
   </tr>
   <tr>
   <tr>
Line 153: Line 149:
     <td>false</td>
     <td>false</td>
     <td>client only</td>
     <td>client only</td>
     <td></td>
     <td>Contains all the graphics of the game</td>
   </tr>
   </tr>
   <tr>
   <tr>
     <td scope="row"><div class="tt" data-tt-id="p_textures_blocks" data-tt-parent="p_textures">blocks</div></td>
     <td scope="row"><div class="tt" data-tt-id="p_textures_blocks" data-tt-parent="p_textures">block</div></td>
     <td>false</td>
     <td>false</td>
     <td>client only</td>
     <td>client only</td>
Line 162: Line 158:
   </tr>
   </tr>
   <tr>
   <tr>
     <td scope="row"><div class="tt" data-tt-id="p_textures_item" data-tt-parent="p_textures">decal</div></td>
     <td scope="row"><div class="tt" data-tt-id="p_textures_items" data-tt-parent="p_textures">item</div></td>
     <td>false</td>
     <td>false</td>
     <td>client only</td>
     <td>client only</td>
     <td>Item textures</td>
     <td>Item textures</td>
  </tr>
  <tr>
    <td scope="row"><div class="tt" data-tt-id="p_textures_decal" data-tt-parent="p_textures">decal</div></td>
    <td>false</td>
    <td>client only</td>
    <td>Decaltextures</td>
   </tr>
   </tr>
   <tr>
   <tr>
Line 201: Line 203:
     <td>false</td>
     <td>false</td>
     <td>client only</td>
     <td>client only</td>
     <td></td>
     <td>The games music tracks and its configuration</td>
   </tr>
   </tr>
   <tr>
   <tr>
Line 207: Line 209:
     <td>false</td>
     <td>false</td>
     <td>client only</td>
     <td>client only</td>
     <td></td>
     <td>Contains some of the dialog layouts</td>
   </tr>
   </tr>
</table>
</table>


= Domains =
= Domains =
Line 215: Line 218:
Domains are used to separate mod added content from the original one. Basically a domain is a prefix for any given code (identifier for item, block, etc.) or path (textures, sounds, etc.). VintageStory itself has its own prefix <code>game</code>.
Domains are used to separate mod added content from the original one. Basically a domain is a prefix for any given code (identifier for item, block, etc.) or path (textures, sounds, etc.). VintageStory itself has its own prefix <code>game</code>.


So if you want to create a new block to game, which uses the original leather texture, you would have to specify the domain (since your block has a different one). So instead of using  <code>assets/textures/blocks/leather.png</code>, you would have add the prefix for the domain <code>game:assets/textures/blocks/leather.png</code>.
When [[Mod Packaging|packaging a mod]] you specify a domain by placing a directory inside the mod <code>assets</code> directory with all your mod assets inside. The name of your domain directory will be the "current domain" for all assets inside it. If no domain has been specified in an asset code the game will assume it is in the current domain, meaning you only have to add a domain prefix if you want to refer to something outside the current domain.


If no domain has been specified it will refer to the current domain. Meaning you only have to add a domain prefix if you want to refer to something outside the current domain.
For example, if you want to create a new block which uses the original leather texture, you would have to specify the domain (since your block has a different one). Instead of using  <code>assets/textures/blocks/leather.png</code>, you would have add the prefix for the domain <code>game:assets/textures/blocks/leather.png</code>.


= Mods =


A mod (most likely a zip file) can be installed by coping the file into your mods folder inside your [[Vintagestory folder]].
== Overwriting assets ==
 
== Creating your own domain ==
 
In order to make the game load your own assets, you have to create a zip file, which has to have a similar structure as the assets folder of Vintagestory. The only difference is the domain folder, which is located below the assets directory and allows you to either create a new domain or refer to existing ones.
If you want to create a new block for example you can use your own domain <code>assets/mymoddomain/blocktypes/myblock.json</code>. In this case the folder <code>mymoddomain</code> specifies the domain and therefore the prefix for the code of the added block is <code>mymoddomain:myblock</code>.
 
== Overwriting game assets ==


There are no limitations to the system. So you can overwrite assets from Vintagestory itself by using the <code>game</code> domain folder.
There are no limitations to the system. So you can overwrite assets from Vintagestory itself by using the <code>game</code> domain folder.


To overwrite the bed blocktype you can put your own version inside your mod file with the following path: <code>assets/game/blocktypes/bed.json</code>. Vintagestory will now load your json file instead of the original one.
To overwrite the bed blocktype you can put your own json flie inside your mod zip archive with the following path: <code>assets/game/blocktypes/bed.json</code>. So Vintagestory will load your json file instead of the original one.
 
= Resourcepacks =
 
== The idea behind it ==


Resourcepacks should be able to overwrite assets of Vintagestory and mods, but shouldn't affect gameplay.
Theme packs can only override assets that do not effect game mechanics, the other mod types can override any asset.


== Install a resourcepack ==
{{Navbox/modding|Vintage Story}}

Revision as of 15:57, 6 October 2018

Vintage Story loads most of its game content from so called assets. Those can be found inside the assets directory inside your Vintagestory folder. Things such as blocks, items, world generation, recipes, etc. are all loaded from assets during startup.

These assets are easily modifiable and using the integrated mod system you can easily add your own stuff without having to mess with coding. You can also read some examples to learn about what you can do with it.

Categories

Here is an overview of categories:

Name Affects Gameplay Side Type Usage
AssetCategory
blocktypes
true universal Defines all the blocks that are in the game
itemtypes
true universal Defines all the Items that are in the game
lang
false universal Translation
worldproperties
true universal Contains some commonly used lists of properties
abstract
true universal
block
true universal
sounds
false universal Sounds
shapes
false universal Contains the 3d models for all the items, blocks and creatures
block
false universal Shapes for blocks
entity
false universal Shapes for entities
item
false universal Shapes for items
recipes
true server only The crafting, knapping, smithing and clay forming recipes
alloy
true server only How metals can be combined to create alloys
grid
true server only Recipes for 3x3 grid crafting
smithing
true server only Recipes for smithing on the anvil
worldgen
true server only Contains all the configuration for world generation
terrain
true server only Defines how the terrain should look and with what it should be decorated with
tree
true server only Defines the shapes of trees
entity
true server only Creatures and other entities
shaders
false client only Contains GLSL source code, that defines how the game is rendered
shaderincludes
false client only Contains GLSL source code, that defines how the game is rendered
textures
false client only Contains all the graphics of the game
block
false client only Block textures
item
false client only Item textures
decal
false client only Decaltextures
entities
false client only Entities textures
environment
false client only Environment textures (Sky, Moon, Sun, etc.)
gui
false client only Gui textures
hud
false client only Hud textures
particle
false client only Particle textures
music
false client only The games music tracks and its configuration
dialog
false client only Contains some of the dialog layouts


Domains

Domains are used to separate mod added content from the original one. Basically a domain is a prefix for any given code (identifier for item, block, etc.) or path (textures, sounds, etc.). VintageStory itself has its own prefix game.

When packaging a mod you specify a domain by placing a directory inside the mod assets directory with all your mod assets inside. The name of your domain directory will be the "current domain" for all assets inside it. If no domain has been specified in an asset code the game will assume it is in the current domain, meaning you only have to add a domain prefix if you want to refer to something outside the current domain.

For example, if you want to create a new block which uses the original leather texture, you would have to specify the domain (since your block has a different one). Instead of using assets/textures/blocks/leather.png, you would have add the prefix for the domain game:assets/textures/blocks/leather.png.


Overwriting assets

There are no limitations to the system. So you can overwrite assets from Vintagestory itself by using the game domain folder.

To overwrite the bed blocktype you can put your own json flie inside your mod zip archive with the following path: assets/game/blocktypes/bed.json. So Vintagestory will load your json file instead of the original one.

Theme packs can only override assets that do not effect game mechanics, the other mod types can override any asset.

Icon Sign.png

Wondering where some links have gone?
The modding navbox is going through some changes! Check out Navigation Box Updates for more info and help finding specific pages.