Howdy, Stranger!

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

"Don't Move"

Hello, Twine Community!

I am a relatively new Twine writer, and I'm currently working on a big project. I wish to adapt the video game Until Dawn into a text game personalized using my friends and I as the main characters.

One major gameplay factor of the game is the "Don't Move" component, in which you must hold your controller completely still. Your ability to remain still will affect the story and could make a huge difference.

I am wondering how I could make something like this in a textual format. Making choices "Move" and "Don't move" seem too simple and obvious, so is there a more complex way to implement this into Twine?

Comments

  • edited September 2016
    I bet you could conceivably do something with Javascript (holding the mouse still within a moving circle?) but, as another relatively new Twine writer with no Javascript experience, I have no idea how you'd implement this.

    Instead, a less complex idea: I'm pretty sure that all versions of Twine have a way to time things. You could inject a certain amount of "move / don't move" interactivity into some decisions by adding a timer-- say, you have to wait until a monster passes the place you're hiding, and clicking to move out of hiding before then gets you caught. You could also do the reverse: something's chasing you, and you have to make your navigational decisions on a time limit before it catches up.
  • I will look into both options! Thank you very much!
  • TimCat329 wrote: »
    I will look into both options! Thank you very much!

    I've been doing twine for ages, though I've never done any javascript. However, I could help you with a timer. You wanna use a (live:) macro. If you give me an example of something you want done I could write out some code for ya.
  • In the game, the point is to hold the controller completely still for a certain period of time, and if the sensor notices the controller moving, you fail.

    (Example: Sam hides from the Psycho behind a wall. If you fail the "Don't Move" segment, the Psycho notices her. If you succeed, you have a chance to escape.)

    Basically, [character] must stay still for [time] in order to [goal] or else [character] will face [punishment].
  • TimCat329 wrote: »
    In the game, the point is to hold the controller completely still for a certain period of time, and if the sensor notices the controller moving, you fail.

    (Example: Sam hides from the Psycho behind a wall. If you fail the "Don't Move" segment, the Psycho notices her. If you succeed, you have a chance to escape.)

    Basically, [character] must stay still for [time] in order to [goal] or else [character] will face [punishment].

    When you say controller, d'you mean this is gonna be a console game? Cause I dunno how to do console stuff. But something like that probably involves javascript?
  • edited October 2016
    You might have to be careful converting fairly kinetic game mechanics into text. Might not always work.
  • Deadshot wrote: »
    When you say controller, d'you mean this is gonna be a console game? Cause I dunno how to do console stuff. But something like that probably involves javascript?

    The original game is for console, but not what I'm working on.
    Claretta wrote: »
    You might have to be careful converting fairly kinetic game mechanics into text. Might not always work.

    I'm not 100% familiar with Javascript, how can I go about using it?
  • TimCat329 wrote: »
    Deadshot wrote: »
    When you say controller, d'you mean this is gonna be a console game? Cause I dunno how to do console stuff. But something like that probably involves javascript?

    The original game is for console, but not what I'm working on.
    Claretta wrote: »
    You might have to be careful converting fairly kinetic game mechanics into text. Might not always work.

    I'm not 100% familiar with Javascript, how can I go about using it?

    If you ain't using a console, then how can you hold a controller, and make it affect the game?
  • Deadshot wrote: »
    If you ain't using a console, then how can you hold a controller, and make it affect the game?

    Sorry, I wasn't clear. I'm not planning on using a controller for this. What I was hoping for was a timer or Javascript thing that could do something similar to a controller.
  • Here's a really brief demonstration of using timers that I whipped up: a simple two-passage game where the player is hiding inside of a grandfather clock while the ferocious Wammerwill lurks outside. If the player exits the clock before the Wammerwill has departed, they will be devoured.


    This is the starting passage:
    {(set: $wait to 0)
    (set: $safe to 0)
    It's a good thing that the grandfather clock was unlocked. Even so, you find it hard to appreciate this stroke of good fortune as you huddle inside.
    (live: 3s)[(set: $wait to it + 1)(if: $wait is 1)[You can hear the Wammerwill pacing outside, its long claws scratching on the floorboards..]
    (elseif: $wait is 2)[It pauses. Your heart hammers in your chest.]
    (elseif: $wait >= 3 and $wait <= 4)[Silence.]
    (elseif: $wait > 4)[(set: $safe to 1)The Wammerwill gives on last futile scratch at the door of the clock, and then paces down off the hallway. You breathe easier.]]}
    
    [[Exit the clock]]
    

    And this goes in a passage entitled "Exit the clock":
    (if: $safe is 1)[Cautiously pushing the door open, you stick your head out. There is no sign of the Wammerwill. Closing the door of the grandfather clock, you hurry off down the hallway in the opposite direction.
    
    You have won!](else:)[Cautiously pushing the door open, you stick your head out-- only to come face to face with the blazing eyes of the Wammerwill! You are quickly dragged from the clock and devoured.
    
    You have lost.]
    

    The (live:) macro causes the contents of its attached hook (the stuff next to it in brackets []) to be run every x seconds; for example, (live: 3s)[hello] will print "hello" after 3 seconds (and every 3 seconds after that, but you can't see it change.)

    In order to display something different as time passes, we stick an incrementing $wait variable into the loop: its value will increase by 1 every time our (live:) macro fires off.
    Then we can check the $wait variable each time the (live:) macro runs and display different messages depending on its value.
  • Wraithling wrote: »
    Here's a really brief demonstration of using timers that I whipped up: a simple two-passage game where the player is hiding inside of a grandfather clock while the ferocious Wammerwill lurks outside. If the player exits the clock before the Wammerwill has departed, they will be devoured.


    This is the starting passage:
    {(set: $wait to 0)
    (set: $safe to 0)
    It's a good thing that the grandfather clock was unlocked. Even so, you find it hard to appreciate this stroke of good fortune as you huddle inside.
    (live: 3s)[(set: $wait to it + 1)(if: $wait is 1)[You can hear the Wammerwill pacing outside, its long claws scratching on the floorboards..]
    (elseif: $wait is 2)[It pauses. Your heart hammers in your chest.]
    (elseif: $wait >= 3 and $wait <= 4)[Silence.]
    (elseif: $wait > 4)[(set: $safe to 1)The Wammerwill gives on last futile scratch at the door of the clock, and then paces down off the hallway. You breathe easier.]]}
    
    [[Exit the clock]]
    

    And this goes in a passage entitled "Exit the clock":
    (if: $safe is 1)[Cautiously pushing the door open, you stick your head out. There is no sign of the Wammerwill. Closing the door of the grandfather clock, you hurry off down the hallway in the opposite direction.
    
    You have won!](else:)[Cautiously pushing the door open, you stick your head out-- only to come face to face with the blazing eyes of the Wammerwill! You are quickly dragged from the clock and devoured.
    
    You have lost.]
    

    The (live:) macro causes the contents of its attached hook (the stuff next to it in brackets []) to be run every x seconds; for example, (live: 3s)[hello] will print "hello" after 3 seconds (and every 3 seconds after that, but you can't see it change.)

    In order to display something different as time passes, we stick an incrementing $wait variable into the loop: its value will increase by 1 every time our (live:) macro fires off.
    Then we can check the $wait variable each time the (live:) macro runs and display different messages depending on its value.

    Or you could use the (mouseover:) macro so the player's mouse has to stay still, otherwise it will hit a loada hidden (mouseover:) links:
    |passage>[You can hear the Wammerwill outside the grandfather clock...|don'tMove>[
    
    
    ](mouseover: ?don'tMove)[You make a noise and the Wammerwill suddenly finds you and kills you!]]
    
    (live: 20s)[(replace: ?passage)[You win!]]
    
  • Deadshot wrote: »
    Or you could use the (mouseover:) macro so the player's mouse has to stay still, otherwise it will hit a loada hidden (mouseover:) links:

    I'd like to point out that this can cause massive headaches due to how users move the mouse and how the HTML box model operates. A simple accidental move or miss by a few pixels can trigger (presumably dire) consequences. It's also entirely incompatible with mobile input. Which could be a problem, depending on the audience.

    To the original topic, I really like this idea, but it needs some consideration as a mechanic in text. A few issues: 'waiting' in text is not hard. As you read, you wait by default, and forcing the player to wait too long is in fact annoying and bogs down gameplay. Or, if the passage is too long, they win by default by waiting.

    Instead, I'd suggest doing the opposite: force the player to act quickly (which is stressful in text, as you may not know everything). If you have 7 options to choose from and one or two lines of text to read... and now a counter ticking down from say 15s, that'd make a more compelling mechanic.

    I know, I know. Not quite like the original idea, but it fulfills a similar spiritual concept in the text-based world.

    Another, slightly simpler, option is to do what I did in my game: hide a chance-based consequence under an innocent seeming text option. The way this plays out (in my case) is that the player will get three options, eg. "approach" "attack" "sneak away" and in any one of these there's a chance the player will be 'ambushed' (calculated via a check to the player's skills). If they fail the check, they get forced into combat even if they chose a safe option. I used this to add tension to 'creepy' areas of the story and I suppose smth similar could be adapted for use in this case.

Sign In or Register to comment.