Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add granular monster object control for resurrection maps #9491

Open
1 task done
idshibanov opened this issue Jan 25, 2025 · 3 comments
Open
1 task done

Add granular monster object control for resurrection maps #9491

idshibanov opened this issue Jan 25, 2025 · 3 comments
Labels
editor Map editor related stuff improvement New feature, request or improvement question Question asked

Comments

@idshibanov
Copy link
Collaborator

idshibanov commented Jan 25, 2025

Preliminary checks

Describe the problem requiring a solution

Current random monster editor options (that are matching original game behaviour) work as follows:

  1. strength 0 (Peasant) - 10 (Archer)
  2. strength 11 (Mutant Zombie) - 22 (Grand Elf)
  3. strength 21 (Royal Mummy) - 70 (Archmage)
  4. strength 62 (Unicorn) - 504 (Black Dragon)

Although we have to treat original MON1-MON4 object as is for backwards compatibility, you can clearly see that MON3 and MON4 are unbalanced and hard to work with. As as mapmaker if you want to make sure map area stays well-protected you are forced to place a specific monster rather than keeping it interesting or thematic. I want to hear your opinions on both proposals.

Describe the possible solution

Solution 1.

Re-use existing RANDOM_MONSTER object (just MON) to add additional metadata for the fheroes2 resurrection maps. Instead of monster count the new field could include:

  • The dwelling level
  • Monster race (which castle they belong to)
  • Random monster level based on the suggestion below
  • Desired total troop strength (monster count determined based on which type was randomized)
  • Exclusion flags: no shooters, no flyers, etc

If configuration set by the map maker is too restrictive (i.e. no valid monster can be found and placed) treat it as a fully random object. If no metadata was set (or it is an older version map) use the current behaviour.

Solution 2.

In order to keep the spirit of original game the monster levels should follow the strength values rather than dwelling level:

  1. strength 0 (Peasant) - 10 (Archer): 10 monster options
  2. strength 11 (Mutant Zombie) - 22 (Wolf): 15 monster options
  3. strength 22.7 (Grand Elf) - 37 (Minotaur): 12 monster options
  4. strength 39 (Greater Druid) - 63 (Vampire Lord): 15 monster options
  5. strength 70 (Archmage) - 171 (Giant): 7 monster options
  6. strength 207 (Genie) - 504 (Black Dragon): 7 monster options

This should unlock the ability for map maker to balance the encounter difficulty without worrying about randomness. We introduce two new map objects MON5 and MON6 (with similar graphics for the editor) and process them accordingly. When loading maps made by original editor we convert old MON3 into either 3 or 4 based on a random roll. Same for MON4 which becomes either the new MON5 or MON6.

Additional info

We could implement both.

@idshibanov idshibanov added editor Map editor related stuff improvement New feature, request or improvement question Question asked labels Jan 25, 2025
@idshibanov idshibanov added this to the Beyond OG scope milestone Jan 25, 2025
@Branikolog
Copy link
Collaborator

Branikolog commented Jan 26, 2025

Hi, @idshibanov !
🙂

I agree that the basic object Mon is absolutely unadaptable and cannot be used in any way. Even in the original game there was an issue, where by default a random creature is generated (note, without tier 6 or some of the most powerful tier 5 creatures) in approximately equal quantities (on average from 15 to 30): this could be 20 goblins or 20 mages).

Exclusion flags: no shooters, no flyers, etc

Regarding flags - I completely agree. And I would even go deeper and allow the mapmaker to specify individually which creatures can appear and which cannot. I mean the full creature list. But those flags could be also useful for RMG, where specific creature type (ranged/magic immune/etc) could be generated for the particular place.

Monster race (which castle they belong to)

Kind of casual point but it still could be used for sure. 👍
Even could be adjusted to a random faction which is related to a specific player.

When loading maps made by original editor we convert old MON3 into either 3 or 4 based on a random roll. Same for MON4 which becomes either the new MON5 or MON6.

I want to note that we should not touch the original maps regarding the random generation of the object MON(x). Lets leave the original maps working same as before. (I'm only concerning about full random MON, as it has differences, as I noted above).
As for new maps we should provide a more flexible and predictable setting for the map maker.

In my opinion, specifying the exact number of creatures can only be relevant when placing a specific creature, not a "random" one. Random MON objects should, in my opinion, first of all correspond to a certain difficulty of overcoming (strength). And only after determining the strength, you can try to determine the quantity parameter so that the game offers some specific creature that corresponds both these parameters.

Although we have to treat original MON1-MON4 object as is for backwards compatibility, you can clearly see that MON3 and MON4 are unbalanced and hard to work with. As as mapmaker if you want to make sure map area stays well-protected you are forced to place a specific monster rather than keeping it interesting or thematic. I want to hear your opinions on both proposals.

I personally don't see such a problem with just 4 MON(x) objects if we implement sort of strength value. If game correctly places randomly just 1 dragon, or 5 paladins, or 15 unicorns instead (I'm not sure about the actual strength difference) and the only improving aspect here could be just adding "no flyers/shooters" flags. Or working with the full creature list to exclude some particular ones.
For the fully random MON object I expect any creature appear within a selected strength (150 sprites or 1 green dragon).

The only difficulty I see in such approach is that we don't have any reference for that strength value yet. So It would be hard for a mapmaker to find out, what value corresponds the creature type and its quantity.
We can try to define each creature's strength in peasants. So, 1 peasant = 1 actual peasant from the hut, and 3 dragons = 1450 peasants. 😆

We do also miss many deeper things regarding monsters placing in the editor, like "0" growth; joining/offensive mood; special event text on interacting with monster; reward event on winning the battle, etc...

@LeHerosInconnu
Copy link

LeHerosInconnu commented Jan 26, 2025

Hello @idshibanov and @Branikolog,

Here's how I see it.
As you wrote, let's use the "MON" sprite without changing its default mode for simplicity.
By adding a graphic button with a "+" in the standard window, additional and more precise settings become available.

"MON" sprite standard window:
Image

These are the settings available when the new window is open:
The scenario creator selects one or more authorized creature types for the generation of the wandering creature troop.
One type of creature, and only one, is chosen for the generation of the wandering creature troop.

Allow Creature Type:
The creator can select as many creature types as he wants (upgraded and not upgraded).
Checkbox type selection for each creature (or other).

Knight

  • Peasant
  • Archer, Ranger
  • Pikeman, Veteran Pikeman
  • Swordsman, Master Swordsman
  • Cavalry, Champion
  • Paladin, Crusader

Barbarian

  • Goblin
  • Orc, Orc Chief
  • Wolf
  • Ogre, Ogre Lord
  • Troll, War Troll
  • Cyclops

Sorceress

  • Sprite
  • Dwarf, Battle Dwarf
  • Elf, Grand Elf
  • Druid, Greater Druid
  • Unicorn
  • Phoenix

Necromancer

  • Skeleton
  • Zombie, Mutant Zombie
  • Mummy, Royal Mummy
  • Vampire, Vampire Lord
  • Lich, Power Lich
  • Bone Dragon

Wizard

  • Halfling
  • Boar
  • Iron Golem, Steel Golem
  • Roc
  • Mage, Archmage
  • Giant, Titan

Warlock

  • Centaur
  • Gargoyle
  • Griffin
  • Minotaur, Minotaur King
  • ydra
  • Green Dragon, Red Dragon, Black Dragon

Neutral

  • Rogue
  • Nomad
  • Ghost
  • Medusa
  • Air Elemental, Fire Elemental, Water Elemental, Earth Elemental
  • Genie

Quantity:
The scenario creator indicates the minimum and maximum initial quantity.
Number adjustment box.
By default, the quantity is set to "0", as usual.
If the scenario creator indicates only the minimum value, this will be the number of creatures at the start of the scenario.
If the creator also specifies the maximum value, the number of creatures at the start of the scenario will be chosen between the minimum and maximum numbers.

  • Min number
  • Max number

Allow Growth:
Determines whether the number of creatures will increase or remain fixed over the weeks.
Checkbox type selection.
Box checked by default.

Allow mixed creatures during combat:
Determines whether upgraded creatures can be mixed with not upgraded creatures in combat when not upgraded creatures have been chosen from the creatures allowed for generation.
Checkbox type selection.
Box checked by default.

Afterwards, as @Branikolog writes, many other possibilities can be added.
More or less present in Heroes 3, but not mandatory.

Morale of the troop of wandering creatures:
The scenario creator indicates the morale level of the troop of wandering creatures.
Exclusive selection box (or other).
By default, the value is set to "0".

  • +3
  • +2
  • +1
  • 0
  • -1
  • -2
  • -3

However, the +1 moral bonus still applies if the wandering creature troop is made up of not upgraded and upgraded creatures when the scenario creator doesn't change the default value.

Luck of the troop of wandering creatures:
The scenario creator indicates the luck level of the troop of wandering creatures.
Exclusive selection box (or other).
By default, the value is set to "0".

  • +3
  • +2
  • +1
  • 0
  • -1
  • -2
  • -3

Degree of aggressiveness:
The scenario creator indicates the degree of aggressiveness of the troop of wandering creatures.
Exclusive selection box.
By default, the degree of aggressiveness is set to "Can join the hero for free".

  • Can join the hero for free (still with standard conditions)
  • Can join the hero only if he has diplomacy secondary skill (still with diplomacy conditions)
  • Nerver join

Additional setting.
The troop of wandering creatures will never flee, even if the hero's army is far more powerful.
Checkbox type selection.
Box unchecked by default.

  • Never flee

Etc.

Edit.

To indicate to the scenario creator which "MON" objects have extended settings, the "MON" of the "MON" sprite can be in white.

@ihhub
Copy link
Owner

ihhub commented Jan 28, 2025

For the sake of ease for developers we can just allow to select monsters from defined lists for these 5 objects as we've done for some objects on the Adventure Map. It solves 99% of cases for map makers.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
editor Map editor related stuff improvement New feature, request or improvement question Question asked
Projects
None yet
Development

No branches or pull requests

4 participants