Next Run - Mod
Panduan Modifikasi Next Run
Deskripsi detail tentang cara kerja modifikasi, struktur file, dan komponen game Next Run. Simpan tautan ini untuk referensi cepat saat membuat dan mempublikasikan mod Anda sendiri.
1. Umum
Dokumen ini menjelaskan sistem mod dalam game Next Run: cara menginstal, membuat mod sendiri, dan membagikannya dengan pemain lain.
- Baca bagian 2 setidaknya sekali untuk memahami cara mod dibuat dan cara kerjanya.
- Gunakan bagian 3 dan 4 sebagai referensi.
- Gunakan contoh dari game untuk melihat cara kerjanya dalam praktik, di Steam Workshop: https://steamcommunity.com/app/1295870/workshop/.
- File game untuk versi 1.1.0 dapat ditemukan di sini: https://clarusvictoria.com/files/next_run_files_examples_1.1.0.zip.
2. Sistem Mod
Setelah meluncurkan game dan menekan tombol 'Mainkan' dan 'Buat Game', dilakukan pemindaian folder Mods di dalam direktori game. Setiap subfolder dari direktori ini yang memiliki file modinfo.json dianggap sebagai mod.
2.1. Steam Workshop, Instalasi dan Publikasi Mod
Jika Anda meluncurkan game dari klien Steam, di menu 'Mainkan' tersedia panel 'Mod' yang berisi tombol-tombol berikut:
- Steam Workshop
- Folder Mod
- Publikasikan
- Panduan
2.1.1. Steam Workshop
Membuka Steam Workshop di dalam klien Steam. Untuk mengunduh mod, Anda perlu berlangganan. Setelah itu, unduhan dimulai secara otomatis. Jika mod berukuran besar, unduhan mungkin memerlukan waktu. Status unduhan ditampilkan di klien Steam.
2.1.2. Folder Mod
Membuka folder mod game Anda.
2.1.3. Publikasikan
Game secara otomatis memindai folder Mods dan mempublikasikan semua mod yang Anda buat ke Steam Workshop.
- Jika mod baru, steam_id akan dihasilkan secara otomatis.
- Jika mod sudah ada, mod akan diperbarui.
- Tombol publikasi mengubah tampilannya selama proses unggah.
- Mod hanya akan dipublikasikan jika ada perubahan.
- Perubahan file modinfo.json tidak dianggap sebagai perubahan konten.
- Mod yang dipublikasikan menjadi tersedia untuk pemain lain di seluruh dunia. Steam Workshop bukan satu-satunya cara mendistribusikan mod - mod juga bisa dibagikan langsung dengan menempatkan folder mod di direktori Mods.
2.1.4. Panduan
Tautan ke panduan ini.
2.2. File JSON
Semua data dan teks dalam game menggunakan format JSON. Perbedaan utama dari format teks biasa adalah data harus diapit dalam kurung kurawal {}.
Deskripsi sintaks JSON:
- https://en.wikipedia.org/wiki/JSON
- https://developer.mozilla.org/en-US/docs/Learn_web_development/Core/Scripting/JSON
Disarankan untuk merujuk pada contoh file dari game.
2.3. Struktur File
Setiap mod memiliki struktur file yang serupa dengan struktur game. File-file ini menambahkan konten baru atau mengubah yang sudah ada. File JSON menambahkan atau mengubah elemen game individual. File format lain (png, ogg) diganti seluruhnya.
Contoh: jika Anda membuat file data/game.json dan mengubah entitas 'Warrior' (kelas game) di dalamnya, hanya kelas ini yang akan diubah, sementara entitas lain di game.json tetap tidak berubah. Jika Anda menambahkan file portrait_warrior_front.png, file ini sepenuhnya menggantikan gambar yang sesuai di game karena namanya cocok.
Di dalam mod terdapat file dan folder wajib dan opsional. Struktur standarnya adalah sebagai berikut:
- Nama folder mod (bisa apa saja, bukan nama mod)
- modinfo.json
- preview.png
- data/
- icons/
- sounds/
- texts/
- tiles/
Untuk pemahaman yang lebih baik, disarankan mempelajari contoh dari game dan mod yang sudah ada. Berikut deskripsi detail setiap folder dan file.
2.3.1. modinfo.json
File dengan metadata mod. Sebagian data ini digunakan Steam Workshop saat publikasi.
- title - nama mod, ditampilkan di Steam.
- version - versi mod.
- description - deskripsi mod.
- tags - tag untuk navigasi di Steam Workshop.
- order - urutan pemuatan mod. Jika beberapa mod mengubah data yang sama, mod dengan order lebih besar akan menimpa mod dengan nilai lebih kecil.
- steam_id - tidak perlu diisi manual, dibuat otomatis saat publikasi.
- created_time - waktu pembuatan.
- changed_time - waktu perubahan.
- Diperbolehkan menambahkan field lain, namun hanya akan digunakan di dalam file. Penulis mod ditentukan secara otomatis melalui Steam Workshop.
2.3.2. preview.png
Gambar (ikon) mod untuk Steam Workshop. Resolusi yang disarankan - 256x256 atau 512x512. Rasio aspek persegi. Diperbolehkan PNG transparan atau JPG.
2.3.3. data
Folder dengan file data JSON. Berisi file yang mengubah entitas game yang sudah ada atau menambahkan yang baru. Anda hanya perlu membuat file dan field yang perlu diubah atau ditambahkan. Deskripsi detail data yang bisa diubah ada di bagian 3.
2.3.4. icons
Folder dengan ikon game. Berisi sebagian besar gambar, kecuali GUI dan tile. Digunakan beberapa ukuran standar dan layer untuk berbagai situasi game. Game menggunakan file PNG dengan latar belakang transparan.
2.3.5. sounds
Folder dengan suara dan musik. Bisa menambahkan file baru atau mengganti yang sudah ada. Format yang digunakan - OGG.
2.3.6. texts
Folder dengan teks game yang dilokalisasi. Setiap file sesuai dengan satu bahasa dan menggunakan standar IETF BCP-47 / ISO. Saat ini didukung 13 bahasa: ruRU.json, trTR.json, jaJP.json, koKR.json, zhTW.json, zhCN.json, plPL.json, ptBR.json, itIT.json, esES.json, frFR.json, deDE.json, enUS.json.
2.3.7. tiles
Folder dengan gambar tile. Digunakan file PNG dengan latar belakang transparan. Ukuran standar tile - 256x384. Tile terdiri dari beberapa layer, seperti tanah, objek, hutan, gunung, jalan.
2.4. Sinkronisasi Mod
Setelah menerima mod, mod secara otomatis disinkronkan dengan versi terbaru yang dipublikasikan di Steam Workshop setiap kali game diluncurkan.
Jika Anda adalah penulis mod, sinkronisasi tidak dilakukan dan file mod tidak ditimpa. Ini agar perubahan Anda tidak hilang setelah meluncurkan ulang game saat mengerjakan mod.
Jika Anda ingin membuat mod berdasarkan mod orang lain, sebelum meluncurkan ulang game Anda perlu melakukan hal berikut:
- Ubah nama folder mod menjadi nama lain yang berbeda dari id-nya.
- Di file modinfo.json, hapus field: 'author', 'created_time', 'steam_id', 'changed_time'.
2.5. Penggabungan Data
File data JSON dari mod dan game tidak diganti, melainkan digabungkan.
Urutan penggabungan:
- Entitas asli dari file JSON game diambil sebagai dasar.
- Di atasnya diterapkan data dari mod. Mod diterapkan sesuai prioritas yang ditetapkan oleh field order di file modinfo.json.
Saat penggabungan, semua field dari semua komponen diproses secara terpisah. Misalnya, jika entitas memiliki 'hideIfZero':true, dan diperlukan agar nilainya menjadi false, tidak cukup menghapus field ini - harus secara eksplisit menentukan 'hideIfZero':false.
Daftar di file list.json digabungkan dengan prinsip yang sama. Tidak perlu menduplikasi setiap daftar dengan semua field jika hanya perlu menambahkan satu elemen. Namun, daftar yang hanya berisi data sederhana diganti seluruhnya, misalnya RndGoodEvents dan RndEvents.
3. Komponen
Game Next Run dibangun di atas arsitektur ECS. Seluruh game terdiri dari entitas. Entitas adalah kontainer komponen. Entitas hanya berisi field id. Semua data lain dideskripsikan oleh komponen. Semua data ditentukan dalam file JSON.
Contoh elemen dalam file JSON:
3.1. Button
Mendeskripsikan tampilan dan perilaku tombol dalam game.
- panel = string, panel default tombol. Semua tombol dalam game berada di dalam panel dan menu tertentu. Gunakan contoh untuk memilih panel mana yang ingin Anda gunakan.
- icon = string, nama ikon tombol. Nama ikon diambil dari folder icons, file PNG.
- iconType = string, tipe tombol, memengaruhi ukuran dan elemen pada tombol. Opsi: 'btn' - tombol sederhana, 'btnBig' - tombol dengan nilai di bawah.
- color = string, warna latar ikon, misalnya green, yellow. Daftar warna yang dipahami game: green, superGreen, lightGreen, darkGreen, red, superRed, darkRed, gray, lightGray, darkGray, lightBlue, blue, darkBlue, darkDarkBlue, grayYellow, yellow, pink, cyan, darkCyan, almostBlack, black, orange, darkOrange, lightViolet, purple, chartreuse, num, gameBack, blank, halfTrans, white, base.
- numText1 = double, nilai ikon.
- numTextAdd = string, tambahan untuk nilai ikon, misalnya simbol '%'.
- numText1Type = string, tipe nilai ikon, misalnya level, total, duration.
- numCustom = string, nilai ikon unik, misalnya '∞'.
- numIcon = string, ikon di samping nilai, misalnya star untuk level, coin untuk barang dagangan.
- hotkey = string, tombol pintas keyboard.
- hide = bool, apakah tombol tersembunyi.
- hideIfZero = bool, menyembunyikan tombol jika komponen Total.now sama dengan 0.
- disabled = bool, apakah tombol dinonaktifkan atau diaktifkan, misalnya beberapa menu dinonaktifkan saat game dimulai.
- interactable = bool, apakah tombol interaktif, secara default ya. Contoh tombol non-interaktif - slot inventaris.
- cantBeDeselect = bool, larangan membatalkan pemilihan tombol ini.
- cantBeSelect = bool, larangan memilih tombol saat diklik.
- draggable = bool, apakah tombol bisa dipindahkan dengan drag and drop.
- x = double, posisi tombol di antarmuka pada koordinat X, digunakan untuk tombol tanpa panel, misalnya slot inventaris.
- y = double, sama seperti X, tetapi untuk koordinat Y.
- upMiniPred = string, nama aksi yang diperiksa untuk entitas ini. Jika aksi tersedia, muncul ikon mini petunjuk tipe Upgrade.
- craftMiniPred = string, petunjuk serupa untuk aksi Craft.
- raiseMiniPred = string, petunjuk serupa untuk aksi Raise.
3.2. Tooltip
Mendeskripsikan konten tooltip tombol.
- text = string, nama entitas yang ditampilkan dalam game.
- dontShowDuration = bool, larangan menampilkan nilai durasi entitas.
- hideSources = bool, larangan menampilkan entitas sumber yang memengaruhi nilai entitas ini.
- hideAsSubjTT = bool, larangan menampilkan objek ini sebagai sumber untuk entitas terkait.
- desc = string, teks deskripsi, muncul di awal tooltip.
- desc2 = string, teks deskripsi, muncul di akhir tooltip.
- redDesc = string, teks deskripsi, disorot merah, muncul di akhir.
- totalTextAs = string, teks pengganti 'Total'.
- ttPos = string, posisi tooltip relatif terhadap tombol, opsi 'top', 'left'.
3.3. GameClass
Mendeskripsikan mekanik kelas game.
- text = string, nama kelas dalam game.
- portrait_back = string, gambar latar saat memilih kelas 391x598.
- portrait_front = string, gambar kelas saat memilih kelas 411x620, transparan.
- figurine = string, gambar avatar karakter di peta 149x243.
- doll = string, gambar hitam putih kelas di inventaris 460x784.
- bonusSkill1 = string, nama skill 1 yang mendapat bonus.
- bonusSkillVal1 = double, besaran bonus skill 1.
- bonusSkill2 = string, nama skill 2 yang mendapat bonus.
- bonusSkillVal2 = double, besaran bonus 2.
- debuffSkill1 = string, nama skill 1 yang mendapat penalti.
- debuffSkillVal1 = double, besaran penalti 1.
- debuffSkill2 = string, nama skill 2 yang mendapat penalti.
- debuffSkillVal2 = double, besaran penalti 2.
- gold = double, jumlah emas kelas saat mulai.
- remains = double, jumlah sisa-sisa saat mulai.
- equip = List(string), daftar item untuk dikenakan saat mulai.
- units = string, nama makhluk yang ada saat mulai.
- itemName = string, nama item di inventaris saat mulai.
- itemNum = double, jumlah item di inventaris saat mulai.
- learnList = string, daftar mantra atau blueprint untuk dipelajari, daftar ada di file list.json.
- learnNum = double, jumlah mantra atau blueprint yang akan dipelajari dari daftar.
- lessTime = double, berapa banyak waktu lebih sedikit antara serangan neraka.
- manaBonus = double, bonus mana, maksimum dan total.
- upgradeDexterityBonusMod = double, bonus untuk item yang bisa ditingkatkan dari skill Dexterity.
- skillPointsPerLevel = double, jumlah poin skill yang diberikan saat naik level.
- upgradeManaCostMod = double, bonus efektivitas peningkatan mantra.
- freeRegion = bool, wilayah gratis.
- necroBonus = bool, gameplay dan bonus Necromancer.
- druidBonus = bool, gameplay dan bonus Druid.
- stances = bool, ketersediaan stance/form/perintah.
- defStance = string, stance default.
- notDemo = bool, kelas tidak tersedia di demo.
- notTutorial = bool, apakah kelas tersedia di mode Tutorial.
3.4. GameMode
Mendeskripsikan mekanik mode game.
- text = string, nama mode dalam game.
- back = string, gambar latar saat memilih mode 391x598.
- moreTime = double, berapa banyak waktu lebih banyak antara serangan neraka.
- lessTime = double, berapa banyak waktu lebih sedikit antara serangan neraka.
- woundChance = double, peluang mendapat luka.
- notDemo = bool, mode tidak tersedia di demo.
- scenario = string, nama peta terpisah untuk mode ini.
- noHellAttacks = bool, tidak ada serangan neraka di mode ini (seperti di sandbox).
- savesOnExitOnly = bool, di mode ini penyimpanan hanya saat keluar game.
3.5. Biome
Menentukan mekanik bioma.
- frequency = double, frekuensi kemunculan bioma saat generasi peta, semakin besar angkanya semakin sering. Pada 0 tidak digenerate. Bioma Lava selalu digenerate sebagai wilayah terakhir.
- hexBase = string, tile dasar untuk bioma ini, digenerate sebagai alas di bawah pemukiman.
- music = string, nama file dengan track musik bioma.
- hexPatterns = List(string), daftar pola objek di bioma. Bekerja dengan prinsip dek kartu: pola diacak secara random, lalu diambil secara random, saat mencapai 0 di dek, dek dibuat ulang. Pola memiliki format: nama_objek#nama_objek, simbol # adalah pemisah antar objek.
- mobLevel1 .. mobLevel8 = string, nama makhluk yang digenerate di bioma tergantung level wilayah.
3.6. TileAsset
Menentukan tampilan objek di peta game.
- tileMap = string, nama layer LandTilemap - permukaan tanah, ObjectTilemap - objek biasa, RoadTilemap - jalan dll., perbedaannya hanya pada urutan penerapan layer satu sama lain.
- rawSprite = string, gambar 256x384 untuk menambahkan gambar di peta.
- icon = string, ikon untuk ditambahkan di atas semua TileMap.
- buttonIcon = bool, apakah perlu mengambil ikon dari Button.
- delLevel = double, level penghapusan, seberapa sulit menghapus objek dengan aksi.
3.7. Shop
Mendeskripsikan mekanik toko.
- slots = int, jumlah slot toko.
- type = string, nama assortimen toko yang ada di list.json.
3.8. Item
Mendeskripsikan mekanik item.
- slot = string, nama slot untuk perlengkapan.
- stackable = bool, apakah item bisa lebih dari 1 dalam satu tumpukan.
- upgradable = bool, apakah item bisa ditingkatkan, durasi peningkatan bergantung pada level.
- upProgress = double, durasi peningkatan.
- order = double, urutan item di toko, semakin kecil semakin atas.
3.9. Mob
Mendeskripsikan mekanik makhluk.
- hell = bool, makhluk neraka. Penalti saat menyuap. Berpartisipasi dalam serangan neraka. Bonus sisa-sisa.
- undead = bool, makhluk undead. Tidak bisa disuap. Mekanik peningkatan khusus.
- type = string, tipe makhluk - 'Warriors', 'Defenders', 'Mages', 'Gatherers', 'Crafters'. Menentukan warna latar, peluang mengenai pemain, tipe damage, tipe loot.
- upMob = string, menjadi apa makhluk saat ditingkatkan.
- upCostName = string, item yang diperlukan untuk peningkatan.
- upCostNum = double, jumlah sumber daya untuk peningkatan, default 1.
3.10. Dungeon
Mendeskripsikan mekanik dungeon.
- magic = bool, dungeon magis. Memengaruhi tipe damage, loot, dan addon.
- boss = bool, dungeon terakhir.
3.11. Ruins
Mendeskripsikan mekanik reruntuhan - tempat untuk mencari item.
3.12. Addon
Mekanik ekstensi. Ekstensi adalah objek yang terletak di sel dengan dungeon atau reruntuhan yang mengubah parameternya dan memberikan hadiah terpisah.
- skill = string, nama skill yang akan diterima pemain jika dungeon dibersihkan atau reruntuhan diperiksa. Bisa ditentukan: 'Random', 'Strength' dll.
- unit = string, nama makhluk bonus setelah menyelesaikan aksi. Bisa ditentukan 'Random'.
- item = string, nama item bonus setelah menyelesaikan aksi. Bisa ditentukan 'Random'.
- phyChanceMulti = double, modifier peluang damage fisik saat Pembersihan. Misalnya 50(%).
- magChanceMulti = double, modifier peluang damage magis saat Pembersihan. Misalnya 50(%).
- progressMulti = double, berapa lama lebih lama melakukan aksi tipe Pembersihan atau Pemeriksaan. Misalnya 100(%).
- dmgMulti = double, modifier besaran damage saat Pembersihan. Misalnya 50(%).
3.13. Build
Menentukan bahwa objek ini adalah bangunan.
3.14. Center
Menentukan bahwa objek ini adalah pemukiman.
- captureProgress = double, usaha yang diperlukan untuk merebut pemukiman.
- upProgress = double, usaha yang diperlukan untuk meningkatkan pemukiman.
- upCostName1 = string, nama item 1 yang diperlukan untuk peningkatan.
- upCostNum1 = double, jumlah item 1 yang diperlukan untuk peningkatan.
- upCostName2 = string, analog untuk item 2.
- upCostNum2 = double, analog untuk item 2.
- upCostName3 = string, analog untuk item 3.
- upCostNum3 = double, analog untuk item 3.
- upProp = string, menjadi pemukiman apa saat ditingkatkan.
3.15. Gatherable
Menentukan bahwa objek ini bisa ditambang dan menghasilkan sumber daya.
- gather = string, nama sumber daya yang akan ditambang.
- deposit = bool, apakah sumber daya ini adalah deposit, jika ya berarti di sini bisa dibangun tambang.
3.16. AlliedForest
Menentukan mekanik dan nilai 'hutan sekutu' saat bermain sebagai druid.
- allyBonus = double, besaran bonus 'Hutan Sekutu'.
3.17. Graveyard
Menentukan mekanik bahwa objek ini adalah kuburan, penting saat bermain sebagai necromancer. Nilai dihasilkan secara random, berapa banyak sisa-sisa yang bisa ditambang.
- now = double, nilai sisa-sisa saat ini.
- rndMin = double, nilai minimum jumlah sisa-sisa.
- rndMax = double, nilai maksimum jumlah sisa-sisa.
- rndCeil = bool, pembulatan ke atas untuk nilai random.
3.18. Pred
Komponen aksi. Meskipun sebagian besar fungsionalitas komponen tersembunyi di kode, sebagian bisa diakses.
- action = string, nama aksi yang akan dijalankan saat aksi dilakukan.
- local = bool, apakah perlu berada di sel yang sama dengan objek untuk berinteraksi.
- attackPred = bool, aksi ini bersifat menyerang, akan diterapkan otomatis jika mantra pertempuran digunakan.
- gatherPred = bool, aksi ini bersifat menambang, akan diterapkan otomatis jika mantra penambangan sumber daya digunakan.
- craftPred = bool, aksi ini bersifat kerajinan, akan diterapkan otomatis jika mantra crafting digunakan.
- skill = string, skill yang digunakan untuk melakukan aksi, misalnya untuk aksi menyerang digunakan skill Attack.
- longPred = bool, aksi ini tidak instan dan membutuhkan waktu.
- repeat = bool, aksi akan diulang sampai dihentikan.
- noOwner = bool, aksi ini tidak memerlukan pemilihan objek apa pun.
- skipLongTooltip = bool, versi tooltip yang disederhanakan untuk aksi.
- onlyClass = string, aksi tipe stance, form, atau perintah ini hanya tersedia untuk kelas tertentu.
3.19. Total
Komponen yang menentukan nilai numerik entitas, biasanya ini adalah jumlah sesuatu.
- now = double, nilai saat ini.
- inc = double, pertambahan per giliran.
- max = double, nilai maksimum.
- min = double, nilai minimum.
- rndMin = double, nilai minimum angka random.
- rndMax = double, nilai maksimum angka random, menggantikan now.
- rndCeil = bool, pembulatan ke atas saat generasi nilai random.
- overMax = bool, memperbolehkan melebihi batas.
- delIfZero = bool, hapus jika nilai sama dengan 0.
- numPercent = bool, apakah nilai berupa persentase.
3.20. Level
Komponen yang menentukan level entitas.
- now = double, nilai saat ini.
- max = double, nilai maksimum.
- min = double, nilai minimum.
- localLevelPlus = int, bonus ke level lokal, hanya bekerja untuk objek di peta, levelnya menjadi sama dengan level wilayah ditambah nilai localLevelPlus.
3.21. Duration
Komponen yang menentukan durasi entitas.
- now = double, nilai saat ini.
- max = double, nilai maksimum.
- min = double, nilai minimum.
- delIfZero = bool, hapus jika nilai sama dengan 0.
3.22. Mods
Komponen daftar modifier. Saat komponen ini dibuat, terbentuk set perubahan yang memengaruhi entitas lain. Saat entitas dihapus, perubahan ini menghilang.
- radius = int, radius yang terpengaruh modifikasi, hanya bekerja di peta.
- objType = string, tipe entitas yang terkena modifikasi, misalnya 'Stat', 'Skill', 'Prop', 'Item', 'ModableVal', 'PropMod'.
- objName = string, nama entitas, misalnya 'Speed'.
- objComp = string, komponen yang terkena modifikasi, misalnya 'Total', 'Level'.
- objKey = string, field komponen yang terkena modifikasi, misalnya 'now', 'inc', 'max'.
- modType = string, cara memengaruhi field: 'add', 'mult', 'addPerLevel', 'multPerLevel'.
- now = double, nilai modifier, besaran perubahannya.
- subjTooltipText = string, ke tooltip dinamis akan ditambahkan indikasi subjek.
- skipPerTooltip = bool, di tooltip mengganti PerLevel dengan Plus.
- skipSubjTooltip = bool, melewati tooltip untuk subjek ini.
3.23. ModableVals
Komponen daftar variabel global game. Pengikatan ke entitas tertentu bersifat kondisional. Sebagian besar logika kerja variabel ini tersembunyi di kode game.
- now = double, nilai variabel.
3.24. Slot
Komponen yang menentukan entitas sebagai slot di inventaris.
- name = string, nama slot. Agar item bisa diletakkan di slot ini, nilai field slot pada komponen Item harus cocok.
3.25. Container
Menentukan entitas ini sebagai kontainer dengan sel.
- cells = int, jumlah sel dalam kontainer.
- cellsPanel = string, nama panel.
3.26. Tom
Menentukan bahwa entitas ini adalah tome mantra yang bisa dipelajari untuk mendapatkan atau meningkatkan mantra.
- cast = string, nama mantra.
3.27. Cast
Menentukan bahwa entitas ini adalah mantra.
- mana = double, biaya mantra dalam mana.
- predSkill = string, saat mantra ini diaktifkan, tipe aksi apa yang perlu dijalankan, misalnya untuk tipe Attack secara otomatis dijalankan aksi menyerang.
- notSkills = string, petunjuk aksi apa yang diperlukan untuk menggunakan mantra ini.
- attack = double, berapa banyak mempercepat aksi tipe Attack saat mantra ini digunakan, secara kondisional ini adalah damage magis.
- gather = double, berapa banyak mempercepat aksi tipe Penambangan sumber daya.
- craft = double, berapa banyak mempercepat aksi tipe Craft.
- heal = double, berapa banyak hero pemain disembuhkan.
- newEvent = string, nama event yang dipicu mantra, biasanya event tipe buff.
- teleport = bool, teleportasi ke lokasi yang dipilih.
- explore = double, mengeksplorasi sel ini dan sekitarnya.
3.28. Blueprint
Mekanik entitas blueprint.
- item = string, nama item yang akan dibuat.
- build = string, nama bangunan yang akan dibangun.
- costName1 = string, nama item 1 yang diperlukan untuk pembuatan.
- costNum1 = double, jumlah item 1 yang diperlukan untuk pembuatan.
- costName2 = string, analog untuk item 2.
- costNum2 = double, analog untuk item 2.
- costName3 = string, analog untuk item 3.
- costNum3 = double, analog untuk item 3.
3.29. Cost
Komponen harga, menentukan bahwa entitas bisa dibeli dan dijual.
- raw = double, harga dasar tanpa modifier. Harga beli dan jual dihitung darinya.
3.30. Event
Komponen untuk event.
- uniq = bool, event unik, kemunculan event duplikat akan menghapus yang lama dengan nama yang sama.
- rndEvent = bool, event bersifat random.
- nextEvent1 = string, nama event pertama yang dimulai setelah event ini selesai.
- nextEvent2 = string, nama event kedua yang dimulai setelah event ini selesai.
- castType = string, tipe efek penguatan mantra, menimpa tipe yang sama.
3.31. Proc
Komponen mekanik proc (peluang), misalnya probabilitas terkena penyakit.
- addEvent = string, event yang akan dipicu jika peluang berhasil.
3.32. ProcMod
Komponen yang memungkinkan entitas memengaruhi peluang proc.
- proc = string, nama proc yang dipengaruhi komponen ini.
- chance = double, kekuatan pengaruh, sebagian fungsionalitas ada di dalam kode.
- dependsLevel = bool, ketergantungan pada level entitas.
3.33. Usable
Komponen penggunaan sekali pakai yang memberikan efek, misalnya ramuan. Komponen diaktifkan saat menggunakan aksi Gunakan.
- stat = string, nama stat yang dipengaruhi efek.
- skill = string, nama skill yang dipengaruhi efek.
- nowBonus = double, bonus yang memengaruhi field Total.now komponen.
- maxBonus = double, bonus yang memengaruhi field Total.max komponen.
- cure = bool, apakah item menyembuhkan efek Penyakit.
3.34. Drankable
Komponen yang memungkinkan minum dari objek di peta, misalnya Danau, Oasis, dan sejenisnya.
3.35. Sphinx
Komponen quest di peta, Sphinx. Parameter ditentukan otomatis berdasarkan level wilayah.
3.36. Living_tree
Komponen quest di peta, Pohon Hidup. Parameter ditentukan otomatis berdasarkan level wilayah.
3.37. Vision
Mekanisme objek di peta yang membuka radius peta yang diperluas saat hero pemain memasuki lokasi dengan entitas.
- explore = int, radius eksplorasi. 1 - eksplorasi biasa, 2 - diperluas satu sel.
3.38. Remains
Deskripsi entitas sebagai komponen sisa-sisa. Memungkinkan entitas tersebut diubah menjadi undead.
3.39. Audio_comp
Komponen yang memungkinkan memutar suara untuk entitas tertentu tergantung tipenya.
- click = string, suara saat mengklik entitas, digunakan untuk aksi dan mantra.
- added = string, suara diputar saat entitas dibuat, digunakan untuk event.
- ambient1 = string, suara lingkungan, track 1.
- ambient2 = string, suara lingkungan, track 2.
- ambient3 = string, suara lingkungan, track 3.
- process = List(string), daftar nama suara yang diputar selama aksi berlangsung.
- waits = List(double), daftar jeda antara pemutaran suara.
- finish = string, suara penyelesaian aksi.
- rndProcess = bool, efek random kecil untuk suara selama pemutaran.
3.40. Childs
Komponen yang secara rekursif membuat entitas baru.
- list = List(Entity), daftar anak yang otomatis dibuat dan diikat ke entitas tertentu.
3.41. Preds
Komponen yang membuat aksi untuk entitas tertentu, meskipun sebagian besar entitas ditentukan di kode game.
- list = List(string).
3.42. Equip
Komponen penanda bahwa item ini bisa dikenakan pada hero.
3.43. Res
Komponen indikator bahwa entitas ini adalah sumber daya. Diperlukan untuk tooltip, animasi, dan ringkasan game.
3.44. TurnAct
Komponen berarti bahwa entitas perlu diperiksa setiap tick waktu game, misalnya untuk komponen Total dan Duration.
4. Daftar
Di file list.json terdapat kumpulan bagian data yang bukan entitas atau komponen. Mereka menentukan berbagai daftar untuk generasi konten dalam game.
4.1. RndGoodEvents
Daftar event random baik yang digenerate langsung saat game dimulai.
4.2. RndEvents
Daftar event random baik dan buruk yang akan digenerate selama permainan.
4.3. Generator_dungeon_addons_physical
Daftar ekstensi (addon) yang akan digenerate untuk dungeon dengan damage fisik.
4.4. Generator_dungeon_addons_magical
Daftar ekstensi (addon) yang akan digenerate untuk dungeon dengan damage magis.
4.5. Generator_ruins_addons
Daftar ekstensi (addon) yang akan digenerate untuk reruntuhan.
4.6. Generator_settlement_levels
Daftar korespondensi antara level wilayah dan nama entitas pemukiman, misalnya 'lvl1':'Village' berarti di wilayah level 1 akan digenerate pemukiman tipe Village.
4.7. Generator_rar_metals
Daftar korespondensi antara level wilayah dan nama deposit, misalnya 'lvl2':'Deposit_tin' berarti di wilayah level 2 akan digenerate deposit timah.
4.8. Generator_mages
Daftar korespondensi antara level wilayah dan nama mage yang akan digenerate dan menjaga menara mage, misalnya 'lvl3':'Priestesses' berarti di wilayah level 3 akan digenerate priestess.
4.9. LevelMobs_
Daftar makhluk untuk berbagai level wilayah yang akan diterima pemain setelah membebaskan tawanan saat membersihkan dungeon atau saat memeriksa reruntuhan.
4.10. Crafter_start, Lord_start, Mage_start,
Berbagai daftar item yang diterima kelas game berbeda saat mulai di komponen GameClass, di field learnList. Jumlah item digenerate di field learnNum.
- obj = string, nama item.
- min = double, angka random minimum.
- max = double, angka random maksimum.
- chance = double, peluang generasi item tertentu ini.
- Bisa membuat daftar lain dan mengikatnya untuk kelas berbeda jika perlu mempelajari blueprint atau mantra lain.
4.11. Gold_
Daftar ini menentukan jumlah emas yang digenerate tergantung level wilayah. Emas muncul dengan probabilitas 50% di semua jenis hadiah di peta. Lihat poin 4.10 untuk sintaks.
4.12. Loot_-
Grup daftar yang menentukan generasi hadiah tergantung level wilayah. Diterapkan untuk makhluk, dungeon, dan reruntuhan. Untuk makhluk menentukan probabilitas drop item tertentu dengan peluang 50%, untuk 50% lainnya digunakan daftar dari poin 4.13. Lihat poin 4.10 untuk sintaks.
4.13. Warriors_, Defenders_, Mages_, Gatherers_, Crafters_,
Grup daftar yang menentukan generasi hadiah tergantung level wilayah dan kelas makhluk. Diterapkan hanya untuk makhluk. Daftar ini merupakan perluasan dari daftar tipe Loot_ dan dipicu dalam 50% kasus untuk generasi hadiah berdasarkan kelas, misalnya ketika diperlukan agar mage lebih sering menjatuhkan tome mantra dan tongkat. Lihat poin 4.10 untuk sintaks.
4.14. Shop_, Books_
Daftar untuk berbagai level wilayah, misalnya Books5 atau Shop6. Digunakan untuk generasi assortimen toko. Lihat poin 4.10 untuk sintaks. Daftar ini ditentukan di komponen Shop, field type, untuk menara digenerate dari kode game.
