mhgolkar / arrow Goto Github PK
View Code? Open in Web Editor NEWGame Narrative Design Tool
Home Page: https://mhgolkar.github.io/Arrow/
License: MIT License
Game Narrative Design Tool
Home Page: https://mhgolkar.github.io/Arrow/
License: MIT License
I think that saving the window preferences as fullscreen mode, maximised mode, should be saved in the config file so that on launch, the app restores as it was on last use.
I assume that it is not a complicated issue to solve, but could be a nice add !
sometimes it is necessary to have long "titles" on the "title" section of each node.
It would be cleaner to read to have multiple lines instead of just a very long one liner.
I tend to resize the Inspector window, so that I see all the tabs at once, instead of having to page through them. However, currently, it resets to its default size after having restarted the application. I think it'd be quite nice to be able to have it remember its size, or at least let users set a new personalized default after resizing it.
(Also, sorry for all the new issue prompts. Hope it isn't too much of a bother.)
Currently Frames serve the purpose of letting end-users organize nodes into categories in the same Scene. However, it suffers in terms of UX, as the user has to unnecessarily collapse the frame to access nodes behind it, instead of the frame being able to be placed behind the nodes instead. This is pretty common behavior in other node-based systems, and I think it'd be a valuable enhancement to have such a feature implemented. Frame Labels won't need much special consideration, as this only comes down to the Frame's placement on the canvas, and can be left up to the end-user.
Optionally, and something I'd prefer and appreciate to see, is to also have a toggle that lets Frames have color filled even when not selected. The wireframe is okay, but a color fill is pretty usual for node-based systems that implement groups (like Frames). See the picture below, if you need further clarification.
Image source: https://medium.com/@umarkhandev/node-based-coding-7433424fa4b0
e: I've rewritten the issue to better fit the issue, considering I didn't know the purpose of Frames at the time of making the issue.
Hi again @mhgolkar
Do you plan to add multi-language support to arrow?
How would you implement multi-language currently?
I'm thinking multilpe options, create an .arrow file for each lenguage, chapter01_en / chapter01_es and so on, but the logic would need to be duplicated and lead to language specific bugs.
Another option could be create language scenes, scene_01_en, scene_01_fr, etc, but would have tha same issues as before.
Or extra languages could be handled by the game itself, that present some advantages in terms of logic, but extra implementation needs to be done.
How you would aproch it?
Thanks for yor time 🤗
Albert J.
P.S: Sorry to bother you again, please let me know if you prefer another way of communication.
To create a new node you must:
If you could drag off a pin to open a node, you could simplify to:
Basically, when selecting nodes, you move them in the canvas using the arrow keys
While text-based games are primarily, well, text-based. It's not the first time I've seen one implement something of that kind using SugarCube2, and I think it'd be nice to have the option to display images on the export along with text. It'd have to be a node that can be used together with other nodes, e.g. that is connected to a Content node, and displays the image along with the text. This may be a big change, as I presume you would have to add an image input on relevant nodes, but I think it'd still be really neat to have.
I'm using Arrow as the basis for dialog and interaction in my side scrolling VN.
Would be really useful to have a quick export button Cmd + e
for example, as at the moment I have to use the following every time:
-> project
-> export
-> export json
-> save
-> confirm
It's a lot of steps.
Perhaps first time we can show the export screen but after that skip confirmation?
I'm on Windows, so possibly this is more of a problem there where users aren't intended to look in AppData.
When you save you get this dialog that doesn't hint at the storage location:
The quickstart says:
Arrow keeps all the projects in a single work directory.
This directory is by default user:// or the platform-specific directory for the user local data.
You can change work directory from Preferences panel.
But when I click Browse to change that location, it opens the Arrow.exe directory instead of where it's actually put the files.
So since I didn't change the location on first use, my projects are lost (to a nontechnical user). (The path is actually %userprofile%\AppData\Roaming\Godot\app_userdata\Arrow
)
I'd suggest:
would help moving along the canvas.
The mini-map helps, but it is still different from moving along the main canvas itself, specially when you have many nodes and have to segment them to different spots of the canvas
hi
the end user would eventually make many projects and many many many scenes
(in my case "chapters", "scenes" and "sub-scenes")
it would be helpful and faster for the end user to have a place where they could add a description for the scenes(chapters), and to an extent to the projects
Hey, dude, what you are doing is just great! Recently i started to write my own dialogue system, but your project already has almost everything to be perfect!
Is it possible to add spellcheck somehow? If you are not intending to add this feature, maybe you can give me an advice where to start, so i could fork this project? I did not saw GDScript language before, and i cannot find how to implement spellcheck in this language.
Thank you for this application!
Hi!
I use Arrow for modelling systems and it would be useful to have the ability to export documents (diagrams) as an image.
Currently, the only way to sort Actions in an Interaction node, is to right-click them to edit, set that, and then do it for everything else when you want them in a certain order. This is quite cumbersome and pretty bad from a UX standpoint, and could be improved with drag-and-drop functionality for placement and instead removing the edit-and-set causing the Action to be set to the end of the list. New actions obviously should, however.
Hi @mhgolkar
Arrow documentation is great, specially the "Use" parts, where you can get an idea of what each option is there for, but I can't help to think that adding some "hands on" examples on how you use it would make it even better.
This is not an "issue" but just a suggestion, I think adding a few .arrow files with some real world examples, or expanding the documentation with some screenshots, like one in the home page, would help people to get a grasp on how to use the tool.
Thanks for all your effort, you 🪨
I'm thinking about an enhancement that would be pretty useful for me. The idea is that when having a Jump node, you would be able to go where it's heading from the editor, to make keeping track of the scenes easier. I started trying with coding it, but I don't get the Mind system right now, but I was thinking about something looking like :
The button would be disabled when there is no destination set, and otherwise, when clicking on the button, it would focus the destination node, by changing scene if needed
When actually using Arrow in a game, you want to read from the dialog data / react to events or dialog progress, to process sth., trigger animations, modify Arrow-data, etc.
The OptionButton
has the values: Value
, Variable
, Character
. And it sends the data wrapped as a Godot Dictionary (or json).
And you want it to be blocking in the cases mentioned above. I named it Auto-play
, so it's consistent with e.g. Monolog, but it can also be named "delayed"/"await"/"block and wait"…
It might even be wise to have a new tab Events
on the same level as Variables
and Characters
, where one can define Keys
. These can be set in Mockup's Name
field.
As mentioned in #52, I understand that this may be out of scope due to text-based games predominantly being just text. But like with images, I think it'd be nice to have the ability to play some arbitrary audio, be that some small notification sound, or some background music or the like. Not sure how you'd deal with playing music over the course of multiple nodes, without either compromising like simply letting it play until it ends, and/or fading it out when new audio is played. Regardless of the actual implementation, I'd certainly appreciate it.
EDIT: Read below for how to do this!
There's not really a good way (as far as I can tell) to create a dialogue where a character just says something and you continue. Currently, I've just been either creating a dialogue node with only one option as the content which means you have to click it, or just using a content node, but that doesn't have an option to mark a character. An option to add characters to content nodes or a way to use dialogue nodes without any options and some content instead.
There are so many use cases where the variables need to be accessed on the script/story
ie
if a character's name could be set and get
"hey XXX! We heard you are leaving the town"
or numbers and other strings
"yes. I am leaving within YY days to go to AA town and try to find BB and help out for CC"
its a simple problem that most users would probably be thankful for. instead of using multiple nodes that would eventually turn into spaghetti, why not just expose the variables on the nodes themeselves.
other similar tools has this functionality, and the said feature is the only reason i can't fully commit on using arrow
i really like your stand about JSON exports as its more versatile than what other tools are using.
thankyou in advance.
and youre doing a really good job.
when adding a new node, there are times that the node is not located on where the mouse cursor is.
Even if the mouse is clicked beforehand, it still does the said issue.
The node would also sometimes be buried under another node.
This causes confusion especially when the node comes off screen.
When hovering the save
button a tooltip Ctrl + s
is shown, but this hotkey does not work on mac.
as of writing, moving along the mini-map is limited to clicking.
It does work on surface level, but when seriously working on a project, clicking on the mini-map results to jumping and might get confusing, resulting on not using the mini-map altogether.
making the mini-map drag-to-move-along would help with this
adding an option on the [variable update node] to set the variable with a randomly generated value
number variables could have an input range (start,end)
string variables could have an input of pool of letters to which the string would be gotten and an input of range (how many letters to input)
This is mostly for organization purposes. Currently, as far as I understand it, variables seem to be global. And to make something like a text-based game, some will certainly need to be, but some don't need to be. Given how variables are visible to the end-user, they'll either need to prepend some sort of namespace to filter by or live with having a rather cluttered list of variables. Thus, I feel it'd be a very welcome feature to toggle a variable to "private" (or something to that effect), such that it is only available to a specific Scene at a time.
mainly for organizational purposes.
When there are many nodes already, it is helpful to place them on a box like container.
I am not familiar with other tools, but an example of this could be found on the nodes editor of unreal engine
In the screenshot, there are various dialogs with different characters. How do I create a new character other than "Anonymous"?
Currently, selecting multiple nodes can only be achieved by pressing CTRL, but I think it should also be possible with MAJ
(not an issue but a feature suggestion or a query if it might be possible to implement)
as of writing, "characters" made on the characters tab are only constant strings that has no other functions other than the dialog node
maybe there would be merit to having a dedicated space where the user could type in information about the "character"?
ie,
Name:
sex:
age:
defining feature:
personality:
background story:
having those information are important on building a story.
there are also "statistics" values that could be added such as
HP:
MP:
str:
etc
i know they could easily be added as the current implementation of variables, but having variables like those is in the long run, messy
ie
char1_hp
char2_hp
These information are also highly dependent on what story would be written, so maybe leaving them as just "custom" info would suffice
you could look at them as local variables inside the characters themselves instead of having them as global variables
(big thanks about the Variable parsing ^_^)
It seems like exporting to HTML shows the error message saying that Arrow does not have write access folder, even though exporting to JSON in that exact folder works just fine.
I can lead more tests if needed.
Given that you've mentioned in #52 that you try to avoid adding gameplay- or runtime-specific functionality, I suspect this may be the same. However, I'd still like to ask if array variables could be added. It's mostly for more complex logic chains, because it'd significantly reduce the amount of nodes and variables I'd need to use, but I understand if you don't want to add such a thing.
Also, thank you for the help in the other issues.
e: Though, given that the description mentions that Arrow is also for "interactive nonlinear storytelling," I hope it's within scope enough, because that's what I'm testing around for. :)
If I didn't read the quickstart guide, I'd never have found it.
Suggestion: rename the "More" button to "Export..."
as of writing, items at the inspector bar such as the variables, character or scenes and projects are just arranged from the first declared item to the last declared item
it would make it easier to use if a sort function for each category could be implemented
alphabetical sorting would hugely be beneficial.
projects and scenes could also be arranged by date(may it be created or modified)
After writing a lot of my game logic, I want to be able to split logic from a single entry point.
For example, a little old lady arrives home, and I would like to be able to trigger multiple events from this entry point.
At the moment these events can also be triggered if she is already home when something else happens.
This can cause the logic to become quite twisted.
It would be better to have a splitter
node (like an inverted hub).
Hello,
I've been tinkering a bit with Arrow and find it very interesting! 🙂
I know there is the json
file export function but do you plan to make a GDScript plugin to make it possible to import it in Godot projects? I mean, it could be very interesting to use Arrow's node Editor to make complex dialogs and include them in games where players could interact with NPCs.
A thing like 1 json
file per discussion (including 1 or more NPCs) with the dialog's input variables 'fed' by the game would allow a smooth connection with RPG style games. 🤔
There's some strange design choices when trying to design a dialog.
The most basic necessity of a dialog designer is to have a character say something and give answer choices to a player, so how do I do this with arrow?
The obvious would be to use the dialog node, but this only gives answers and a character, not the actual text. So I go to the content node, that has a title, no character, and a field for text. So who's saying this? The player, the narrator, the character that shows up in the answer? Who is giving the answer? The player, the character shown?
What's the use for the "Interaction" node? It's functionally identical to the dialog one.
We need to identify characters in the Content node or the ability to put text on the Dialog node.
I’ll take this down soon. Posting here since I don’t know how else to get in touch. I’m building a tool on Godot that includes narrative elements and data analysis. Your tool is quite cool especially your conversational take on a state machine. Are you interested in discussing collaborations?What I’m building, while not explicitly crypto oriented, might be of close interest to Ethereum fans.
Hey there! I just discovered this and it seems pretty cool!
So far the biggest thing throwing me off is that when I run the game in the console, it displays all the content nodes without showing the content:
I know I can export the game to the browser, but to test it quickly it would be nice to be able to render that in the console.
I see that you have a brief that you can show in the console, but maybe it could be a checkmark in the settings to "show full content"?
I started making a simple story and it took me a bit to figure out why my work was disappearing each time I created a new node. I even tried Ctrl-s, but it was still gone.
Turns out I didn't see the Update button.
Would be nice to auto update or something to require fewer clicks.
I am playing around with the project to learn stuff about it and about Godot.
I started by forking the repo, cloned it locally, opened it for edit in Godot 3.2.3.
Then I hit Play to start the project and played around with things a bit.
Importantly (for this issue) I set a different "Work Directory" from Arrow -> Preferences.
From git I noticed there were changes to main.tscn. The values of the properties of BlockingLayer.Container.PathDialog is now set to my custom value there.
Even after I went and reset it back to 'user://' from both the in-app preferences and directly in the Editor by changing the properties of PathDialog, the values in main.tscn remain to my "custom" values.
To push my changes "clean" of that, I have to edit main.tscn outside the Godot Editor. Then one I open it again and save any change, I'm back with my "custom" values.
Note that I tried reset my local code to what is here on the remote, to no avail: as soon as I start editing from the Godot Editor those values change again to my "custom" paths.
Am I doing something wrong somewhere? I guess I am missing something obvious that Godot is doing behind the scenes.
This concept might need more refinement, but I have the following use case (this setup will repeat itself countless times),
where the player should be able to branch off somewhere, but they must have handled, in some way or another, a specific topic. If it failed, they may need to repeat some part.
And after each Tag Pass
for said Character-tag-key, I want to reset the key, i.e. integrate purpose of Node 1y
into Tag Pass
. (I know that in case of 1w
being False
, it is not reset in the image below).
So something like this:
Given that moving on the canvas is a really easy trick with WHEEL_BUTTON pressed, the shortcuts could be changed for more easy-to-use zooming.
I think that the use should be :
Moreover, currently, CTRL + WHEEL_SCROLL does not only zoom In/Out, but also scroll accordingly, which is even more annoying than the shortcuts.
Please tell me what you think about it, but as for me it would be game-changing for navigation use.
Thanks for considering it
Would be super nice if it remembered the size of the window when closed and restored it next time, also remembering if it's maximized or not
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.