Inkle Tutorial Part 4: Logika dalam Ink

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

Artikel ini merupakan bagian dari seri Inkle Tutorial

Untuk melihat artikel sebelumnya silahkan ke Part 3: Pengorganisasian di Ink

Sampai sekarang, seharusnya kita bisa menulis cerita Choose Your Own Adventure seperti Goosebumps. Tetapi kekurangannya adalah, konsekuensi yang dipilih sekarang itu langsung teresolusi. Jika kita memilih sesuatu, itu langsung terasa dampaknya.

Pilihan kita sekarang, tidak bisa memengaruhi kejadian yang akan datang. Semisalnya ada pintu yang tertutup dan kita membutuhkan kunci untuk membukanya, format novel seperti Goosebumps tidak bisa mengetahui jika kita sudah mengambil kuncinya atau belum beberapa halaman sebelumnya.

Oleh karena itu dibutuhkan namanya Variable, atau yang sering disebut orang sebagai Flags. Dengan Variable kita bisa menandai jika kita sudah memilih pilihan tertentu.

Variable

Anda memerlukan untuk mengerti sedikit tentang syntax programming, karena dibagian sini akan sangat mirip dengan programming pada umumnya.

Variable bisa mempunyai beberapa tipe, yaitu Boolean, Bilangan Bulat (Integer), Bilangan Desimal (Float), Teks (String), dan juga Diverts. Dimana Boolean dan Integer yang lebih sering digunakan.

Untuk mendeklarasikan Variable yang ingin digunakan, syntaxnya sebagai berikut:

VAR nama_variable = nilai_variable

Contohnya

VAR jumlah_bola = 5
VAR punya_kunci = false
VAR nama_pemain = "Budi"

Boolean adalah tipe variable yang mempunyai dua nilai saja yaitu true (benar) dan false (salah). Tipe ini bisa digunakan untuk menandai jika kita sudah memilih sesuatu. Tipe ini yang sering dikatakan Flags dalam sebuah cerita.

Untuk tipe teks, kita harus menaruh tanda petik " di sekeliling teks tersebut.

Mencetak Isi Variable

Untuk mencetak isi Variable ke dalam cerita kita, kita bisa menggunakan syntax

{nama_variable}

Contoh konkritnya sebagai berikut:

VAR nama_pemain = "Budi"
VAR jumlah_bola = 5

Di lapangan bola ada {nama_pemain}.
Sekarang {nama_pemain} mempunyai {jumlah_bola} bola.

Ink diatas akan menghasilkan Teks sebagai berikut:

Di lapangan bola ada Budi.
Sekarang Budi mempunyai 5 bola.

Mengubah Variable

Variable tidaklah begitu berguna jika isinya tidak diganti, karena nilainya akan sama dari awal sampai akhir. Untuk mengganti variable, kita dapat memberikannya nilai baru menggunakan syntax seperti berikut:

~ nama_variable = nilai_variable_baru

Semua baris yang diawali dengan ~ merupakan baris logika yang tidak akan tercetak di hasil akhir.

VAR jumlah_bola = 4

Budi mempunyai {jumlah_bola} bola.
~ jumlah_bola = 10
Sekarang Budi mempunyai {jumlah_bola} bola.

Ekspresi dan Operator Aritmatika

Nilai variable sebenarnya bisa selain nilai konstan seperti 4 atau 10 . Sebenarnya bisa diganti dengan sebuah Ekspresi.

Ekspresi adalah gabungan dari Nilai Konstan, Variable dan Operator. Contoh Ekspresi adalah 5 + 4 , (3-2)*(4+1) , jumlah_bola + 5 , 5/2 , 9%2 .

Operator Aritmatika yang tersedia untuk bilangan adalah operasi tambah + , kurang - , kali * , bagi / , dan modulo % .

Mungkin anda familiar dengan 4 operasi dasar tetapi tidak dengan modulo % . Modulo adalah operasi untuk mengetahui hasil sisa bagi. Misalkan 29 % 3 itu menghasilkan nilai 2 , karena jika 29 dibagi 3, itu menghasilkan nilai 9 sisa 2 atau 29 = 3 * 9 + 2 .

Dengan begini bisa saja kita membuat Ink sebagai berikut:

VAR jumlah_bola = 3

Di kotak ada 10 bola.
Budi mengambil {jumlah_bola} bola.
Budi mengambil satu bola lagi.
~ jumlah_bola = jumlah_bola + 1
Sekarang Budi mempunyai {jumlah_bola} bola.
Jumlah bola di kotak ada {10 - jumlah_bola} bola.

Ini akan menghasilkan teks seperti berikut:

Di kotak ada 10 bola.
Budi mengambil 3 bola.
Budi mengambil satu bola lagi.
Sekarang Budi mempunyai 4 bola.
Jumlah bola di kotak ada 6 bola.

Baris ~ jumlah_bola = jumlah_bola + 1 , itu akan mengambil jumlah_bola sekarang yaitu 3 kemudian ditambah dengan 1 menjadi 4 . Kemudian nilai 4 ini akan dimasukan kembali ke dalam variable jumlah_bola . Sehingga saat ini jumlah_bola akan memiliki nilai 4 .

Jika diperhatikan, kita juga bisa memasukan Ekspresi di dalam teks seperti {10-jumlah_bola} untuk mencetak hasilnya langsung.

Dan tentu kita bisa menggabung hal ini dalam pilihan. Contohnya sebagai berikut:

VAR lantai = 3
- (ulangi)
Anda sedang berada di lantai {lantai}.
+ naik
~ lantai = lantai + 1
+ turun
~ lantai = lantai - 1
-
-> ulangi

Disini anda akan bisa naik turun lantai secara berulang — ulang, dan anda dapat mengetahui anda di lantai berapa menggunakan {lantai} .

Operator Komparasi

Satu tipe variable lain yang sering dipakai adalah Boolean. Seperti yang dijelaskan sebelumnya, Boolean mempunyai dua nilai yaitu true (benar) dan false (salah).

Boolean dapat digunakan untuk menyimpan misalnya apakah kita sudah mengambil kunci tersebut. Apakah kita ada di lantai dua atau lebih? Apakah pintu sudah dikunci dan kompor sudah dimatikan?

Banyak data yang disimpan hanya dalam ya dan tidak saja.

Anda dapat mengubah Bilangan Bulat (Integer) menjadi Boolean dengan operator komparasi. Operator komparasi akan membandingkan dua nilai Integer dan menghasilkan true jika komparasi tersebut benar dan false jika komparasi tersebut salah.

Komparasi yang tersedia adalah:

  • sama dengan ==
  • tidak sama dengan !=
  • lebih besar >
  • lebih besar sama dengan >=
  • lebih kecil <
  • lebih kecil sama dengan <=

Perlu diperhatikan == dan = adalah dua hal yang berbeda. = digunakan untuk memasukan nilai ke suatu variable, sedangkan == digunakan untuk melakukan komparasi apakah dua nilai adalah sama.

Contoh operator komparasi:

VAR lantai = 3
VAR jawaban = false

Anda sedang berada di lantai {lantai}.
- (ulangi)
+ tetap
+ naik
~ lantai = lantai + 1
+ turun
~ lantai = lantai - 1
-
Sekarang anda ada di lantai {lantai}.
+ Apakah sedang di basement?
~ jawaban = lantai < 0
+ Apakah di lantai 4?
~ jawaban = lantai == 4
+ Apakah di lantai 5 ke atas?
~ jawaban = lantai >= 5
+ Apakah di lantai genap?
~ jawaban = lantai % 2 == 0
-
Jawabannya adalah {jawaban}
-> ulangi

Anda dapat naik turun lantai, dan kemudian menanyakan:

  • Apakah anda sedang di basement, yaitu lantai anda bernilai negatif atau kurang dari 0
  • Apakah anda spesifik di lantai 4
  • Lantai anda adalah lantai 5 ke atas (lebih besar sama dengan 5)
  • Atau anda berada di lantai genap, dimana hasil sisa bagi lantai anda dengan 2 adalah 0

Operator Boolean

Sejauh ini kita hanya mengubah nilai Integer menjadi Boolean menggunakan Operator Komparasi. Tetapi sebenarnya, nilai Boolean itu bisa dioperasikan dengan nilai Boolean lain seperti halnya Operator Aritmatika.

Operator ini dinamakan Operator Boolean, terdiri dari not (tidak), and (dan), dan or (atau).

  • not a akan menghasilkan nilai yang berlawanan dengan a . Jika a bernilai false , maka hasilnya akan menjadi true , dan sebaliknya.
  • a and b akan menghasilkan nilai true jika a dan b keduanya mempunyai nilai true . Atau dalam arti lain, jika salah satu a atau b mempunyai nilai false , maka nilai akhirnya false .
  • a or b akan menghasilkan nilai true jika a atau b salah satunya mempunyai nilai true . Atau dalam arti lain, jika kedua a dan b mempunyai nilai false , maka nilai akhirnya false .
VAR lantai = 3
VAR jawaban = false

Anda sedang berada di lantai {lantai}.
- (ulangi)
+ tetap
+ naik
~ lantai = lantai + 1
+ turun
~ lantai = lantai - 1
-
Sekarang anda ada di lantai {lantai}.
Apakah sedang di antara lantai 5 dan 8?
{5 <= lantai and lantai <= 8}
Apakah sedang di lantai kelipatan 2 atau kelipatan 3?
{lantai % 2 == 0 or lantai % 3 == 0}
-> ulangi

Jika kita ingin mengetahui apakah kita di antara lantai 5 dan 8, itu artinya kita menanyakan apakah lantai kita lebih besar sama dengan 5 dan apakah lantai kita kurang sama dengan 8.

Sehingga lantai 0, 1, 2, 3, 4, 9, 10, 11, akan memberikan nilai false, sedangkan 5, 6, 7, 8 akan memberikan nilai true .

Begitu juga jika lantai kita kelipatan 2 atau kelipatan 3. Lantai 1,5,7,11 akan memberikan nilai false , sedangkan 0,2,3,4,6,8,9,10 akan memberikan nilai true .

Mencetak Variable yang berupa bilangan mungkin berguna untuk menciptakan teks yang dinamis. Tetapi anda mungkin bertanya — tanya apa fungsinya mencetak Variable Boolean yang berisi true atau false .

Anda mungkin berpikir, alangkah lebih berguna jika Variable Boolean bukan dicetak begitu saja, tetapi mencetak sesuatu ketika true dan mencetak hal yang lain jika false . Dengan begitu teks kita bisa jauh lebih dinamis bergantung dengan Variable Boolean.

Hal itu tentu saja bisa dilakukan di Ink, dan itu akan dibahas di artikel selanjutnya.

Lanjut ke Part 5: Cerita Dinamis Berdasarkan Variable

--

--

Ali Jaya Meilio Lie
Kolektif Gamedev

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