Giter Club home page Giter Club logo

Comments (5)

zenseii avatar zenseii commented on June 5, 2024

I've checked what happens if you load these campaign maps with wrong resources as standard games in the OG, and they give the same resources as fheroes2 does when loaded as campaign games, so this suggests that the different resources is not due to some data in the map files, but rather something coded in the original engine.

from fheroes2.

zenseii avatar zenseii commented on June 5, 2024

I've checked all the other campaigns now and found that every campaign has a scenario that needs starting resources adjustments.

Starting Resource difficulty level that needs to be set
Roland:
Rol 1 checked
Rol 2 Normal -> Easy
Rol 3 checked
Rol 4 checked
Rol 5 checked
Rol 6 checked
Rol 7 checked
Rol 8 checked
Rol 9 checked
Rol 10 checked

Archibald:
Arch 1 checked
Arch 2 Normal -> Easy
Arch 3 checked
Arch 4 checked
Arch 5 checked
Arch 6 checked
Arch 7 checked
Arch 8 checked
Arch 9 checked
Arch 10 checked
Arch 11 checked

Descendants:
Des 1 Normal -> Easy
Des 2 checked
Des 3 checked
Des 4 checked
Des 5 checked
Des 6 Expert -> Hard
Des 7 checked
Des 8 checked

Wizard's Isle:
Wiz 1 checked
Wiz 2 checked
Wiz 3 checked
Wiz 4 Normal -> Hard

Voyage Home:

Voy 1 Normal -> Easy
Voy 2 checked
Voy 3 checked
Voy 4 checked

As you can see, most of them decrease 1 level of difficulty and one increases by 1 level of difficulty.

from fheroes2.

oleg-derevenetz avatar oleg-derevenetz commented on June 5, 2024

What if we just leave it as it is, given the fheroes2 extension that allows you to set the difficulty of campaign missions?

from fheroes2.

zenseii avatar zenseii commented on June 5, 2024

@oleg-derevenetz

What if we just leave it as it is, given the fheroes2 extension that allows you to set the difficulty of campaign missions?

We've already had players report back that the final PoL campaign missions are very easy, and part of this is due to us setting the starting resources to higher than what they should be, due to fheroes2 basing itself off of what those maps have in their data.

But, consider the big difference in the final PoL mission where you are supposed to have resources like Expert difficulty, but on fheroes2 Normal campaign difficulty you start with Normal resources, and for fheroes2 Hard campaign difficulty, you start with Hard difficulty resources, so still more than the original design for this map.

The original intent behind the fheroes2 difficulty was to have the Normal difficulty let you play the missions with the same terms as the original game, apart from the AI of course, and to have the other difficulties either lower or raise that by one level. This is implied from the difficulty description text for normal although it is quite vague about this:
image

In my opinion the best solution is to do like we did for mission AI alliances and add these fixes to campaign difficulties per mission. This was done in campaign_data.cpp line 717, updateScenarioGameplayConditions():

void CampaignData::updateScenarioGameplayConditions( const Campaign::ScenarioInfoId & scenarioInfoId, Maps::FileInfo & mapInfo )
{
bool allAIPlayersInAlliance = false;
switch ( scenarioInfoId.campaignId ) {
case ROLAND_CAMPAIGN:
if ( scenarioInfoId.scenarioId == 9 ) {
allAIPlayersInAlliance = true;
}
break;
case ARCHIBALD_CAMPAIGN:
if ( scenarioInfoId.scenarioId == 5 || scenarioInfoId.scenarioId == 10 ) {
allAIPlayersInAlliance = true;
}
break;
case PRICE_OF_LOYALTY_CAMPAIGN:
case DESCENDANTS_CAMPAIGN:
case VOYAGE_HOME_CAMPAIGN:
case WIZARDS_ISLE_CAMPAIGN:
break;
default:
// Did you add a new campaign? Add the corresponding case above.
assert( 0 );
return;
}
if ( allAIPlayersInAlliance ) {
const Colors humanColors( mapInfo.colorsAvailableForHumans );
// Make sure that this is only one human player on the map.
if ( humanColors.size() != 1 ) {
// Looks like somebody is modifying the original map.
assert( 0 );
return;
}
const int aiColors = ( mapInfo.kingdomColors & ( ~mapInfo.colorsAvailableForHumans ) );
if ( aiColors == 0 ) {
// This is definitely not the map to modify.
assert( 0 );
return;
}
// If this assertion blows up then the whole logic behind colors is going crazy.
assert( aiColors < 256 );
const uint8_t humanColor = static_cast<uint8_t>( humanColors.front() );
for ( uint8_t & allianceColor : mapInfo.unions ) {
if ( allianceColor != humanColor && ( aiColors & allianceColor ) ) {
allianceColor = static_cast<uint8_t>( aiColors );
}
}
}
}

We only need to make sure that missions that don't have an inherent Easy difficulty don't try to go lower than that when the player selects Easy difficulty. As for the starting resources being the same for Normal and Easy in that case, I think that's fine since there should be AI behavioral differences in the future.

EDIT: Alternatively we could make it so that Normal difficulty never has a lower difficulty than Normal for the maps. That would stray from the "original design" intent, but it would make sense since in the first solution you would "get more points" for beating the same mission on Normal when the conditions are exactly the same for Easy and Normal.

from fheroes2.

ihhub avatar ihhub commented on June 5, 2024

Hi @zenseii , since many players want to play the original campaigns as they are in the OG we should adjust difficulties for aforementioned scenarios. Regarding the campaign Easy difficulty and Easy difficulty of a scenario, let's leave it as it is. It means that Normal and Easy campaign difficulties will give the same scenario Easy difficulty.

from fheroes2.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.