(Eğer mizahi zihinsel görüntüden başka bir şey değilse, "maymun eklemesi" veya "ördek yumruklaması" terimini bilmek isteyebilirsiniz .)
Bu bir yana: Amacınız "davranış" değişiklikleri için yineleme süresini kısaltıyorsa, sizi en çok oraya götürecek bazı yaklaşımları deneyin ve gelecekte daha fazlasını sağlamak için güzel bir şekilde birleştirin.
(Bu bir teğet biraz sönecek, ama geri döneceğine söz veriyorum!)
- Verilerle başlayın ve küçük başlayın: sınırlardan yeniden yükleyin ("düzeyler" veya benzeri), ardından dosya değişikliği bildirimleri almak veya düzenli aralıklarla anket yapmak için işletim sistemi işlevini kullanmak için çalışın .
- (Bonus puanları ve daha düşük yükleme süreleri için (tekrar, azalan iterasyon süresi) veri pişirme işlemine bakın .)
- Komut dosyaları veridir ve davranışı yinelemenize izin verir. Bir betik dili kullanıyorsanız, şimdi bu betikleri yeniden yükleme, yorumlama veya derleme bildirimlerine / yeteneğine sahipsiniz. Ayrıca, çalışma süresini esnekliği için tercümanınızı oyun konsoluna, ağ soketine veya benzerlerine bağlayabilirsiniz.
- Kod da veri olabilir : derleyiciniz bindirmeleri , paylaşılan kütüphaneleri, DLL'leri veya benzerlerini destekleyebilir. Bu nedenle, elle veya otomatik olarak bir bindirme veya DLL dosyasını kaldırmak ve yeniden yüklemek için artık "güvenli" bir zaman seçebilirsiniz. Diğer cevaplar burada ayrıntılara giriyor. Bunun bazı değişkenlerinin kriptografik imza doğrulama, NX (yürütme yok) bit veya benzeri güvenlik mekanizmaları ile karışabileceğini unutmayın .
- Derin, sürümlü bir kaydetme / yükleme sistemi düşünün . Durumunuzu kod değişiklikleri karşısında bile sağlam bir şekilde kaydedebilir ve geri yükleyebilirseniz, oyununuzu kapatabilir ve aynı noktada yeni bir mantıkla yeniden başlatabilirsiniz. Söylemesi yapmaktan daha kolay, ancak yapılabiliyor ve talimatları değiştirmek için hafıza takmaktan çok daha kolay ve daha taşınabilir.
- Oyununuzun yapısına ve kararlılığına bağlı olarak kayıt ve oynatma işlemlerini yapabilirsiniz . Bu kayıt sadece "oyun komutlarının" üzerindeyse (örneğin bir kart oyunu düşünün), istediğiniz tüm oluşturma kodunu değiştirebilir ve değişikliklerinizi görmek için kaydı yeniden yapabilirsiniz. Bazı oyunlar için bu, bazı başlangıç parametrelerinin (örn. Rastgele bir tohum) kaydedilmesi ve daha sonra kullanıcı işlemlerinin yapılması kadar kolaydır. Bazıları için çok daha karmaşık.
- Derleme süresini azaltmak için çaba gösterin . Yukarıda belirtilen kaydetme / yükleme veya kaydetme / oynatma sistemleriyle veya hatta bindirmeleri veya DLL'ler ile birlikte, bu işlem geri dönüşünüzü diğer tüm işlemlerden daha fazla azaltabilir.
Veri ya da kodu yeniden yüklemeyi başaramasanız bile bu noktaların çoğu yararlıdır.
Fıkraları desteklemek:
Büyük bir PC RTS'de (~ 120 kişilik ekip, çoğunlukla C ++), en az üç amaç için kullanılan inanılmaz derecede derin bir devlet tasarruf sistemi vardı:
- "Sığ" bir tasarruf diske değil, çok oyunculu oyunların kilit adımlı simülasyonda her 10-30 karede bir CRC kalmasını sağlamak için bir CRC motoruna beslendi; bu, hiç kimsenin aldatmadığından ve birkaç kareye sonra desync hatalarını yakaladığından emin oldu
- Çok oyunculu desync hatası oluştuğunda ve her karede ekstra derin bir tasarruf yapıldı ve tekrar CRC motoruna beslendi, ancak bu sefer CRC motoru her biri daha küçük bayt grupları için birçok CRC üretecekti. Bu şekilde, devletin tam olarak hangi kısmının son çerçevede ayrılmaya başladığını size söyleyebilir. Bunu kullanarak AMD ve Intel işlemciler arasında kötü bir "varsayılan kayan nokta modu" farkı yakaladık.
- Normal bir derinlik tasarrufu, örneğin ünitenizin oynattığı animasyonun tam karesini kaydetmeyebilir, ancak oyun sırasında istediğiniz zaman kaydetmenize ve devam ettirmenize izin vererek tüm birimlerinizin konumunu, sağlığını vb. Alır.
O zamandan beri DS için C ++ ve Lua kart oyunlarında deterministik kayıt / oynatma kullandım. AI için tasarladığımız API'yi (C ++ tarafında) bağladık ve tüm kullanıcı ve AI eylemlerini kaydettik. Oyunda bu işlevi kullandık (oyuncuya tekrar oynatmak için), aynı zamanda sorunları teşhis etmek için de kullandık: Bir çarpışma veya garip bir davranış olduğunda, tek yapmamız gereken kaydetme dosyasını almak ve hata ayıklama yapısında oynatmaktı.
Ayrıca, bindirmeleri birkaç kereden fazla kullandım ve onu "bu dizini otomatik olarak ören ve elde tutulan içeriği yeni el cihazına yükle" sistemimizle birleştirdik. Tek yapmamız gereken, kesim ekranını / seviyesini / ne olursa olsun ve geri gelmek ve sadece yeni veriler (sprite, seviye düzeni, vb.) Yüklenmeyecek, aynı zamanda kaplamadaki herhangi yeni bir kodu da yükleyeceğiz. Maalesef, kodun özel olarak ele alındığı kopya koruması ve bilgisayar korsanlığı önleme mekanizmaları nedeniyle bu, daha yeni el bilgisayarlarında daha da zorlaşıyor. Yine de Lua senaryoları için hala yapıyoruz.
Sonuncusu ama en önemsizi: (ve çok küçük çeşitli özel durumlarda), doğrudan talimat opcodesini ekleyerek bir parça ördek delme işlemi yapabilirsiniz. Bu en iyi sonuç sabit bir platformda ve derleyicide olmanız durumunda, en iyisidir ve neredeyse elde edilemez, çok hataya açık ve hızlı bir şekilde başarabileceğiniz şeylerle sınırlı olduğundan, çoğunlukla hata ayıklama sırasında kodu yeniden yönlendirmek için kullanırım. Yine de acele, set seti mimarlığınız hakkında size çok fazla şey öğretiyor.