VAMStory
Dear hazmhox,
we talked about that earlier, but could you please add an "actor" concept to this great plugin? I find it really cumbersome to manually set the avatar, the avatar position and adjust the colors via triggers everytime the talking actor changes. Please let us define an array of actors with corresponding defaults for the above mentioned settings. This way we only had to set the actor for the current dialog. Maybe the choosen actors avatar could be shown in the ui, so that we see on first glance who is supposed to speak this line.
Some additional ideas:
Let us setup avatars for different emotional states of the actor. The current emotional state could then be choosen alongside the actor in the dialog ui.
It would be great if we could link a person atom to the actor, so that the position of the ui could be automatically put beneath the atoms head. Maybe like that: position = atomheadposition + Vector3.Cross(atomheadposition - cameraTransform.position, Vector3.up).normalized * configurableOffset, where cameraTransform is either ViveCenterCamera, OVRCenterCamera or MonitorCenterCamera (on SuperController.singleton) depending if we are in VR.

If you don't consder this necessary, i will probably do it myself some time in the future. Would you like me to send you the modified code in this case?

Cheesy
 
Last edited:
I have something in the back of my head for the "characters"... it's still pretty low on my priorities since only two persons released basic stories with the plugin. I will start to push this a bit more on top of the list if I'm starting to see a real need and stories created with the plugin.

The emotional state for me is redundant. You would have a selector to change an emotional state and have to define them somewhere. Which is far more setup than selecting an image (especially when the system saves the last folder and allows you to select immediately an image OR copy/paste a dialog with an existing setup).

This, just like the "characters", would start to be concerning if I'd see popup a lot of big stories / branching stories content with a real concern about efficiency. This is sadly still not the case :(

The position of the UI around the head is an idea I got but to replace the Thought bubbles, also not a priority. The problem with moving a UI like this to a character's head (or whatever reference you use) is that... you don't know where the player is. Unless you're only considering "static scenes" (for instance locked with Embody + passenger mode)... you need to do something that answers to static and dynamic use cases ( desktop, VR, free move of the player etc...) and keep the UI / dialogs readable at all times.

I have way too much side projects (and collabs) to start another collab on my plugins right now... i'm really sorry to decline for the moment, the only moments I got to chill, I'm using them to do some fun things to clear my head, or some R&D for VaM 2 : )

Don't forget that I do appreciate your feedback tho, everything is always going on my notepad ;)
 
You're right, the plugin doesn't seem to be used a lot, measured by the released scenes, which is sad. And R&D for 2X definitely sounds fun :)
you don't know where the player is
Sure you do! It's where the above mentioned cameraTransform is: ViveCenterCamera, OVRCenterCamera or MonitorCenterCamera. The forward direction is the direction the player is viewing. This is how you can check which camera is used for the current session:

if(singleton.isOpenVR) cameraTransform = singleton.ViveCenterCamera.transform;
else if (singleton.isOVR) cameraTransform = singleton.OVRCenterCamera.transform;
else if (singleton.IsMonitorOnly) cameraTransform = singleton.MonitorCenterCamera.transform;

I used it in my plugin LightMeUp, and it works like a charm. The snippet in my last post should put it 'configurableOffset' units to the right or left of the reference, orthogonal to the direction pointing from the player to the reference. No matter if you tilt you head, looking upside down or whatever. You'd probably have to caculate it in Update() to maintain the relative position, even if the player is circling around the reference. The only problematic spot i can think of is, when the player is exactly above or below the reference. In this case the cross product yields 0, so that the UI position would be ontop of the reference. But the next frame should be alright again, if the player (or reference) just moves a little.
 
Last edited:
Yeah haha. I actually have several plugins using the camera, and the recent added tool in VAMS for the distance uses that :p

I meant by that "it is far more complex to handle a proper UI since you don't know where the player is at a specific moment"... you have to handle the rotation, update the position to have the UI not being hidden by another character, by another object... and so on... --insert here any fringe case where something prevents a user to see the UI properly and does not understand they have to click somewhere to keep the story going--

Hence the thought bubble idea, which would be like an "on top" canvas and all these issues disappears :D
 
Yeah, rendering it on top is mandatory. The shader Shader.Find("Battlehub/RTGizmos/Handles") renders on top of everything, but i don't know if its useful for UI-stuff.
Another proposition: I'd love a feature to cycle though the lines of a group by random order, for a given amount of cycles, then the end dialog appears. I'm working on a photoshoot scene, and i'd like the photographer to react randomly to the poses. After a set amount i want the user to have the choice of continueing or see some more poses, with possibly different reactions, or in just a different order. This would greatly improve the replayability of stories. If you cycle through and know exactly whats comming next, it gets a little boring.
I already wrote a plugin that has to be triggered on group start and hacks into VAMStory by setting the dialog texts randomly from a (at this point hardcoded) pool. The problem is, its very ugly and i had to do workarounds that would not be necessary if it was part of the main code.

P.S.: It would greatly help, if you would at least register some actions to trigger a specific dialog. They aren't there right? Cause i could not find them. This way i could write the lines in VAMS itself and overwrite the "next" behaviour of the OnClick event by triggering my plugin, which afterwards selects a random dialog.
 
Last edited:
This is not a bad idea at all for the random thingy!
Also the trigger, yup I need to add that : )

So, if I summarize, the way I see it:
  • Adding a random option to a group with a slider allowing to choose the amount of random picks before displaying the last dialog. (still based on clicking the dialog UI)
  • Adding a trigger that allows starting a specific dialog (I need to figure out a proper way to do that to have a direct action)
Is that about right for you?
 
@upwardpuddle The "group trigger" is used to trigger something when a group starts. If you're not configured so that the UI is following the player, you can save a group position using the "save position" button after placing it wherever you want : )

Tell me if you understood that, if not, I'll add a capture.

All this is explained in the tutorials in HZMDemos btw.
 
@upwardpuddle The "group trigger" is used to trigger something when a group starts. If you're not configured so that the UI is following the player, you can save a group position using the "save position" button after placing it wherever you want : )

Tell me if you understood that, if not, I'll add a capture.

All this is explained in the tutorials in HZMDemos btw.
Thanks Hazmhox! I should have watched the tutorial. I could have simply made the UI follow the player. I was manually placing UI's with triggers and the AddAtom plugin to bring it to the player or other atoms. Lol
 
Quick question @hazmhox , is this a desktop only plugin? Cause in VR I was trying to create a dialog and it only copies the displayed text to every dialog number when creasting a new dialog and I cant start the "test group"? I had the "text problem" in desktop as well but it worked somehow, dont know what happened.

Am I doing something wrong? Thank you! :)
 
Quick question @hazmhox , is this a desktop only plugin? Cause in VR I was trying to create a dialog and it only copies the displayed text to every dialog number when creasting a new dialog and I cant start the "test group"? I had the "text problem" in desktop as well but it worked somehow, dont know what happened.

Am I doing something wrong? Thank you! :)

Hey!

I think you might need to show me this through a video, I have troubles understanding what you mean : >

The plugin is thought to work on VR and Desktop. That said, 99% of the dev or the actual "authoring process" has been tested on desktop and thought for desktop. I hardly imagine a complex dialog sequence or full story created through VR, and I think I will never go through the process of making it fully "compatible" or at least usable on VR.

Show me what's your problem! : D
 
Thank you for your fast response! :)

I made a screenshot in desktop mode. This is my problem (VaM updated to the newest version):
There's 5 dialogues within group 0. I typed in "333333" in dialog number 3 (selected in the menu). But when switching the dialog numbers, "333333" appears in every number and the number on the top (showing the actual selected number) remains on "0". So, the dialogues are not switching. Therefore "333333" is displayed the whole time.

You know what I mean? Am I doing something wrong? Or could it be a problem with the new VaM version which I updated right before using the plugin.

Edit: Dude, my bad ... the atom was "off" :rolleyes::D
The problem was, again, in front of the screen. It works now.
Thank you!
 

Attachments

  • vamstory.jpg
    vamstory.jpg
    167.1 KB · Views: 0
Last edited:
@hazmhox Hey, sorry for the late answer. Yes, that's exactly what a meant for randomization. The second point isn't really necessary for that purpose if the first is implemented. It just would have let me find a workaround by writing a third party plugin. But if you could implement it it would surely be of use, too.

I encountered a problem with VAMStoryAction: If i change some global settings (bg color, font size, or text, etc) via UI or via triggers, the effects only show up if i manually go into the text field and change it. Why is that? Am I doing something wrong?
Also, the label text field does not update with the ID slider.

Why should't we change the text of the buttons via the "Act_0-Text"-Storable? It's under the "Do not use" cathegory, but should it work nonetheless? Right now it does not, but all other settings under the "do use" cathegory don't either, so I'm confused. I want the effect of a button to change dynamically by hooking it to a (dynamic) StorableAction of my own plugin. This already works as expected, but it would be nice if I could change the button text accordingly to visualize that.

Lately i saw a scene using both, Story and Action on a single empty, and the actions showed up below the Story buttons. (sliders, pose choices, etc). It looked really neat. But by inspecting i saw that the author had to add dozens of spacers to achieve that effect. Would it be possible to have Story and Action communicate if on the same atom to find the right offset for the Action-buttons?
 
Last edited:
I encountered a problem with VAMStoryAction: If i change some global settings (bg color, font size, or text, etc) via UI or via triggers, the effects only show up if i manually go into the text field and change it. Why is that? Am I doing something wrong?
Also, the label text field does not update with the ID slider.

What do you mean by label text field? You should really add screenshots, it would make the overall understanding easier : D

The update of the whole UI only happens on some situations. That said, if you're using the UI of the plugin or the actual dedicated triggers, it should update. Could you make a video or a scene with that exact reproduction?


Why should't we change the text of the buttons via the "Act_0-Text"-Storable? It's under the "Do not use" cathegory, but should it work nonetheless? Right now it does not, but all other settings under the "do use" cathegory don't either, so I'm confused. I want the effect of a button to change dynamically by hooking it to a (dynamic) StorableAction of my own plugin. This already works as expected, but it would be nice if I could change the button text accordingly to visualize that.

Because you're seeing this from a "I can do anything in a plugin with VaM" perspective haha. If VaM allowed hiding those storables, you would be able to see them or access them. VAMS is a "baked story/dialog" plugin... just like in any game, a dialog line is written to be static and never change... and eventually be called at some point in your story. Changing dialog lines at runtime is quite the opposite of the initial goal: VAMS exists to gather everything related to dialogs in one spot and control it. And especially not having other scripts inside the scene that are changing dialog in realtime which is generally a pain in the ass with the native system/UI of VaM.
From an advanced scripter like you, I understand your point of view (you completely get how the plugin is made and how you can "technically" change stuff yourself) but the way I did the script does have some limitation.

Anyway, what do you mean by "the effect of a button"? The trigger? The visual effect (appearance)?
If it's the text, I could hook a function to change it... but again, that's not efficient per say. I would always recommend to have several actions and swap UI depending on the needs.

Lately i saw a scene using both, Story and Action on a single empty, and the actions showed up below the Story buttons. (sliders, pose choices, etc). It looked really neat. But by inspecting i saw that the author had to add dozens of spacers to achieve that effect. Would it be possible to have Story and Action communicate if on the same atom to find the right offset for the Action-buttons?

Already mentionned a bit earlier about actions. I've planned a grouper system to group actions. This could extend to Story, that's not a bad idea.
 
What do you mean by label text field
I'm speaking of the Action-plugin btw. What i mean is the big text field in the UI where you type in the text that should be shown on the button. If I set a value there, then scroll the ID slider (to edit another action), the text field still shows the last string i typed in, not the string the current action ID points to. I hope that makes things clearer. This is not really game-braking, because you can see the labels on your buttons in 3d view, but if I want to change the label "foo" to "bar", then i have to count the buttons (in 3d) to get the ID of button "foo", and scroll to that ID in the UI. If i just scroll i don't know which is which, because the text shown in the UI never changes.
You probably just forgot to add a callback to the ID slider to change the content of the textfield accordingly.
Screenshot 2023-04-30 192313.png


Anyway, what do you mean by "the effect of a button"? The trigger? The visual effect (appearance)?

Still talking of VAMAction:
I get that changing the text of a dialog (VAMS) isn't the best approach. We talked about my wish for randomization earlier.
With effect i mean the thing, the trigger of a button actually does. In my case the trigger points to an action of my plugin, whose callback changes dynamically. So the "effect" of my button changes, despite the trigger still pointing to the same object. If I said "the trigger changes" it would be misleading.
What I want to change is the appearance (mainly text) of the button to inform the user that the "effect" has changed. I'd like to be able to change it from my script by setting a JSONStorableString value. There is the JSONStorableString named "Act_0-Text". I can set it's value, and if I get it later on, it reflects the changes made. But the problem is that the actual text on the button never changes as long I don't type it in manually in the UI. Maybe there is just some update call missing? The same behaviour applies to all other appearance settings (font size, etc).

Let me explain what I actually have in mind:
I'm developing a scene with many branching animations. I'd like to use VAMA to provide the buttons to navigate through the scene. What i have set up is an array of 9 VAMA buttons. Their triggers point to actions provided by my plugin, namely "tr0", "tr1", etc. The callback of these actions are not static, they change every time a new pose is selected. Example: If we switched to pose A, then my plugin knows what transitions are available starting from this pose. Let's say B and C. Because there are only 2 transitions available, my plugin hides all VAMA buttons except the first two. Also, the action tr0 will be changed internally to initialize pose B, and tr1 to init pose C. So if the user presses the second button, he'll end in pose B. Now it repeats, because pose B has it's own set of transitions. The VAMA buttons are static. I only change the amount shown and the object their trigger is pointing to gets a new value. But because the buttons now have different meanings, i'd like to change their text to reflect that. If pose B has a transition back to A, and one to D and E, I'd like the labels of the buttons to be A, D and E (or maybe a bit more descriptive). If we switch to E, then they have to be renamed again.

This is all working great so far, but sadly i cannot change the text .
It would be awesome if you could fix that for me :)

P.S.: I also wrote you a question regarding the collision of the particles in the VAMFluids discussion thread. Maybe you can find the time to anwer that, too. Would be great!
 
Last edited:
If i change some global settings (bg color, font size, or text, etc) via UI or via triggers, the effects only show up if i manually go into the text field and change it. Why is that? Am I doing something wrong?

Going back on that since you've added a screenshot.
I don't know what you're doing wrong, I spent last night trying to reproduce that... everything is working on my end.
Through the UI of the plugin, zero problem...

And these (and all the others we don't see in the shot) :
global_opts.png


... are working properly from a simple trigger... like this:
global_opts_trigger.png


I've also checked the demo in HZMDemo, actually focused on that behavior (VAMStory_director_tutorial), it also works.
I don't know what you're doing, but there's possibly something wrong on your end : )
 
hazmhox updated VAMStory with a new update entry:

Features, improvements & bug fixes

General
  • Fixed a couple of incorrect feedback messages in some scripts

VAMStoryActions
  • Added a new trigger Reset Selected Action to only reset a specific action of a panel.
  • Added two new triggers Change label for selected action and Change label (off) for selected action.

    They allow you to change the label of an action during a scene. Just like the other triggers, you need to select an action ID first, then...

Read the rest of this update entry...
 
I'm using this plugin and think it's awesome and of course I thought of a feature:
I would like to be able to create an action that sets the monitor's position to where my current monitor position is located at, so that I can control the monitors view (angle/position) when the dialoge change, i.e. the camera points to the person speaking.

I'm trying to work around this by using the Spawn plugin, but it's cumbersome to setup, especially if you want lots of different camera positions and angles for a scene. If someone knows a better way to do this than the spawn plugin, I'd be happy to hear about it. Otherwise this would be a great additional feature for this plugin.

Unfortunately, I don't have anything in good enough quality for releasing (yet), but if others are like me, many are using the plugin for their own stories.
 
@hazmhox Awesome work as always!
Would you be able to describe gate triggers very quickly in the description? Not sure what they are.

I wrote a quick description in the update notes, and I'm gonna make a documentation at some point :p
But if you prefer, it's a simple "open/closed" concept :
director_gate.jpg


You fill both "Gate inactive trigger" and "Gate active trigger" with actions. And then you just have to trigger it from anywhere (a button, timeline etc...). By default, this trigger will have the gate in "inactive" state. But you can decide during the scene to change this state by using the triggers Set Gate Inactive for Trigger Name / Set Gate Active for Trigger Name. It will pick one or the other set of actions depending on the current state.

That's pretty much it... this is simply a "branching" system.
 
I'm using this plugin and think it's awesome and of course I thought of a feature:
I would like to be able to create an action that sets the monitor's position to where my current monitor position is located at, so that I can control the monitors view (angle/position) when the dialoge change, i.e. the camera points to the person speaking.

I'm trying to work around this by using the Spawn plugin, but it's cumbersome to setup, especially if you want lots of different camera positions and angles for a scene. If someone knows a better way to do this than the spawn plugin, I'd be happy to hear about it. Otherwise this would be a great additional feature for this plugin.

Unfortunately, I don't have anything in good enough quality for releasing (yet), but if others are like me, many are using the plugin for their own stories.

Thanks!

What are you calling "monitors"... I'm a bit confused when you say "sets the monitor's position to where my current monitor is located at"... if the monitor's position is your current location, then moving it to your current location... would obviously make you stay at the same spot ='D
 
I wrote a quick description in the update notes, and I'm gonna make a documentation at some point :p
But if you prefer, it's a simple "open/closed" concept :
View attachment 241444

You fill both "Gate inactive trigger" and "Gate active trigger" with actions. And then you just have to trigger it from anywhere (a button, timeline etc...). By default, this trigger will have the gate in "inactive" state. But you can decide during the scene to change this state by using the triggers Set Gate Inactive for Trigger Name / Set Gate Active for Trigger Name. It will pick one or the other set of actions depending on the current state.

That's pretty much it... this is simply a "branching" system.

That's awesome! Perfect for something I was working on.
I use MacGruber's SelectChoice for a lot of triggers, and this is similar to that but only 2 states/choices.
 
Back
Top Bottom