Modding FAQ

Oh, man. It works like hell with propagator BATTLE_WIDE (icon retreat is inactive)!

So one more question. Is any way to show such exotic abillities in creature window? In creature format there’s no info about code to add new pcx and new infos…

Not really. Some info can be added via config\bonuses_texts.json, but images are more complicated.

Also keep in mind that orginal hero / artifacts bonuses would look odd on creatures.

I keep in mind. But giving neutral creatures such odd abilities I want to make battles with them more interesting/challenging and worth considering to hire them to the army. Some results you’ll see for few weeks, I hope:)

Command “dice” - in what purposes I can use it? I can’t see any ‘manual’ for it…

In what context?

Er… my english :frowning:
I ask in which contexts dice can be used and how this formula works.

It’s only used here, but I not exactly understand if this code actually doing anything:
github.com/vcmi/vcmi/blob/devel … or.cpp#L51

  1. Two rewards with same “dice” have same random value. This allows to create mutually exclusive and independent rewards.
  2. It is not used in any objects configuration yet.
  3. for now it actually may be used in mods only for new map objects for vcmi map format.

Ok, another question. I want to modify standard H3 creature banks. For example, I want to place in shipwrecks some Abyss creatures than Wights. I tried various ways, but I failed…
Like this:

{
	"core:creatureBank" : {
		"types" : {

			"core:shipwreck" : {
				"levels": 
					{
						"chance": 25,
						"guards": 
							{ "amount": 5, "type": "abyssSandCrab" },
							{ "amount": 5, "type": "abyssAbyssalCrab" },
							{ "amount": 5, "type": "abyssAbyssalCrab" },
							{ "amount": 5, "type": "abyssSandCrab" },
							{ "amount": 5, "type": "abyssAbyssalCrab" }
						],
						"combat_value": 31,
						"reward" : {
							"value": 2000,
							"resources":
							{
								"gold" : 2000
							}
						}
					},

Or this:

{
	"core:creatureBank" : {
		"types" : {

			"shipwreck" : {
				"levels": 
					{
						"chance": 25,
						"guards": 
							{ "amount": 5, "type": "abyssSandCrab" },
							{ "amount": 5, "type": "abyssAbyssalCrab" },
							{ "amount": 5, "type": "abyssAbyssalCrab" },
							{ "amount": 5, "type": "abyssSandCrab" },
							{ "amount": 5, "type": "abyssAbyssalCrab" }
						],
						"combat_value": 31,
						"reward" : {
							"value": 2000,
							"resources":
							{
								"gold" : 2000
							}
						}
					},

Or this:

{
	"creatureBank" : {
		"types" : {

			"core:shipwreck" : {
				"levels": 
					{
						"chance": 25,
						"guards": 
							{ "amount": 5, "type": "abyssSandCrab" },
							{ "amount": 5, "type": "abyssAbyssalCrab" },
							{ "amount": 5, "type": "abyssAbyssalCrab" },
							{ "amount": 5, "type": "abyssSandCrab" },
							{ "amount": 5, "type": "abyssAbyssalCrab" }
						],
						"combat_value": 31,
						"reward" : {
							"value": 2000,
							"resources":
							{
								"gold" : 2000
							}
						}
					},

I’m lack of ideas…

Strange…
I made test json for dwarven treasury:

{
	"core:creatureBank": {
		"types": {


			"dwarvenTreasury": {

				"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"
						}]

					}
				}]
			},
}

And it works, on visiting dwarven treasury I see peasants, many of them

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:-)