JohN100x1 / IsekaiMod

An unbalanced gameplay mod for Pathfinder: Wrath of the Righteous
MIT License
19 stars 10 forks source link

Checklist for 4.2.0 #88

Closed JohN100x1 closed 1 year ago

JohN100x1 commented 1 year ago

Implementations

Optional Implementations (KJK: if I don't get them done on time they will simply be moved to the next patch)

Pre-Release Tasks

Post-Release Tasks

JohN100x1 commented 1 year ago

@kjk001 Feel free to edit the checklist if you have more things you want to add

kjk001 commented 1 year ago

@JohN100x1 does the automatic generation of new guid values still work for you?

For some reason I got [IsekaiMod] Added: - FighterBasicIsekaiLegacy When it should create a new Id every time it is run with no id set yet.

JohN100x1 commented 1 year ago

There's automatic guid generation? I've always had to add a new guid everytime.

kjk001 commented 1 year ago

there used to be, it works the same way it does for strings that it then gives you a new line: [IsekaiMod] WARNING: Generated New Localized String: 1040c2d59d954496a6b4f99402789de1:FighterBasicIsekaiLegacy.Name

The result is written into the blueprints.json under auto generetad IDs and should be moved from there to the other section asap because any value in there is not final and can just be reassigned at random, my magus guid changed three times during development...

kjk001 commented 1 year ago

speaking of guid that can just change: expanded content changed one of theirs again in patch 0.5.3 so the Dread Knight will break again

JohN100x1 commented 1 year ago

speaking of guid that can just change: expanded content changed one of theirs again in patch 0.5.3 so the Dread Knight will break again

troublesome :sweat:

kjk001 commented 1 year ago

Is is not our fault and thanks to the idea I just tested for the fighter legacy also not our problem in the future as the check on our part will simplify to is the guid of the class there and if yes then build based on the class.

The bugreports about changed features breaking saved games because a guid of one of their features no longer exist are then their problem...

This new way is also better for us because it will no longer matter to us what version of the other mod the person is running, they will simply get the Dread Knight they should expect based on that version.

public static BlueprintProgression PatchClassProgressionBasedOnRefClass(BlueprintProgression prog, BlueprintCharacterClass refClass) {
            prog.IsClassFeature = true;
            prog.m_Classes = new BlueprintProgression.ClassWithLevel[] {
                    new BlueprintProgression.ClassWithLevel {
                        m_Class = IsekaiProtagonistClass.GetReference(),
                        AdditionalLevel = 0
                    }
                };
            prog.AddComponent<ClassLevelsForPrerequisites>(c => {
                c.m_FakeClass = refClass.ToReference<BlueprintCharacterClassReference>();
                c.m_ActualClass = IsekaiProtagonistClass.GetReference();
                c.Modifier = 1.0;
            });
            var referenceLevels = refClass.Progression.LevelEntries;
            prog.LevelEntries = new LevelEntry[] { };
            foreach (var referenceLevel in referenceLevels) {
                BlueprintFeatureBaseReference[] features = referenceLevel.m_Features.ToArray(); ;
                prog.LevelEntries = prog.LevelEntries.AddToArray<LevelEntry>(Helpers.CreateLevelEntry(referenceLevel.Level, features));
            };

            var referenceUIGroups = refClass.Progression.UIGroups;
            prog.UIGroups = new UIGroup[] {
                };
            foreach (var referenceUIGroup in referenceUIGroups) {
                prog.UIGroups = prog.UIGroups.AddToArray<UIGroup>(referenceUIGroup);
            }
            prog.m_UIDeterminatorsGroup = new BlueprintFeatureBaseReference[] { };
            var referenceUIDeterminators = refClass.Progression.UIDeterminatorsGroup;
            foreach (var UIDetermin in referenceUIDeterminators) {
                prog.m_UIDeterminatorsGroup = prog.m_UIDeterminatorsGroup.AddToArray<BlueprintFeatureBaseReference>(UIDetermin.ToReference<BlueprintFeatureBaseReference>());
            }
            return prog;
        }

I'll try to move the Kineticist over to this generalized method as well, then write a version for archetypes and then we will only have to manage our custom legacy progressions as the base class versions are automatically generated except for their name and description.

kjk001 commented 1 year ago

So the Patch Method works for the Kinetic Lord as well, but quite a few feats programmed as part of Dark Codex have Bad Component References that cause Nullpointer Exceptions when crawling them for patching, full list follows: [IsekaiMod] ERROR: Unpatachable Feature= 637329bf936244668c55d81985c4eaf8name= Venom Infusion at level= 2 reason= Object reference not set to an instance of an object [IsekaiMod] ERROR: Unpatachable Feature= e9021412e87847b3b104d4d31bfe5403name= Venom Infusion, Greater at level= 2 reason= Object reference not set to an instance of an object [IsekaiMod] ERROR: Unpatachable Feature= 96360bedde8648a8a6762e2de41b60a5name= Disintegrating Infusion at level= 2 reason= Object reference not set to an instance of an object [IsekaiMod] ERROR: Unpatachable Feature= e9cf588e2ef64fb68d0ec8c566e8b294name= Dampening Infusion at level= 2 reason= Object reference not set to an instance of an object [IsekaiMod] ERROR: Unpatachable Feature= 8662ccb8dd484a2f8139d46621c641fdname= Enervating Infusion at level= 2 reason= Object reference not set to an instance of an object [IsekaiMod] ERROR: Unpatachable Feature= 3ae954ad56a2497b92fada3dc493b4e1name= Pulling Infusion at level= 2 reason= Object reference not set to an instance of an object [IsekaiMod] ERROR: Unpatachable Feature= e53160d091914d50bfc1d8d4fa482e30name= Unnerving Inufsion at level= 2 reason= Object reference not set to an instance of an object [IsekaiMod] ERROR: Unpatachable Feature= 922fd10e3e994d7793821da1583cdfeaname= Vampiric Infusion at level= 2 reason= Object reference not set to an instance of an object [IsekaiMod] ERROR: Unpatachable Feature= 987dc633dbae49b0adc11cd9c5672553name= Weighing Infusion at level= 2 reason= Object reference not set to an instance of an object [IsekaiMod] ERROR: Unpatachable Feature= 1cd0cd60997d4288be1fc85f753e53dename= Spore Infusion at level= 2 reason= Object reference not set to an instance of an object [IsekaiMod] ERROR: Unpatachable Feature= fdc63fd61b794e40ba3c5446ba8ea1c2name= Toxic Infusion at level= 2 reason= Object reference not set to an instance of an object [IsekaiMod] ERROR: Unpatachable Feature= 56567887f604473797dc8223c68999daname= Toxic Infusion, Greater at level= 2 reason= Object reference not set to an instance of an object [IsekaiMod] ERROR: Unpatachable Feature= 94341284499343c0b5652f082bd677d1name= Self Telekinesis, Greater at level= 2 reason= Object reference not set to an instance of an object [IsekaiMod] ERROR: Unpatachable Feature= c03b1a6d297843c584b763378024ea7aname= Telekinetic Finesse at level= 2 reason= Object reference not set to an instance of an object [IsekaiMod] ERROR: Unpatachable Feature= 8d3e9c13037d4d4f944887b517bbf86bname= Gravity Control, Greater at level= 2 reason= Object reference not set to an instance of an object [IsekaiMod] ERROR: Unpatachable Feature= 70322f5a2a294e54a9552f77ee85b0a7name= Metakinesis — Empowered at level= 1 reason= Object reference not set to an instance of an object I tried and the blasts work fine and nothing on this list should actually have Features hidden behind them that require patching but based on his repository code I can't even easily tell if he adds a factRef or a Ressource with a required value not initialized on them.

Ah well, it works even if those messages are irritating to me.

kjk001 commented 1 year ago

I updated the loop prevention logic of PatchClassIntoFeatureOfReferenceClass a bit as thief and fighter together caused a bit too much load time for my liking when running them through that.

Ah well, as long as the legacy is a vanilla class or archetype it is now very easy to add.

Just set name and description, tell the Methods what the reference class or archetype is and then set what Isekai Archetypes should get the legacy.

kjk001 commented 1 year ago

and I was right in that archetypes are a hell on their own. Scaled Fist has introduced yet another fun new complication in the form that it actually defines every level multiple times in its RemovedFeatures and AddedFeatures List. Someone really should have written some better checks to throw errors if that is done...

kjk001 commented 1 year ago

Anyway onto the Shifters next...

JohN100x1 commented 1 year ago

By the way when adding features from DLC like the shifter features then it should be done in way that will not crash for people who don't own the DLC. I discovered that some users couldn't load the mod because of the usage of DLC components. e.g. AbilityDeliverRicochet.

kjk001 commented 1 year ago

I added aif (ClassTools.Classes.ShifterClass == null) { return; } check to do just that. The progression is still created(because the shifter legacy is not reliably initialized at the stage where we create the blueprint) but before class features are patched, the progression filled, and everything is added that check is called to make sure it is actually defined and loaded.

kjk001 commented 1 year ago

And on that note I think I am done for this patch. All remaining suggestions for legacies involve at least some degree of customization and there are now quite enough new legacies that can lead to new and unexpected bugs before I add any more.

JohN100x1 commented 1 year ago

Nice job. I will have a look at your branch and start merging.