Inkle Tutorial Part 3: Pengorganisasian di Ink
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