Membuat dunia yang tak habis dimainkan: procedural generation dengan noise dan seed, pembuatan terrain dan level otomatis, serta content pipelines yang menggabungkan procedural dengan konten buatan tangan, lalu praktik membangun generator level untuk Rimba Runner

Game dibuat oleh tangan manusia — tapi untuk skala tertentu, tangan manusia tidak cukup. Bayangkan dunia terbuka yang luas, dungeon yang berbeda tiap kali dimainkan, atau ribuan variasi level. Di sinilah procedural generation mengambil alih: konten dibuat oleh algoritma, bukan dirancang satu per satu.
Episode ini membedah tekniknya: noise dan seed sebagai bahan dasar, terrain/level generation sebagai penerapannya, dan content pipelines yang menggabungkan konten procedural dengan konten buatan tangan. Kita bangun generator level Rimba Runner yang bisa menghasilkan level berbeda dari satu angka seed — pondasi untuk endless runner atau roguelike.
Semua procedural generation dimulai dari noise — fungsi yang menghasilkan nilai acak, tapi acak yang mulus dan deterministik. Yang paling populer adalah Perlin noise dan simplex noise: nilai yang berubah-ubah secara halus di ruang, cocok untuk terrain, awan, tekstur.
Kunci kedua: seed. Satu angka seed menentukan seluruh urutan nilai noise. Seed yang sama selalu menghasilkan dunia yang sama — inilah yang membuat dunia procedural bisa dibagikan: "coba seed 20260816, levelnya seru!". Dan saat bug muncul, seed memudahkan reproduksi (ingat QA di episode 15).
var noise := FastNoiseLite.new()
func _ready() -> void:
noise.seed = 20260816
noise.frequency = 0.02
var height := noise.get_noise_1d(x)Dua parameter penting: seed (identitas acak) dan frequency (seberapa sering nilai berubah). Frequency tinggi = terrain bergelombang rapat; rendah = perbukitan landai. Meracik parameter noise adalah langkah pertama mendesain dunia procedural.
Dari noise, kita bisa membangun terrain. Konsep dasarnya: ambang batas (threshold) — nilai noise di atas ambang jadi daratan, di bawah jadi jurang.
Noise 1D (tinggi): 0.1, 0.4, 0.8, 0.6, 0.2
Threshold 0.5: jurang, darat, darat, darat, jurangUntuk level platformer seperti Rimba Runner, kita butuh lebih dari sekedar tinggi — kita butuh platform yang bisa dilompati. Pola yang umum:
Jantung dari generator yang baik adalah validasi: hasil procedural harus selalu bisa dimainkan. Generator yang menghasilkan level mustahil lebih buruk daripada level buatan tangan yang sederhana.
Konten procedural cenderung terasa generik dan berulang — pola noise yang sama menghasilkan variasi yang mirip. Design yang baik menggabungkan procedural dengan human touch:
[Chunk A: datar] [Chunk B: gap sempit] [Chunk C: platform+buah] ...
dengan kepadatan musuh/buah ditentukan noise + aturan kesulitan bertahapContent pipeline adalah proses produksi aset — dan procedural adalah bagian darinya, bukan pengganti keseluruhan. Pipeline yang sehat untuk game dengan procedural content:
Penting: generator juga butuh uji otomatis (episode 15) — test yang menjalankan generator dengan seribu seed berbeda dan memastikan semua hasil playable. Generator yang sekali menghasilkan level mustahil sudah merusak reputasi game.
Tip
Simpan parameter generator (seed, frequency, aturan, daftar chunk) sebagai data yang bisa diubah — bukan hard-code. Dengan begitu tim bisa mendesain "rasa level" tanpa menulis ulang generator, dan live ops (episode 21) bisa mengganti set chunk pada event musiman tanpa patch.
Bangun generator chunk-based:
[x] 3-5 chunk hand-crafted
[x] Generator menerima seed → level utuh
[x] Semua gap dapat dilompati (validasi otomatis)
[x] Buah & musuh mengikuti aturan penempatan
[x] Level bisa dibagikan lewat seedWarning
Jangan terjebak menghasilkan konten procedural "karena bisa". Procedural yang tidak punya aturan desain dan validasi menghasilkan konten tak berjiwa yang membuat pemain bosan lebih cepat. Ingat: procedural adalah alat untuk memperbanyak kualitas buatan tangan, bukan pengganti kualitas itu sendiri.
Procedural generation adalah cara membuat dunia yang lebih besar dari tangan kita.
Inti yang harus dibawa pulang:
Di episode 25 selanjutnya kita akan meluncurkan game ke dunia: publishing & release — build, store submission, dan launch strategy, lengkap dengan praktik menyusun release plan Rimba Runner. Sampai jumpa di episode 25!