tracktwo / ppdefmodifier

9 stars 2 forks source link

How to modify fields when there is no guid? #4

Closed JJ2197 closed 4 years ago

JJ2197 commented 4 years ago

I have found an asset that doesn't contain a guid and was wondering how/if I can modify the associated fields? The asset in question is GeoInitialWorldSetup, this asset seems to be what determines the amount of blocked spaces for bases, but sadly there is no guid that I can find, I believe I figured out the cls which is something along the lines of PhoenixPoint.Geoscape.Levels.GeoInitialWorldSetup, but I still cant get it to modify any of the fields.

Here is a paste bin of the file: https://pastebin.com/GZXrQ3kA

ArmitageJakeTurtle commented 4 years ago

good question...

tracktwo commented 4 years ago

I don't know, unforunately :) I don't know very much about unity modding, to be honest. It looks like the values for GeoInitialWorldSetup are all hard coded into the class itself. There is an object of this type persisted into the asset file, but I don't know how to get a reference to it without a guid. Could be there is some way I just don't know.

JJ2197 commented 4 years ago

Oh well then, though I also wanted to know if you were still working on this, you mentioned you would be adding support for more data types e.g. defs that refer to defs, are you referring to the PPtrs or the unique data types like ResourceType? Would definitely appreciate to be able to modify as much as possible as I am working on a mod that gives a way for people to easily customize the game how they want.

tracktwo commented 4 years ago

I'm not not working on it, but I haven't been actively adding much to it lately because I hadn't needed anything more and really hadn't had much feedback on it so I wasn't really sure how widely this is being used.

My original thoughts were to add PPtr support, to allow changing a reference to refer to some other def. Potentially something like:

{ 
  "guid" : "<some object>",
  "field": "path.to.ref",
  "valueRef": "<some other guid>"
}

Instead of changing a basic type value like a number or string it'd look up the object associated with the guid in "valueRef" and assign the field to that one. Combined with some syntax for adding new elements to an array that would let you extend things like the effects that are applied on abilities, etc.

I think adding support for other data types or building new defs is outside the scope of this project - trying to generate a syntax for doing that in json sounds awful. I could probably invent syntax for the simpler types like ResourceUnits, but that'd be fairly limited and trying to build more complex types pretty quickly escalates into basically just writing c# code.

JJ2197 commented 4 years ago

Yeah, I understand, not that many people trying to mod phoenix point at the moment, though this tool has been quite helpful to those that don't know how to compile their own DLL to make modifications.(e.g. me)