Tweaking and Settings - Modifikasi dan ketekunan variabel runtime

19

Sebagian besar perusahaan memiliki editor, atau sistem kontrol variabel untuk mengutak-atik hal-hal dalam permainan, tetapi apakah ada solusi middleware untuk masalah ini? Saya sudah menulis dua sistem seperti itu di masa lalu, dan bekerja dengan lima, mungkin enam yang berbeda, tetapi tidak satu pun dari mereka yang siap.

Masing-masing solusi yang ditanamkan di rumah ini memiliki masalah, mulai dari harus terus mencari nilai, hingga tidak mampu menyelamatkan keadaan variabel saat ini.

Apakah ada pustaka / aplikasi kontrol variabel Config / Runtime yang matang?

Saya biasanya kode dalam C ++, tapi saya akan berpikir bahwa editor pengaturan / variabel dewasa mungkin berbasis socket (dan karena itu bahasa agnostik sampai batas tertentu) karena semua perangkat keras pengembangan saat ini selain dari barang-barang Nintendo menyediakan mekanisme untuk berbicara dengan server. Implementasi kode juga harus cukup sederhana (saya suka artikel hot_var / TweakableConstants yang dibagikan oleh Oskar, tetapi ini bukan paket)

Richard Fabian
sumber

Jawaban:

8

Saya suka apa yang diusulkan Noel di blog-nya. Sebuah tweaker variabel berbasis telnet . Dengan menggunakan telnet ia dapat menggunakan klien telnet apa pun untuk mengedit variabel. Kemudian mereka membangun gui di sekitar protokol. Tampaknya cukup sederhana, bahwa itu mungkin tidak layak perpustakaan middleware tetapi melihat kodenya mungkin berguna.

Saya tidak setuju dengan sentimen anti-Lua-nya. Konsol Lua jarak jauh sepertinya luar biasa.

deft_code
sumber
Mereka menggunakan telnet untuk variabel Tweak pada MotoGP juga: blogs.msdn.com/b/shawnhar/archive/2009/05/01/...
Kylotan
3
Kenapa Telnet? HTTP / HTML, bung! HTTP adalah protokol yang sangat sederhana dan dapat dengan mudah disematkan dalam permainan - Saya sudah pernah melakukannya sebelumnya, itu jauh di bawah ribuan baris kode.
ZorbaTHut
3
Saya akan mengatakan bahwa Telnet melakukan pekerjaan dengan cukup baik dan jauh lebih kompleks. Anda bisa melakukannya dalam 100 baris kode daripada 1000. Dan itu juga memungkinkan untuk mendorong pembaruan daripada harus polling dan menariknya. Tetapi jika Anda membutuhkan HTTP untuk tujuan lain di gim Anda, saya setuju bahwa ada gunanya menggunakannya di sini juga.
Kylotan
5

Mungkin ide Tweakable Constants sesuai dengan kebutuhan Anda. Hal ini sangat berguna sehingga Anda akan berpikir Anda akan membutuhkan solusi yang kompleks untuk memiliki kontrol variabel run-time yang efektif, tetapi dalam kenyataannya implementasi hampir terlalu sederhana. The Diskusi asli dari teknik ini juga menarik dibaca.

Contoh:

glClearColor( H(1.0f), H(1.0f), H(1.0f), H(1.0f) );

The Hmakro mengembang untuk sesuatu seperti HotValue(x, __FILE__, __LINE__, __COUNTER__). Ini mencatat nilai ke beberapa registri global. Kemudian memiliki fungsi seperti RefreshHotValues()yang Anda panggil secara berkala. Fungsi ini mencari setiap entri dalam registri, mem-parsing file sumber tertentu dan memuat ulang nilai panas.

Saat Anda memodifikasi kode sumber yang sebenarnya, Anda memiliki ketekunan di sana.

Jelas ini tidak akan bekerja di mana H()tidak dievaluasi setiap frame, tetapi ada cara untuk menyelesaikan ini seperti yang dibahas di sini .

Anda dapat memperluas ide ini ke solusi berbasis soket, mungkin. Mungkin ada overhead kinerja yang signifikan untuk memanggil HotValue()setiap frame, tetapi karena Anda dengan mudah dapat mengkompilasi makro sepenuhnya menggantinya dengan konstanta, ini bukan masalah.

Oskar N.
sumber
2
@Kylotan: Anda melewatkan intinya. Anda mengubah kode sumber aktual, yang diuraikan pada saat dijalankan. Ketekunan adalah melalui sumber yang dimodifikasi.
Oskar N.
Ya, entah bagaimana saya melewatkan itu di membaca artikel. Saya akan menghapus komentar saya dan membaca kembali!
Kylotan
3
Saya mungkin hanya saya, tetapi teknik ini terasa ... menjijikkan. Saya pikir itu karena saya telah menghabiskan begitu banyak waktu membenci angka ajaib dan ini hanya akan bekerja untuk angka ajaib. Saya lebih suka melihat warna yang jelas menjadi bagian dari file konfigurasi atau skrip. Keajaibannya hadir dengan kemampuan sumber daya hot load.
deft_code
@caspin: Anda dapat menggunakan variabel polos dan sebagai gantinya memiliki H(int, myvar, 5)dan ketika perubahan file Anda mengganti myvarmemori di. Lihat mollyrocket.com/forums/viewtopic.php?p=5395#5395
Oskar N.
1

AntTweakBar sangat berguna untuk apa yang ingin Anda lakukan, namun, sebagian besar waktu, Anda ingin memiliki metode yang 'kompilasi' dalam rilis dengan beberapa makro atau sejenisnya.

DrDeth
sumber
0

Manajemen pengaturan tampaknya menjadi salah satu hal yang dikerjakan ulang dari awal untuk setiap game, mungkin karena betapa relatif sederhana dan variabilitas tinggi dalam jenis pengaturan yang diperlukan. Dengan asumsi Anda memiliki pengaturan backend penyimpanan yang layak (SQL / apa pun), Anda dapat membuat kode solusi yang kuat untuk manajemen pengaturan dalam satu atau dua hari sehingga tampaknya tidak ada banyak kebutuhan bisnis nyata untuk solusi middleware. Mengatasinya di atas apa pun yang Anda gunakan untuk penyimpanan informasi pemain adalah saya pikir cara terbaik untuk pergi dalam banyak kasus.

Ben Zeigler
sumber
1
Ini bukan tentang informasi pengaturan, ini tentang mengutak-atik variabel runtime untuk keperluan debugging atau gameplay.
Banyak jenis variabel runtime untuk keperluan debugging dan gameplay masuk akal untuk disimpan dalam semacam back end persisten. Ini memungkinkan pengubahan mereka di seluruh sistem saat Anda menggunakan. SQL hanyalah contoh dari ujung belakang, Anda bisa menambal informasi ke file di disk atau sejumlah metode lain.
Ben Zeigler
1
Masalahnya adalah membuat mereka berubah secara real time. Itu mungkin melibatkan pengaturan semacam pemicu pada DB, dan sesuatu dalam game yang dapat menangani pemicu itu dan membaca kembali nilai-nilai secara tidak sinkron saat game terus berjalan. Bukan tidak mungkin, tetapi juga tidak terlalu sederhana.
Kylotan
Kode yang mengatur pemicu DB adalah kode yang dicari Richard, dan merupakan bagian yang menarik / dapat digunakan kembali. Memindahkan konstanta ke DB daripada sistem file atau alat lain tidak membuat kode itu muncul secara ajaib, dan mungkin hanya membuatnya lebih rumit.
-1

Saya sebenarnya telah memikirkan hal seperti itu belakangan ini, dan saya pikir itu akan menjadi kandidat yang bagus untuk aplikasi Android yang dipasangkan dengan perpustakaan kecil dalam bahasa apa pun yang Anda inginkan . Aplikasi ini akan menjadi kumpulan tombol, matikan, dropdown, dan lain-lain yang dapat disesuaikan (widget apa pun yang Anda inginkan), dan itu akan mengirimkan tindakan melalui WLAN (atau USB jika Anda ingin menyulitkan hal-hal) ke perpustakaan. Perpustakaan akan menelurkan utas terpisah dari gameplay dan akan tahu kontrol mana pada ponsel Android yang sesuai dengan variabel mana dalam game (Anda akan mengaturnya dalam kode startup Anda) dan akan memiliki koneksi ke aplikasi Android.

Kemudian, bermain-main dengan game Anda semudah menyentuh barang-barang di ponsel Anda. Anda bahkan dapat memiliki beberapa kotak teks di telepon yang menunjukkan nilai variabel waktu nyata dari permainan, atau Anda bisa memiliki perpustakaan maju stdinatau stderrke textarea bergulir di telepon. Opsi tidak terbatas!

Satu-satunya masalah nyata adalah kecepatan. Jika kecepatan dan waktu reaksi sangat penting maka Anda hanya akan menghubungkan ponsel melalui USB dan adb (android debugger) mendukung port penerusan melalui USB ke telepon. Tetapi sebaliknya, WLAN hanya akan memiliki penundaan yang sangat kecil yang saya pikir akan banyak diterima untuk tujuan ini.

Saya tidak berpikir hal seperti di atas telah ditulis, tetapi saya sangat mempertimbangkan untuk menulisnya. (Saya hanya belum cukup jauh dalam pengembangan game saya sendiri untuk membutuhkannya)

Tentu saja, Anda yang pengguna Apple mungkin dapat melakukan hal yang sama dengan iDevices Anda. Secara pribadi saya menemukan pengembangan iOS menjadi pesanan yang jauh lebih sulit daripada pengembangan Android, dan tentu saja aplikasi di atas dapat dengan mudah dipublikasikan ke pasar Android untuk distribusi yang mudah sedangkan Apple mungkin tidak akan mengizinkan alat pengembang masuk ke app store, jadi saya rasakan platform Android lebih cocok dengan alat ini.

Ricket
sumber
Ini akan terasa manis di lingkungan kantor. Berjalanlah untuk berbicara dengan seorang seniman, dan terhubung ke dan mulai mengutak-atik permainan menjalankan desainer tetangga sementara dia mencoba untuk mengatur beberapa pertemuan ...
dash-tom-bang
1
Saya tidak mengerti manfaat memilikinya di ponsel Anda daripada di komputer tempat Anda sebenarnya melakukan pengembangan.