Learn Ink (video game dialogue language) in 15 minutes | Ink tutorial

Поделиться
HTML-код
  • Опубликовано: 10 ноя 2024

Комментарии • 100

  • @ufeel8686
    @ufeel8686 3 года назад +12

    I didn’t even know about Ink, what a neat little tool

  • @Germiboi
    @Germiboi 2 года назад +6

    In Germany we say: "Du Ehrenmann". Thank you for your great tutorials man, really appreciate it :)

    • @ShapedByRainStudios
      @ShapedByRainStudios  2 года назад +1

      You're welcome and I'm really glad to hear these tutorials helped! 🙂

  • @kimfaiai
    @kimfaiai 2 месяца назад +2

    I just learned about inky through the iga program and this walkthrough was really helpful and at just the right pace! Thank you!

  • @EternalFlame1337
    @EternalFlame1337 2 года назад +5

    Hands down best tutorial on ink!

  • @danchungurdienkoiwa9590
    @danchungurdienkoiwa9590 Год назад

    I'm so grateful for the opportunity and thank you for your time and effort to complete my application form for the first time in your life and the day I was in touch with you all

  • @YomenChannel
    @YomenChannel Год назад +2

    I was looking for something to handle internalization, and seems like tags are the correct choice ;)

  • @FyresGames
    @FyresGames 2 года назад +11

    Taking a break from a huge tutorial and was looking around for more details about interactive dialogue and found you. Awesome tutorial. Deserve way more views.

    • @ShapedByRainStudios
      @ShapedByRainStudios  2 года назад +1

      Thanks so much for the kind words! Really glad you found it to be helpful! 🙂

    • @FyresGames
      @FyresGames 2 года назад +2

      @@ShapedByRainStudios Just finished your whole tutorial and It was totally worth it. Will reuse that dialogue system 100%

  • @rishi76
    @rishi76 Год назад +1

    Thank you very much for making this tutorial, Trevor, I was going to pass out from reading the docs.

  • @0MrENigma0
    @0MrENigma0 Год назад +5

    Thank you for taking the time to make this tutorial. While the lesson may have been "quick" I am sure it took several hours to create. I have to say that I really appreciate the way you made this tutorial. Since this is a video, which you may be going quickly over information... the information can be watched over and over if a person does not grasp at first. Something I will need to consider if/when I ever make a future "how-to" to share. Also, thank you for the follow up video linking Unity 2D with Ink. Subscribing now.

  • @GeraldClarkAudio
    @GeraldClarkAudio 2 года назад +6

    I know I said that your Other video using Ink with unity was my favorite video on the Internet, but I think this one is actually my favorite. You are so good at actually teaching what you’re going over. Thanks for your videos!

    • @ShapedByRainStudios
      @ShapedByRainStudios  2 года назад +1

      Haha, I'm glad to hear! Thank you so much, that means a lot! 🙂

  • @Marandal
    @Marandal Год назад +1

    Thanks for the Playlist link in the description! XD

  • @queerginiawolf7654
    @queerginiawolf7654 Год назад +1

    Thank you so much :D I'm in love with Ink, anf this is the easiest explanation i've ever seen :D

  • @johng5295
    @johng5295 Год назад +1

    Thanks in a million. Awesome.

  • @mack_shepard3105
    @mack_shepard3105 2 года назад +1

    Best tutorial for inky! 😮❤

  • @searingeyes
    @searingeyes 3 года назад +2

    You good sir are an absolute champion! Thank you so much for this video!

  • @Somewhere_sometime_somehow
    @Somewhere_sometime_somehow Год назад +1

    Third time watching this. Still a great to the point tutorial! Thanks!

  • @Dominik-K
    @Dominik-K 3 года назад +3

    Thanks a bunch for a great introduction to ink. I've been interested in it since I saw a GDC talk and I'm really impressed how versatile it can be.

    • @ShapedByRainStudios
      @ShapedByRainStudios  3 года назад

      No problem! I've definitely enjoyed using it so far myself! 🙂

  • @NitroCandyNC
    @NitroCandyNC 2 года назад +8

    Genuinely amazing tutorial, you're a life saver. Took me a while to hook my input manager up due to the differences (mines kind of shit), but 1 nervous breakdown later and it's working like a charm!

    • @ShapedByRainStudios
      @ShapedByRainStudios  2 года назад +1

      Thanks for the kind words! And that'll happen from time to time haha 😉. Glad you got it working! 🙂

  • @yuriyzvirblis5327
    @yuriyzvirblis5327 Год назад +9

    Hello Trevor! I really like your tutorials, they're helping me a lot in developing my video game!
    I really wish you'd make a tutorial on creating a quest system with ink!

    • @ShapedByRainStudios
      @ShapedByRainStudios  Год назад +3

      Hey there! I'm really glad to hear the tutorials have been helping! I've gotten quite a few requests for a Quest System series. It may be a bit before I get around to making it, but that's definitely on my radar! Appreciate the suggestion! 🙂

  • @unaminhkavanagh
    @unaminhkavanagh 2 года назад +3

    Trever I'm so grateful for this video - I had to learn about Ink in a very short time frame and this was such fantastic help. THANK YOU!

  • @IndieDX
    @IndieDX 3 года назад +2

    Thanks for making this tutorial! Really helpful!

  • @stivenveizaj8268
    @stivenveizaj8268 3 года назад +2

    Well, this makes dialogue implementation alot easier. Great tutorial mate , keep it up !

    • @ShapedByRainStudios
      @ShapedByRainStudios  3 года назад

      Thanks so much! 🙂 Yeah, it's definitely made creating dialogue for my game a lot easier since switching over to it!

  • @CurtisJensenGames
    @CurtisJensenGames 2 года назад +3

    4:05 GOTTA CHOOSE EM ALL!!!

  • @oscar2495
    @oscar2495 Год назад +1

    Thanks a lot for your easy to understand explanation👌

  • @神烦狗
    @神烦狗 2 года назад +2

    Just found this great tool for dialogue and this awesome tutorial! Thank you! ❤

    • @ShapedByRainStudios
      @ShapedByRainStudios  2 года назад

      No problem! I'm glad you found the tutorial to be helpful! 🙂

  • @legendguitargamer
    @legendguitargamer 2 года назад +2

    Thanks a lot man! Amazing tutorial!

  • @ZisTraxMop
    @ZisTraxMop 2 года назад +2

    Great tutorial indeed! Thank you so much

  • @tirkdiamond
    @tirkdiamond 3 года назад +2

    Awesome tutorial. Clean, concise, fast. Thanks!

  • @kudomos925
    @kudomos925 Год назад +2

    Woah that's some dose of parameter logic, I think I need a coffe[E]/4*9functional(😅).

  • @supercc66
    @supercc66 2 года назад +2

    amazing tutorial

    • @ShapedByRainStudios
      @ShapedByRainStudios  2 года назад

      I'm glad you thought so and thank you for the kind words! 🙂

  • @heartofthemountain9200
    @heartofthemountain9200 2 года назад +1

    Another fantastic video. Thank you again!

  • @spoilerfreakerouter
    @spoilerfreakerouter Год назад +1

    Thank you so much for your video! Very informative and concise!

  • @mike_gachan
    @mike_gachan Год назад +1

    Very nice vid, many thanks!

  • @roxiec2450
    @roxiec2450 2 года назад +1

    concise and clear! thank you!

  • @agtechart
    @agtechart 5 месяцев назад +1

    Thx for this tutorial!

  • @antonionotbanderas9775
    @antonionotbanderas9775 7 месяцев назад

    This is way more advanced than it looks. Just that recursive pokemon picker had me 🤯
    I'm looking for a CLI interpreter for ink story files. I think it might speed up development, and also give more of a classic text adventure feel. I hope I don't have to write my own because I'm starting to like this language.

  • @kodaloid
    @kodaloid 3 года назад +1

    Nice! I didn't know this existed. I wish further work was done on the localisation side. From what I can see, you likely need to duplicate a .ink file for each target languages (perhaps with a suffix _en _fr etc..) at the moment which could become unwieldly for large projects. Support in the app to be able to enter translations perhaps on a language toggle would be push this to another level. Great tutorial by the way!

    • @ShapedByRainStudios
      @ShapedByRainStudios  3 года назад

      Thanks so much! 🙂 Yeah, that's how I understand it as well. Fingers crossed that more support for localization gets added in the future! 🤞

    • @lyrion0815
      @lyrion0815 2 года назад +2

      You could probably do translations with tags, too: add #lang:german or #lang:english to a every line, and whenever you .Continue() check the tag - if its the wrong one, keep .Continue()ing until its the correct language.

  • @piobug
    @piobug Год назад +1

    Thanks!

  • @ghosterntt7183
    @ghosterntt7183 2 года назад +1

    this tutorial is great!!!!

  • @saktiharahap6006
    @saktiharahap6006 Год назад

    Hai trevor , saya sangat berterima kasih atas tutorial ini. Anda benar-benar guru yang hebat. Anda juga dapat membuat beberapa tutorial tentang cara membuat novel visual. Itu akan sangat luar biasa karena tidak ada tutorial yang bagus di youtube untuk membuat novel visual.

  • @Lexie_T
    @Lexie_T Год назад

    You know you sound just like the fireship main narrator!

  • @mattsponholz8350
    @mattsponholz8350 3 года назад +2

    Well made Video, Trever! Great introduction to a sweet tool I haven't looked at in a while. My one complaint is the visual lack of speaker-choice separation out of the box. It would be so nice to have a speaker-choice design similar to how any chat/text system works where right side is for you(choices) and left side is for everything else. Instead, there is a line to separate blocks, but the lines don't group it in any way that makes sense with dialog direction. Please tell me if I'm missing something haha till then I'm keeping track with Tags. Thanks, again for the video!

    • @ShapedByRainStudios
      @ShapedByRainStudios  3 года назад +1

      Thank you! I'm glad you found the video useful! 🙂
      To my knowledge, the only way to handle what you mentioned is with tags - which you mentioned you're already using.
      That's how I've been handling speaker related stuff in my game at least. I'll put a tag for whenever the speaker changes, and then handle everything related to that in my C# code (I'm using Unity).
      I hope that helps!

    • @mattsponholz8350
      @mattsponholz8350 3 года назад +1

      @@ShapedByRainStudios Thank you for the reply! I'm a huge fan of meta data logic and will absolutely be getting deeper into tags. Thanks again!

  • @Marandal
    @Marandal Год назад

    I'd love a link to the tutorial playlist in the description

  • @joshuabroberg2380
    @joshuabroberg2380 2 года назад +1

    Amazing tutorial! Question. How would I write a VAR to save data on a dice roll? So '' + [d20] {RANDOM(1,20)}'' I could click "[What did I roll again?]" and show me what has been rolled in the past?

    • @ShapedByRainStudios
      @ShapedByRainStudios  2 года назад +1

      Thank you for the kind words! 🙂 I would write that scenario using the below syntax (comments included to hopefully make it east to follow). You should be able to copy/paste the below into the Inky editor to play around with it.
      ---
      // initialize the rollAmount variable as a global variable of type number
      VAR rollAmount = -1
      // navigate to the 'roll' knot
      -> roll
      === roll ===
      Roll
      // When we roll, assign the random number to the rollAmount variable and then show it
      + [d20]
      ~ rollAmount = RANDOM(1,20)
      {rollAmount}
      -> roll
      // if rollAmount is greater than 0, we've rolled before so show this choice to display the rollAmount we rolled most recently.
      + { rollAmount > 0 } [What did I roll again?]
      {rollAmount}
      -> roll
      // exit the loop and end the story
      + [Exit]
      -> END
      ---
      I hope that helps!🙂

    • @Desdraftlit
      @Desdraftlit 2 года назад

      @@ShapedByRainStudios absolute respect. Programming is so difficult. I've got a whole new outlook on the hard work devs put into video games. You're a god amongst men.

    • @ShapedByRainStudios
      @ShapedByRainStudios  2 года назад

      @@Desdraftlit Thanks so much for the kind words! It's definitely a difficult craft - but also very rewarding! 🙂

  • @AmallieGames
    @AmallieGames Год назад +1

    Would the conditional logic be a valid way to build a Harvest Moon/Stardew Valley style dialogue system? My game needs a system where dialogue will vary based on game events (weather, player progress, special events) and the relationship points with the player. I've been racking my brain trying to come up with how to make this work.

    • @ShapedByRainStudios
      @ShapedByRainStudios  Год назад +1

      Hey there! Correct - conditional logic paired with variables is a great place to start with achieving a Harvest Moon/Stardew Valley style system.
      With weather, for example, you could have a variable with a string for the weather type.
      ```
      VAR weather = "rainy"
      ```
      Then, conditional logic that diverts to different knots depending on the weather. Switch statements, like in the below example, are great when there are more than a few options like weather, days of the week, etc..
      ```
      { weather:
      - "rainy": -> npc_rainy
      - "sunny": -> npc_sunny
      - "else": -> npc_default
      }
      === npc_rainy ===
      It's raining!
      -> DONE
      === npc_sunny ===
      It's sunny!
      -> DONE
      == npc_default ===
      It's a nice day!
      -> DONE
      ```
      From there, your game just needs to change that 'weather' variable accordingly depending on the weather.
      Of course, as you learn more about Ink, you'll develop your own preferences that'll work best for your game - but I think the above example is a good starting point to get used to how to handle this logic in Ink dialogue.
      There are also things called 'Sequences' and 'cycles' which I didn't cover in this video that can be helpful for that kind of logic. Check out the Ink docs (8. Variable Text) to read up on those a bit more - github.com/inkle/ink/blob/master/Documentation/WritingWithInk.md
      I hope that helps a bit and best of luck to you!

    • @AmallieGames
      @AmallieGames Год назад +1

      @TreverMock okay awesome, I'm going to take a stab at it soon and see what I come up with :)

  • @yuna9927
    @yuna9927 2 года назад +1

    Thank you for uploading the tutorial video. It was a great help to me. By the way, how can I put a variable in the tag?

    • @ShapedByRainStudios
      @ShapedByRainStudios  2 года назад

      You're welcome! I'm really glad you found it helpful! 🙂You can use Ink Tags in a lot of different ways, but I've found that a good way to go about them is to put them into key:value pairs and parse them accordingly in whatever is reading in the Ink file. For example, # bob:happy could be used to set a key (bob) to a value (happy).
      I explain this approach a bit more in the 'How it's going to work' timestamp of this video which you might find helpful - ruclips.net/video/tVrxeUIEV9E/видео.html&t

    • @yuna9927
      @yuna9927 2 года назад

      ​@@ShapedByRainStudios Thank you for your reply! Actually, I watched all your videos. all your videos was sooo helpful. Thanks!
      My problem is when I tried to use a global value for a tag, like "#name:{ex_value}". but the variable name was printed out instead of the variable value. To solve this problem, I fixed it like "#name:\{ex_value\}". but the result was same.
      I'm sorry to bother you, but I'd appreciate it if you could reply again. have a good day😊
      + It's translated through a translator, so the text might be weird😅

    • @ShapedByRainStudios
      @ShapedByRainStudios  2 года назад

      @@yuna9927 Ahh I see what you mean. I'm actually not sure if that's possible since Ink treats tags as simple strings. I can think of a couple ways you could go about it though.
      1 - If you wanted to use Ink tags, you could have a tag like # name:{ex_value}, where 'ex_value' is defined in your global variables file (from the multiple ink files tutorial video). When that tag comes into your C# code, you can do some extra parsing to look up variable names that are within curly brackets. So in other words, you'd be using the {ex_value} part to indicate a look up of that variable in your dialogue variables dictionary.
      2 - Alternatively, it could be worth looking into Ink External Functions to see if those are a better fit for what you're trying to do. They can be used to directly call functions in your C# code and pass data (like variables) to those functions. Check out the External Functions section on this page to see a bit more of how they work - github.com/inkle/ink/blob/master/Documentation/RunningYourInk.md
      I hope that helps! 🙂

    • @yuna9927
      @yuna9927 2 года назад

      ​@@ShapedByRainStudios I'll give it a try. Thank you for your answer!

  • @nguyenviethung7311
    @nguyenviethung7311 2 года назад +1

    Great tutorial, one thing though, is there any way to randomize answer? Like, I want to create a rock paper scissor game, how would I do that?

    • @ShapedByRainStudios
      @ShapedByRainStudios  2 года назад +2

      Thanks for the kind words! There is! 🙂I didn't show it in this video, but check out 'Shuffles' in section *'8) Variable Text'* in the Ink docs - github.com/inkle/ink/blob/master/Documentation/WritingWithInk.md

    • @nguyenviethung7311
      @nguyenviethung7311 2 года назад

      @@ShapedByRainStudios thank you so much

  • @benjaminparra982
    @benjaminparra982 Год назад

    Hello! do you have any video with input system? I have problems interacting with the dialog options. Thank you in advance.

  • @kaeptengeldkralle8384
    @kaeptengeldkralle8384 2 года назад +2

    Such a helpful beginner friendly video! :)
    But now, I have a question:
    In my project two words are chosen at random. Then a choice should only appear if it is the same word.
    Anyone know how I can do this?

    • @ShapedByRainStudios
      @ShapedByRainStudios  2 года назад +1

      Thank you for the kind words! I'm glad to hear that! 🙂
      I didn't cover it in this video, but Ink has something called 'Shuffles' that can be used to randomize text. Scroll down to the '8) Variable Text' section of this page to see how those work - github.com/inkle/ink/blob/master/Documentation/WritingWithInk.md
      How I would go about doing what you mentioned is (1) use two different shuffles to select the two words at random and then (2) use a conditional choice where the condition is comparing those two words together (around 10:39 in the video).
      I hope that helps!

  • @slavic_sloth
    @slavic_sloth 2 года назад +2

    Is there anyway to reference a variable from C#, such as an int, inside of Ink?

    • @ShapedByRainStudios
      @ShapedByRainStudios  2 года назад +2

      Hey there! There are a few different ways to do this - but the way I've typically done this is by setting it through the ink stories variableState. For example - currentStory.variableState["player_health"] = 100;
      Scroll down to the Setting/getting ink variables section in this doc for more info - github.com/inkle/ink/blob/master/Documentation/RunningYourInk.md
      You might also find the approach I talk about in this video to be useful - which uses a Variable Observer to maintain the variables in your C# code. From there, you can essentially modify a Dictionary on the C# side that acts as a go-between for your Ink files and your C# code. - ruclips.net/video/fA79neqH21s/видео.html
      I hope that helps! 🙂

  • @avvalt4139
    @avvalt4139 2 года назад +1

    Hey, does anyone know if this is possible? I want to make a knot where let's say the npc says something about monsters, the player doesn't know about the monsters so it's not an option to ask about them but after the npc mentions monsters the player knows they exist now and the option to talk about them appears, if anyone knows how to do this (if possible) I would be very grateful if you showed me how as the video did not elaborate on what I needed to know (no offense to creator I'm just dumb)

    • @ShapedByRainStudios
      @ShapedByRainStudios  2 года назад

      Hey there! 🙂 You can accomplish this using variables (5:00) and conditionals (9:26). I didn't mention them in the video, but _conditional choices_ will also be really helpful in accomplishing what you're trying to do. Here are the docs for that (scroll to the Condition Choices section) - github.com/inkle/ink/blob/master/Documentation/WritingWithInk.md#conditional-choices
      Also, here's an example that should get you started. You can paste it into the Inky editor to play around with.
      ```
      // declare a variable for whether or not they've learned about monsters
      VAR learnedAboutMonsters = false
      -> main
      === main ===
      How can I help you?
      + Anything cool?
      -> learn_about_monsters
      // this is a conditional choice that will only appear when learnedAboutMonsters = true
      + { learnedAboutMonsters } Tell me more about the monsters!
      They are big!
      -> DONE
      + Nothing, thanks!
      -> DONE
      === learn_about_monsters ===
      There are monsters!
      // the below line changes learnedAboutMonsters to true
      ~ learnedAboutMonsters = true
      -> main
      ```
      Hope that helps and best of luck to you!

    • @avvalt4139
      @avvalt4139 2 года назад

      @@ShapedByRainStudios It took a while to wrap my head around but I got it now, thanks!

  • @icomputo
    @icomputo 2 года назад +1

    Hello, how can you do multilanguage using ink, to have dialogues in English, Spanish and French?

    • @ShapedByRainStudios
      @ShapedByRainStudios  2 года назад

      Hey there! 🙂To my knowledge, Ink currently doesn't have direct support for localization. The last I checked, they recommend having separate Ink files for each language (which is definitely a big downside if you have a lot of dialogue).
      There are some other creative solutions people have done out there, but I'm personally not as knowledgeable on them. You'll find some threads and short articles on the subject if you search '_Ink localization_' on Google that might give you some ideas.
      I hope that helps!

  • @thedeadman6171
    @thedeadman6171 Год назад

    hey trevor, do can you help us out if we want to integrate the nested choices with the unity ?

  • @EarnestWilliamsGeofferic
    @EarnestWilliamsGeofferic Год назад +1

    Don't need the equal signs to the right of knots, etc.

  • @kungfungify
    @kungfungify Год назад

    is the video a little blurry or is my youtube broken

  • @divyankratoniya3613
    @divyankratoniya3613 Год назад

    Hello Trevor I am not able to join your discord. it says that invite might be expired

    • @ShapedByRainStudios
      @ShapedByRainStudios  Год назад

      Hey! Thanks for the heads up. It seems like it's working for some and maybe not for others. I'll have to look into what's going on there, but in the meantime, give this link a try - discord.gg/fB7D2Uht

  • @creativename_
    @creativename_ 2 года назад +1

    Hey, how do you add to a variable?

    • @ShapedByRainStudios
      @ShapedByRainStudios  2 года назад +1

      Hey there! You can do any basic math operations as long as you start with the 'tilda' (~) symbol. See the below example:
      // declare a variable 'x'
      VAR x = 2
      // will show as 2
      {x}
      // add 2 to x
      ~ x = x + 2
      // will show as 4
      {x}
      Scroll down to the 'Mathematics' section in this doc for more examples - github.com/inkle/ink/blob/master/Documentation/WritingWithInk.md
      I hope that helps! 🙂

    • @creativename_
      @creativename_ 2 года назад

      @@ShapedByRainStudios helped thanks 👍

  • @berutta
    @berutta Год назад

    I just want to know how to make a choice under one choice

  • @WilliamParrishx
    @WilliamParrishx Год назад

    Why people don’t show how to integrate and design it on unity ????