Inkle Tutorial Part 6: Fitur Mempermudah Hidup dalam Ink

Ali Jaya Meilio Lie
Kolektif Gamedev
Published in
5 min readApr 19, 2024
Photo by Ignacio Amenábar on Unsplash

Artikel ini merupakan bagian dari seri Inkle Tutorial

Untuk melihat artikel sebelumnya silahkan ke Part 5: Cerita Dinamis Berdasarkan Variable

Sampai sekarang, harusnya anda sudah bisa membuat berbagai macam cerita interaktif. Hal yang akan disampaikan berikut sangat opsional.

Blok Kondisional

Seperti yang kita ketahui sebelumnya, kita bisa membuat teks kondisional dengan syntax seperti berikut:

{ kondisi: jika_benar | jika_salah }

Tetapi syntax ini hanya bisa untuk satu baris saja. Jika kita ingin banyak baris kita bisa menggunakan syntax blok seperti ini:

{ kondisi:
teks_jika_benar
...
}

Atau jika kita mau mengeluarkan blok teks jika salah, bisa menggunakan syntax seperti berikut:

{ kondisi:
teks_jika_benar
...
- else:
teks_jika_salah
...
}

Jika kita memiliki beberapa kondisi, bisa menggunakan syntax berikut:

{
- kondisi_1:
teks_jika_kondisi_1_benar
...
- kondisi_2:
teks_jika_kondisi_2_benar
...
- kondisi_n:
teks_jika_kondisi_n_benar
...
- else:
teks_jika_tidak_ada_kondisi_yang_benar
...
}

Perhatikan syntax kondisi_1 berbeda dari syntax yang sebelumnya, disini dia menggunakan tanda - di depannya. Kondisi akan di cek dari blok paling atas, jika ada yang benar, dia akan langsung menjalankan blok tersebut saja. Jika salah, dia akan lanjut ke blok selanjutnya sampai menemukan ada yang benar. Jika semuanya salah, barulah blok else akan dijalankan. Disini else bersifat opsional.

Contoh:

VAR lantai = 0

-> cek_lantai

=== cek_lantai ===
Anda sedang berada di lantai {lantai}.
{
- lantai == 0:
Anda berada di lantai dasar.
Anda melihat air mancur di tengah - tengah ruangan.
- lantai == 1:
Anda melihat banyak pertokoan disini.
Anda melihat pinggiran pagar, dari sana anda bisa melihat lantai dasar.
- lantai >= 5:
Anehnya anda tetap melihat pertokoan yang sama.
Anda tidak tahu tinggi gedung ini sampai berapa.
- lantai >= 2:
Anda tetap melihat pertokoan, tetapi anda tidak bisa melihat lantai di bawah anda.
- lantai == -1:
Anda berada di basement, cahaya terlihat remang - remang disini.
- lantai <= -2:
Anda semakin berada di bawah permukaan.
Anda penasaran sampai sedalam apakah basement ini.
}
+ Anda mencoba untuk naik
~ lantai = lantai + 1
+ Anda mencoba untuk turun
~ lantai = lantai - 1
-
-> cek_lantai

Pada contoh berikut anda akan bisa naik turun lantai, dan tiap lantai akan memberikan deskripsi yang berbeda.

Variasi Teks

Terkadang kita membutuhkan teks yang berubah — ubah tergantung teks itu sudah dilewati berapa kali. Contohnya seorang NPC yang diajak ngobrol. Biasanya dia memiliki beberapa teks yang akan dikeluarkan, sampai teksnya habis dan mengulang kata — kata terakhir yang diucapkan.

Hal tersebut bisa dilakukan menggunakan label dan teks kondisional. Contohnya seperti berikut:

- (ulang)
+ Ngobrol dengan NPC
-- (ngobrol)
{
- ngobrol == 1:
Heyo petualang, wazzup!
Ada yang baru kah?
- ngobrol == 2:
Ada yang bisa dibantu kah?
Kalau ga, saya yang butuh bantuan nih!
- ngobrol == 3:
Cuacanya bagus nih hari ini!
Jalan - jalan enak kayaknya!
- ngobrol >= 4:
Kalau ga ada yang mau diomongin, sono gih!
}
-> ulang
+ leave
Yo a, bye bye!
-> END

Cara seperti ini sebenarnya sah — sah saja, tetapi Ink menawarkan fitur yang lebih mudah. Ink diatas bisa ditulis ulang sebagai berikut:

- (ulang)
+ Ngobrol dengan NPC
{ stopping:
- Heyo petualang, wazzup!
Ada yang baru kah?
- Ada yang bisa dibantu kah?
Kalau ga, saya yang butuh bantuan nih!
- Cuacanya bagus nih hari ini!
Jalan - jalan enak kayaknya!
- Kalau ga ada yang mau diomongin, sono gih!
}
-> ulang
+ leave
Yo a, bye bye!
-> END

Bisa dilihat kita bukan menggunakan Blok Kondisional, tetapi menggunakan fitur Variasi Teks. Dimana syntaxnya adalah sebagai berikut:

{ stopping:
- Teks pertama
...
- Teks kedua
...
- Teks terakhir
...
}

Dimana kita menggunakan kata kunci stopping , dan menyusun blok seperti di atas. Saat dijalankan pertama kali, dia akan menampilkan Teks pertama , saat dijalankan kedua kalinya dia akan menampilkan Teks kedua dan seterusnya. Jika teksnya sudah habis, maka dia akan menampilkan Teks terakhir .

Alternatif lainnya adalah:

{ once:
- Teks pertama
...
- Teks kedua
...
- Teks terakhir
...
}

Untuk once dia memiliki perilaku yang sama dengan stopping tetapi setelah Teks terakhir ditampilkan, dia tidak akan menampilkan apa — apa lagi jika dijalankan lagi. Tidak seperti stopping yang menampilkan Teks terakhir .

Selanjutnya adalah cycle :

{ cycle:
- Teks pertama
...
- Teks kedua
...
- Teks terakhir
...
}

Untuk cycle , setelah mengeluarkan Teks terakhir , selanjutnya dia akan mengeluarkan Teks pertama , sehingga teksnya akan berulang terus berurutan.

Jika kita ingin mengeluarkan teks secara acak, kita bisa menggunakan shuffle :

{ shuffle:
- Teks pertama
...
- Teks kedua
...
- Teks terakhir
...
}

shuffle akan mengeluarkan teks secara acak dengan sebisa mungkin tidak mengeluarkan teks yang sama dua kali kecuali semua teks sudah tampil.

shuffle pun mempunyai dua variant lain yaitu, shuffle once dan shuffle stopping .

{ shuffle once:
- Teks pertama
...
- Teks kedua
...
- Teks terakhir
...
}

shuffle once akan mengacak teks yang muncul sampai semua teks sudah muncul. Jika itu terjadi, maka dia tidak akan memunculkan teks apa — apa lagi.

{ shuffle stopping:
- Teks pertama
...
- Teks kedua
...
- Teks terakhir
...
}

Untuk shuffle stopping , dia akan mengacak teks kecuali Teks terakhir , jika semuanya sudah muncul, maka dia akan mengeluarkan Teks terakhir terus menerus.

Variasi Teks Satu Baris

Karena fitur ini sering dipakai, ada versi pendeknya yang hanya sebaris. Syntaxnya adalah seperti berikut:

{ teks_pertama | teks_kedua | teks_terakhir }

Syntax diatas itu berperilaku sama dengan stopping tetapi hanya perlu satu baris. Contohnya adalah sebagai berikut:

Anda melihat seekor anjing.
- (ulang)
+ Elus anjing itu
Anjing itu terlihat senang dan { menjulurkan lidahnya | menggoyang-goyangkan ekornya | menggonggong riang }.
-> ulang

Syntax untuk once adalah sebagai berikut (perhatikan tanda ! di depan)

{! teks_pertama | teks_kedua | teks_terakhir }

Untuk cycle adalah sebagai berikut (perhatikan tanda & di depan)

{& teks_pertama | teks_kedua | teks_terakhir }

Dan untuk shuffle adalah sebagai berikut (perhatikan tanda ~ di depan)

{~ teks_pertama | teks_kedua | teks_terakhir }

Yang Belum Dibahas

Sudah hampir semua seluk beluk tentang Ink sudah dibahas, kecuali ada beberapa fitur yang sangat jarang digunakan atau lumayan advanced.

Beberapa hal yang belum dibahas:

  • Temporary Variable
  • Knots yang bisa menerima input / parameter
  • Fungsi
  • Pemanggilan Fungsi di baris logika
  • Menggunakan Random
  • Tunnel
  • Thread
  • Penggunaan Fitur List

Anda bisa membaca fiturnya lebih lanjut di dokumentasi officialnya di: https://github.com/inkle/ink/blob/master/Documentation/WritingWithInk.md

Ok, mungkin anda tidak puas hanya dengan teks saja, anda ingin membuat game, mungkin ada karakter bisa jalan — jalan kemudian interaksi dengan NPC, bagaimana cara membuatnya? Untuk itu, harus ada integrasi dari teks Ink kita dengan Game Engine yang bakal kita pakai nanti. Itu akan kita bahas di seri artikel tutorial selanjutnya. Stay tuned!

--

--

Kolektif Gamedev
Kolektif Gamedev

Published in Kolektif Gamedev

Kumpulan publikasi yang dibuat oleh game developer Indonesia.

Ali Jaya Meilio Lie
Ali Jaya Meilio Lie

Written by Ali Jaya Meilio Lie

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