BMac Posted July 3, 2018 Posted July 3, 2018 This is a list of changes from 1.1.1.0064 to 1.2.0.0017 that specifically affect modding the game. Thanks for your feedback and suggestions - we'll continue to implement more of these in the future. For full patch notes, see the thread Patch Notes for 1.2.0.0017. Modding Patch Notes for 1.2.0.0017 Added the Mod Manager UI, which is accessed from the Options window on the Main Menu. This UI allows you to view installed mods, enabled and disable them, and change their load order. Game Data Objects from mods can now partially override existing objects. Properties that a mod doesn't need to change can be deleted from the mod object and will be left unmodified. Some textures in the game can be added or modified via mods. The textures should appear at the specified path inside the mod's override folder (e.g. "Override/MyMod/GUI/InnIcons/icon.png"). PNG and JPG images are supported. Some textures that can be modded this way include: Large item icons (but not small ones) (ItemGameData.IconTextureLarge) Loading screen images (LoadScreenComponent) Inn room images (InnRoomComponent.DisplayImage) Vendor logo images (VendorComponent.StoreIconPath) Bestiary images (BestiaryEntryComponent.PicturePath) Scripted interaction illustrations (SetInteractionImage script) End-game slide images (SetEndGameSlide script) Ship portrait images (ShipComponent.ShipPortrait) (Breaking) Made it possible to add new classes via mods. Mods that change the following values will need to be updated. Removed CharacterClassComponent.Type CharacterProgressionDataComponent.HybridClassTitles moved to CharacterClassComponent.HybridClassTitles (on a per-class basis) AbilitySettingsComponent.ClassResourceConversionRates moved to CharacterClassComponent.ResourceConversionRate (on a per-class basis) Replaced StatusEffectValueType.Phrases/Wounds/Focus with generic StatusEffectValueType.AccruedResource. Changed AIDecisionTreeDataComponent.CharacterClass from enum to Guid Changed EquippableComponent.RestrictedToClass from enum[] to Guid[] Changed GenericAbilityComponent.AbilityClass from enum to Guid Changed StatusEffectComponent.ClassValue from enum to Guid Changed ClassProgressionTable.CharacterClass from enum to Guid Changed ProgressionPowerLevelRequirement.Class from enum to Guid Changed StatusEffectAttackFilter.ClassType from enum to Guid Changed StatusEffectDynamicValueAdjustment.Class from enum to Guid Exposed BaseMaxFocus, MaxFocusPerLevel, and StartingFocusRatio on FocusTraitComponent Fixed some syntax errors in base game gamedatabundles. Removed BackgroundComponent.Type Removed CharacterSubClassEnum Removed CharacterSubClassComponent.Subclass *.conversationbundle and conversation.manifest files can now be loaded from mod directories rather than only the root override directory. 15
peardox Posted July 3, 2018 Posted July 3, 2018 (edited) Wow - cool stuff BMac Have we done conversationbundles yet? This is the main target of my article today [Everyone else] I'll be doing a clean on 1.2.0 and publishing it (I'm not convinced yet) I'll leave 1.1.1 alone but next update will rotate I take it some ppl will still like my prettified JSON so regardless of my research I'll do an update for the JSON stuff Edited July 3, 2018 by peardox OK Fair warning has been applied I'm gonna move the domain to https://perspak.com early Feb but will keep all content There are reasons behind this move which basically boil down to unifying my release schedule My friends are welcome to play (I'll set you up your own areas if you desire them) Please note that this process is messy so may take a few weeks
BMac Posted July 3, 2018 Author Posted July 3, 2018 Yes, conversationbundles can now use mod override folders - they'll be searched for at the expected path inside each mod folder. Good catch - I missed that and I've added it to the notes. 3
Xaratas Posted July 3, 2018 Posted July 3, 2018 And reload of gamebundle files ingame? Loading and leaving huge maps still takes some time. More modding for PoE II | How to Work with Stringtables
BMac Posted July 3, 2018 Author Posted July 3, 2018 The only safe way to reload them right now is to quit to the main menu and Refresh in the mod manager. You can force a hot reload by twiddling the state of one of your mods with the SetModLoadIndex or SetModEnabled commands, but this isn't something we officially support for this patch. It will cause some problems with references to the data in the loaded game, which may be fixed by loading a save, but you still have a scene load to deal with there. 3
Spherical Posted July 3, 2018 Posted July 3, 2018 This is so awesome that I hardy know where to begin. THANK YOU!!!! Editor and DesignerEnhanced User InterfaceNexus Mods | Steam Workshop
ydaraishy Posted July 3, 2018 Posted July 3, 2018 (edited) How do we update the compatible Deadfire versions and mod version numbers in the manager Ui? Edited July 3, 2018 by ydaraishy
Zap Gun For Hire Posted July 3, 2018 Posted July 3, 2018 Did a test by doing a partial override of the FactionalHostilitySets in shiphostilitymanager entry in factions.gamedatabundle and it seems to be working. The things I wanted to make hostile turned hostile, and everyone else is acting as in the base game. A little leery of clipping too much from that Game Data Object as I don't know what the game needs to know what I'm overridding, but on first blush looks good. 1
BMac Posted July 3, 2018 Author Posted July 3, 2018 How do we update the compatible Deadfire versions and mod version numbers in the manager Ui? We have a tutorial that covers this and some other things coming out soon™. Did a test by doing a partial override of the FactionalHostilitySets in shiphostilitymanager entry in factions.gamedatabundle and it seems to be working. The things I wanted to make hostile turned hostile, and everyone else is acting as in the base game. A little leery of clipping too much from that Game Data Object as I don't know what the game needs to know what I'm overridding, but on first blush looks good. Unfortunately arrays are treated as a single property, so you won't be able to individually modify array elements or any properties on them. If you specify any data for the array, what you specify will always completely replace the default. The behavior the ships default to when they have no data probably just closely resembles what they were set to do. I know there are a few use cases where modifying arrays would be very useful, so we'll see if we can do something about that in the next patch. 3
Zap Gun For Hire Posted July 3, 2018 Posted July 3, 2018 Did a test by doing a partial override of the FactionalHostilitySets in shiphostilitymanager entry in factions.gamedatabundle and it seems to be working. The things I wanted to make hostile turned hostile, and everyone else is acting as in the base game. A little leery of clipping too much from that Game Data Object as I don't know what the game needs to know what I'm overridding, but on first blush looks good. Unfortunately arrays are treated as a single property, so you won't be able to individually modify array elements or any properties on them. If you specify any data for the array, what you specify will always completely replace the default. The behavior the ships default to when they have no data probably just closely resembles what they were set to do. I know there are a few use cases where modifying arrays would be very useful, so we'll see if we can do something about that in the next patch. More of a layman than I'd like to admit when it comes to much of this. What qualifies as an array when it comes to the way the engine reads the gamedatabundle? Going back to shiphostilitymanager (from factions.gamedatabundle) since I already mentioned it (spoilered because it's loooooong): { "$type": "Game.GameData.ShipHostilityManager, Assembly-CSharp", "DebugName": "shiphostilitymanager", "ID": "ac548a26-688b-4ce3-9dc7-af68b020c787", "Components": [{ "$type": "Game.GameData.ShipHostilityManagerComponent, Assembly-CSharp", "FactionHostilitySets": [{ "FactionReferenceID": "0e5d53f8-8d15-4b45-9565-dc063cb24d30", "HostilityConditionals": { "Operator": 0, "Components": [{ "$type": "OEIFormats.FlowCharts.ConditionalCall, OEIFormats", "Data": { "FullName": "Boolean IsReputation(Guid, RankType, Int32, Operator)", "Parameters": ["0e5d53f8-8d15-4b45-9565-dc063cb24d30", "Bad", "3", "GreaterThanOrEqualTo"], "Flags": "", "UnrealCall": "", "FunctionHash": -191386609, "ParameterHash": -1938889724 }, "Not": false, "Operator": 0 }, { "$type": "OEIFormats.FlowCharts.ConditionalCall, OEIFormats", "Data": { "FullName": "Boolean PlayerShipHasActiveUpgrade(Guid)", "Parameters": ["3fbac293-4650-4257-859e-67c8d167f29a"], "Flags": "", "UnrealCall": "", "FunctionHash": -641067011, "ParameterHash": -740842320 }, "Not": true, "Operator": 0 } ] } }, { "FactionReferenceID": "5325a7f1-0292-41bb-a223-2c84c005779a", "HostilityConditionals": { "Operator": 0, "Components": [{ "$type": "OEIFormats.FlowCharts.ConditionalCall, OEIFormats", "Data": { "FullName": "Boolean IsReputation(Guid, RankType, Int32, Operator)", "Parameters": ["5325a7f1-0292-41bb-a223-2c84c005779a", "Bad", "3", "GreaterThanOrEqualTo"], "Flags": "", "UnrealCall": "", "FunctionHash": -191386609, "ParameterHash": 1197783645 }, "Not": false, "Operator": 0 }, { "$type": "OEIFormats.FlowCharts.ConditionalCall, OEIFormats", "Data": { "FullName": "Boolean PlayerShipHasActiveUpgrade(Guid)", "Parameters": ["cb9e3e3b-37ed-4301-a9f4-02f4588e8287"], "Flags": "", "UnrealCall": "", "FunctionHash": -641067011, "ParameterHash": -801277431 }, "Not": true, "Operator": 0 } ] } }, { "FactionReferenceID": "f3e9e979-e5bf-47b8-b1c3-208d76aa9b68", "HostilityConditionals": { "Operator": 0, "Components": [{ "$type": "OEIFormats.FlowCharts.ConditionalExpression, OEIFormats", "Operator": 1, "Components": [{ "$type": "OEIFormats.FlowCharts.ConditionalCall, OEIFormats", "Data": { "FullName": "Boolean PlayerShipHasActiveUpgrade(Guid)", "Parameters": ["3fbac293-4650-4257-859e-67c8d167f29a"], "Flags": "", "UnrealCall": "", "FunctionHash": -641067011, "ParameterHash": -740842320 }, "Not": false, "Operator": 0 } ] }, { "$type": "OEIFormats.FlowCharts.ConditionalExpression, OEIFormats", "Operator": 1, "Components": [{ "$type": "OEIFormats.FlowCharts.ConditionalCall, OEIFormats", "Data": { "FullName": "Boolean PlayerShipHasActiveUpgrade(Guid)", "Parameters": ["d315d6d7-bfcc-4520-abb5-4ce3c19ebcef"], "Flags": "", "UnrealCall": "", "FunctionHash": -641067011, "ParameterHash": -1246636609 }, "Not": false, "Operator": 0 } ] }, { "$type": "OEIFormats.FlowCharts.ConditionalExpression, OEIFormats", "Operator": 1, "Components": [{ "$type": "OEIFormats.FlowCharts.ConditionalCall, OEIFormats", "Data": { "FullName": "Boolean PlayerShipHasActiveUpgrade(Guid)", "Parameters": ["12e3b9ba-6985-4f13-a44f-d4b54fa1e82b"], "Flags": "", "UnrealCall": "", "FunctionHash": -641067011, "ParameterHash": -1831365689 }, "Not": false, "Operator": 0 }, { "$type": "OEIFormats.FlowCharts.ConditionalCall, OEIFormats", "Data": { "FullName": "Boolean IsReputation(Guid, RankType, Int32, Operator)", "Parameters": ["f3e9e979-e5bf-47b8-b1c3-208d76aa9b68", "Bad", "3", "GreaterThanOrEqualTo"], "Flags": "", "UnrealCall": "", "FunctionHash": -191386609, "ParameterHash": -1359339313 }, "Not": false, "Operator": 0 } ] } ] } }, { "FactionReferenceID": "08abadbb-1d2e-4a3c-a8ca-0dbb19379428", "HostilityConditionals": { "Operator": 0, "Components": [{ "$type": "OEIFormats.FlowCharts.ConditionalExpression, OEIFormats", "Operator": 1, "Components": [{ "$type": "OEIFormats.FlowCharts.ConditionalCall, OEIFormats", "Data": { "FullName": "Boolean PlayerShipHasActiveUpgrade(Guid)", "Parameters": ["3fbac293-4650-4257-859e-67c8d167f29a"], "Flags": "", "UnrealCall": "", "FunctionHash": -641067011, "ParameterHash": -740842320 }, "Not": false, "Operator": 0 } ] }, { "$type": "OEIFormats.FlowCharts.ConditionalExpression, OEIFormats", "Operator": 1, "Components": [{ "$type": "OEIFormats.FlowCharts.ConditionalCall, OEIFormats", "Data": { "FullName": "Boolean PlayerShipHasActiveUpgrade(Guid)", "Parameters": ["0701564c-7535-44ac-adc0-3c373b3ffa7f"], "Flags": "", "UnrealCall": "", "FunctionHash": -641067011, "ParameterHash": 828470183 }, "Not": false, "Operator": 0 } ] }, { "$type": "OEIFormats.FlowCharts.ConditionalExpression, OEIFormats", "Operator": 1, "Components": [{ "$type": "OEIFormats.FlowCharts.ConditionalCall, OEIFormats", "Data": { "FullName": "Boolean PlayerShipHasActiveUpgrade(Guid)", "Parameters": ["12e3b9ba-6985-4f13-a44f-d4b54fa1e82b"], "Flags": "", "UnrealCall": "", "FunctionHash": -641067011, "ParameterHash": -1831365689 }, "Not": false, "Operator": 0 }, { "$type": "OEIFormats.FlowCharts.ConditionalCall, OEIFormats", "Data": { "FullName": "Boolean IsReputation(Guid, RankType, Int32, Operator)", "Parameters": ["08abadbb-1d2e-4a3c-a8ca-0dbb19379428", "Bad", "3", "GreaterThanOrEqualTo"], "Flags": "", "UnrealCall": "", "FunctionHash": -191386609, "ParameterHash": -1975487999 }, "Not": false, "Operator": 0 } ] } ] } }, { "FactionReferenceID": "2d9b0cea-85af-4239-9704-17193f852b93", "HostilityConditionals": { "Operator": 0, "Components": [{ "$type": "OEIFormats.FlowCharts.ConditionalCall, OEIFormats", "Data": { "FullName": "Boolean IsGlobalValue(String, Operator, Int32)", "Parameters": ["n_FQP_Slavers_Quest_Stage", "EqualTo", "0"], "Flags": "", "UnrealCall": "", "FunctionHash": 901380568, "ParameterHash": -534981642 }, "Not": false, "Operator": 1 }, { "$type": "OEIFormats.FlowCharts.ConditionalCall, OEIFormats", "Data": { "FullName": "Boolean IsGlobalValue(String, Operator, Int32)", "Parameters": ["n_Crookspur_Kua_Outcome", "GreaterThan", "0"], "Flags": "", "UnrealCall": "", "FunctionHash": 901380568, "ParameterHash": 1345774961 }, "Not": false, "Operator": 1 } ] } }, { "FactionReferenceID": "ff6021da-17bc-4dc4-a9a7-f4d3b89c045d", "HostilityConditionals": { "Operator": 0, "Components": [] } } ], "CaptainOverrides": [{ "CaptainReferenceID": "75cca647-cad6-4537-bf96-491957718230", "HostilityConditionals": { "Operator": 0, "Components": [{ "$type": "OEIFormats.FlowCharts.ConditionalCall, OEIFormats", "Data": { "FullName": "Boolean IsGlobalValue(String, Operator, Int32)", "Parameters": ["n_FQP_Deadlight_Quest_Stage", "GreaterThanOrEqualTo", "7"], "Flags": "", "UnrealCall": "", "FunctionHash": 901380568, "ParameterHash": 2050999125 }, "Not": true, "Operator": 0 }, { "$type": "OEIFormats.FlowCharts.ConditionalCall, OEIFormats", "Data": { "FullName": "Boolean PlayerShipHasActiveUpgrade(Guid)", "Parameters": ["3fbac293-4650-4257-859e-67c8d167f29a"], "Flags": "", "UnrealCall": "", "FunctionHash": -641067011, "ParameterHash": -740842320 }, "Not": true, "Operator": 0 } ] } }, { "CaptainReferenceID": "0e1bf362-d362-4910-ad79-6846d255c0b6", "HostilityConditionals": { "Operator": 0, "Components": [{ "$type": "OEIFormats.FlowCharts.ConditionalCall, OEIFormats", "Data": { "FullName": "Boolean IsGlobalValue(String, Operator, Int32)", "Parameters": ["n_FQP_Deadlight_Quest_Stage", "GreaterThanOrEqualTo", "7"], "Flags": "", "UnrealCall": "", "FunctionHash": 901380568, "ParameterHash": 2050999125 }, "Not": true, "Operator": 0 }, { "$type": "OEIFormats.FlowCharts.ConditionalCall, OEIFormats", "Data": { "FullName": "Boolean PlayerShipHasActiveUpgrade(Guid)", "Parameters": ["3fbac293-4650-4257-859e-67c8d167f29a"], "Flags": "", "UnrealCall": "", "FunctionHash": -641067011, "ParameterHash": -740842320 }, "Not": true, "Operator": 0 } ] } }, { "CaptainReferenceID": "b32a6637-f82a-430c-a8c3-ae23d34d7e43", "HostilityConditionals": { "Operator": 0, "Components": [{ "$type": "OEIFormats.FlowCharts.ConditionalCall, OEIFormats", "Data": { "FullName": "Boolean IsGlobalValue(String, Operator, Int32)", "Parameters": ["n_FQP_Deadlight_Quest_Stage", "GreaterThanOrEqualTo", "7"], "Flags": "", "UnrealCall": "", "FunctionHash": 901380568, "ParameterHash": 2050999125 }, "Not": true, "Operator": 0 }, { "$type": "OEIFormats.FlowCharts.ConditionalCall, OEIFormats", "Data": { "FullName": "Boolean PlayerShipHasActiveUpgrade(Guid)", "Parameters": ["3fbac293-4650-4257-859e-67c8d167f29a"], "Flags": "", "UnrealCall": "", "FunctionHash": -641067011, "ParameterHash": -740842320 }, "Not": true, "Operator": 0 } ] } }, { "CaptainReferenceID": "8d4a2255-bd4c-4228-b03b-b0167bd10357", "HostilityConditionals": { "Operator": 0, "Components": [] } }, { "CaptainReferenceID": "3e0d98e0-a16e-42d5-970a-c5d05fe09462", "HostilityConditionals": { "Operator": 0, "Components": [] } }, { "CaptainReferenceID": "c82d5813-34fd-4518-b159-aaf3de01ddf0", "HostilityConditionals": { "Operator": 0, "Components": [] } }, { "CaptainReferenceID": "7d228721-95f3-4c1f-ac9d-2095642faad8", "HostilityConditionals": { "Operator": 0, "Components": [] } }, { "CaptainReferenceID": "e80b4214-abd6-4cee-8fe1-723a7471db46", "HostilityConditionals": { "Operator": 0, "Components": [] } }, { "CaptainReferenceID": "eac3fd0a-8dbc-4e2c-beae-c6ada4c537ee", "HostilityConditionals": { "Operator": 0, "Components": [{ "$type": "OEIFormats.FlowCharts.ConditionalCall, OEIFormats", "Data": { "FullName": "Boolean IsShipType(ShipDuelParticipant, ShipType)", "Parameters": ["Player", "Submarine"], "Flags": "", "UnrealCall": "", "FunctionHash": 1807620614, "ParameterHash": 583234889 }, "Not": true, "Operator": 0 }, { "$type": "OEIFormats.FlowCharts.ConditionalCall, OEIFormats", "Data": { "FullName": "Boolean IsShipType(ShipDuelParticipant, ShipType)", "Parameters": ["Player", "GhostShip"], "Flags": "", "UnrealCall": "", "FunctionHash": 1807620614, "ParameterHash": 59267328 }, "Not": true, "Operator": 0 } ] } }, { "CaptainReferenceID": "3e251b7e-152a-4ddf-bb23-23e7b52bddbb", "HostilityConditionals": { "Operator": 0, "Components": [{ "$type": "OEIFormats.FlowCharts.ConditionalCall, OEIFormats", "Data": { "FullName": "Boolean IsShipType(ShipDuelParticipant, ShipType)", "Parameters": ["Player", "Submarine"], "Flags": "", "UnrealCall": "", "FunctionHash": 1807620614, "ParameterHash": 583234889 }, "Not": true, "Operator": 0 }, { "$type": "OEIFormats.FlowCharts.ConditionalCall, OEIFormats", "Data": { "FullName": "Boolean IsShipType(ShipDuelParticipant, ShipType)", "Parameters": ["Player", "GhostShip"], "Flags": "", "UnrealCall": "", "FunctionHash": 1807620614, "ParameterHash": 59267328 }, "Not": true, "Operator": 0 } ] } }, { "CaptainReferenceID": "cf176ca8-9569-4e67-93c4-0ec642880d75", "HostilityConditionals": { "Operator": 0, "Components": [{ "$type": "OEIFormats.FlowCharts.ConditionalCall, OEIFormats", "Data": { "FullName": "Boolean IsShipType(ShipDuelParticipant, ShipType)", "Parameters": ["Player", "Submarine"], "Flags": "", "UnrealCall": "", "FunctionHash": 1807620614, "ParameterHash": 583234889 }, "Not": true, "Operator": 0 }, { "$type": "OEIFormats.FlowCharts.ConditionalCall, OEIFormats", "Data": { "FullName": "Boolean IsShipType(ShipDuelParticipant, ShipType)", "Parameters": ["Player", "GhostShip"], "Flags": "", "UnrealCall": "", "FunctionHash": 1807620614, "ParameterHash": 59267328 }, "Not": true, "Operator": 0 } ] } }, { "CaptainReferenceID": "643e0399-2722-4f8f-b28f-2edc6fc7ea05", "HostilityConditionals": { "Operator": 0, "Components": [{ "$type": "OEIFormats.FlowCharts.ConditionalCall, OEIFormats", "Data": { "FullName": "Boolean IsShipType(ShipDuelParticipant, ShipType)", "Parameters": ["Player", "Submarine"], "Flags": "", "UnrealCall": "", "FunctionHash": 1807620614, "ParameterHash": 583234889 }, "Not": true, "Operator": 0 }, { "$type": "OEIFormats.FlowCharts.ConditionalCall, OEIFormats", "Data": { "FullName": "Boolean IsShipType(ShipDuelParticipant, ShipType)", "Parameters": ["Player", "GhostShip"], "Flags": "", "UnrealCall": "", "FunctionHash": 1807620614, "ParameterHash": 59267328 }, "Not": true, "Operator": 0 } ] } }, { "CaptainReferenceID": "d3bc51e7-3402-4089-89d8-1dde8b9283b5", "HostilityConditionals": { "Operator": 0, "Components": [{ "$type": "OEIFormats.FlowCharts.ConditionalCall, OEIFormats", "Data": { "FullName": "Boolean IsShipType(ShipDuelParticipant, ShipType)", "Parameters": ["Player", "Submarine"], "Flags": "", "UnrealCall": "", "FunctionHash": 1807620614, "ParameterHash": 583234889 }, "Not": true, "Operator": 0 }, { "$type": "OEIFormats.FlowCharts.ConditionalCall, OEIFormats", "Data": { "FullName": "Boolean IsShipType(ShipDuelParticipant, ShipType)", "Parameters": ["Player", "GhostShip"], "Flags": "", "UnrealCall": "", "FunctionHash": 1807620614, "ParameterHash": 59267328 }, "Not": true, "Operator": 0 } ] } }, { "CaptainReferenceID": "b29cddd2-debb-4f04-b2cb-b2ceff5507f9", "HostilityConditionals": { "Operator": 0, "Components": [{ "$type": "OEIFormats.FlowCharts.ConditionalCall, OEIFormats", "Data": { "FullName": "Boolean IsShipType(ShipDuelParticipant, ShipType)", "Parameters": ["Player", "Submarine"], "Flags": "", "UnrealCall": "", "FunctionHash": 1807620614, "ParameterHash": 583234889 }, "Not": true, "Operator": 0 }, { "$type": "OEIFormats.FlowCharts.ConditionalCall, OEIFormats", "Data": { "FullName": "Boolean IsShipType(ShipDuelParticipant, ShipType)", "Parameters": ["Player", "GhostShip"], "Flags": "", "UnrealCall": "", "FunctionHash": 1807620614, "ParameterHash": 59267328 }, "Not": true, "Operator": 0 } ] } }, { "CaptainReferenceID": "542e2ac4-aa96-477e-bf68-d8e43cd9e8fb", "HostilityConditionals": { "Operator": 0, "Components": [{ "$type": "OEIFormats.FlowCharts.ConditionalCall, OEIFormats", "Data": { "FullName": "Boolean IsShipType(ShipDuelParticipant, ShipType)", "Parameters": ["Player", "Submarine"], "Flags": "", "UnrealCall": "", "FunctionHash": 1807620614, "ParameterHash": 583234889 }, "Not": true, "Operator": 0 }, { "$type": "OEIFormats.FlowCharts.ConditionalCall, OEIFormats", "Data": { "FullName": "Boolean IsShipType(ShipDuelParticipant, ShipType)", "Parameters": ["Player", "GhostShip"], "Flags": "", "UnrealCall": "", "FunctionHash": 1807620614, "ParameterHash": 59267328 }, "Not": true, "Operator": 0 } ] } }, { "CaptainReferenceID": "18c582bb-4656-4465-bd15-8a7e1849bb4b", "HostilityConditionals": { "Operator": 0, "Components": [{ "$type": "OEIFormats.FlowCharts.ConditionalCall, OEIFormats", "Data": { "FullName": "Boolean IsShipType(ShipDuelParticipant, ShipType)", "Parameters": ["Player", "Submarine"], "Flags": "", "UnrealCall": "", "FunctionHash": 1807620614, "ParameterHash": 583234889 }, "Not": true, "Operator": 0 }, { "$type": "OEIFormats.FlowCharts.ConditionalCall, OEIFormats", "Data": { "FullName": "Boolean IsShipType(ShipDuelParticipant, ShipType)", "Parameters": ["Player", "GhostShip"], "Flags": "", "UnrealCall": "", "FunctionHash": 1807620614, "ParameterHash": 59267328 }, "Not": true, "Operator": 0 } ] } }, { "CaptainReferenceID": "3559d58f-35f6-4651-9b43-e967e0eb731a", "HostilityConditionals": { "Operator": 0, "Components": [{ "$type": "OEIFormats.FlowCharts.ConditionalCall, OEIFormats", "Data": { "FullName": "Boolean IsShipType(ShipDuelParticipant, ShipType)", "Parameters": ["Player", "Submarine"], "Flags": "", "UnrealCall": "", "FunctionHash": 1807620614, "ParameterHash": 583234889 }, "Not": true, "Operator": 0 }, { "$type": "OEIFormats.FlowCharts.ConditionalCall, OEIFormats", "Data": { "FullName": "Boolean IsShipType(ShipDuelParticipant, ShipType)", "Parameters": ["Player", "GhostShip"], "Flags": "", "UnrealCall": "", "FunctionHash": 1807620614, "ParameterHash": 59267328 }, "Not": true, "Operator": 0 } ] } }, { "CaptainReferenceID": "f3290000-50c9-479b-bc14-c7f6b4eb094b", "HostilityConditionals": { "Operator": 0, "Components": [] } }, { "CaptainReferenceID": "1fe39eee-72de-48fc-833a-b1e7627a276d", "HostilityConditionals": { "Operator": 0, "Components": [] } }, { "CaptainReferenceID": "0d89270d-411c-457b-a4d5-45f9c7a1a1ed", "HostilityConditionals": { "Operator": 0, "Components": [] } }, { "CaptainReferenceID": "49492c1a-e23a-4016-a574-d15d15087075", "HostilityConditionals": { "Operator": 0, "Components": [] } }, { "CaptainReferenceID": "36697624-0627-4fe0-8a70-42be06da8e6b", "HostilityConditionals": { "Operator": 0, "Components": [] } }, { "CaptainReferenceID": "e5e0d770-2ca3-401e-ab38-8ff2164df860", "HostilityConditionals": { "Operator": 0, "Components": [] } }, { "CaptainReferenceID": "0838c4aa-e595-4f3a-8318-070051424ec9", "HostilityConditionals": { "Operator": 0, "Components": [{ "$type": "OEIFormats.FlowCharts.ConditionalCall, OEIFormats", "Data": { "FullName": "Boolean IsTeamRelationshipToPlayer(Guid, Relationship)", "Parameters": ["291d858a-516c-4470-afaa-de99360cbb4c", "Hostile"], "Flags": "", "UnrealCall": "", "FunctionHash": -1987818039, "ParameterHash": -622768946 }, "Not": false, "Operator": 0 } ] } } ] } ] } Would everything inside "Components": [lots of stuff] be considered an array, or would it only be things like "FactionHostilitySets": [other stuff]? As I look at most Game Data Objects, it seems most of the things we would care about changing are things that are inside "Components": as subsections, so I would presume that everything inside "Components": doesn't need to be copied over wholesale, just the blocks of code within it that do. Like, say I modify one entry in "FactionHostilitySets":, then if I understand what you are saying correctly I should keep ALL of the other entires within "FactionHostilitySets": as is so the game knows to execute them, but it is safe for me to chop off the "CaptainOverrides": [yet other stuff], as that won't be overridden? If it's not that way, then I'll just wait for that tutorial to come out and study it until I understand things.
BMac Posted July 3, 2018 Author Posted July 3, 2018 Would everything inside "Components": [lots of stuff] be considered an array, or would it only be things like "FactionHostilitySets": [other stuff]? An array is a property that has a list of things in it rather than just one value. In JSON, you can identify them because the value(s) are inside [square braces]. { "Array":[1, 2, 3], "NotArray":4 }, { "ArrayOfObjects":[{"Name":"A"},{"Name":"B"}], "NotArrayObject":{"Name":"C"} } Yes, "Components" itself is technically an array, but we handle that one specially so you can override individual components and ignore others entirely. The upcoming tutorial will cover this somewhat. Like, say I modify one entry in "FactionHostilitySets":, then if I understand what you are saying correctly I should keep ALL of the other entires within "FactionHostilitySets": as is so the game knows to execute them, but it is safe for me to chop off the "CaptainOverrides": [yet other stuff], as that won't be overridden? That's right. 1
peardox Posted July 3, 2018 Posted July 3, 2018 Still broken - in a moment Quick check - they nearly got it right I've got a benign (only checks stuff) script As you may have noticed I number things so this one is exported-1.2.0 (explanation before bug report) exported-1.2.0/design/chatter/chatter.chatterbundleJSON_ERROR_SYNTAX That's the only one that fails - I can see what is likely wrong Yep - sloppy simon@Ubu:~/git/utils$ tail exported-1.2.0/design/chatter/chatter.chatterbundle "OnExitScripts": [], "OnUpdateScripts": [] } ], "ClassExtender": { "ExtendedProperties": [] } }, ]} As I say - sloppy, the last comma invalids15M of data Good luck in 1.2.1 Does anyone want my JSON and fixed versions of 1.2.0? It'll only take me a few minutes? Err dumb question - of course you do I'm only gonna do Zips this time as it takes ages to do the RAR + TGZ versions 1 OK Fair warning has been applied I'm gonna move the domain to https://perspak.com early Feb but will keep all content There are reasons behind this move which basically boil down to unifying my release schedule My friends are welcome to play (I'll set you up your own areas if you desire them) Please note that this process is messy so may take a few weeks
Zap Gun For Hire Posted July 3, 2018 Posted July 3, 2018 (edited) Would everything inside "Components": [lots of stuff] be considered an array, or would it only be things like "FactionHostilitySets": [other stuff]? An array is a property that has a list of things in it rather than just one value. In JSON, you can identify them because the value(s) are inside [square braces]. { "Array":[1, 2, 3], "NotArray":4 }, { "ArrayOfObjects":[{"Name":"A"},{"Name":"B"}], "NotArrayObject":{"Name":"C"} } Yes, "Components" itself is technically an array, but we handle that one specially so you can override individual components and ignore others entirely. The upcoming tutorial will cover this somewhat. Like, say I modify one entry in "FactionHostilitySets":, then if I understand what you are saying correctly I should keep ALL of the other entires within "FactionHostilitySets": as is so the game knows to execute them, but it is safe for me to chop off the "CaptainOverrides": [yet other stuff], as that won't be overridden? That's right. That explanation (and the exception about Components) explained everything perfectly. Thanks as always. (I'd say "You're the best", but I'd be afraid of being sued for copyright infringement from your fellow Obsidian poster ) Edited July 3, 2018 by Zap Gun For Hire
peardox Posted July 4, 2018 Posted July 4, 2018 I keep running out of memory processing the JSON files Trying to resolve this issue - gave it 4G Might WAMP it as I've got 16Gb and 8Gb on the MAMP Gimme a bit do can debug myself OK Fair warning has been applied I'm gonna move the domain to https://perspak.com early Feb but will keep all content There are reasons behind this move which basically boil down to unifying my release schedule My friends are welcome to play (I'll set you up your own areas if you desire them) Please note that this process is messy so may take a few weeks
ferzal Posted July 4, 2018 Posted July 4, 2018 (edited) Syntax fixes ey... I'll have to check one of the received status types that used to be recieved (English rule is "i before e except after c when the sound is ee" ) that I was using. A little heads up on some of those things would be good. One of the Beckoner entries, for example, was Beckonter or something like that. It was just a debug name so it shouldn't cause any problems but the statustype will. I'll check soon. Update: Nope. Still "recieved" on some. Saves a little search/replace. Next on the list to look at: progressiontable changes. New classes... cool. Any control over multiclassing/subclass mixing options yet? I'll be looking at that later but if anyone knows now (a dev would be ideal) that would save me time. Cheers. Edited July 4, 2018 by ferzal
Tarlonniel Posted July 4, 2018 Posted July 4, 2018 Yes, conversationbundles can now use mod override folders - they'll be searched for at the expected path inside each mod folder. Darn it, I still can't get this to work. I put the modified bundle in override/MyMod/design/[required pathway] and the game just ignored it. Stop ignoring me, game. Maybe I'm just an idiot. I'll keep poking at it over the holiday tomorrow.
GravitonGamer Posted July 4, 2018 Posted July 4, 2018 Thanks for this. As a modder, this is exactly what I needed to know. Good job with all the changes! Even though I have to fix some of my mods, these changes will make any future modding much faster. I just want to ask though, for the textures, where can we find the recommended image dimensions for each texture type? There aren't any examples in the exported folder last time I checked.
Zap Gun For Hire Posted July 4, 2018 Posted July 4, 2018 Yes, conversationbundles can now use mod override folders - they'll be searched for at the expected path inside each mod folder. Darn it, I still can't get this to work. I put the modified bundle in override/MyMod/design/[required pathway] and the game just ignored it. Stop ignoring me, game. Maybe I'm just an idiot. I'll keep poking at it over the holiday tomorrow. I got it to work by NOT putting it in a /design folder. Using override/<mymodfolder>/conversations/<targetfolder> Worked like a charm. 2
Zap Gun For Hire Posted July 4, 2018 Posted July 4, 2018 (edited) Oooh, interesting. I'll give that a try. I haven't played with the stringtables required to make a truly new dialogue, but as I understand it stringtables haven't been an issue. What I did was a simple test by having Marihi give me all three possible unique weapons (Blades of the Endless Paths, Whispers of Yenwood, and Whispers of the Endless Paths) instead of just one via a full override (I copied her entire conversation bundle and simply edited Node 23), and got it to work: If that works, other more complicated overrides should also work Edited July 4, 2018 by Zap Gun For Hire
Tarlonniel Posted July 4, 2018 Posted July 4, 2018 Before I start going all Dr. Frankenstein on my mods, do I have a correct understanding of how load order works? That is, if two mods which modify the same file, say mod A and mod B, are placed in the override folder, the game's default is to load them in alphabetical order, which means mod B wins. But if the user goes into the in-game mod manager and moves A later in the load order than B, then A wins. Is that right?
peardox Posted July 4, 2018 Posted July 4, 2018 Mega way cool TT1 - check this out This is a one line patch to the infamous Parrot In your mod Directory create a piccy @ gui/icons/items/misc/dead_parrot.png Now, simply change... "IconTextureLarge": "gui/icons/items/misc/pet_white_bird_l.png", To... "IconTextureLarge": "gui/icons/items/misc/dead_parrot.png", And we get this @BMac - can we have IconTextureSmall as well please as this is a really great feature I usually do 256x256 art or powers of 2 - 512, 1024, 2048 etc for a large - can we have a recommended size for art That particular image is simply a test so can't let you have it - it's some guy's Parrot T-Shirt design and hence is © <someone> I've got two artists who want to start adding modding contrubutions I'll go contact them now 2 OK Fair warning has been applied I'm gonna move the domain to https://perspak.com early Feb but will keep all content There are reasons behind this move which basically boil down to unifying my release schedule My friends are welcome to play (I'll set you up your own areas if you desire them) Please note that this process is messy so may take a few weeks
peardox Posted July 4, 2018 Posted July 4, 2018 It was only a quick test I did on Sunday If you do your Modder's slack (poe2.slack.com - invite only ATM - PM me your email for an invite) I've added a few comments to enthuse Hampster (@tonpix on slack) As of this moment we can only do something like I show above (Large texture) but I've PM's @BMac reqing Small as well - you'll notice on that image the icon in the vendor's list is still the old one. Don't bother trying - I already did - Small results in a missing icon (Big RED X) As convos are now moddable I'm gonna finish off my morning with the usual readthru of important stuff then get back to doing that It's fortunate that I had problems yesterday as today's will be worth actually doing stuff with (I was prepping people yesterday, today it's a reality) OK Fair warning has been applied I'm gonna move the domain to https://perspak.com early Feb but will keep all content There are reasons behind this move which basically boil down to unifying my release schedule My friends are welcome to play (I'll set you up your own areas if you desire them) Please note that this process is messy so may take a few weeks
TT1 Posted July 4, 2018 Posted July 4, 2018 ... Hey @BMac, is possible to have two ProficientAbilityID in the same EquippableComponent? E.g.: two modals for the same weapon. 1
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now