2 puan yazan GN⁺ 2025-01-02 | 1 yorum | WhatsApp'ta paylaş
  • DOOM CAPTCHA, insan olduğunu kanıtlamak için DOOM®'u bizzat oynatmaya zorlayan bir CAPTCHA; eğitim ve eğlence niteliği taşıyan deneysel bir proje
  • Temel uygulama, minimal bir Doom portunu Emscripten ile WebAssembly'e derleyip C oyun döngüsü ile JavaScript arayüzünü birbirine bağlama yaklaşımına dayanıyor
  • CAPTCHA değerlendirmesi için gereken oyuncunun doğması, ölmesi ve düşman öldürmesi gibi oyun durumları JavaScript callback'leri üzerinden arayüze aktarılıyor
  • Varsayılan çalıştırma seçenekleri -skill 5, -fast, -warp e1m1, -nomenu olarak ayarlanmış; böylece menü olmadan doğrudan zorlu bir çatışmaya giriliyor
  • Yasal kullanım için shareware wad olan doom1.wad ile uyumlu olacak şekilde düzenlenmiş; ayrıca kaynak kodu ve v0 UI oluşturma bağlantısı görülebiliyor

Doom'u CAPTCHA olarak çalıştırmanın yapısı

  • DOOM CAPTCHA, kullanıcının DOOM® oynayarak insan olduğunu kanıtladığı bir CAPTCHA
  • Uygulama, minimal bir Doom portunu Emscripten kullanarak WebAssembly'e derleme yöntemiyle gerçekleştirilmiş
  • C tabanlı oyun döngüsü olan g_game.c ile JavaScript tabanlı CAPTCHA arayüzü, birbirleriyle durum alışverişi yapabilecek şekilde yapılandırılmış
  • Başlangıç noktası, SDL tabanlı minimal bir Doom portu; bu yapı WebAssembly'e verimli biçimde derlenebiliyor
  • Yasal kullanım için build, shareware sürüm wad olan doom1.wad ile uyumlu olacak şekilde ayarlanmış

CAPTCHA'ya uygun oyun değişiklikleri

  • Menü ve yeniden doğma işlemleri

    • Resmî olmayan çalıştırma bayrakları eklenerek oyun akışı CAPTCHA senaryosuna uygun biçimde sadeleştirilmiş
    • -nomenu: m_menu.c içinde ana menüyü atlayıp doğrudan oyuna giriyor
    • -autoreborn: p_mobj.c içinde oyuncu öldükten 2 saniye sonra otomatik yeniden doğma sağlıyor
  • Arayüze aktarılan oyun olayları

    • CAPTCHA arayüzü, oyun durumunu JavaScript callback'leri ile alıp değerlendirme akışında kullanıyor
    • onPlayerBorn: Oyuncu oluşturulduğunda veya yeniden doğduğunda çağrılıyor
    • onPlayerKilled: Oyuncu öldüğünde çağrılıyor
    • onEnemyKilled: Ana oyuncu bir düşmanı öldürdüğünde çağrılıyor
  • Varsayılan çalışma zorluğu

    • d_main.c içindeki varsayılan çalıştırma bayrakları değiştirilerek başlangıçtan itibaren daha zor bir durum yaratılmış
    • -skill 5: Zorluk seviyesini "Nightmare!" olarak ayarlıyor
    • -fast: Oyunu daha zor hale getiriyor
    • -warp e1m1: Oyunu aksiyonun bulunduğu bir noktadan başlatıyor
    • -nomenu: Oyuncunun ana menüyü açmasını engelliyor

Kaynak ve kullanım koşulları

  • v0 UI oluşturma sonucu ve kaynak kodu görülebilir
  • Bu proje, ticari olmayan kullanım için yayımlanan DOOM® shareware sürümünü temel alıyor ve DOOM® id Software LLC'nin tescilli markasıdır

1 yorum

 
GN⁺ 2025-01-02
Hacker News yorumları
  • Amaçlanan şekilde denemeye çalıştım ama çok zordu; başlangıç noktasında kalıp sadece sağdan çıkan düşmanları vurarak hileli şekilde geçmek mümkündü

    • O başlangıç koşullarında bu hile değil, standart taktiktir. Sadece tabancanız varsa ya da diğer silahların cephanesi azsa kullanılan yöntem budur.
      Bu oyunlarda tabanca isabet oranı saçma derecede iyidir; uzaktan birkaç el ateş ederek düşmanları öldürebilirsiniz. Buradaki düşmanlar pompalı tüfek kullanıyor ama uzun menzilde çok verimsizler. Oyun saçma derecede geniş bir saçma yayılımı simüle ettiği için, uzaktaki bir düşman tam nişan alsa bile verdiği hasar çok az olur.
      Eskiden üniversitenin NetWare LAN’ında oynarken de sadece mesafeyi koruyarak daha güçlü ama daha az isabetli silahları olan insanları yenerdim. Genelde pompalı tüfek ya da sonraki sürümlerdeki çift namlulu pompalı tüfek olurdu; herkes de en tatmin edici silahın o olduğunu düşünürdü.
      Biri arkadan yaklaşıp dibinize girmediği sürece iyi işler; öldükten sonra iyi bir yerde yeniden doğarsanız o kişiyi kısa sürede bulup tabancayla intikam alabilirsiniz. Roketatar karşısında da doğrudan isabet almadığınız ya da ıskalanan patlama hasarının planı kolayca bozacağı bir yerde bulunmadığınız sürece işe yarar.
      Eski tabirle, pek çok DOOM tarzı oyun ve ardıllarında geçerli bir yöntemdir. HL2’de de temel tabanca, ateş düğmesine bastığınız kadar sınırsız ateş eder ve diğer silahlardaki gibi minimum atış aralığı olmadığı için iyi çalışır.
    • Bu ilk bölüm değil ama o bölüme girerkenki silah koşulları doğru.
      Üstelik yalnızca klavye kullanılıyor; sol/sağ oklar karakteri döndürüyor. Modern birinci şahıs nişancı oyunlarında bunları sağa sola hareket için kullanmaya, dönmeyi ise fareyle yapmaya alışık olduğumuzdan refleksler karışıyor.
    • Her şey istemci tarafında çalışıyorsa hileye gerek bile yok. Sunucunun gerçekten gereken sayıda düşmanı öldürüp öldürmediğinizi doğrulamasının bir yolu yok.
    • Ben de aynısını yaptım. Geri okuna basıp geri çekilin, her saniye boşluk tuşuna basın, bitti. Yaklaşık 30 saniye sonra captcha çözülüyor.
    • Bu bölümü tabanca başlangıcı olarak koymak biraz acımasızca. En azından pompalı tüfek vermelilerdi.
  • Teknik beceri +100, kullanılabilirlik -100. Nostalji turuna +10; ayrıca artık oyun oynayamadığıma dair öz farkındalık da kazandım.

    • Bu, normalde E1M3’ten sonra karşılaşılan gizli bölüm E1M9. Normal ilerleyişte bu noktaya gelindiğinde pompalı tüfek, chaingun, roketatar ve muhtemelen zırh almış olurdunuz.
      Bu bölüme sadece tabancayla başlatmak, üstüne de görünüşe göre Ultra-Violence ya da Nightmare zorluğunda yapmak, “vurulup öl” demek gibi.
    • Fareyle bakış yönü değiştirme olmayınca çok daha zor. Geçmem 10’dan fazla deneme sürdü; Overwatch’ta Diamond seviyesindeyim.
    • Botlara karşı gerçekte ne kadar güvenli olduğundan da emin değilim. Bugünlerde en az insan kadar DOOM oynayan bir yapay zeka yapılabilir gibi geliyor.
    • Komik şekilde, klavyemde ok tuşları yok. Başka bir katmana bağladım ama bu düzenle pek uyumlu değil.
      Bu uygulama artık standart olan WASD’yi destekleseydi ve orijinaldeki gibi farenin sol tuşuyla ateş etmeye izin verseydi, insan olduğumu kanıtlamak epey kolay olurdu.
  • Zor bir bölüm ve yanlış hatırlamıyorsam gizli bölümlerden biri. -fast açıkmış gibi de hissettiriyor; sağa sola hareket edememek işi çok daha zorlaştırıyor. Yine de çok sevimli.

    • Doğru. E1M9, shareware sürümün gizli bölümü ve Nightmare zorluğunda.
      Eski usulde Alt’a basılı tutarsanız sağa sola hareket edebilirsiniz.
      Benim ortamımda ses garip şekilde yüksek perdeden geliyordu, neden bilmiyorum. Bu absürt deneyime yakıştığı için büyük sorun değil.
    • Linux’ta Firefox’ta sağa sola hareket çalışıyor. İşletim sistemi ya da tarayıcı ayarları engelliyor olabilir.
    • Gerçekten o kadar zor mu? Mobilde çalışmıyor diye hafifçe söylenmeye hazırlanmıştım ama ekran kontrolleri iyi çalıştı ve hemen üç tanesini öldürmekte pek sorun yaşamadım.
      Gerçi son zamanlarda epey klasik Doom oynadım.
    • Alt’a basılı tutarsanız kesinlikle sağa sola hareket edebiliyorsunuz. En azından bende oldu.
    • Evet, E1M9 tabanca başlangıcı olarak kötü şöhretli derecede zordur. Görür görmez tanıdım; çocukken Doom’a ne kadar zaman harcadığım ortaya çıkıyor.
  • Çok fazla canavar vardı, 3-4 kez denemem gerekti. Gerçek bir captcha gibi.

    • Bu yüzden bunu parodi olarak algıladım.
    • Gerçek CAPTCHA gibi, engelli insanlar için cehennem. 10 üzerinden 10.
  • Hangi canavar WASD bile vermez, en azından Ctrl ile ateş etmeyi de vermez? Yine de havalı captcha.

    • ijkl;
  • AWS konsoluna giriş yapmak için her captcha çözdüğümde, bundan kaçınması istenen tarafın bunu kolayca otomatikleştirebileceğini, çoğu kullanıcının ise bu “özellik” yüzünden acı çektiğini düşünüyorum.
    Bazı açık kaynak modeller, böyle “AI safety” kapı bekçiliği olmadan da bunları çözebiliyor.
    Apple bir captcha çözümü önermişti[1]; standartlaşıp yaygın kullanılmasını bekliyorum.
    [1] https://support.apple.com/en-us/102591

    • Yöntem şu: “Bir uygulamaya veya web sitesine giriş yaparken CAPTCHA istemek yerine Apple sunucusu cihazı ve Apple Account’u doğrular; bu doğrulama Apple’ın onayladığı üçüncü taraf bir token verme sunucusuna iletilir; o sunucu da uygulama ya da web sitesinde kullanıcıyı doğrulayan özel erişim token’ı oluşturur.”
      Bu kesinlikle gizlilik açısından daha iyi değil ve Apple’a daha fazla kontrol veriyor. Captcha’ya 3 saniye daha harcamayı tercih ederim.
    • “CAPTCHA tamamlamanız gerekmez. Sadece uygulamaya veya siteye giriş yapmanız yeterlidir” mi, hayır teşekkürler. İstemiyorum.
      O cümleyi okuyunca Apple destek belgesini okumayı bıraktım.
  • Küçük bir bilgi: Doom’un yapımcıları, her bölümün yalnızca tabanca ve 50 mermi ile başlansa bile bitirilebildiğini bizzat oynayarak doğrulamıştı.

  • GitHub deposunda asıl Doom Captcha yapımcısına kredi verilmesi doğru olmuş. Bugünlerde yazılım sektörü geneline dair beklentilerim tarihî dip seviyede olduğu için bunu görmek güzeldi.
    Birkaç yıl önceki orijinal burada:
    https://vivirenremoto.github.io/doomcaptcha
    https://github.com/vivirenremoto/doomcaptcha

  • Bu zor. Sanırım insan değilim.
    Doom oynamayalı çok uzun zaman oldu ve sağa sola hareket olmadan neredeyse imkânsız.

    • Başka yerlerde de söylendiği gibi Alt + sol/sağ ile sağa sola hareket edilebiliyor.
    • İleri gidip canavarları üzerinize çekin, sonra hemen başlangıç noktasına dönüp siper alın ve uzaktan tek tek vurun. Kolay.
  • Bu, Vercel’in yapay zeka asistanı v0 ile yapılmış.
    Sohbet bağlantısı burada: https://v0.dev/chat/4X85A52Dzde?b=b_tOXbbZzZPgT&f=0

    • Burada “with” oldukça fazla anlam yüklenmiş. Günlüğe göz gezdirince yapay zeka asistanının yaptığı şeyin yalnızca UI tasarımı olduğu, gerçek oyunu uygulamadığı görünüyor.
      Etkileyici gelebilir ama birkaç saniye “loading” gösteren bir düğme gibi ufak etkileşimler eklemek dışında, işlevsel olarak winforms tarzı bir sürükle-bırak UI tasarımcısından pek farklı değil. Onun öncülü Visual Basic de 90’larda zaten vardı.
    • JS kısmı görünmüyor. Asistanı sadece yerleşimi yapmak için kullanmışlar, gerçek DOOM entegrasyonu kısmında kullanmamışlar gibi.
      Yine de o sohbet bir süre sonra okunması zor bir hâl alıyor. Özetle akış “düğmenin içindeki metni ortala”, “ortada değil, ortaya al”, “lütfen metni ortala” gibi.
    • Sohbeti okudum; tamamı yerleşimle ilgili ince ayarlardan ibaret ve DOOM’un gerçekten gömüldüğü bir nokta görünmüyor. Kolay kısmı yapay zekaya yaptırıp zor kısmı kendisi mi kodladı, anlamadım.
    • Başkalarının da belirttiği gibi, o yalnızca UI ayarıydı.
      Kaynağın geri kalanının bulunduğu depo burada: https://github.com/rauchg/doom-captcha
      Menüyü atlamak ve gerekli callback’leri eklemek gibi bazı ayarlamalar için Doom’u da değiştirmek gerekmiş.