Jump to content

Apotheosis - Mod Editor for Deadfire


Recommended Posts

  • Noqn changed the title to Apotheosis - Mod Editor for Deadfire

Some updates:

Conversation & Quest node links can now be deleted, just click the red button:

RNKLeyZ.png

If there's only one remaining link to a node, a confirmation popup will be displayed. If the last link to a node is deleted, the node will still remain in the Nodes list but won't be accessible from the GUI.
(I'm not sure that I want to implement some clean-up logic here, maybe at some point expose a list of all nodes and let the user manually delete unplaced nodes from there?)

 

Regarding String Tables (including some stuff I've not documented yet because lazyness)

If a mod has StringTable entries with indexes that exceed the highest vanilla indexes, then the lowest of those indexes would be used as the "mod start index".
If the user tries to add a new entry and a start index hasn't been detected, a new value between 1'000'000 and 2'000'000'000 will be assigned instead. (Always ending with '000' to indicate in the stringtable files that it's the start index).
After that, the new StringTable entries will be added starting from that index.

High values and wide ranges are necessary to minimize the risk of mods generating overlapping keys, but won't look nice in the editor...
I've now made it so that if a start index is detected, entries exceeding that number will be shortened down to "k+x" in the gamedata editor, where x is the offset from the start index.

An example from Spoils of Caed Nua:

dbdzkXR.png

  • Like 3
Link to comment
Share on other sites

New releases are up! I've added a changelog to keep track of things: https://gitlab.com/noqn/apotheosis/-/blob/main/CHANGELOG.md

In short:

  • Fixes to Expression & Query parsing.
  • Making edits to the Preview tab will automatically sticky it. (To prevent losing progress by navigating to another gamedata before saving.)
  • Added a StringTable tab to Conversation pages.
  • It's now possible to make edits from the String Table view, including adding/removing FemaleText values. (Just right-click the row you want to edit.)

sczwYvq.png

 

Full changes since my last post:

2022-11-23

  • Fixed regression causing the result of Expression Popups not to update
  • Improvements to Expression & Query parsing:
    • Can now parse negative numbers
    • Now properly parses identifiers starting with numbers

2022-11-25

  • Add a StringTable tab to Conversation pages.
  • Allow editing StringTable entries in the StringTableView
  • Allow adding FemaleText values in the StringTableView
  • In the Conversation & Quest pages, keep text synced between the Diagram, StringTableView, EndState tabs.

2022-11-26

  • Added a changelog file
  • Allow removing FemaleText values in the StringTableView
  • Automatically sticky the Preview tab on making an edit.
  • Like 2
Link to comment
Share on other sites

This is such a fantastic tool, thanks a lot for putting it together!

A bit of feedback after some time messing around in Apotheosis:

I really love the way Scripting and Condition Calls are handled in this tool! Very clear, quick and easy to parse compared to doing it manually. And I've got to highlight how much I appreciate the ability to just write the instance_id/debug_name and have tool insert the correct GUID when it's saved. It's a very sleek feature that makes adding scripts and conditions so much quicker and more pleasant. Though I will mention it wasn't clear to me to that ModScriptHooks were located under "Global". It makes some sense now that I know where to find them, and I don't really know where else they'd fit beyond having their own section similar to "Speakers" with just the one option. Honestly fine where they are just figured I should mention it, as I was at first under the assumption there was no option to write them in the tool.

The Conversations editor makes me so happy, it's probably what I'm the most excited for as far as making mods in this editor! It is so cool to be able to actually work with conversations in a similar manner to what Obsidian actually used for making the game. There is so much modding potential this tool will open up! The only potential for frustration I have encountered is when navigating with the scroll wheel I often cycle through the Listener/Speaker options when hoovering over them by accident. I think these are the only dropdowns this happens to, so this might just be bug?

Otherwise the GUI you have made makes everything to do with creating and stringing together nodes feels very intuitive!

On 11/22/2022 at 1:28 PM, Noqn said:

Conversation & Quest node links can now be deleted, just click the red button:

RNKLeyZ.png

If there's only one remaining link to a node, a confirmation popup will be displayed. If the last link to a node is deleted, the node will still remain in the Nodes list but won't be accessible from the GUI.
(I'm not sure that I want to implement some clean-up logic here, maybe at some point expose a list of all nodes and let the user manually delete unplaced nodes from there?)

Yeah, I think a list of nodes is probably the way to go then.

This is something you might already be aware of, but there is currently an issue when a child node's original link is removed, where they become uneditable and inaccessible without using an eternal editor:

SCRjr46.png

Once again thanks a lot, for putting this all together, I really think this is going to make modding Deadfire much more approachable to many more people!

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

I found a conversation bug and I really want to fix this with your great mod, but it's quite hard for me what should be modified. 🥲

A NPC,  Li'l Woody, located in Dunnage and belongs to The Man of Chimes quest, does not disappear even after the quest is completed(with the safest way; Giacolo is rescued), and she kept doing same conversation like when I first meet her. 

I found the related conversation data from Conversations → 17_cv_lil_woody, however, I still don't know how to fix this... Could you give me some advice? Thanks in advance!

  • Like 1
Link to comment
Share on other sites

1 hour ago, Kvellen said:

This is something you might already be aware of, but there is currently an issue when a child node's original link is removed, where they become uneditable and inaccessible without using an eternal editor:

1 hour ago, Kvellen said:

The only potential for frustration I have encountered is when navigating with the scroll wheel I often cycle through the Listener/Speaker options when hoovering over them by accident. I think these are the only dropdowns this happens to, so this might just be bug?

Thanks! I've pushed the fixes for these two, the windows job should be done and be available for download in ~10 minutes (see status here).

I'll write a proper response later tonight!

Link to comment
Share on other sites

5 hours ago, Kvellen said:

Though I will mention it wasn't clear to me to that ModScriptHooks were located under "Global". It makes some sense now that I know where to find them, and I don't really know where else they'd fit beyond having their own section similar to "Speakers" with just the one option. Honestly fine where they are just figured I should mention it, as I was at first under the assumption there was no option to write them in the tool.

This is really valuable feedback. If you couldn't find it at first after actively looking, it definitely should be moved to a unique category. ModScriptHooks is something I absolutely do *not* want people to miss.

Simply naming it "ModScriptHooks" sounds good?

 4JsuhWA.png

5 hours ago, Kvellen said:

I really love the way Scripting and Condition Calls are handled in this tool! Very clear, quick and easy to parse compared to doing it manually. And I've got to highlight how much I appreciate the ability to just write the instance_id/debug_name and have tool insert the correct GUID when it's saved. It's a very sleek feature that makes adding scripts and conditions so much quicker and more pleasant.

Thanks, that is one of the parts I've been especially happy with 😄

Another plus is that it'll be more convenient to share scripts on the forum!

5 hours ago, Kvellen said:

The only potential for frustration I have encountered is when navigating with the scroll wheel I often cycle through the Listener/Speaker options when hoovering over them by accident. I think these are the only dropdowns this happens to, so this might just be bug?

Yeeaah, this is a nasty default behavior by the Gtk GUI library, though at least it's been addressed by the devs in a future version...

I had implemented a workaround for most of the dropdowns, but didn't cover the listener/speaker dropdowns, so thanks for reporting.

 

Lastly, a thousand thanks for all the feedback! 💖

 

3 hours ago, Hoo said:

I found a conversation bug and I really want to fix this with your great mod, but it's quite hard for me what should be modified. 🥲

A NPC,  Li'l Woody, located in Dunnage and belongs to The Man of Chimes quest, does not disappear even after the quest is completed(with the safest way; Giacolo is rescued), and she kept doing same conversation like when I first meet her. 

I found the related conversation data from Conversations → 17_cv_lil_woody, however, I still don't know how to fix this... Could you give me some advice? Thanks in advance!

This worked for me:

Adding a ScriptNode child to the root node, moving it so that it is the the first child, and giving the following Conditional:

IsQuestCompleted(companion_qst_pallegina)

kh1Vdj4.png

This way the conversation will never open if the quest has been completed 😄

  • Like 1
  • Thanks 1
Link to comment
Share on other sites

For clarity, here are the changes in the latest release:

2022-11-26 (2)

  • Conversation/Quest Diagram: Now properly ensures there's one non-ghost link after a link has been deleted.
  • Conversation Diagram: prevent Listener & Speaker ComboBoxes from capturing scroll events.
Link to comment
Share on other sites

Thank you indeed, Noqn!

I'd like to add one thing in addition to your advice; is it possible to remove the NPC after completing the related quest?

I found her GUID from here and there are many scripts, but I cannot know which script fit for the purpose... Would you know which one should be used in this case?  

  • Thanks 1
Link to comment
Share on other sites

Ah, yeah that does better address the root issue. Adding a ModScriptHook with SucceedOnlyOnce set to true and the following script:

if
{
	IsQuestCompleted(companion_qst_pallegina)
	and IsInActiveScene(8c9c23e0-6463-49aa-be47-0ceb2431a35d)
}
then
{
	ActivateObject(8c9c23e0-6463-49aa-be47-0ceb2431a35d, False)
}

I guess with this solution the Conversation doesn't have to be edited, which is nice for compatability

  • Like 1
Link to comment
Share on other sites

16 hours ago, Noqn said:

This is really valuable feedback. If you couldn't find it at first after actively looking, it definitely should be moved to a unique category. ModScriptHooks is something I absolutely do *not* want people to miss.

Simply naming it "ModScriptHooks" sounds good?

Yeah that'll make it a lot easier to find. Additionally, now that I think about it, having it being under its own section in the "Game Data" tab make it less likely to be confused with "Global Scripts". And if Modscripts default to being saved in "modscripthooks.gamedatabundle" that will be potentially clearer for those without access to the editor.

Edited by Kvellen
  • Thanks 1
Link to comment
Share on other sites

I'm not sure this is a display bug, but it seems that the PowerLevelScaling Value is actual number that increases, instead of % rate. 

For example, as shown in the attached file, the UI shows "+20% Value per Power Level" since I set ValueAdjustment to 20, and the Base Value is 200, so the 200-pt All Damage Shield of Beetle Sheel should scale with +40-pt per Power Level. However, I've tested the change and I noticed that the Shield effect increased by 20 per PL, which is the actual number I've input into the ValueAdjustment. I'm not sure whether this is just an exceptional case; Does this happen only in case of Damage Shield effect?...

PL scaling.png

  • Like 1
  • Thanks 1
Link to comment
Share on other sites

16 hours ago, Hoo said:

I'm not sure this is a display bug, but it seems that the PowerLevelScaling Value is actual number that increases, instead of % rate. 

Thanks for noticing, this was my error and it should not display as percentage. It's now fixed in the latest version!

On 11/27/2022 at 4:49 PM, Kvellen said:

Yeah that'll make it a lot easier to find. Additionally, now that I think about it, having it being under its own section in the "Game Data" tab make it less likely to be confused with "Global Scripts". And if Modscripts default to being saved in "modscripthooks.gamedatabundle" that will be potentially clearer for those without access to the editor.

Great, I've given it its own category now.

2022-11-29

  • Fix StatusEffectLevelScaling display text
  • Move ModScriptHookGameData to its own category ("ModScriptHooks")
  • Like 2
Link to comment
Share on other sites

Fixed some bugs, thanks @Kvellen for reporting!

2022-01-03

  • TopicComponent now properly uses the CompanionTopics StringTable
  • Fixed some properties not being initialized when adding a new Component:
    • TalkingItemComponent.ItemGuidString
    • CompanionComponent.CompanionGuidString
  • Like 2
Link to comment
Share on other sites

2022-01-04

  • Improvements to Conversation, Quest & GlobalScript references in the GameData editor:
    • Will now displayed the name of referenced object rather than the ID.
    • Clicking the row will now open a selector popup (previously these were not editable at all).
    • Context menu includes a "Open in New Tab" option.
    • Will no longer appear nested in a GuidString property*

Vs7p3eH.png -> AruCBc7.png

  • Like 1
Link to comment
Share on other sites

I imagine you are already aware of this, but I noticed that Apotheosis tends to just close without warning when attempting to open most conversations created when copy and pasting nodes was the only option. I think is to do with conversation authors not setting "PointsToGhost" to "true" when linking back to previous nodes. I myself made this mistake (see Adventurer conversation) when experimenting with .conversationbundles. Mostly because I didn't really know what "PointsToGhost" was for, and my few attempts to use it (likely with some other combinations of factors I can't remember) seemed to result a lot in becoming stuck in the dialogue window with no way of exiting.

Spoiler

L0NOGC0.png

"I wish I could talk to Durance again in Deadfire." The finger of the monkey's paw tightens closed.

Terror creeps up your spine, as you realise too late you have once again selected the response that leads to an accursed node with no exit! Alt+F4 is now your only escape from conversation with Durance...

(To this day I have no idea how and why this was happened!)

I didn't want to raise this as an issue on GitLab since the error is with the linking of nodes in the .conversationbundle and not with anything Apotheosis is doing per se.

On 12/4/2022 at 12:49 PM, Noqn said:

Fixed some bugs, thanks @Kvellen for reporting!

2022-01-03

  • TopicComponent now properly uses the CompanionTopics StringTable
  • Fixed some properties not being initialized when adding a new Component:
    • TalkingItemComponent.ItemGuidString
    • CompanionComponent.CompanionGuidString

Happy to help! 😁

Somewhere in the future I'm planning to do some more investigating into custom companions made from Adventurers. Really glad to have Apotheosis now for it!

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

On 12/8/2022 at 10:59 PM, Kvellen said:

I didn't want to raise this as an issue on GitLab since the error is with the linking of nodes in the .conversationbundle and not with anything Apotheosis is doing per se.

Edited by Noqn
Link to comment
Share on other sites

 Ok, here we go again:

From now on, if an exception is thrown when a conversation or quest is loaded, and the issue is easily fixed (in this case setting some links' PointsToGhost to true), the user will get the option to either close the tab or let Apotheosis apply the fix:

9qSVwG6.png

If there's no straightforward fix or something fundamental is wrong (like a missing root node), the tab will close and a simple message will be displayed:

gNwsgVb.png

Edited by Noqn
Link to comment
Share on other sites

Additionally, the bundle selector will hide existing .conversationbundle files when selecting where to create a new Conversation.

i0E1q0W.png -> 2lOu8gF.png

Also added some labels to popups in the bundle selector, and popups will now gray out the parent dialog, not just the main window:
02FtdS9.png-> x2RzdVW.png

Edited by Noqn
  • Like 2
Link to comment
Share on other sites

  • 2022-12-10
  • Popups will now "gray out" their parent dialogs and not just the main window.
  • Improvements to Bundle Path selector:
    • Existing files are now hidden when selecting where to create a new Conversation or Quest.
    • Add labels to New File/Folder popups indicating which you clicked, e.g. "New .conversationbundle"
    • New File button in the headerbar is moved to the left of the New Folder button for consistency with icons in the rows.
    • Clicking the empty area to the left of the New File icon in the rows will no longer trigger the New File popup.
  • Exception handling when a Conversation or Quest couldn't be loaded:
    • If it's a "fixable" issue, a confirmation dialog will be displayed with the option to either apply the fix or close the tab.
    • If it's not "fixable", a message dialog with the exception message will be displayed and the tab will close.
    • Excplicit messages have been created for most FlowChart errors.
       
Edited by Noqn
  • Like 2
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...