Behaviour NPC Game Historical War 3D Using Finite State Machine

BAB 2
LANDASAN TEORI

2.1.

Sejarah singkat perang merebut Stabat

(TWH, 2007) Setelah terbentuknya kesatuan-kesatuan lasykar dan TKR (Tentara
keamanan Rakyat) maka kebutuhan senjata makin mendesak. Sasaran yang dilakukan
adalah melakukan penyerobotan gudang senjata Angkatan Udara Jepang di Marindal
tanggal 25 November 1945. Pengawal gudang diikat kemudian isi gudang baik senjata
serta peti-peti peluru dan bahan makanan maupun tekstil diangkut sampai jauh malam.
Kawasan paling barat yaitu lokngha (Aceh) merupakan pertahanan jepang yang paling
utama. Di sanalah bertumpu berbagai jenis senjata berat untuk

menghadapi sekutu.

Begitu jepang kalah, kemerdekaan di proklamirkan, tidak kurang 5000 rakyat dan lasykar
ditambah satu Kompi Angkatan Pemuda Indonesia (API) di bawah pimpinan Syaman
Gaharu tanggal 1 Desember 1945, selama beberapa hari mengepung dan mengurung
pasukan jepang. Kemudian terjadi pertempuran dari pukul 9.00 pagi hingga siang.

Residen Teuku Nyak Arif, wakil resien T.M.Ali Panglima Polim, ketua Pemuda Republik
Indonesia A.Hasjmy mengadakan pembicaraan dengan jepang untuk menghentikan
pertempuran. Kemudian diadakan perundingan di antara point yang dituntut adalah
pangkalan Lhoknga harus diserahkan kepada pejuang. Seluruh tentara jepang dipindahkan
ke blang bintang. Setelah itu, Sejarah perang di stabat melawan belanda padah tahun 1947
ini tidak banyak diketahui oleh banyak orang. Untuk itu dibuatlah sarana untuk
menyampaikan cerita sejarah ini ke dalam bentuk game. Pada saat itu binjai dan stabat
telah direbut belanda. Pasukan Indonesia berada di tanjung pura. Hari itu awal agustus

Universitas Sumatera Utara

8

Belanda melancarkan agresinya yang pertama. Letnan Amir Yahya yang berada di
tanjung pura di panggil komandannya untuk merebut kembali stabat. Sesuai dengan
rencana, pasukan Lettu Lidan Syam yang ditugaskan untuk merebut stabat bergerak
melalui bukit melintang dengan melalui jembatan kereta api. Pasukan yang berkekuatan
350 orang itu dengan tenang melangkah menuju titik yang telah ditentukan. Dari sana
pasukan RI menggempur kedudukan belanda, sekaligus merebut kota stabat. Pasukan
bergerak tepat pukul 18.00 dan sampai di ujung jembatan stabat pukul 20.00 Wib.

Dalam pertempuran itu, posisi Lettu Lidan Syam dan Letnan Amir Yahya paling
depan. Mereka selalu berdekatan paling jauh jarak mereka hanya 6 meter. Pasukan Lidan
Syam telah naik ke jembatan, bahkan 2/3 jembatan dikuasai. Pertempuran itu baru
berjalan setengah jam. Kelihatan ada tanda-tanda belanda mulai meninggalkan kubu
pertahanannya. Tapi apa boleh buat,”mujur saja tak dapat diraih, malang tak dapat
ditolak”. Sebuah peluru mortir jatuh di tempat Lettu Lidan Syam dan Letnan Amir
Yahya. Lidan Syam yang baru pertama kali terlibat dalam pertempuran seru mengalami
luka berat terkena pecahan peluru. Sedangkan Letnan Amir Yahya juga mengalami luka
di paha bagian belakang. Ketika peluru mortir meledak antara mereka terdengar suara
teriakan Lettu Lidan Syam. Menyadari kedua orang pimpinan pasukan yang memimpin
pasukan itu terkena ledakan, anak buah dari pasukan tersebut berusaha menarik keduanya
dari ajang pertempuran untuk diberi pertolongan. Perlahan-lahan Letnan Amir Yahya
dapat ditarik ke tempat yang lebih aman dan segera diberi perawatan sementara.
Sedangkan, Lettu Lidan Syam yang bobot badannya terlalu berat, kira-kira 90-100 kg
sangat sulit untuk ditarik ke lokasi yang lebih aman. Karena mengalami luka parah dan
sangat banyak mengeluarkan darah, menyebabkan Lidan Syam gugur sebagai kusuma
bangsa. Saat itu yang berusaha menggendong Letnan Amir Yahya dan membawanya ke
luar dari area pertempuran adalah Letnan Bustanil Arifin (mantan Menteri Koperasi
Ka.Bulog), yang pada malam itu rupanya juga turut bertempur merebut stabat. Mereka
yang diterluka dibawa ke Rumah Sakit Langsa (Aceh Timur) yang lokasinya jauh dari

pertempuran dan disana terdapat tenaga medis yang ahli dalam bidangnya. Langsa
merupakan basis bagi para pejuang dalam mempertahankan kemerdekaan.

Universitas Sumatera Utara

9

2.2

Teori 2D dan 3D

sebuah pemahaman tentang gerak dan penggerak keduanya sangat penting dalam
memahami games. Kebanyakan objek didalam game bergerak. Apa yang membuatnya
menjadi dinamis adalah gerakan itu sendiri. Jika itu adalah 2D character seperti Angry
Birds atau 3D karakter yang lengkap seperti Tomb Raider, suasana game dan gerakan
yang terus-menerus. Untuk memahami pengertian dari gerak, khususnya yang berkaitan
dengan permainan komputer, pengetahuan dasar dalam vektor matematika diperlukan.
Vektor digunakan secara luas dalam pengembangan game bukan hanya untuk
menjelaskan kecepatan, akselerasi, posisi, dan arah tetapi juga dalam model 3D untuk
menentukan texturing UV, sifat pencahayaan, dan efek khusus lainnya (Peng, 2014).

2.2.1

Prinsip Vektor

(Peng,2014) Dalam 2D , vektor memiliki x dan y koordinat. Tapi dalam 3D, ada x, y, dan
z koordinat. Dalam sistem matematika mutlak, sebuah vektor tidak hanya sebuah titik
pada latar, tetapi juga sekumpulan perintah koordinasi yang dinamis. Ada sebuah legenda
yang akan di tampilkan untuk memahami vektor. Sebuah peta harta karun legendaris
dibuat, dan kapal kargo berhenti dititik (4,8) yang disebut start. Sebagai contoh, para
pelaut mengambil tiga langkah ke timur dan tujuh langkah ke selatan. Seperti ditunjukan
dalam Gambar 2.1, para pelaut bergerak tiga langkah ke timur dan digambarkan vektor
(3,0), yang berarti berpindah 3 dalam arah x positif. Kemudian para pelaut mengambil
tujuh langkah ke selatan bisa digambarkan vektor (0,-7). Yang berarti berpindah 7 ke arah
y negatif dan 0 ke arah y. Untuk menentukan lokasi terakhir, vektor x dan y ditambahkan
ke titik awal x dan y. sebagai contoh, pada gambar 2.1, kapal kargo dititik (4,8) dan
pelaut berpindah positif tiga x positif, yang akan menempatkan mereka di titik (7,8).
Kemudian mereka berpindah dikurangi tujuh y-axis, yang akan menempatkan mereka di
(7,1). Sebenarnya, mereka juga dapat tiba di titik yang sama dengan mengambil jalan
pintas, dengan kata lain, mereka dapat berjalan langsung dalam garis lurus antara titik
awal dan harta karun itu. Dalam kasus ini, dua vektor (3,0) dan (0,-7) harus digabungkan

bersama-sama dan hasilnya adalah (3,-7). Dengan menggunakan vektor baru ini dan
berangkat dari lokasi awal, mereka akan sampai pada lokasi yang sama di titik (7,1).

Universitas Sumatera Utara

10

Gambar 2.1 Peta imajinatif menggambarkan penggunaan vektor (Peng,2014)
Untuk kembali ke kapal kargo dari harta karun itu, para pelaut dapat berjalan di
sepanjang jalan yang sama yang digambarkan di atas, tetapi dalam ke arah sebaliknya. Ini
dapat diselesaikan dengan membalik vektor sehingga semua nilai koordinat harus
dikalikan dengan -1. Dalam hal ini, untuk dapat kembali ke kapal mereka harus pergi
melalui vektor (-3,7). Ini adalah cara terbaik bagi orang untuk mengetahui jarak lurus
antara kapal dan harta karun itu. Panjang vektor, ditulis v, didefenisikan besarnya dan
ditulus |v|, dan itu bisa ditemukan menggunakan teorema Pythagoras, seperti yang
ditunjukan pada persamaan 1.
|v| = √(v∙x^2+v∙y^2 )

(1)


Setiap game object atau prefab di Unity memiliki banyak vektor yang terkait dengan itu.
Transformasi setiap komponen game object atau prefab memiliki tiga sifat penting: rotasi,
posisi, dan skala. Tampilan dari environment game klasik dengan model karakter sebagai
objek yang ditunjukkan pada Gamtbar 2.2. Pada umumnya, dalam 3D, sumbu x
menyatakan samping, y menyatakan atas, dan z menyatakan depan. Setiap game object
atau prefab memiliki bentuknya sendiri. Sumbu ditunjukan di jendela Scene dengan tiga
jenis garis panah merah, yang ditunjukkan pada Gambar 2.2, warna merah, hijau, dan
biru. Sumbu y adalah hijau, sumbu x adalah merah, dan sumbu Z adalah biru.

Universitas Sumatera Utara

11

Environment di Unity memiliki sumbunya sendiri, dan orientasi yang dapat
disesuaikan oleh pengguna dalam mengubah sudut pandang sekitar untuk mengamati
objek yang berbeda. Di Unity, orientasi kamera yang menentukan orientasi utama. Semua
game object memiliki orientasi mereka sendiri digambarkan dengan sumbu x, y, z yang
diperlihatkan pada Jendela Scene ketika game object itu terpasang. Dengan demikian,
dengan membaringkan game object, sumbu y dari game object ini maka dia menjadi
horizontal.


Gambar 2.2 Koordinat di Edit Scene pada Unity (Peng,2014)
Di Unity, Vector2 dan Vector3 adalah kelas yang umumnya digunakan. Posisi, rotasi, dan
nilai skala game object disimpan sebagai Vector3. Informasi vektor 2D disimpan sebagai
Vektor2. Vektor dari game object untuk sumbu x, y, dan z dapat dikontrol dengan kode
pemrograman Vector3.left, Vector3.up, dan Vector3.forward masing-masing. Pengguna
dapat menggerakkan game object kesegala arah tanpa kode dan orientasi.

Universitas Sumatera Utara

12

2.2.2

Defenisi Ruang 2D dan 3D

(Peng,2014) Teori-teori vektor pada ruand 2D atau 3D diterapkan dengan cara yang sama.
Perbedaan antara sistem koordinat 2D dan sistem koordinat 3D adalah nilai parameternya
yang berlainan. Dalam game engine 3D, game 2D yang dikembangkan dengan sumbu x
dan sumbu z. Dalam game 2D, umumnya diposisikan pada latar yang sama, yang mana

diinisialisasikan nilai dari y menjadi 0. Setiap pergerakan pada game object tersebut
hanya bisa bertindak pada latar itu saja. Hal ini dapat diasimilasikan dengan
memindahkan objek sekitar daerah atas planar. Kebanyakan game 2D, kamera
ditempatkan langsung di atas scene dan perspektif dihapus untuk memberikan pandangan
adegan yang benar-benar 2D. apakah itu game 2D atau 3D kamera adalah komponen
yang penting karena menampilkan semua tindakan dari game object pada player di arena
permainan. Sebagai hasilnya melalui lensa mata kita dapat merasakan suasana permainan
itu. Memahami bagaimana kamera bergerak dan bagaimana cara untuk menyesuaikannya
dibutuhkan pengetahuan dasar.
Bi-dimensional (ruang dua dimensi) adalah model geometrik dari proyeksi planar
fisik alam semesta dimana kita hidup. Dua dimensi biasanya disebut panjang dan lebar.
Keduanya terletak pada latar yang sama. Untuk menganalisis kasus 2D, seperti yang
ditunjukkan pada gambar 2.3, bahwa dari contoh flatland klasik, dimana seseorang hidup
dialam semester 2D dan hanya mengetahui dua dimensi (ditampilkan sebagai grid bir),
atau bidang datar, katakanlah arah x dan y. orang seperti itu tidak pernah bisa
membayangkan arti tinggi dalam arah z, sehingga dia tidak dapat melihat ke atas atau ke
bawah, dan melihat orang lain sebagai bentuk 2D pada permukaan datar ia tinggal. Ruang
Tiga Dimensi adalah model model geometrik tiga parameter dari fisik alam semesta
(tanpa mempertimbangkan waktu) dimana semua materi yang dikenal ada. Tiga dimensi
ini bisa dilabel sebagai kombinasi dari tiga yang dipilih dari istilah panjang, lebar, tinggi,

kedalaman, dan keluasan, dengan kata lain, biasanya diberi label x, y, dan z. tiga arah
apapun dapat dipilih, asalkan itu semua tidak terletak pada latar 3yang sama. Dalam
matematika dan fisika, urutan angka n dapat dimengerti sebagai lokasi ruang n-dimensi.
Ketika n=3, himpunan semua lokasi tersebut disebut ruang 3-dimensi Euclidean. Hal ini

Universitas Sumatera Utara

13

biasanya diwakili oleh simbol. Ruang ini hanya salah satu contoh dari berbagai ruang
dalam tiga dimensi yang disebut 3-manifold.

Gambar 2.3 Memahami ruang 2D. disalin dari insinyur Xavier Borg (2007)
2.2.3

Translasi, Rotasi, dan Skala

(Peng, 2014) Setiap game object apakah itu dalam bentuk 2D atau 3D dapat dilakukan
dengan tiga transformasi : translasi, rotasi, dan skala. Translasi berhubungan dengan
gerakan dan posisi game object dan ditentukan oleh vektor 2D bahwa orang pada bagian

sebelumnya telah berpindah pada peta. Fitur penting dari translasi adalah setiap kali nilainilai x, y, dan z di ubah. Nilai-nilainya dapat diubah sekaligus dengan vektor atau satu per
satu. Untuk memindahkan game object ke arah x sebanyak 8, Unity C# :

Gameobject.transform.position.x =+8 ;

Untuk memindahkan game object sebanyak 5 pada x, 9 pada y, dan 14 pada z, dalam
Unity C#, itu bisa ditulis seperti ini :
Gameobject.transform.position.x +=5;
Gameobject.transform.position.y +=9;
Gameobject.transform.position.z +=14;
Atau

Universitas Sumatera Utara

14

Gameobject.transform.position = new Vector3 (5,9,14);

Unity menaruh rotasi sebagai Quaternion internal. Untuk memutar objek, gunakan
Transform.rotate. Gunakan Transform.eulerAngles untuk mengatur rotasi sudut euler.

Sebuah game object dapat diputar sumbu x, y, atau z atau dunia pada sumbu x, y, dan z.
rotasi gabungan juga sangat mendukung. Sebuah objek dapat diputar semaunya yang
didefenisikan oleh nilai-nilai vektor.
Pada akhirnya skala dapat mengubah ukuran objek seperti yang ditunjukkan pada
Gambar 2.4 Sebuah game object dapat diskalakan sepanjang sumbu x, y, dan z. Ini
kemampuan yang sangat penting yang dapat mengubah skala game object dengan
mengatur nilai skala secara individual, begini :

Gambar 2.4 Menskalakan Objek (Peng, 2014)
Harus diketahui bahwa nilai-nilai untuk skala selalu dikalikan terhadap ukuran dasar dari
game object. Oleh karena itu, tidak dapat membuat skala nol. Jika desainer ingin
membalik sebuah objek, nilai skala negatif dapat digunakan. Misalnya, mengatur skala

Universitas Sumatera Utara

15

sumbu y menjadi -1 akan mengubah game object terbalik. Ini adalah kemampuan yang
diperlukan untuk memahami bagaimana game object akan bergerak dalam game. Para
desainer harus meluangkan waktu untuk menyesuaikan diri dengan ruang 2D dan 3D.
Untungnya, Unity menyediakan matematika yang dapat dikerjakan dengan mudah dan
memberitahukan berbagai fungsi yang mudah digunakan.
2.3

Prinsip Desain atau Aturan pada Game First Person Shooter

(Peng, 2014) Seluruh Tema dari projek game ini adalah mekanisme yang berhubungan
dengan aksi yang sedang berlangsung pada game dari operasi animasi internal dan
pemrograman ke interaksi antara environment dan player. Namun, dalam penelitian
game, mekanisme game tersebut digunakan untuk mengacu kepada hubungan yang
dikembangkan yang menfasilitasi dan menentukan tantangan antara game dan player. Itu
adalah sistem yang rumit yang mengandung serangkain alasan yang masuk akal, aksi,
tujuan, dan umpan balik para player. Memahami mekanisme game sangat berguna untuk
membuat aksi-aksi dan unsur-unsur lain yang dapat diimplementasikan dan menghasilkan
ide yang tak terbatas untuk game dengan menggabungkan aksi, aturan dan tujuan. Siklus
ini diilustrasikan pada Gambar 2.5.

Gambar 2.5. Siklus mekanisme game (Peng, 2014)

Universitas Sumatera Utara

16

(Peng, 2014) Para player disajikan dengan sebuah tantangan. Untuk mencapai
tantangan mereka mendapatkan alat yang dapat digunakan untuk melakukan aksi dan
aturan-aturan yang membatasi ruang lingkup aksi ini. Alat-alat yang digunakan
mengandung objek yang berisi masukkan atau input seperti sensor dan keyboard, serta
alat-alat virtual didalam game seperti senjata, kotak-alat, dan kunci. Peraturan tentang
bagaimana player dapat bermain didunia game. Didalam game kartu, umumnya aturan
ditulis dalam buku instruksi dan ditangani oleh player. Dalam video game, player
dibimbing secara sadar akan aturan dalam game dan pemrogram kode game tersebut
harus dapat memastikan bahwa player bisa mengikutinya. Pemrogram juga memberikan
informasi kepada player tergantung dari aksi ataupun tindakan yang dilakukan untuk
membantu mereka belajar bagaimana cara memainkan game ini dengan lebih baik dan
menyelesaikan

tantangan.

Bagian

dari

mekanisme

umpan

balik

juga

bisa

menginformasikan player ketika mereka menang atau gagal.
2.4

Teori Finite State Machine

(Bevilacqua, 2013) Finite State Machine (FSM) adalah model yang digunakan untuk
menggambarkan dan mengatur aliran eksekusi yang biasanya digunakan untuk program
komputer dan urutan logika sirkuit. Hal ini cocok diterapkan terhadap AI pada game,
memproduksi hasil yang bagus tanpa kode yang kompleks. (Warden, 2012) Untuk
pemrograman AI, penulis memiliki pilihan deterministic atau non-deterministic.
Kebanyakan video game memiliki deterministic. Berarti anda tahu bagaimana musuh
akan bereaksi berdasarkan masukan yang berbeda. Jika mereka akan menyerang. Jika
anda bersembunyi dan menunggu, mereka akan menyerang anda. FSM pendeknya adalah
model komputasi yang berbasis pada mesin hipotesis yang terbuat dari satu atau banyak
state. FSM biasanya digunakan untuk mengatur dan menggambarkan aliran eksekusi
yang

berguna

diterapkan

pada

game.

“Otak”

dari

musuh,

misalnya

bisa

diimplementasikan menggunakan FSM setiap state merupakan suatu tindakan, seperti
attack atau evade. FSM dapat digambarkan dengan grafik, dimana node adalah state dan
ujung-ujungnya adalah transisi. Setiap sisi memiliki label yang menginformasikan ketika
transisi terjadi, seperti player is near pada gambar 2.5, yang menunjukkan bahwa mesin
akan beralih dari wander ke attack jika player is near.

Universitas Sumatera Utara

17

2.4.1 Perencanaan State dan Transisi
(Bevilacqua, 2013) Penerapan FSM dimulai dengan states dan transisi yang dibutuhkan.
Bayangkan FSM pada Gambar 2.6, menggambarkan otak dari semut yang membawa
daun ke rumah. Titik awal adalah state find leaf, yang mana akan aktif sampai semut
menemukan daunnya. Ketika itu terjadi, kondisi state di transisikan ke go home, yang
mana akan aktif sampai semut sampai di sarang. Ketika semut sampai sarang, state yang
aktif menjadi find leaf lagi, jadi semut mengulangi perjalanannya. Jika state yang aktif
adalah find leaf dan kursor mouse mendekati semut, transisinya menjadi state run away.
Ketika state aktif, semut akan lari dari kursor mouse. Ketika kursor tidak lagi menjadi
ancaman, transisi state kembali ke find leaf. Karena ada transisi yang menghubungkan
antara find leaf dan run away, semut akan selalu melarikan diri dari kursor mouse ketika
itu mendekati semut selama semut mencari daun. Itu tidak akan terjadi jika state yang
aktif adalah go home (cek gambar 2.7). Dalam kasus ini semut akan pulang kerumah
tanpa rasa takut, hanya transisi ke find leaf ketika semut sampai rumah.
2.4.2

Menerapkan Finite State Machine

(Bevilacqua, 2013) FSM dapat diimplementasikan dan dikemas dalam satu kelas,
bernama FSM misalnya. Idenya adalah untuk menjalankan setiap state sebagai fungsi
atau metode, menggunakan properti yang disebut activeState didalam kelas untuk
menentukan state mana yang aktif. Karena setiap state adalah fungsi, selama fungsi state
tertentu aktif

mempresentasikan keadaan state tersebut akan dipanggil setiap

membaharui game. Metode Update () pada FSM harus dipanggil setiap game frame,
sehingga dapat memanggil fungsi yang ditunjukkan oleh properti activeState. Panggilan
yang akan memperbaharui tindakan dari state yang sedang aktif. Metode setState () akan
mentransisikan FSM ke state yang baru dengan mengarahkan properti activeState untuk
fungsi state baru. Fungsi state tidak harus menjadi anggota FSM, bisa saja menjadi kelas
lain, yang mana membuat kelas FSM lebih umum dan dapat digunakan kembali.

Universitas Sumatera Utara

18

Gambar 2.6 Menggambarkan Otak dari semut (Bevilacqua, 2013)

Gambar 2.7 FSM menggambarkan otak dari semut. Perhatikan kurangnya transisi
antara run away dan go home (Bevilacqua, 2013)

Universitas Sumatera Utara

19

public class FSM
{
private var activeState : Function; // menunjukkan fungsi state yang aktif
public function FSM () {}

public function setState(state :Function) :void
{ activeState = state ; }

public function update () :void
{ if ( activeState != null )

{

activeState();

}

}
}

Menggunakan kelas FSM yang telah dijelaskan sebelumnya, saatnya untuk
menerapkan “brain” karakternya. Pada penjelasan sebelumnya semut digunakan dan
dikendalikan dengan FSM. Pada Gambar 2.8 adalah gambaran dari state dan transisi,
fokus pada kodenya. Semut direpresentasikan dengan class Ant, yang memiliki properti
bernama otak dan metode untuk tiap state. Properti brain adalah turunan dari kelas FSM :

Universitas Sumatera Utara

20

Gambar 2.8 FSM dari otak semut dengan berfokus pada kode (Bevilacqua, 2013)
public class Ant
{
public var position

:Vector3D;

public var velocity

:Vector3D;

public var brain

:FSM ;

public function Ant (posX : Number, posY :Number) {
position

= new Vector3D (posX, posY);

velocity

= new Vector3D (-1,-1);

brain

= new FSM () ;

//beritahu brain untuk memulai mencari daun (leaf).
brain.setState (findLeaf);
}

/** state findLeaf membuat semut menuju daun.
*/

public function findLeaf () :void {

Universitas Sumatera Utara

21

}

/** state goHome membuat semut menuju rumah.
*/

public function goHome () :void {
}

public function update() :void {
// memperbaharui FSM yang mengendalikan “brain”. Ini akan
memanggil fungsi state yang sedang aktif : findLeaf (), goHome(), atau runaway().

brain.update();

//menerapkan vektor kecepatan untuk posisi, membuat semut berjalan.
moveBasedOnVelocity ();
}

(….)
}

Kelas Ant juga memiliki kecepatan dan properti posisi, keduanya digunakan untuk
menghitung pergerakan dengan menggunakan integrasi Euler. Metode update ini
dipanggil di setiap kerangka game, sehingga akan memperbaharui FSM. Dibawah ini
penerapan tiap state, dimulai dengan findLeaf (), state bertanggung jawab untuk
memandu semut ke posisi daun :

Universitas Sumatera Utara

22

public function findLeaf() :void {
// menggerakkan semut ke daun
velocity = new Vector3D(Game.instance.leaf.x - position.x, Game.instance.leaf.y position.y);

if (distance(Game.instance.leaf, this)