RilleL Posted December 11, 2022 Share Posted December 11, 2022 (edited) Have you ever thought to save only partial components to save mod size? E.g (default): "Trigger": {"A": 0, "B": 1, "C", 0}. You want to change "A" -> "Trigger": {"A": 1, "B": 1, "C", 0}, but your mod only needed to save "Trigger": {"A": 1, "B": 1}, because the game would default C. I doesn't seem like much in this example, but suppose you're modding lots of components were most of the values are 0/false/none. It would save a lot of space, plus make the mod more readable. Edited December 11, 2022 by RilleL 1 Link to comment Share on other sites More sharing options...
Noqn Posted December 11, 2022 Author Share Posted December 11, 2022 I'm actually doing this for the .gamedatabundles that are compiled to apotheosis_exported to improve load times all booleans/numbers/Guids/enums with default values are skipped. I've vaguely played with the idea of letting users trim the output (and also disable JSON formating) before, so it's cool you brought it up. In terms of what's theoretically safe to skip: 1. Edits to pre-existing GameDataComponents' properties -> has to be included to register the change. 2. New GameDataComponents' properties -> could probably be skipped. 3. Struct properties -> can safely be skipped. One major concern I have is that it would be significantly harder to debug or manually fix the mod if a bunch of properties are hidden, so in terms of readability it might actually do more harm than good. Also, it might give users the impression that something has gone wrong if not everything is written. If I were to add a feature like this, it would have to be opt-in. In terms of size, while it depends on the data type, I suspect the difference would be negligible. Some of the really large data types like ProgressionTables actually has a smaller portion of values that are safe to default. I could see the case for this feature if you were to auto-generate a bunch of GameData with the User Script feature. At the moment I would be against it, but it's in the "definitely worth considering" category. I've added an issue to GitLab for the future. Link to comment Share on other sites More sharing options...
RilleL Posted December 11, 2022 Share Posted December 11, 2022 (edited) Yeah, It may be more trouble than it's worth. I had the idea when I was making lots of small changes, but all the included "junk" made it hard to identify my own changes at a glance. It's unfortunate that Deadfire doesn't default to the unmodded value instead of a default value when missing an entry. If that were the case, you would be able to just save only what you changed. I think an option to save your mod without formatting by removing all whitespace would be a good idea. That could save a lot of space without anything functionally different, it's how .gamedatabundles-files are after all. Edited December 11, 2022 by RilleL 1 Link to comment Share on other sites More sharing options...
RilleL Posted December 13, 2022 Share Posted December 13, 2022 Is Apotheosis using locale or something? E.g. of changing value: 3 -> "+" -> 4,0000000 -> 40000000. 1 Link to comment Share on other sites More sharing options...
RilleL Posted December 13, 2022 Share Posted December 13, 2022 Is it possible to search the contents of multiple (all?) text files? I can only seem to search for the actual file name, not the contents. Many times now I've come across some dialogue in-game, or some ability description which I want to edit, but I spend so long just finding were it is. I was finally forced to use grep when I just couldn't locate what I needed, it would be great for this functionality to be in-editor. Link to comment Share on other sites More sharing options...
Noqn Posted December 13, 2022 Author Share Posted December 13, 2022 (edited) @RilleL Thanks for reporting. Yeah, this is the GUI library's doing... The "number editor" popup belongs to a particularily ancient part of the library and has quirks. The widget itself is basically a glorified text entry. To explain the 000000's, It's default behavior is to fill itself with with trailing 0's decimals. I've however disabled the decimals when editing an integer, and made it so that the decimals in a float value will initially be trimmed away. But once you press the +/- buttons, the widget will again fill the entry with trailing 0's decimals. It also formats the string independently of .NET locale like you guessed. I've published a new release which *should* fix the parsing of the string that is returned from the popup on all locales. Can you verify that the latest version is working? ______ Also, Thanks @Kvellen for finding some quite severe regressions and bugs: 2022-12-13 - TalkNode Speaker and Listener options are now updated when Character Mappings are edited - Fix float values being parsed incorrectly in GameData editor - Stop incorrectly throwing MismatchFromNodeID exception when loading Quests - Fix recusion causing stack overflow when editing Quest string tables. Edited December 13, 2022 by Noqn 1 Link to comment Share on other sites More sharing options...
Noqn Posted December 13, 2022 Author Share Posted December 13, 2022 @RilleL oh that would be useful, I'll try to throw something together! Also, maybe this is not what you asked for, but for finding gamedata based on in-game text, check out Queries! https://gitlab.com/noqn/apotheosis/-/blob/main/Docs/Queries.md e.g. #GenericAbility.DisplayName &= "Minoletta" will match all abilities with "Minoletta" in their in-game name Link to comment Share on other sites More sharing options...
RilleL Posted December 13, 2022 Share Posted December 13, 2022 Ah, so that was what that tab was for. Also: 1 Link to comment Share on other sites More sharing options...
Noqn Posted December 13, 2022 Author Share Posted December 13, 2022 aaagh. Alright, so GTK runs its own locale logic which is inconsistent with .NET's... Another release is up, this time it should be fixed. Link to comment Share on other sites More sharing options...
Noqn Posted December 13, 2022 Author Share Posted December 13, 2022 (edited) Added a String Table Query to the sidebar! It will check for matching entries in the standard, Conversation and Quest StringTables: Clicking a row under GameData StringTables will open that StringTable in a new tab. Clicking a row under Conversation/Quest StringTables will open that convo/quest in a new tab. (You can then go to the StringTable view in that tab and find the specific entry from there.) Edited December 13, 2022 by Noqn 3 Link to comment Share on other sites More sharing options...
RilleL Posted December 14, 2022 Share Posted December 14, 2022 (edited) Works great. Awesome! Just for curiosity, could you explain a bit how you do the String Table Query search? I'm looking at the code but I'm struggling a lot through all the abstractions of dics. Even so, if I understand it correctly, isn't the search ultimately done in Matches()/Contains() by parsing through all the text entries in all the files and searching for the query? So a "sequential" search. If so, I don't understand how it is so fast; I would've thought it would take a bit to parse everything. Edited December 14, 2022 by RilleL 1 Link to comment Share on other sites More sharing options...
Noqn Posted December 16, 2022 Author Share Posted December 16, 2022 Quote Just for curiosity, could you explain a bit how you do the String Table Query search? I'm looking at the code but I'm struggling a lot through all the abstractions of dics. Even so, if I understand it correctly, isn't the search ultimately done in Matches()/Contains() by parsing through all the text entries in all the files and searching for the query? So a "sequential" search. Yeah pretty much. All StringTableEntry text are stored when the mods are loaded, so here I'm just enumerating through the collections and doing standard string comparisons. If its particularily fast, it's thanks to .NET string comparisons being well optimized Quote I'm looking at the code but I'm struggling a lot through all the abstractions of dics mmm, it's a bit awkward how the StringTableEntries are stored. You basically got three levels of nested Dictionaries: First you got a Dictionary with string keys (defining the language) and nested Dictionary values. These nested Dictionaries* has either GameData categories (e.g. Abilities, Items) or a path (e.g. "conversations\00_prototype\00_cv_drummer") as keys, and again nested Dictionaries as values. Lastly, these Dictionaries have int keys (StringTableEntry IDs) and StringTableEntry values. (*The second layer is a actually a class that wraps dictionaries and exposes some helper methods. Maybe this could be replaced in favor of just using extension methods?) Link to comment Share on other sites More sharing options...
Grape_You_In_The_Mouth Posted December 18, 2022 Share Posted December 18, 2022 What the actual ****. This is so amazing. I always thought someone would make this, so I'm not sure why I'm so surprised it was Noqn. So jealous you're able to do such transformational work! Just thinking about the conversation editor is so inspirational. Maybe one day we'll have a perfect writing mod that makes this the perfect game? There's so many intriguing questions and moral dilemmas that could be better enunciated in the game. 1 Link to comment Share on other sites More sharing options...
Kvellen Posted December 29, 2022 Share Posted December 29, 2022 (edited) Hey @Noqn , hope you are enjoying some time off for the holidays if you got it! Would it be possible for you to make Apotheosis generate a conversation.manfest entry for new conversations on their creation? This is something I've been creating manually, and despite it being crucial for conversations to function, surprisingly it's something I always tend to forget to do! So having it be generated automatically would be great. Edited December 29, 2022 by Kvellen 1 Link to comment Share on other sites More sharing options...
Grape_You_In_The_Mouth Posted December 30, 2022 Share Posted December 30, 2022 Where is the short list of features? I'm confused if it can add new recipes, items, etc. and couldn't easily find a way to do it on the program. Now that I read the Usage document I'm guessing I can right click on the top row of the items.gamedatabundle file to add something. Something you may want to keep in mind is that non-coders aren't used to the github presentation style, so I had to remember to look in the Gitlab page's docs folder for the instructions, which are usually in the readme or included with the executable archive (I'm using Linux btw). Normally I think what would be the folders in the Gitlab page is just files of programming code. The average person, I believe, would just look at the links in the readme file and then be confused if something's not shown in the video, such as how to make new recipes. Also it would be killer to have something like a "creation guide" that helps you create an item or ability step-by-step, tracking the links between objects and files in the Item->ItemMod->Ability->Attack->StatusEffect you create. That problem, along with Visual Effects compatibility, and Enchantment Recipes are what cost the most time for me and are so confusing/frustrating for beginners. Pillars 2 is going to be awesome in the next few years! 1 Link to comment Share on other sites More sharing options...
Grape_You_In_The_Mouth Posted December 30, 2022 Share Posted December 30, 2022 Theme Song https://www.youtube.com/watch?v=pduqcrc_pNw 1 Link to comment Share on other sites More sharing options...
Grape_You_In_The_Mouth Posted December 31, 2022 Share Posted December 31, 2022 (edited) Seems important to be able to determine which stringtable ranges are newly assigned I was able to create a null ItemMod debugname somehow. Thought I typed in the name but regardless, having no debugname was apparently allowed in the editor but once I tried to reopen the editor and load my mod, it rejected it for the empty debugname. All the error checks on loading mods are very impressive! Edited January 3, 2023 by Grape_You_In_The_Mouth 1 Link to comment Share on other sites More sharing options...
Noqn Posted January 14, 2023 Author Share Posted January 14, 2023 On 12/29/2022 at 6:46 PM, Kvellen said: Hey @Noqn , hope you are enjoying some time off for the holidays if you got it! Thanks had a boatload of vacation days saved up! On 12/29/2022 at 6:46 PM, Kvellen said: Would it be possible for you to make Apotheosis generate a conversation.manfest entry for new conversations on their creation? Oh wow thanks, I wasn't even aware of conversation manifests, I'll make sure they are generated. On 12/30/2022 at 11:58 AM, Grape_You_In_The_Mouth said: Where is the short list of features? I'm confused if it can add new recipes, items, etc. and couldn't easily find a way to do it on the program. All you've written re: documentation is invaluable feedback, many thanks! I'm thinking about moving the documentation to the gitlab project's wiki page, then adding a "Help" or ? button to the application's header bar which will open that web page. Sounds good? On 12/31/2022 at 3:43 PM, Grape_You_In_The_Mouth said: Seems important to be able to determine which stringtable ranges are newly assigned Good point, how about displaying the mod's stringtable range in the Manifest-editing dialog? On 12/31/2022 at 3:43 PM, Grape_You_In_The_Mouth said: I was able to create a null ItemMod debugname somehow. Thought I typed in the name but regardless, having no debugname was apparently allowed in the editor but once I tried to reopen the editor and load my mod, it rejected it for the empty debugname. All the error checks on loading mods are very impressive! Thanks, I'm super happy how the error messages turned out I'll check ot the null debugname bug tho 1 Link to comment Share on other sites More sharing options...
Noqn Posted January 19, 2023 Author Share Posted January 19, 2023 New release! I've implemented automatic updates! (You still have to install *this* version manually though) I've also added a popup selector for most of the *.prefab fields. You'll get to choose from among what's available in the corresponding "PillarsOfEternityII_Data/assetbundles/*.unity3d" files. This will make it a lot easier to find values for character and effect prefabs, among others. Also started exporting conversations.manifest and fixed some other stuff mentioned here: 2023-01-19 Auto Updates! When a new release is available, a dialog will give the user the opportunity to download it. Added a "prefab path" selector popup. conversations.manifest files will now be exported. Fixed an issue which caused GameDataObjects to be created with DebugName set to null. SpeakerComponent.ChatterFile will now correctly default to an empty ID string. Improved generation time of Conversation & Quest diagrams. StringTable queries now search GameData/Conversation/Quest tables asynchronously. 4 Link to comment Share on other sites More sharing options...
Grape_You_In_The_Mouth Posted January 20, 2023 Share Posted January 20, 2023 On 1/14/2023 at 7:19 AM, Noqn said: I'm thinking about moving the documentation to the gitlab project's wiki page, then adding a "Help" or ? button to the application's header bar which will open that web page. Sounds good? Definitely On 1/14/2023 at 7:19 AM, Noqn said: Good point, how about displaying the mod's stringtable range in the Manifest-editing dialog? Now I think I'm wrong about this, because what you do would make it a 1 in 1,000,000 chance some string interferes. Displaying the range in the manifest or somewhere would be good though in case a conflict does happen. I'm just used to choosing a block of numbers for my strings and then logging which ones are for what, because string errors are the worst problems I've had aside from visual effects not working. On 1/14/2023 at 7:19 AM, Noqn said: Thanks, I'm super happy how the error messages turned out I'll check ot the null debugname bug tho I also think I'm wrong about this slightly, because now I think what happened was my Apotheosis program crashed (because I use Arch Linux) so that's what created the null field as I didn't define it or it didn't have a chance to save it. Knowing how to go in and add your own debug to the data probably isn't too hard for modders but the casuals will be downtrodden if it happens to them. Also just a slight suggestion that if I could scroll down the menu of available StatusEffects faster that would make it faster for me to use Apotheosis than do it myself. It's still distastefully jarring to have to go to the different sections in Apotheosis rather than do all the code in one gamedatabundle sequentially, because I'm so used to it that way. I can't imagine new users will have this problem at all though as it's purely because I'm used to setting up my process according to how I think. 1 Link to comment Share on other sites More sharing options...
Syzzke07 Posted January 20, 2023 Share Posted January 20, 2023 That's a really good update. On the same note, I don't know how it works so, would it be possible to achieve the same effect with the .asset part? Like if you go to the bottom of a ChangeForm component such as Spiritshift_Cat, the appearance/model that you will look like after spiritshifting is the asset you set there. 1 Link to comment Share on other sites More sharing options...
Kvellen Posted February 19, 2023 Share Posted February 19, 2023 Just had a very weird time where Apotheosis was continually loading an old version of a conversation. Turns out it was loading the older conversation from the backup folder I had created in the conversation directory. Link to comment Share on other sites More sharing options...
Noqn Posted May 1, 2023 Author Share Posted May 1, 2023 First update in a while, time to see if the auto-update feature works properly 2023-05-01 Added auto-completion functionality to expression editors! Searching conversation nodes will now also match Bank Node children. Conversation 'Character Mappings' are now scrollable and won't increase the window height. 'Vatnir' and 'Mirke' expression editor aliases now translates to the correct IDs. User scripts now include System.Collections.[Generic | Immutable] usings. One feature I'm very happy about is auto-completions when editing expressions, this will speed things up immensely 3 1 Link to comment Share on other sites More sharing options...
Kvellen Posted May 1, 2023 Share Posted May 1, 2023 Auto Update and the auto complete on expressions both working on my end. Really fantastic addition! 2 Link to comment Share on other sites More sharing options...
abot Posted May 9, 2023 Share Posted May 9, 2023 Great work, makes trying to mod Deadfire much less painful. 1 https://www.youtube.com/user/a01oftaste Link to comment Share on other sites More sharing options...
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