Inkle Tutorial Part 3: Pengorganisasian di Ink

Ali Jaya Meilio Lie
Kolektif Gamedev
Published in
6 min readApr 19, 2024
Photo by Kelly Sikkema on Unsplash

Artikel ini merupakan bagian dari seri Inkle Tutorial

Untuk melihat artikel sebelumnya silahkan ke Part 2: Menulis Cerita Interaktif Dengan Ink

Sampai sekarang sebenarnya kita sudah bisa menulis cerita interaktif yang lumayan panjang.

Tetapi alangkah lebih baik jika kita dapat memecah — mecah cerita menjadi bagian yang lebih gampang diatur.

Knots / Node

Di Yarn Spinner istilah organisasi ini disebut Node, sedangkan di Ink, ini disebut Knots. Knots ditulis dengan format sebagai berikut:

=== nama_knots ===

Perlu diingat nama knots tidak boleh memiliki spasi dan harus unik (tidak ada nama yang sama).

Contoh penggunaan Knots:

=== kamar_tidur ===
Anda melihat ada kasur, meja dan lemari.
+ Periksa kasur
Di atas kasur terdapat bantal dan sebuah plushie.
+ Periksa meja
Mejanya berantakan, terdapat sepucuk surat berwarna merah dibawah tumpukan kertas.
+ Periksa lemari
Terlihat jejeran berbagai macam board game yang sudah berdebu.
Terlihat board game tersebut sudah lama tidak dimainkan.
-
-> DONE

=== dapur ===
Di dalam dapur terdapat kulkas, meja, dan rak peralatan.
+ Cek kulkas
Anda membuka kulkas, terlihat kosong kecuali ada satu kotak susu yang terlihat sudah basi.
+ Cek meja
Di atas meja terdapat talenan beserta pisau dapur.
+ Cek rak peralatan
Anda melihat ada berbagai panci yang berminyak seperti tidak pernah dicuci.
-
-> DONE

Kalau teks tersebut dijalankan di dalam Inky, anda hanya mendapat tulisan End of Story , seolah — olah tidak ada isinya. Itu dikarenakan secara default, knots ini tidak langsung jalan. Untuk menjalankan atau pindah ke knots lain, kita butuh Diverts.

Diverts / Jump / Go To

Diverts adalah sebuah mekanisme untuk pindah dan menjalankan Knots lain. Di dalam peralatan lainnya seperti Yarn Spinner, ini disebut dengan Jump atau sering juga disebut Go To .

Diverts ditulis dengan syntax seperti berikut

-> nama_knots

Ada beberapa nama Knots yang secara default sudah ada di bahasa Ink, yaitu -> DONE dan -> END .

-> DONE digunakan untuk menandai jika suatu Knots sudah selesai dan tidak ada konten lagi.

Sedangkan -> END digunakan untuk menandai jika ceritanya sudah selesai.

Di dalam suatu Knots, ujung dari semua Knots harus ditandai dengan Diverts, antara Diverts ke Knots lain atau menggunakan -> DONE untuk menandai tidak ada konten lagi, atau -> END untuk menandai ceritanya sudah selesai.

Secara default, Ink tidak akan memulai Knots apapun di awal, dia akan mulai dari baris sebelum deklarasi Knots pertama. Jika kita ingin langsung memainkan Knots pertama, kita harus Diverts ke Knots tersebut.

Contohnya:

-> kamar_tidur

=== kamar_tidur ===
Anda melihat ada kasur, meja dan lemari.
+ Periksa kasur
Di atas kasur terdapat bantal dan sebuah plushie.
+ Periksa meja
Mejanya berantakan, terdapat sepucuk surat berwarna merah dibawah tumpukan kertas.
+ Periksa lemari
Terlihat jejeran berbagai macam board game yang sudah berdebu.
Terlihat board game tersebut sudah lama tidak dimainkan.
-
Sekarang mau ngapain?
+ Cek kamar tidur lagi
-> kamar_tidur
+ Pindah ke dapur
-> dapur

=== dapur ===
Di dalam dapur terdapat kulkas, meja, dan rak peralatan.
+ Cek kulkas
Anda membuka kulkas, terlihat kosong kecuali ada satu kotak susu yang terlihat sudah basi.
+ Cek meja
Di atas meja terdapat talenan beserta pisau dapur.
+ Cek rak peralatan
Anda melihat ada berbagai panci yang berminyak seperti tidak pernah dicuci.
-
Sekarang mau ngapain?
+ Cek dapur lagi
-> dapur
+ Pindah ke kamar tidur
-> kamar_tidur

Perlu diperhatikan, dengan Diverts, kita bisa membuat konten yang berulang, misalnya setelah mengecek di kamar, kita bisa loncat ke kamar_tidur lagi dan mengulang kontennya dan memilih hal yang berbeda.

Stitch

Misalkan kita ingin membuat teks kita lebih kompleks. Misalnya setiap objek yang akan kita interaksikan memiliki Knotsnya sendiri. Contohnya seperti berikut:

-> kamar_tidur

=== kamar_tidur ===
Anda melihat ada kasur, meja dan lemari.
+ Periksa kasur
-> kamar_tidur_kasur
+ Periksa meja
-> kamar_tidur_meja
+ Periksa lemari
-> kamar_tidur_lemari
+ Pindah ke dapur
-> dapur

=== kamar_tidur_kasur ===
Di atas kasur terdapat bantal dan sebuah plushie.
-> kamar_tidur

=== kamar_tidur_meja ===
Mejanya berantakan, terdapat sepucuk surat berwarna merah dibawah tumpukan kertas.
+ Periksa surat merah
Anda membuka surat merah tersebut, ternyata berisi surat cinta dari kekasih gelapnya.
+ Periksa hal lain
-
-> kamar_tidur

=== kamar_tidur_lemari ===
Terlihat jejeran berbagai macam board game yang sudah berdebu.
Terlihat board game tersebut sudah lama tidak dimainkan.
-> kamar_tidur

=== dapur ===
Di dalam dapur terdapat kulkas, meja, dan rak peralatan.
+ Cek kulkas
-> dapur_kulkas
+ Cek meja
-> dapur_meja
+ Cek rak peralatan
-> dapur_rak_peralatan
+ Pindah ke kamar tidur
-> kamar_tidur

=== dapur_kulkas ===
Anda membuka kulkas, terlihat kosong kecuali ada satu kotak susu yang terlihat sudah basi.
-> dapur

=== dapur_meja ===
Di atas meja terdapat talenan beserta pisau dapur.
-> dapur

=== dapur_rak_peralatan ===
Anda melihat ada berbagai panci yang berminyak seperti tidak pernah dicuci.
-> dapur

Seperti yang dilihat, penamaan Knots disini menggunakan kamar_tidur_sesuatu . Sebenarnya bisa saja langsung menuliskan kasur daripada kamar_tidur_kasur .

Tetapi dikarenakan nama Knots harus unik, maka meja di kamar_tidur dan meja di dapur harus dibedakan, oleh karena itu tiap nama node dibedakan dengan lokasinya dimana.

Tentu ini agak sedikit ribet. Oleh karena itu di Ink terdapat fitur yang bernama Stitch. Stitch ini bisa dianggap sebagai Sub-Knots. Stitch ditulis dengan syntax sebagai berikut:

= nama_stitch

Contoh penggunaannya sebagai berikut:

-> kamar_tidur

=== kamar_tidur ===
Anda melihat ada kasur, meja dan lemari.
+ Periksa kasur
-> kasur
+ Periksa meja
-> meja
+ Periksa lemari
-> lemari
+ Pindah ke dapur
-> dapur

= kasur
Di atas kasur terdapat bantal dan sebuah plushie.
-> kamar_tidur

= meja
Mejanya berantakan, terdapat sepucuk surat berwarna merah dibawah tumpukan kertas.
+ Periksa surat merah
Anda membuka surat merah tersebut, ternyata berisi surat cinta dari kekasih gelapnya.
+ Periksa hal lain
-
-> kamar_tidur

= lemari
Terlihat jejeran berbagai macam board game yang sudah berdebu.
Terlihat board game tersebut sudah lama tidak dimainkan.
-> kamar_tidur

=== dapur ===
Di dalam dapur terdapat kulkas, meja, dan rak peralatan.
+ Cek kulkas
-> kulkas
+ Cek meja
-> meja
+ Cek rak peralatan
-> rak_peralatan
+ Pindah ke kamar tidur
-> kamar_tidur

= kulkas
Anda membuka kulkas, terlihat kosong kecuali ada satu kotak susu yang terlihat sudah basi.
-> dapur

= meja
Di atas meja terdapat talenan beserta pisau dapur.
-> dapur

= rak_peralatan
Anda melihat ada berbagai panci yang berminyak seperti tidak pernah dicuci.
-> dapur

Dapat dilihat, dengan menggunakan stitch, meja di kamar_tidur itu berbeda dengan meja di dapur . Jika di Knots kamar_tidur diverts ke meja , dia akan secara otomatis tahu kalau meja yang dimaksud adalah yang di dalam kamar_tidur .

Lalu bagaimana jika kita dari Knots kamar_tidur ingin Diverts ke meja di dapur ? Tentu itu bisa dilakukan, tetapi alih — alih menulis -> meja , harus ditulis alurnya dengan lengkap menggunakan . seperti -> dapur.meja .

Label

Stitch lumayan membantu untuk mengorganisasikan kode lebih rapi. Tetapi terkadang kita ingin loncat ke tengah — tengah Knots.

Kita bisa membagi Knots tersebut menjadi dua menggunakan Stitch, tetapi tentu itu sangat ribet. Oleh karena itu di Ink disediakan cara untuk membuat label ditengah — tengah Knots yang bisa digunakan untuk loncat ke sana.

Label bisa dipasang pada Gather maupun Choices, dengan syntax seperti berikut:

- (nama_label)

Atau jika pada Choices

+ (nama_label)

Contoh lebih konkritnya:

Anda dan Budi sedang bermain di taman.
Budi: Ayo tebak angka 1 - 5!

- (tebak)
+ Tebak 1
+ Tebak 2
Budi: Wah kok tahu?
-> benar
+ Tebak 3
+ Tebak 4
+ Tebak 5
-
Budi: Salah, silahkan tebak lagi
-> tebak

- (benar)
Budi: Anda benar!

Jika dijalankan, jika kita memilih selain Tebak 2 kita akan diminta untuk menebak lagi.

Jika diperhatikan, setelah pilihannya, terdapat Gather yang berakhir membuat kita lompat ke -> tebak , oleh karena itu pilihan kita berulang.

Jika diperhatikan Gather-(tebak) dan -(benar) tidak memiliki Choices apapun diatasnya, ini diperbolehkan, karena label itu hanya bisa di baris Gather saja, tidak bisa di baris teks biasa. Ingat, Gather nya harus satu tingkat di atas Flow yang sekarang, karena kalau tidak, itu akan seolah — olah mengakhiri Flow yang sekarang.

Sekarang anda sudah bisa melompat — lompat di cerita interaktif anda. Tetapi ada satu yang kurang dalam cerita interaktif ini, yaitu tidak terlalu terasa dinamis. Itu dikarenakan jika kita menjalankan suatu Knots, teks yang muncul selalu sama, tidak pernah berubah dari apa yang pernah kita pilih sebelumnya. Itu dikarenakan, untuk melakukan hal tersebut dibutuhkan Variable atau Flags.

Di artikel selanjutnya kita akan membahas tentang Variable, dan bagaimana memanipulasinya.

Lanjut ke Part 4: Logika dalam Ink

--

--

Ali Jaya Meilio Lie
Kolektif Gamedev

Hello, I'm a Jack of All Trades. I like fabrication, in digital or physical realms.