Modding FAQ

File a bug report please, with logs for all cases.

Does your mod check is abyss mod is present?

    "depends" :
    
        "abyss"
    ],

Also try something like mod name prefx:

{ "amount": 5, "type": "abyss:abyssAbyssalCrab" } 

Thanks Marcon1 and Warmonger. I’ve tried all your solution but still wights on shipwrecks. That’s odd, because Macron’s peasants at Dwarven Treasury are present, but when I changed only “dwarvenTreasury” to “shipwreck” in this configuration, there’s no peasants in game, only wights!

Yes, I checked shipwreck in game, there are wights, because shipwreck is a object of type shipwreck, not of type creatureBank.
So code must be like this:

{
	"core:shipwreck": {
		"types": {


			"shipwreck": {

				"levels": {
					"chance": 40,
					"guards": {
						"amount": 50,
						"type": "peasant"
					}, {
						"amount": 50,
						"type": "peasant"
					}, {
						"amount": 50,
						"type": "peasant"
					}, {
						"amount": 50,
						"type": "peasant"
					}, {
						"amount": 50,
						"type": "peasant"
					}],
					"combat_value": 300,
					"reward": {
						"resources": {

							"gold": 15000
						},
						"artefacts": {
							"class": "TREASURE"
						}, {
							"class": "MINOR"
						}, {
							"class": "TREASURE"
						}, {
							"class": "MINOR"
						}],
						"value": 17000
					}
				}, {
					"chance": 40,
					"guards": {
						"amount": 60,
						"type": "peasant"
					}, {
						"amount": 60,
						"type": "peasant"
					}, {
						"amount": 60,
						"type": "peasant"
					}, {
						"amount": 60,
						"type": "peasant"
					}, {
						"amount": 60,
						"type": "peasant"
					}],
					"combat_value": 350,
					"reward": {
						"value": 20000,
						"resources": {

							"gold": 17000
						},
						"artefacts": {
							"class": "MAJOR"
						}, {
							"class": "MINOR"
						}, {
							"class": "MINOR"
						}, {
							"class": "MINOR"
						}]

					}
				}, {
					"chance": 20,
					"guards": {
							"amount": 60,
							"type": "peasant"
						}, {
							"amount": 60,
							"type": "peasant"
						}, {
							"amount": 60,
							"type": "peasant"
						},

						{
							"amount": 60,
							"type": "peasant"
						}, {
							"amount": 60,
							"type": "peasant"
						}
					],
					"combat_value": 450,
					"reward": {
						"value": 26000,
						"resources": {

							"gold": 20000
						},
						"artefacts": {
							"class": "MAJOR"
						}, {
							"class": "MINOR"
						}, {
							"class": "MINOR"
						}, {
							"class": "MAJOR"
						}]

					}
				}]
			},
}

You are right. Now, shiwrecks work as intended. Thank you gorgously :slight_smile:

How do I add new proper names for towns without replacing the pre-existing ones?

This is what I’ve got so far:

{
	"core:necropolis" :
	{
		"town" :
		{
			"names" : 
				// original names
				"Haunt's Wind",
				"Cessacioun",
				"Agony",
				"Sanctum",
				"Terminus",
				"Blackquarter",
				"Death's Gate",
				"Grave Raven",
				"Dark Cloud",
				"Coldsoul",
				"Coldreign",
				"Dark Eternal",
				"Ghostwind",
				"Blight",
				"Shadow Keep",
				"Worm Warren",
				// new names
				"Eljudnir", // The hall of Hel (the ruler of the dead in Norse mythology) in Niflheim; Source: Kevin Crossley-Holland, "The Norse Myths", 1980, p. 241.
				"Hvergelmir", // Spring in Niflheim from which the eleven rivers known as Elivagar flow; Source: Kevin Crossley-Holland, "The Norse Myths", 1980, p. 245.
				"Nastrond" // Place in Helheim (realm within Niflheim ruled by Hel) where a hall for evil-doers lies; Source: Kevin Crossley-Holland, "The Norse Myths", 1980, p. 248.
			],
		}
	}
}

This does the job, but isn’t optimal, since I have to repeat the original names. Is there a way to add new names to the “names” array instead of redefining it entirely?

I think it’s logical. You want to add names and the end of the existing list, so you you must copy/paste previous names and add yours at the end. On contrary - if you want to change third name for example, you copy entire list and change only this third name.

This is how json files are interpreted - named items (in quotation marks) replace the old ones. This way you can for instance clear entire list :wink:

All we could do here is to change town format so that every name would be separate item, without the list.

Ah, I see :frowning: Thanks for the explanation though!

The thing is that I wanted to make my mod 100% open-source.

Each name being a separate item sounds too cumbersome - how about adding a “new_names” array instead, which would add names to the “names” array instead of replacing the whole thing?

I hope vcmi team will keep the changes to modding format to minimum, only adding new fields :mrgreen:

Than change all names, rewriting standart names written in proprietary lods:-)

From few reasons I’m looking a way to add my creature +1 attack per turn during battle (so atack is +1 to base in first turn, +2 to base in second, +3 in third and so on…). I thought it’s possible only via new special spell.
So I wrote such creature ability:

			"casts" :
			{
				"type" : "CASTS",
				"val" : 20
			},
			"attackBooster":
			{
			"type" : "ENCHANTER",
			"subtype" : "spell.attackBooster",
			"val" : 1,
			"addInfo" : 1
			}

And here’s my spell atackBooster:

		"levels":
		{
			"base":
			{
				"power": 10,
				"aiValue": 20,
				"range": "0",
				"targetModifier":
				{
					"smart": false
				}
			},
			"none":
			{
				"description": "Attack",
	 
				"cost": 0,
				"effects":
				{
					"plusOneAttack":
					{
						"type": "PRIMARY_SKILL",
						"duration": "N_TURNS"],
						"val" : 1,
						"subtype" : "primSkill.attack",
						"valueType" : "ADDITIVE_VALUE"
					}
				}
			},
			"basic":
			{
				"description": "Attack",	 
				"cost": 0,
	 
				"effects":
				{
					"plusOneAttack":
					{
						"type": "PRIMARY_SKILL",
						"duration": "N_TURNS"],
						"val" : 1,
						"subtype" : "primSkill.attack",
						"valueType" : "ADDITIVE_VALUE"
					}
				}
			},
			"advanced":
			{
				"description": "Attack",
	 
				"cost": 0,
	 
				"effects":
				{
					"plusOneAttack":
					{
						"type": "PRIMARY_SKILL",
						"duration": "N_TURNS"],
						"val" : 1,
						"subtype" : "primSkill.attack",
						"valueType" : "ADDITIVE_VALUE"
					}
				}
			},
			"expert":
			{
				"description": "Attack",
	 
				"cost": 0,

				"effects":
				{
					"plusOneAttack":
					{
						"type": "PRIMARY_SKILL",
						"duration": "N_TURNS"],
						"val" : 1,
						"subtype" : "primSkill.attack",
						"valueType" : "ADDITIVE_VALUE"
					}
				}
			}

But, +1 attack is granted only fist turn, which is lame, becaure I can give my creature +1 attack permament. Is there any way to give prograssive +1 attack per turn?

Hmm, change duration from “N_TURNS” to “PERMANENT”? The disruption ray spell works quite similar.

Doesn’t work either :frowning:

I’ll leave it here to not left it just on slack: DISRUPTING_RAY is heavily hardcoded.
For now VCMI can’t handle duplicate bonuses.

Reasonable amount of work would be needed to make it work.

By the way, I have a question.
If i’ll set

{
"type":"SPELL_IMMUNITY",
"subtype":"spell.visions"
}

to hero, will it be immune to Visions spell?

No. Immunity for Vision is never checked.

No immunities do not work on adventure spells.

I wanted to introduce HotA’s Warehouses into VCMI. So I’ve written code:

{
	"warehouses" :{	
		"name": "Warehouses",
		"handler": "oncePerWeek",
		"types" : {
			"crystalWarehouse" : {
				"name": "Warehouse of Crystal",
				"producedResources" : "crystal",
				"producedValue" : 6,
				"rmg" : {
					"value"		: 500,
					"rarity"	: 70
				},
				"templates" : {
					"avwrhscr" : { "animation" : "avwrhscr", 
					"visitableFrom" :  "---", "+++", "+++" ], 
					"mask" : "0VV","VVV","VBA"], 
//					"allowedTerrains": "sand"]
					}					
				}
			}			
		}	
	}
}

In random maps object appears, can be visited but doesn’t produce anything… Any ideas what is wrong?

Nothing is wrong, adding objects with new properties is not supported.

But I suggested the example from wiki:
wiki.vcmi.eu/index.php?title=Obj … ype_format

In town section code “produce” is working, so I thought that “producedResources” and “producedValue” work too…