Forum rules - please read before posting.

Is it possible to make skipping cutscenes stop early?

Hitting the "skip" button normally does all logic in an action list instantly, but I know it can stop early sometimes- specifically when it hits a conversation.

I'd like to force an action list to stop at a specific point that isn't a conversation, but I can't figure out how.  I thought making my custom action override the Skip action would do it:

override public void Skip()
        {
            Run();
        }

But that just seems to run the custom action's code after the rest of the action list has completed.

Any advice is appreciated. ;)

Comments

  • Unless you override the Skip function with new code, skipping an Action will cause its Run function to run anyway.

    Once an ActionList has been told to skip, it cannot only skip a portion - it must do it all.  If you want your sequence to end at a certain point after skipping, you can move the Actions you don't wish to skip to a new Cutscene and call it at the end of the original ActionList.   Uncheck Is skippable? in the new Cutscene's properties, and you should find that it then runs as normal while everything before it skips.
  • edited August 2017
    Hmm, but skipping always stops when it gets to a conversation.  That's not possible to emulate with custom actions?

    I'm guessing that has something to do with how conversations technically, behind the scenes, break action lists into separate chunks, but I was hoping I could emulate that in my custom action too.

    The goal here is to make something that doesn't take lots of nodes / assets to set up every time- just the ability to stop skipping with a single node, or even with a checkbox in a node that does other stuff.

    If I can't do that I guess my best bet is to just take skipping out of the final build!  >:D<

    Edit:  Any chance you could add a node that makes skipping stop?  No worries if that's a bit too tall an order!
  • Indeed - I wouldn't call it a hack, but Conversations are treated separately within the ActionList management code.

    I imagine having an Action tell an ActionList to stop skipping entirely would lead to unwanted complications given the complexity of the system, however you can use the ActionList: Check running Action to determine if the ActionList it's in is currently skipping.

    You can use this to basically do nothing if it so - would this have the same effect for you?

    I'm not sure I understand your goal explanation - could you elaborate?  Know that ActionLists can be recycled by using ActionList parameters, if that's relevant.
  • I've got a point in a cutscene where I need to take the player's input, but it's not a conversation.  Skipping past it is a problem!  But this happens quite a few times in my game, and making a new action list every single time that input screen comes up would be a huge hassle.

    I've since realized that I can just disable the normal conversation UI and treat this non-conversation UI LIKE a conversation, and that'll provide the skip stop I was looking for. :)  So I guess that covers what I was looking for.  It's still two nodes rather than one (one to unlock the UI, one for the fake "conversation" node) but two nodes is a lot better than splitting up every conversation into many lists.
  • edited August 2017
    Oh, wait, new problem from using conversations:  I can't animate it differently depending on what's chosen!

    So when I choose an option in a dialog list (Truth/Doubt/Lie) I can't play a separate action list for each button, like I could if they were three individual buttons.  But I can't make them individual buttons because then they wouldn't be a dialog list, which is required to make the whole conversation thing work out.

    My goal here is to just have animations like this when I choose an option:

    image

    I feel like different dialog list buttons should DEFINITELY be able to run action lists as they're clicked.  This feels like a feature that could really stand to get added.
  • Tiny addition to the post above:  I know I could just manually play these animations in the cutscene, but this UI is going to come up A LOT, and if I have to make six animation nodes every time it comes up, I'm going to be real frustrated.
  • Wish I could go back and delete my earlier posts, cause I feel like they were longwinded and still didn't explain the goal very well.  Much easier to follow version:

    Here's the Truth Doubt Lie UI.
    image

    Here's the full checklist of what I want to happen:

    TDL UI is turned on
    TDL UI does entry animation
    TDL UI loops idle animation
    AC waits for player interaction
    player interacts w/ button
    TDL UI does one of three exit animations, chosen by player input
    ACTION LIST is sent to of three exit sockets, chosen by player input
    game continues

    ...And I want to be able to do all of that with not very many nodes.  It can be two or three, but I shouldn't have to write every single animation out through nodes every time or split it into multiple cutscenes, since this is going to come up a lot.
  • edited August 2017
    You can recycle Actions and ActionLists - see the "ActionList parameters" section of the Manual, as well as this tutorial.  Essentially, they allow you to tweak the settings in Actions at runtime, allowing you to run the same kind of thing many times - but changing subtle things each time.

    I would recommend first making the system work without parameters, using just one TDL question as a test-case, and only introducing parameters once it works as intended without them.

    The approach I would probably take would be to create a new "Pop Up" Global Variable that is used to store the current question being asked.  In an "Init UI" ActionList asset, then create a Variable: Set Action that sets this variable to a parameterised value followed by the Actions to turn on / animate the UI.

    Whenever it's time to ask a question, you can then call this ActionList using the ActionList: Run Action and set the value of the Global Variable from there.

    A separate ActionList could be used to work out if the player's choice is the asked question's correct answer by reading the choice, the PopUp variable value, and setting the value of another global Variable (this time a Boolean) accordingly.  Make the "correct answer" an Integer parameter and use the ActionList: Check parameter value to read it inside your ActionList.

    You could then run that ActionList when a button is clicked, setting the integer parameter to 0, 1, or 2 depending on which button.  If you use the Conversation approach, know that you can check Override options within the Dialogue: Start conversation Action to place all responses within the same ActionList (which could be the same one that opens the UI).

    I can try to provide more robust steps if needed, but have a look into this feature/approach if you haven't already and see if it's a good fit for the situation.
  • First off, really REALLY appreciate this level of feedback.  Your customer support is second to none.  :)

    I'd actually already tried most of what you were talking about- I got it working both as a custom action and as a conversation, but all non-conversation options weren't letting me break from skipping.  My question kind of morphed into needing help with animations, but I've since figured out everything I was doing wrong- I just hadn't done enough research and rifling through the manual yet.  Thanks a lot for the help, though!



    That said, one issue I ran into during this process:  Skipping in general just seems to work strangely.  Let's say I have two ActionLists, named SkippableAction and UnskippableAction.

    SkippableAction looks like this:
    [30 nodes of dialogue, animations, camera changes, etc]
    Run UnskippableAction, check "wait until finish"
    [30 more nodes of dialogue, animations, camera changes, etc]

    UnskippableAction of course is unskippable.

    Hitting Skip during SkippableAction will skip over all of SkippableAction, including everything after running UnskippableAction;  then after the skip it'll run UnskippableAction.  That feels wrong!  It feels like it should wait to do all of UnskippableAction before resuming SkippableAction.

    Maybe that's not something that's really feasible to change / fix, but I thought I'd bring it up anyway.

    Thanks again!
  • I think this is an area where opinion can vary somewhat, but the intention behind AC's skipping feature is for any effect to be instantaneous - once you invoke "EndCutscene", you shouldn't have to wait for anything else before the skipping has completed.

    That said, you can implement a simple custom Action to get the behaviour you're describing:

    1) Inside SkippableActionList (added the "List" as this was confusing me a little), but before the UnskippableActionList run-call, check to see if the list is currently being skipped, and set a Global Boolean variable True/False accordingly (named, e.g. "ContinueSkipping").  This can be done with the ActionList: Check running Action and a pair of Variable: Set Actions.

    2) Again inside SkippableActionList, but after the UnskippableActionList run-call, check the value of this variable.  If it is True (or whichever value denotes the list was previously being skipped), invoke the EndCutscene input manually with the code:

    AC.KickStarter.playerInput.SimulateInputButton ("EndCutscene");

    I haven't tested it mind, but I expect that may give you the same effect.
Sign In or Register to comment.

Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

Welcome to the official forum for Adventure Creator.