Jump to content
  • 0

1.0.2 disposition patch approach could be better


fireundubh

Question

In factions.gamedatabundle, the change strength amounts and disposition rank thresholds were unchanged. In fact, 1.0.2.89 did not change any game data except localization and some conversations. What the 1.0.2.89 patch did though was hardcode the Minor change strength value for ChangeDisposition.

 

Disposition.ChangeDisposition() - 1.0.1.64 vs. 1.0.2.89

 

This value can no longer be overridden by mods (for dispositions), at least not without using the Patchwork framework. This isn't a major issue, but this approach makes changing this value (for dispositions) unnecessarily difficult.

 

Changing the Minor change strength value to 1 in data would have the same result without the aforementioned consequences. edit: Actually, that's not correct because ChangeDisposition isn't called for faction reputation and companion relationships. Duh!  :facepalm:

 

A better approach would be to:

  • Create disposition-only Minor, Average, and Major change strengths with their own UUIDs.
  • Create faction-only Minor, Average, and Major change strengths with their own UUIDs.
  • Create relationship-only Minor, Average, and Major change strengths with their own UUIDs.
  • Update all instances where the old Minor, Average, and Major change strengths were used.
This would give designers more control, allowing them to tune and balance disposition, faction, and relationship gains separately, rather than trying to find magic numbers that can be shared between all three systems. Alternatively, hope magic numbers work and set the Minor change strength value to 1 in data.

 

edit: Thinking on it a bit more, to get around having to do #4, you could map the old UUIDs to the new ones for DispositionAddPoints, ReputationAddPoints, and CompanionAddRelationship, so that when each method is called with a particular strengthGuid, the game uses the right individualized change strengths.

 

I know this patch wasn't the disposition rebalance patch, but I just wanted to point out that the rank thresholds still need to be increased. The Deadfire rank thresholds are around 50% what they were in Eternity 1 despite there being 200-300% more DispositionAddPoints calls in Deadfire.

Edited by fireundubh
  • Like 1
Link to comment
Share on other sites

7 answers to this question

Recommended Posts

  • 0

In factions.gamedatabundle, the change strength amounts and disposition rank thresholds were unchanged. In fact, 1.0.2.89 did not change any game data except localization and some conversations. What the 1.0.2.89 patch did though was hardcode the Minor change strength value for ChangeDisposition.

 

Disposition.ChangeDisposition() - 1.0.1.64 vs. 1.0.2.89

 

This value can no longer be overridden by mods (for dispositions), at least not without using the Patchwork framework. This isn't a major issue, but this approach makes changing this value (for dispositions) unnecessarily difficult.

 

Changing the Minor change strength value to 1 in data would have the same result without the aforementioned consequences. edit: Actually, that's not correct because ChangeDisposition isn't called for faction reputation and companion relationships. Duh!  :facepalm:

 

A better approach would be to:

  • Create disposition-only Minor, Average, and Major change strengths with their own UUIDs.
  • Create faction-only Minor, Average, and Major change strengths with their own UUIDs.
  • Create relationship-only Minor, Average, and Major change strengths with their own UUIDs.
  • Update all instances where the old Minor, Average, and Major change strengths were used.
This would give designers more control, allowing them to tune and balance disposition, faction, and relationship gains separately, rather than trying to find magic numbers that can be shared between all three systems. Alternatively, hope magic numbers work and set the Minor change strength value to 1 in data.

 

edit: Thinking on it a bit more, to get around having to do #4, you could map the old UUIDs to the new ones for DispositionAddPoints, ReputationAddPoints, and CompanionAddRelationship, so that when each method is called with a particular strengthGuid, the game uses the right individualized change strengths.

 

I know this patch wasn't the disposition rebalance patch, but I just wanted to point out that the rank thresholds still need to be increased. The Deadfire rank thresholds are around 50% what they were in Eternity 1 despite there being 200-300% more DispositionAddPoints calls in Deadfire.

 

 

I completely agree that the function responsible for the disposition system shoul dbe refactored making it easier to manipulate and debug, because it is just causing developers to introduce more errors in the system as well. I did not take a look at the code behind this to come up with more ideas about how to handle it better, but this solution seems to be fairly easy to implement.

Link to comment
Share on other sites

  • 0

My approach to circumventing the work required to execute #4 would probably look something like this.
 
Code:

private static readonly IList<KeyValuePair<Guid, Guid>> ChangeStrengthMap = new List<KeyValuePair<Guid, Guid>>()
{
    new KeyValuePair<Guid, Guid>(new Guid("54772c0d-cf3f-4589-8cab-9f3601d575c2"), new Guid("d41180a5-fb16-4b07-996c-dc73ea45ca2c")),
    new KeyValuePair<Guid, Guid>(new Guid("71c858fe-7c4b-432a-a105-c518319eaed7"), new Guid("122f590f-e442-4919-a247-454158c99032")),
    new KeyValuePair<Guid, Guid>(new Guid("e19a6f92-2165-4e34-be10-c65e8de970eb"), new Guid("933f3c6c-813a-45f3-9d05-0e3137a8380a")),
};

public void ChangeDisposition(DispositionGameData disposition, ChangeStrengthGameData strength)
{
    // ...

    Guid strengthNewGuid = ChangeStrengthMap.First(l => l.Key == strength.ID).Value;

    ChangeStrengthGameData strengthNew = ResourceManager.GetGameDataObject(strengthNewGuid) as ChangeStrengthGameData;
    int changeValue = strengthNew == null ? strength.ChangeValue : strengthNew.ChangeValue;

    Dictionary<DispositionGameData, int> dispositions;
    (dispositions = this.m_dispositions)[disposition] = dispositions[disposition] + changeValue;

    // ...
}

GameDataObjects:

{
  "$type": "Game.GameData.ChangeStrengthGameData, Assembly-CSharp",
  "DebugName": "Minor Disposition Change",
  "ID": "d41180a5-fb16-4b07-996c-dc73ea45ca2c",
  "Components": [
    {
      "$type": "Game.GameData.ChangeStrengthComponent, Assembly-CSharp",
      "ChangeValue": 1,
      "DisplayName": 1782,
      "FormatString": 1297
    }
  ]
},
...

You leave the base ChangeStrengthGameData objects alone; add 9 more objects for Disposition Change, Reputation Change, and Relationship Change; and map the base object UUIDs to the new ones when calling DispositionAddPoints, CompanionAddRelationship, and ReputationAddPoints.

 

OEI wouldn't have to change any dialogue options or modify the OEI Tools editor, and designers (and modders!) can modify point gains for dispositions, relationships, and reputations individually all in data, which allows designers/modders to maintain separate progression curves for each system.

 

I have the disposition component of this approach working in a Patchwork mod, but I have no idea how to modify static constructors in the Patchwork framework, so I can't build the mod with support for the Game.Scripts class. In any case, this would be better done on OEI's end given the internal value.

Link to comment
Share on other sites

  • 0

Do these changes make your Classic Disposition Patch mod incompatible with the version 1.0.2 patch?

 

No, both 1.0.2 and the CDP set the Minor change strength value to 1. The CDP does this in data while the 1.0.2 patch hardcodes it for dispositions only. However, as Josh noted in a recent livestream, the CDP also slows down reputation gain and relationship gain because the disposition, reputation, and relationship systems all use the same Minor, Average, and Major change strength data. This thread is about hopefully convincing OEI to make these systems use different Minor, Average, and Major change strength data, so they can be properly tuned and balanced separately.

Edited by fireundubh
Link to comment
Share on other sites

  • 0

I can only assume they're balancing them around people that play mostly just the main quest. Which is probably less than half the length of the Pillars 1 main quest. Would make the way they chose to change it make sense.

The real issue isn't that the balance is off, but rather that its now hard coded.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...