Inkle Tutorial Part 5: Cerita Dinamis Berdasarkan Variable

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

Artikel ini merupakan bagian dari seri Inkle Tutorial

Untuk melihat artikel sebelumnya silahkan ke Part 4: Logika dalam Ink

Teks Berkondisi / Conditional Text

Sampai sini anda mungkin berpikir, buat apa saya menampilkan tulisan true atau false di game? Alangkah lebih baik kalau kita bisa menuliskan sesuatu yang lain jika true atau tulisan lain jika false .

Itu tentu bisa, di Ink, kita menggunakan syntax seperti berikut:

{ekspresi_boolean: teks_jika_true}

Ekspresi Boolean ini tentu saja bisa bernilai konstan, sebuah variable, atau ekspresi gabungan menggunakan operator yang hasilnya bernilai Boolean.

Contohnya:

VAR makan = 0

- (ulang)
Anda melihat banyak apel di atas meja.
+ Makan satu
Anda memakan satu apel
~ makan = makan + 1
-> ulang
+ Selesai
-
Anda berpikir cukup untuk makan.
{makan >= 3: Anda merasa sangat kekenyangan.}

Jika kita memilih Makan satu sebanyak 3 kali atau lebih, kemudian memilih Selesai maka teks Anda merasa sangat kekenyangan akan muncul karena makan > 2 . Tetapi jika kita memlih Makan satu kurang dari 3, maka tidak akan muncul teks tersebut.

Jika kita ingin menampilkan teks yang lain jika ternyata nilai booleannya menghasilkan nilai false , kita bisa menggunakan syntax berikut:

{ekspresi_boolean: teks_jika_true | teks_jika_false}

Contohnya adalah sebagai berikut:

VAR makan = 0

- (ulang)
Anda melihat banyak apel di atas meja.
+ Makan satu
Anda memakan satu apel
~ makan = makan + 1
-> ulang
+ Selesai
-
Anda berpikir cukup untuk makan.
{makan >= 3: Anda merasa sangat kekenyangan. | Anda masih kelaparan.}

Jika variable makan kurang dari 3 , maka teks yang muncul adalah Anda masih kelaparan.

Dan tentu, di dalam hasil teks berkondisi tersebut bisa terdapat teks berkondisi lagi. Perhatikan contoh berikut:

VAR makan = 0

- (ulang)
Anda melihat banyak apel di atas meja.
+ Makan satu
Anda memakan satu apel
~ makan = makan + 1
-> ulang
+ Selesai
-
Anda berpikir cukup untuk makan.
{makan >= 3: Anda merasa sangat kekenyangan. | {makan == 2: Anda merasa puas. | Anda masih kelaparan.} }

Jika variable makan >= 3 maka teks yang muncul adalah Anda merasa sangat kekenyangan.

Jika variable makan < 3 maka teks kondisi false akan jalan, tetapi disitu kita menemui teks berkondisi lagi, dan mencoba mengecek apakah makan == 2 , jika true , maka teks Anda merasa puas. yang akan muncul, tetapi jika tidak maka teks Anda masih kelaparan. yang akan muncul.

Knots, Stitch, Label sebagai Variable Boolean

Di cerita interaktif, terkadang kita perlu menyimpan pilihan yang dipilih oleh pemain, biasanya kita menyimpannya di suatu variable. Contohnya:

VAR topi = false
VAR payung = false
VAR kunci = false
VAR dompet = false

Ayo kita keluar sekarang. Jangan lupa ambil:
- (ulang)
+ topi
~ topi = true
+ payung
~ payung = true
+ kunci
~ kunci = true
+ dompet
~ dompet = true
+ selesai
-> selesai
-
-> ulang
- (selesai)
Anda siap - siap keluar. Anda sudah mengambil:
{topi: topi}
{payung: payung}
{kunci: kunci}
{dompet: dompet}

Disini kita menandai setiap pilihan dengan suatu variable, pada awalnya semua variable bernilai false buat menandai jika variable tersebut belum pernah diambil.

Setelah kita memilih pilihan, misalnya topi , itu akan mengubah variable topi menjadi true . Jika kita pilih selesai , nanti kita akan mengecek satu — satu variablenya, jika bernilai true , maka akan dicetak bendanya.

Karena untuk mengecek apakah kita pernah memilih sesuatu atau pernah di knots tertentu itu sangat sering digunakan, di Ink, mereka memberikan fitur yang memudahkan.

Di Ink, nama Knots, Stitch atau Label itu secara otomatis sudah menjadi variable bernilai Bilangan Bulat yang menandai sudah berapa kali kita melewati Knots, Stitch atau Label tersebut. Contohnya:

Ayo kita keluar sekarang. Jangan lupa ambil:
- (ulang)
+ (topi) topi
+ (payung) payung
+ (kunci) kunci
+ (dompet) dompet
+ selesai
-> selesai
-
-> ulang
- (selesai)
Anda siap - siap keluar. Anda sudah mengambil:
Topi: {topi}
Payung: {payung}
Kunci: {kunci}
Dompet: {dompet}
Dan anda sudah mengulang sebanyak: {ulang}

Lihat kita tidak mendeklarasikan variable apapun, karena secara otomatis label (topi) , (payung) , (kunci) , (dompet) itu sudah menjadi variable. Bahkan (ulang) , dan (selesai) pun merupakan variable.

Setelah anda mencoba Ink diatas, anda akan melihat setelah kita memilih selesai , akan tampil berapa kali kita lewat atau memilih masing — masing benda.

Dan Bilangan Bulat (integer) itu bisa dianggap sebagai Boolean, dimana nilai 0 itu dianggap bernilai false , dan nilai selain itu dianggap bernilai true . Sehingga bisa kita langsung pakai seperti berikut:

Ayo kita keluar sekarang. Anda melihat kunci di atas meja:
+ (kunci) Ambil kuncinya
+ Tidak sempat, kita sedang terburu - buru.
-
Anda keluar rumah dan menuju mobil anda.
{kunci: Anda membuka mobil anda, masuk dan langsung pergi. | Anda sadar anda tidak bawa kuncinya.}

Jika kita pilih Ambil kuncinya , maka variable kunci akan bernilai 1 , sehingga akan dianggap sebagai true , jadi nanti di akhir, anda dapat membuka mobil anda. Tetapi jika kita tidak memilih pilihan tersebut, variable kunci akan tetap bernilai 0 , sehingga akan dianggap sebagai false .

Pilihan Berkondisi / Conditional Choices

Setelah mencoba Ink sebelumnya, anda pasti memperhatikan, jika kita sudah mengambil Topi, kita masih bisa mengambil Topi lagi. Terkadang kita butuh fitur dimana kita bisa menampilkan atau menghilangkan pilihan tergantung dari sebuah kondisi.

Di Ink kita bisa menambahkan kondisi di depan Pilihan / Choices dengan cara seperti berikut:

+ {ekspresi_boolean} teks_pilihan

Kita dapat menambahkan ekspresi boolean di antara tanda + dan teks_pilihan . Jika ekspresi tersebut bernilai true maka pilihan tersebut muncul, jika tidak maka pilihan tersebut tidak muncul. Contohnya:

Anda menemukan sebuah kunci di atas meja.
+ (kunci) Ambil kuncinya
+ Tidak pedulikan
-
Setelah anda jalan beberapa jauh lagi, anda menemukan sebuah pintu.
+ {kunci} Coba buka pakai kunci
Anda mencoba memasukan kunci pada lobang kunci dan memutarnya.
Terdengar *ceklek
+ Dobrak pintunya
Anda mendobrak sekuat tenaga.
-
Pintu pun terbuka.

Pilihan Coba buka pakai kunci hanya muncul jika kita telah memilih Ambil kuncinya di awal. Sedangkan pilihan Dobrak pintunya itu akan selalu ada.

Kembali lagi pada contoh sebelumnya, jika kita ingin mengambil Topi, dan saat diulang Topi nya sudah tidak ada pilihannya, kita bisa saja menaruh kondisi, kalau sudah mengambil Topi, pilihan tersebut dihilangkan.

Atau dalam kata lain, pilihan Topi akan muncul jika label (topi) belum pernah dilewati.

Ayo kita keluar sekarang. Jangan lupa ambil:
- (ulang)
+ (topi) {not topi} topi
+ (payung) {not payung} payung
+ (kunci) {not kunci} kunci
+ (dompet) {not dompet} dompet
+ selesai
-> selesai
-
-> ulang
- (selesai)
Anda siap - siap keluar. Anda sudah mengambil:
{topi: topi}
{payung: payung}
{kunci: kunci}
{dompet: dompet}

Setelah anda mencoba Ink di atas, anda bisa melihat bahwa pilihan topi akan ada selama kita belum pernah memilih topi , karena variable topi akan tetap bernilai 0 , dan not topi berarti not 0 berarti not false atau true . Tetapi jika kita memilihtopi sekali saja, maka variable topi akan bernilai 1 , dan menyebabkan pilihan tersebut hilang.

Jika kita menggunakan (label) dan {kondisi} bersamaan di satu pilihan, maka urutannya harus (label) terlebih dahulu. Syntax yang lebih komplit adalah sebagai berikut:

+ (label) {ekspresi_boolean} teks_pilihan

Tetapi sebenarnya, menghilangkan pilihan teks karena sudah pernah dipilih adalah sesuatu yang sangat umum di cerita interaktif, di Ink disediakan fitur khusus yang lebih mudah, yaitu alih — alih menggunakan + anda dapat menggunakan * pada pilihan.

Pilihan yang menggunakan tanda * hanya dapat dipilih sekali, dan kemudian menghilang selamanya. Tentu saja anda tetap masih bisa memberikan label atau menaruh kondisi di pilihan yang menggunakan * . Tetapi pilihan tersebut hanya tampil jika pilihan tersebut belum pernah dipilih dan kondisi nya bernilai true .

Contoh:

Ayo kita keluar sekarang. Jangan lupa ambil:
- (ulang)
* (topi) topi
* (payung) payung
* (kunci) kunci
* (dompet) dompet
+ selesai
-> selesai
-
-> ulang
- (selesai)
Anda siap - siap keluar. Anda sudah mengambil:
{topi: topi}
{payung: payung}
{kunci: kunci}
{dompet: dompet}

Ink di atas akan bekerja sama persis dengan contoh sebelumnya.

Jika anda sudah sampai sini, saya ucapkan Selamat! Anda sudah dapat membuat cerita apapun menggunakan Ink!

Tetapi mungkin ada muncul pertanyaan, bagaimana jika isi dari blok if tersebut lebih dari satu baris? Atau ternyata kondisinya akan ada banyak sehingga butuh banyak if?

Walaupun itu opsional, tetapi Ink menyediakan fitur — fitur tersebut. Itu akan dibahas di artikel selanjutnya.

Lanjut ke Part 6: Fitur Mempermudah Hidup dalam Ink

--

--

Ali Jaya Meilio Lie
Kolektif Gamedev

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