Gw Temp


Tutorial - 'Shenmue QTE's' by Kunio

An item about General posted on


How to create a button QTE style system like Shenmue!


This tutorial will guide you in making events that require a specific order of button inputs in a set amount of time. QTE's or Quick Time Events are just the name I'll use because Shenmue came to mind when I made them for my game, but have many other name and TONS of uses. In my current game, when Kunio hits a big jump on his skate board, the player will have to input a quickly displayed command in a given amount of time. Depending on how many consecutive correct inputs the player executes, the better or longer chain of skate boarding tricks Kunio will perform. But, like I said, there are many uses. An example given in the Help file is that of a timed bomb that may need to be disarmed. A thought I had would be to use it in a Custom Battle System. With QTE's or even just basic, untimed, inputs you could have a battle system like Xenogears or Legaia. Though I think if the attacks were timed it would be a lot more fun. Which reminds me of Zell's limit break. Of course you can use them like in Shenmue, where the hero would clear obstacles based on the inputs of the player. Now, on to the tutorial.

The first thing I did was make some graphics for the 6 different inputs you can use in RPG Maker 2000. They are Up, Down, Left, Right, Enter/Confirm, Esc/Cancel. With these graphics I made a battle animation for each button press. I had the keys laid out sort of like a control pad and would have a specific key or button flash. To start I had 12 different animations excluding any input animations. I had Up, Down, Left, Right, Enter, and Esc and had these same inputs only they would flash red and emit a negative sounding sound to signify an incorrect input. Now after all these are finished I made my first command input animation. It had Up then Down then Left then Right flash in that order. Now for some coding.

First make an event that is auto start and have it only turned on when a switch (QTE1) is ON. That way when a character hits a jump, gets attacked or whatever, the event will start then. On the same page make some new switches: QTE2 and QTE3. You'll also want a variable. We'll call it QTEStep. Now make a command that sets QTEStep to 0. This variable will keep count of which input the user is currently on in the series of button presses. Make a command that is a timer operation that sets the timer for how many seconds you desire. Now make a command that shows a battle animation and have it show the animation of several button presses and check that you want to WAIT for the animation to finish. Then maker a timer operation that starts the timer. I usually have the timer displayed but it's for cosmetic purposes. Now make a command that turns QTE2 ON. Make a new page.

This new page should have event condition that QTE2 is ON and make it auto start. The very first command should be Enter Password. Make a new variable for it to change. We'll call it QTEInput. Make sure that you checked every box in the Enter Password command except for wait for key press. Next make a Wait command and set the time for .1seconds. This makes it so that having the enter password command not wait/hold up the event for a key press not register as holding down the button. Other wise the event cycles quickly and will read that the user is holding down the key unless they have lighting speed. Overall, though, the wait makes it a lot more user friendly. Now make a Fork with conditions of variable QTEInput is 4. That is the equivilant of input-Up. Right under that Fork make a new Fork with conditions that variable QTEStep is 0 and check the Else case box. Under this fork show the animation for Up being pressed and make a change variable command that will increase QTEStep by 1. In the else case show the negative or wrong animation for Up and set QTEStep back to 0. This causes the input to have to be inputted from the beginning. Otherwise the user could mash in the input. Now repeat the process for every input in your input command series (Up, Down, Left, Right is mine). Only change the first Fork's conditions to: (6)Cancel, (5)Confirm, (4)Up, (3)Right, (2)Left, (1)Down. And in the second Fork, have its condition be that QTEStep is 1 greater than the previous input. For any inputs you don't use either uncheck them in the enter password command (lame) or make them only show incorrect animations and reset QTEStep. The only problem with this setup is that in order to have the same input twice, but occuring in different steps, you'll have to program it differently and I can't think of a way to do it right now unless you use even more pages. In the last correct input Fork, change switch QTE3 to ON. Now under and outside of all these forks have a new Fork with conditions that timer is less than 0min 0sec. In this Fork have QTE3 turn ON. This makes the event continue. Make a new page.

On this page have its condition be that QTE3 is ON. Now show the final outcome. Mine shows the final trick animations based on how many inputs were successfully inputted. But if yours is like Shenmue you'll want to make a Fork that is conditionally dependant on QTEStep's value and have an Else case. If they got all the inputs, the outcome is good. If not they get beat up or whatever. If you have one like Xenogears or Legaia you won't need a timer. For Zell's limit break you'll want many pages that will have certain inputs result in different attacks. For one similar to mine, you could have a large attack string based on the number of correct inputs. In fact, using this tutorial you could make limit breaks similar to many final fantasy characters like Squall's, Lulu's, Tidus's, Sabin's. These all come to mind. For Squall's and similarly Tidus's have a picture move across the screen (explained in several other tutorials on this site) and instead of QTEStep use a variable that is dependant on the X-value position of the image. Lulu's could be done by having several Forks that if QTEStep is 4, 8, 12, 16, etc... A variable: SpellCount will increase by one and will reset QTEStep to 0. (If you remember Lulu's Overdrive was based on how many times you rotated the control stick, but you had to rotate it more based on how many rotations you already had. So for one spell: 1-rotation, then the next spell increase needed 2-rotations making the total 3. This pattern is called Fibbonachi. The reason I used the multiples of 4 is because you'll want to use the sequence: Up, Right, Down, Left over and over again. And the variable QTEStep increases by one for each input. Sabin's would work just like what we've already covered. One thing to remeber is that these won't work in the default battle system. But, have fun and give credit!