PDA

View Full Version : Monster levels


Bluddy
11-15-2011, 11:51 AM
Shadow, I've noticed 2 things about monster levels that I'm curious about:

1. Monsters of the same archetype are usually spread out over a fairly small range of levels. Type levels of, say, 6,8,9,11,17 is a common spread. Was there a reason for such a small spread vs. spreading them out more fully over the game e.g. 6, 15, 28, 35, 52?
2. Some monsters, such as totems, have a minlevel of 12 and a maxlevel of 30, but they appear on much higher levels and have corresponding HP. How does that work?

Shadow
11-17-2011, 11:10 AM
The levels you are seeing are essentially restricted to between 1 and 30 because in higher difficulty levels the level will automatically get bumped up by that difficulty's minimum level. So a monster that normally has levels of 6,8,9,11, and 17 will be 31, 33, 34, 36, and 42 in champion difficulty.

Bluddy
11-17-2011, 11:53 AM
Oh I see. But what does that mean in terms of monsters in the game? What does it mean then that orc1 is level 1, orc2 is level 5 etc? Does it mean that I'll only start seeing orc2 at level 5, and then once I reach level 25, I won't start seeing orc2's until I get to level 30 ie. does level here mean the minimum level a monsterType can appear in?

Shadow
11-17-2011, 01:44 PM
Oh I see. But what does that mean in terms of monsters in the game? What does it mean then that orc1 is level 1, orc2 is level 5 etc? Does it mean that I'll only start seeing orc2 at level 5, and then once I reach level 25, I won't start seeing orc2's until I get to level 30 ie. does level here mean the minimum level a monsterType can appear in?

That does mean you will only see that particular orc type at level 5, 30, 55, and 80. The levels can vary a little bit though.

Bluddy
11-17-2011, 02:11 PM
That does mean you will only see that particular orc type at level 5, 30, 55, and 80. The levels can vary a little bit though.

1. How much can they vary? I've seen a variation of up to 3 I think.
2. What happens with all the types that spawn at levels > 25, which is where the difficulty level switches? Will you only see those types if you keep playing at the lower difficulty level past the switch point, or if you go down to deep dungeon levels at around level 25 towns?
3. How would it affect things if instead of giving exact levels to monster types, I gave ranges? So for example Creeping Brood would be from 5-11 instead of just being 5, and Lurking Brood would be from 11-16 instead of just being 11 etc.

Shadow
11-17-2011, 06:21 PM
1) Usually only 1 level down or the same level, except if the level specifies a DesiredMonsterSpawn (then it is -4 to +2). This is all controlled by MinMonsterLevelOffset, MaxMonsterLevelOffset, MinDesiredMonsterLevelOffset, and MaxDesiredMonsterLevelOffset in world.gdb.
2) The starting point switches at level 25 but a normal difficulty world can get to level 30 at the deepest part of the dungeon.
3) In theory it should work, like you said the Totems work like that.

Bluddy
11-17-2011, 06:46 PM
Does Max/MinDesiredMonsterLevelOffset affect Min/MaxLevel (like in totems) or does it just affect Level?

Also, if I may ask, what was the reason for staggering monsters over specific levels in this way?

Shadow
11-17-2011, 07:16 PM
Does Max/MinDesiredMonsterLevelOffset affect Min/MaxLevel (like in totems) or does it just affect Level?

Also, if I may ask, what was the reason for staggering monsters over specific levels in this way?

It doesn't effect the monster levels exactly, it just controls what level monsters can show up in any specific level.

We stagger monsters so every monster type can't show up in level 1 (or any other specific level) and so we can have low level monsters (Torva) and high level monsters (Chaos Lords).

Bluddy
11-18-2011, 08:06 AM
1. What about dimensional gates? They have a range of level 5 to 100. How does that work with the system of adding 25 per difficulty level?
2. How does the availability of monsters at certain levels affect spawn chance calculations? Let's say monster X can't spawn in level 5. Will X's spawnChance be counted when calculating probabilities for level 5, or will it not be counted?
3. I guess I'm confused about how spawning works in general. Here's how I imagine the process to be:
a. NumMonsterTypesToUse monsters are chosen per dungeon level out of the available monsters at that level and using the InitChance of monsters (which is almost always 1).
b. Those monsters are initialized throughout the level given the density desired.
c. Monsters are spawned as they die based on their SpawnChance, from the pool of monsters available at that level without regard for the monsters chosen initially...? (I thought only the 4 monster types chosen could spawn, but then MonsterFog, TemporalFlux etc would never spawn).
Is this the process or am I getting something wrong?

BTW I'm pretty certain there's something wrong with Scree spawning and I can't figure out what it is. They should be spawning almost as commonly as imps, but I almost never see them in the game. I'm not sure if I've ever seen them spawn, and I definitely haven't seen them in the early levels where they're supposed to be.

EDIT: OK figured it out. ArchetypeFiend is missing in world.gdb.

Shadow
11-18-2011, 11:17 AM
1) The range for dimensional gates should probably be 5 to 30 like the totems, although I would guess that 5 to 100 ends up working the same way.
2) Their spawn chance will be ignored in levels that they can't spawn in.
3) It does pick a few initial monster types and sticks to just those types unless a quest forces a new type to be spawned. The reason that you also get things like MonsterFog is because they are specified using ObjectSpawn instead of MonsterSpawn in world.gdb or world2.gdb.

The scree will be fixed in 1.025. I guess everyone gets a new (kind of) monster in the next patch.

Bluddy
11-18-2011, 12:38 PM
OK thanks for the clarifications. I just want to make sure I understand the spawn system fully. Tell me if anything here is wrong:

1) MonsterLevelsFromDepth 0.6 determines that for every floor of the dungeon, the dungeon floor level goes up by 0.6.
2) The initial spawn system uses InitChance, and narrows down the monster types to 4 from the monsters available at the dungeon level, spawning monsters, objects and traps using their chances per block. This initial spawning does not use SpawnChance.
3) If there's a quest on that level, the active spawn system goes into effect, replacing dead monsters according to a timer (as discussed above) and this spawn system can draw on any monsters in the range of the level (which is -1 or 0 for regular monsters, and -4 or +2 for desired monsters).
4) Monsters are spawned in the active spawn system using their SpawnChance.
5) The level of the monsters spawned is not changed from what is specified in MonsterTypes.gdb. What can change using Min/MaxMonsterLevelOffset is which dungeon floors they spawn in.

The only curious thing I've seen is that there was a level that had a level 20 creature and a level 26 other creature, and I'm pretty sure neither creature was a Desired monster for that dungeon.

Shadow
11-18-2011, 02:37 PM
That sounds about right except objects/traps don't do the pick 4 things and only spawn those part.

Off hand I can't explain a 6 level difference. There are other things like quests that can change this a little but what you wrote is most of it.

Bluddy
11-19-2011, 07:46 PM
OK so now that I understand the spawn systems, I have a couple of comments.

I think the system isn't as randomized as it could be. Specifically, I'm talking about the limitation where only certain monsters can coexist in a level. There are 55 monster archetypes in the game, and about 5 times that (275) monster types. It would have been really cool to allow every monster to be in a level with every other monster. For example, zombies and the other undead are unlikely to ever meet their worst enemy -- the Chaos Lord. Of course, you don't want every monster to spawn in every level (and you definitely don't want Chaos Lords spawning in the early levels), but allowing the ability for all types to coexist maximizes the possibilities, which is what a random game is about.

The system as it is really suits DoP better. There, every area has its own level, where you can imagine a specific ecosystem favoring certain combinations of monsters ie. you don't expect every monster to be able to spawn everywhere. But it doesn't work so well in DC. Among the problems this system causes:

1. Around level 26 you start spending a lot of time gaining experience and going through several towns before advancing to the next level. This means you'll see similar creature combinations over and over as you go through different towns, and you won't see other creatures at all.
2. The fact that the monster cycle repeats itself every 25 levels means that by level 25, the player has likely seen every version of every monster. This is a bit of a waste. It'd be nicer to present the player with new challenges as he proceeds through all 100 levels of the game. Unveiling a new, souped up version of a monster the player is already familiar with around level 50 would be quite cool.

3. Players who play a lot will get to learn that certain combinations of monsters coexist, while others do not. This doesn't maximize the potential of a random system, which doesn't need to become boring in this way.

Here's how I would have liked the spawn system to be. It's only a minor tweak, but I think it goes a long way towards increasing randomness. Rather than setting specific levels for each monster type, monster types would be given somewhat overlapping level ranges. Then, just as you have NumMonsterTypesToUse for init spawning, you'd have another number, NumMonsterTypesToSpawn for active spawning. Currently, if you work it out, the game effectively has between 13 and 22 monster types that can spawn per level, though some of them are of the same archetype. This includes the MinMonsterLevelOffset of -1. So you can set NumMonsterTypesToSpawn to around 19. The game would only be able to spawn this number of pre-selected monsters (plus elemental Totems, which can be marked to always spawn) from the types available at the particular level. This would allow monsters to spawn in combination with all other monsters, but only at the levels where it makes sense to have them.

Given the current system, I think what I'll do in my mod is spread out some of the monsters across a few level ranges, and I think I'll also make more monster types that'll inherit other monster types but reduce their spawnChance to a very small value. This way, you could occasionally have a few monsters appearing in levels where they normally wouldn't.

Bluddy
11-21-2011, 06:25 PM
Actually, I just found the DifficultyLevel -1 command, which when set to 0,1,2,3 limits monsters to that difficulty level. Did you originally intend for every difficulty level to have a different set of monsters?

Shadow
11-21-2011, 06:42 PM
Actually, I just found the DifficultyLevel -1 command, which when set to 0,1,2,3 limits monsters to that difficulty level. Did you originally intend for every difficulty level to have a different set of monsters?

The DifficultyLevel parm is used for Din (NpcTypes.gdb) although it should work for any NPC.

Bluddy
11-21-2011, 06:51 PM
The DifficultyLevel parm is used for Din (NpcTypes.gdb) although it should work for any NPC.

Oh I missed that usage. Well I started sketching out what a difficulty-based monster mix would be like. I'd have 2 monstertypes of each archetype per level, and the lowest difficulty level would be dominated by easy monsters, with each difficulty level being dominated by harder and harder monsters. The player would also be introduced to new monsterTypes of familiar archetypes as he went up levels. I'd also create different monster mixes for each difficulty level so the mixes wouldn't exactly repeat.

I ran into difficulties once I realized that, for example, to have Imp1 appear on level 1 and level 4, I would have to duplicate and inherit MonsterImp1 as well as every unique Imp1. It would add up to a lot of work for something that won't be felt by users that much, so I'm putting it off as a very late stage mod.

Bluddy
11-27-2011, 07:57 AM
Shadow, would it be difficult to change the Level command in monsters so it's multi-line? You'd then be able to have

MonsterImp1
{
...
Level 1
Level 4
...
}

to allow the imp1 to be in both level 1 and 4, and the unique imps that inherit from Imp1 would also have both levels. It would then observe the other rules of multiline commands ie. overriding overwrites them completely and addsTo adds more commands (ie levels).

Shadow
12-01-2011, 09:55 AM
I'll look at it, but I suspect that there are too many cases that reference the level number directly.

Bluddy
12-01-2011, 04:51 PM
I'll look at it, but I suspect that there are too many cases that reference the level number directly.

That makes sense. I guess it just means more duplication for me...

BTW if you're using the same system for Drox, I highly suggest modifying it to be along the lines of what I suggested:

Just as you have NumMonsterTypesToUse 4, you'd have NumMonsterTypesToSpawn 16 which would go and select an additional 16 monsters per level using their Init values. These monsters would be randomly selected from the range available at the level, so you'd have for example

MonsterImp1
{
MinLevel 1
MaxLevel10
}
MonsterImp2
{
MinLevel 5
MaxLevel 15
}
MonsterDemon1
{
MinLevel 22
MaxLevel 26
}
MonsterDemon2
{
MinLevel 25
MaxLevel 30
}

Chaos Lords can't spawn before level 22 using this scheme, and Imps can't spawn past 15, but anywhere in-between, you never know what combination you'll get. You'd always get spawning from a random selection out of the monsters that are available at that level, but never all the possible monsters.

To create a little bit of level variation (otherwise all monsters will be at the current level) you'd have

MonsterLevelOffsetRandomness 1.5

which would push a monster up or down up to 1.5 levels. To handle desired levels, you'd have something like

DesiredMonsterMultInitValue 3.0

which would simply multiply the init values for the desired monster, giving it a better chance of being selected as one of the monsters to spawn.

Finally, to make sure elemental totems are always included in the set of monsters to spawn, you could have

MonsterFireTotem
{
SpawnAtAllLevels 1
}

This scheme is a) easier to maintain and easier to create interesting monster layouts, vs the current system that has to be carefully laid out level by level.
b) It maximizes the randomness. Any set of monsters from those allowed at the particular level could be chosen, vs the current system which pre-ordains which monsters will meet at which level, which decreases randomness and increases repetitiveness. c) Monsters can now have a much wider range of levels without spawning at every one of those levels, as opposed to having each monster type appear at only 4 levels in the whole game.

And if you end up using this for Drox, please port it back to DC as well :)

Bluddy
12-04-2011, 02:02 PM
I'll look at it, but I suspect that there are too many cases that reference the level number directly.

Actually, thinking about it some more, maybe rather than changing the Level command, it'd be easier to add a command. Just as MinLevel and MaxLevel are values that generate a real level values, the multiline command PossibleLevel would create a list of possible levels, out of which one would be chosen.

You could have

MonsterImp1
{
PossibleLevel 1
PossibleLevel 3
PossibleLevel 5
}

Which would act just like MinLevel and MaxLevel, except only for those levels mentioned.

Would that be more doable?