This in part overlaps with #517 and #819 but extends the scope.
Currently it is a bit frustrating to work with randomly chosen groups. They are hard to reference, there is no way to trigger defeated events, it is hard to reinforce them, there is no way to exclude them from spawn events (which can lead to multiple spawnings of the same group) and there is no way to remove them.
A possibility to make all this possible would be a new option for spawning events, for example "group". It could work this way:
;adding the group option to a spawn group
[SpawnOpenGroup1]
traitpool=dark
group=OpenGroup1
;using the groupname to exclude the group from being spawned when another random group is spawned
[SpawnOpenGroup2]
monster=OpenGroup1
traitpool=dark
group=OpenGroup2
;using the groupname to trigger defeated events
[EventGroupDefeated]
trigger=MonsterDefeatedOpenGroup1
;using the groupname to spawn reinforcements
[SpawnOpenGroupReinforcements]
monster=OpenGroup1
;using the groupname to remove the group
[EventRemoveGroup]
remove=OpenGroup1
I hope something like this could be implemented, as most of these things currently require complex workarounds or aren't possible at all.
Edit: After countless tries of using traitpool based spawns (with any kind of workaround I could think of) I really have to say that the current implementation is unusable, This is in part related to #821, but even if this would work, you could only use 1 traitpool based spawn max per quest, because there currently is no way to prevent the 2nd traitpool based spawn from being a duplicate of the first one. It would be really helpfull if a fix for this could be prioritized.
Edit 2: I'd also strongly suggest to add the trait "lieutenant" to lieutenants, and the trait "monster" to monsters as a way to differentiate between them.
After some discussions with Xyphistor and @DelphiDie, I understand the only thing required here is the monster name once it is selected.
I guess accessing it in events text via a variable {c:monsterGroupName} would be good enough for all your events ?
I have some questions here, please keep in mind I have not much experience with Descent (played 3 games), and even less experience with the Valkyrie editor for Descent.
Do not be afraid to give too much info :)
I want to understand what should be modified, and what should be created from scratch.
We may need to split this issue into different issues, or to have one master issues to organize the requests.
A simple test scenario is always welcome to help me understand how things are today.
;using the groupname to exclude the group from being spawned when another random group is spawned
Did you give a try to the test version of 2.2 ?
;using the groupname to trigger defeated events
Does this trigger on defeat already exists ?
;using the groupname to spawn reinforcements
How do you spawn reinforcements of a custom monster group ?
Can't you use the custom Monster object ?
;using the groupname to remove the group
How do you remove a group right now ?
Can't you use the custom Monster object ?
Hello @BenRQ,
I retrofitted one of our campaign scenarios as a demo to explain certain things. I'll elaborate on your questions later and refer to the code of this scenario. I tried to keep it as simple as possible.
Random Monster Group issue 1: Triggering defeated events
In the demo scenario, the first spawn is a merriod group (spawns.ini, Event SpawnMerriods11A).
In this scenario the second part of the map is revealed once this group is defeated (through events.ini, [EventDefeatMerriodGroup]).
This is currently not possible with random spawns, because the triggering condition has to refer to a certain monster type, in this case the Merriods (In the event [EventDefeatMerriodGroup], trigger=DefeatedMonsterMerriod).
If I would spawn a random monster group based on traits, there is no way to anticipate the monster type, which makes this trigger useless.
My whole suggestions hinges on this point. I'd appreciate it, if there was a way to manually add an identifier to random group spawns, which would allow to reference them later.
An example for a random group spawn would be in spawns.ini in the Event [SpawnReinforcementsOpenGroup1]. My idea would be to add a new option to random group spawns, (for example group=OpenGroup1), which then could be used to trigger defeated events (an example would be to change the trigger=DefeatedMonsterMerriod to trigger=DefeatedOpenGroup1).
Random Monster Group issue 2: Spawning reinforcements at different locations
Spawning reinforcements for random groups is pretty inflexible at the moment, because xou have to use the same spawning event which is used for the initial spawn, to get the same monster type.
This however limits reinforcements to the initial spawn point, as the position is hard coded in the spawn event. An example would be [SpawnReinforcementsOpenGroup1] in spawns.ini. xposition and yposition can't be modified later on.
This of course isn't an issue with regular monster spawns, as you can use separate events for initial spawns and later reinforcements.
If the suggested group option would be implemented, this could be used to spawn reinforcements for random groups via different events. An example would be to use a regular spawn, and using the group identifier as monster option. Example: monster=OpenGroup1
Random Monster Group issue 3: Removing randomly spawned groups
For regular monster groups an event can make use of the remove option, to remove a certain monster group from the monster tracker. The problem with random spawns is pretty much the same as with the defeated trigger, since you can not anticipate which monster type you have to remove.
If this option would also work with the group identifier, the problem would be solved. Example: remove=OpenGroup1,
Here are some direct answers to your questions:
**Did you give a try to the test version of 2.2 ?
This is working fine, but it still requires calling the same spawn event, which means the monster reinforcements can't be placed at different locations.
Does this trigger on defeat already exists ?
Yes, the trigger can be used to trigger events via this option: trigger=DefeatedMonster{Type}
How do you spawn reinforcements of a custom monster group ?
There are multiple ways to spawn monsters. Either through MPlace (these have to be defined and are shown on the map), or through spawning at a certain xpositon,yposition.
An example for custom monster reinforcements would be in spawns.ini in the event [SpawnReinforcementsGoblinArchers].
Can't you use the custom Monster object ?
Just for clarity, there are essential 3 kinds of monster groups that can be spawned:
Regular spawns: These are defined in events by the option monster=Monster{Type}. These monsters will use standard activations and can't be customized. An example would be in spawns.ini [SpawnMerriods11A]
Custom spawns: These are based on regular spawns, but have to be defined manually. An example would be monsters.ini [CustomMonsterGoblinThief], which is then spawned by spawns.ini [SpawnReinforcementsGoblinArchers]. The whole point of these is to get allow for custom monster activations.
Random spawns: There are usually just defined by traits and use regular activations. If more than one random monster group is used in a quest, these may not be duplicates of other random spawns, regular spawns or custom spawns (which seems to work with 2.2). An example would be in spawns.ini [SpawnReinforcementsOpenGroup1]
To answer your question: Since custom monster groups have to be pre-defined types, these can be used to reinforce random spawns, since you can't anticipate which monster group you will get beforehand.
How do you remove a group right now ?
This is done by the option remove=Monster{Type}. There is no example in the quest, but it's pretty straight forward.
Can't you use the custom Monster object ?
Since random spawns and custom spawns are 2 separate things (which both have different use cases), custom monsters won't be adequate to get the desired functionality.
Thank you for all the explanations, I understand what you want a lot better.
Now I need to dig into the code, and see what can be done.
I don't know this part of the code yet, so I will probably need a few days before I can confirm what can be done, and if some / all of it can be part of 2.2.
In the meantime, people will have some time to test the latest test release :)
So after a bit of thinking, I understand you want to provide an ID to a random spawned group, to be able to control that group later on.
Control means: reinforce, trigger on defeat, remove
My first idea for a proposal :
"Random spawned group" are just regular Spawn components, and spawn component have a unique ID.
We could use that ID to identify that group, no need to create another ID.
For example in trigger (I separated the 3 kinds of monster in the filter for clarity here, we can keep it or not) :

For "Delete", you can already delete a spawn component.
Why don't you use this? Is not doing what you want ?
Same thing for reinforcements, you can select a spawn into the "monster type" of a spawn.
Why don't you use this? Is not doing what you want ?
Moving this to 2.4 as we want a very fast release of 2.3
I have created another demo scenario to show what's currently not working.
The scenario is based on the mission "The Dawnblade" from the "Shadow Rune"-campaign.
The mission normally contains 3 open groups. I could not find a way to use 3 groups. Instead I had to make the first open group a custom monster group (cave spiders).
The rules for this mission say:
Place 1 open group on the sewers. The other 2 open groups are not placed during setup, but are availabel as reinforcements.
Reinforcement rules:
At the start of each overlord round, he may place 1 monster on each entrance, exit and the ray of sunlight field. Each monster must be from a different monster group, respecting group limits.
The start event will trigger the placement of the open group. I had to make it to a non open group of custom monster cave spiders. Currently there is no way to change the spawn text of a random mosnter group.
Therefore currently we have to use a non random monster group because using this group we can make multiple different spawn events.
Edit: The event wiki docu says something about {c:<CustomMonsterComponent>} as a placeholder. Could this placeholder maybe be used to get the group name of a random spawn in another event?
Just entering the complete SpawnEvent name did not seem to work:


Thank you @MrTantum , I will have a look at this point with these new informations.
Hi @MrTantum ,
In your reinforcement spawn, you can use the first spawn id as a type of creature.
Then you can use {type} to know its name in another event, with a different text.
Example :
Spawns:
[SpawnStartOpenGroup1]
xposition=5
yposition=-1
buttons=1
event1=
traits=dark
[SpawnReinforceOpenGroup1]
monster=SpawnStartOpenGroup1
I removed many things in your example to get what I wanted, which is one reinforcement of the first kind of monster generated and it works.
Here it is if it can help.
Reinforcing random monster groups seems to be working by using this method. It's even possible to specify different locations by setting different positions in the other spawn event.
I'm a bit curious. Has this always worked, or was this a change in on of the last releases? I'm pretty sure I tried exactly this with older releases to no avail.
I don't think I changed anything on that part since 2.2.
2.2 had many things so maybe there was a change of behaviour on this.
Well it's good to have an easy solution on this old issue :)
Can we close this issue or is there more to it ?
Unfortunately reinforcements are just a small part of the issue. The real problem is still, that there is no direct way to interact with randomly spawned monsters (trigger defeated events, removing them from the map or creating custom activations for them).
Thanks BenRQ! Your demo looks good and I can work with that.
But as DelphiDie said the other problems still exist.
trigger defeated events with randomly spawned monsters
I've added a way to do this, by selecting the spawn event as a trigger.
I also took this opportunity to separate customMonster and Monster so it's easier to select a trigger.
Here is what it looks like :


This should solve your problem.
@scrubbless , @antontimmermans this could be of interest to you too and documented in the tutorial when available.
removing them from the map
This issue is addressed in this issue : #594
I would prefer to follow it on this old topic as it is a specific change.
or creating custom activations for them
This one sounds quite tough to fix.
It would mean that a random monster can have specific activations.
If I understand this correctly, it's a customMonster with fixed capacity / activations but with a random picture (and minis to use).
To you have a real life example on this one ?
Thanks @BenRQ , the first option seems to be exactly what we need. I guess this is a development version of yours? It doesn't seem to work in 2.3.0.3 yet.
Regarding the second issue: I think #594 might be overcomplicating it.
If the remove command could simply be expanded to also accept the spawn name (similar to the defeated trigger), and this issue would be solved.
Regarding custom activations:
A good real life example would be a quest from Descent Labyrinth of Ruin called Heart of the Wild:
In it you can select an open monster group which has the trait cursed (an in game example would be a random monster spawn by the trait cursed).
During the quest, each monster of this group can be sacrifized, once it reaches a certain location (for this we would need custom activations for randomly spawned groups, to make sure they try to move to the location they need to be on, instead of following their default activations).
Once sacrifized, it would also be great to have a way to remove the group from play automatically via an event (this is why we need the remove command to work with random spawns).
As I already laid out in one of my previous posts, there are currently 3 different types of monster spawns:
Regular spawns: These are defined in events by the option monster=Monster{Type}. These monsters will use standard activations and can't be customized. An example would be in spawns.ini [SpawnMerriods11A]
Custom spawns: These are based on regular spawns, but have to be defined manually. An example would be monsters.ini [CustomMonsterGoblinThief], which is then spawned by spawns.ini [SpawnReinforcementsGoblinArchers]. The whole point of these is to get allow for custom monster activations.
Random spawns: There are usually just defined by traits and use regular activations. If more than one random monster group is used in a quest, these may not be duplicates of other random spawns, regular spawns or custom spawns (which seems to work with 2.2). An example would be in spawns.ini [SpawnReinforcementsOpenGroup1]
I think a possible solution would be to create a 4th type of monster spawn:
Random custom spawns: These monsters should inherit all of their stats (picture, name, info) from the randomly selected spawn, but they should be able to follow custom activations.
Let's say I spawn a [SpawnCustomRandomMonsterSmallRanged] by using the traits small and ranged. Using just the base game the random spawn could either be a goblin archer or a flesh moulder. Then I would only need to be able to create a custom activation, which is based on the spawn event, for example:
[CustomRandomMonsterSmallRangedActivation]
base=SpawnCustomRandomMonsterSmallRanged
activation=SmallRangedActivation1
health=0
healthperhero=0
I think this would completely solve all the issues I can currently think of with random monster spawns.
Regarding the second issue: I think #594 might be overcomplicating it.
I will look into it, but I prefer one good solution rather than small fix on this.
In it you can select an open monster group which has the trait cursed (an in game example would be a random monster spawn by the trait cursed).
Thank you for the example, it helped me focus on a specific case.
There is an existing solution for this case, and hopefully all your cases (it took me while to find it though).
Step 1 : Create a spawn event with trait cursed, and select all standard monster with that traits
[SpawnCursedWithCustomActivation]
xposition=0
yposition=0
buttons=1
event1=
monster=MonsterZombie MonsterFleshMoulder MonsterHellhound MonsterShade
traitpool=cursed
Step 2: Create a specific activation, in my example it is called "ActivationCursed"
Step 3: Create customMonsters based on the 4 "cursed monster", and assign the activation cursed
[CustomMonsterCursedZombie]
base=MonsterZombie
activation=Cursed
health=0
healthperhero=0
horror=0
awareness=0
[CustomMonsterCursedFleshMoulder]
base=MonsterFleshMoulder
activation=Cursed
[ActivationCursed]
The app will look for monster with traits cursed, and standard monster are excluded. So it will take your custom monster
See the example attached:
RandomSpawnDemo_RandomCustomActivation.zip
Hello BenRQ,
thanks for the input, but I don't think your example will work as described.
I did some test with your example, and it seems to be a possible workaround for the time being, but it has a few caveats.
Unfortunately it will require a lot of manual work to implement activations for all possible monsters (there are for example 20 monsters with the trait cursed if all expansions are activated). If you use 2, 3 or even 4 traits as the traitpool (which are often present in some of the quests), you might have to create about 40 custom monsters each quest to catch every possiblity.
I guess this can be reduced to a more manageable number by using multiple traits while spawning (for example cursed melee), but it's still a lot to look up.
There might also be a problem if you want to use a certain manually spawned custom monster in a quest, which would also be a legal random spawn because of its traits. This will be complicated to work around.
After some tests I also found another problem when using multiple random spawns in the same quest. I made 2 spawns, civilized ranged and cursed ranged. In both cases only Flesh moulders would qualify as a group in the base game, and I got a double spawn (which shouldn't happen).
The system also breaks down if you need 2 different random spawns with different activations, that have overlapping traits. You would have to create 2 different custom monsters of the same type (lets say one FleshMoulder who can be spawned by cursed, and another one who can be spawned by civilized) with different activations each, but this does not seem to work.
But anyway this at least seems to be somewhat usable as long as you keep all these things in mind and build around them. Thanks for sharing this.
trigger defeated events with randomly spawned monsters
I've added a way to do this, by selecting the spawn event as a trigger.
I also took this opportunity to separate customMonster and Monster so it's easier to select a trigger.This should solve your problem.
@BenRQ @redwolf2 Is this change already in 2.3.04? I need this function for one of the shadow rune missions (the objective is to defeated all monster including one random group). I could not make it work therefore I presume it is not added yet.
@MrTantum You are right, it is not added yet.
Just for not forgetting this myself: The "Shadow Rune" has currently three missions implemented which would need the "Spawn Defeated"-triggers.
Blood Of Heroes:
Defeated Event for Spawn "OpenGroup"
The Wyrm Rises:
Defeated event for Spawns "Open Groups 1-4"
The Wyrm Turns 2:
Defeated Event for Spawn "Belthir"
Edit:
This can also be used for:
Fat Goblin 1:
Defeated Event for Spawn "OpenGroup"
Castle Daerion:
Defeated Event for Spawn "OpenGroup 1-3"
Currently instead a non random monster is used respectively an event at the end of the round to ask the player if the open groups are dead.