2 पॉइंट द्वारा GN⁺ 2025-01-02 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • DOOM CAPTCHA एक CAPTCHA है जो इंसान होने का प्रमाण देने के लिए आपको DOOM® खुद खेलने को कहता है; यह शैक्षिक और एंटरटेनमेंट प्रकृति का एक experimental project है
  • इसका core implementation Emscripten के जरिए एक minimal Doom port को WebAssembly में compile करता है, और C game loop को JavaScript UI से जोड़ता है
  • CAPTCHA verification के लिए जरूरी game states, जैसे player spawn/death और enemy kills, JavaScript callbacks के जरिए UI तक भेजे जाते हैं
  • default run options -skill 5, -fast, -warp e1m1, -nomenu सेट हैं, जिससे menu के बिना सीधे कठिन combat शुरू हो जाता है
  • legal use के लिए इसे shareware wad यानी doom1.wad के साथ compatible बनाया गया है, और source code व v0 UI generation link देखे जा सकते हैं

Doom को CAPTCHA के रूप में चलाने की संरचना

  • DOOM CAPTCHA ऐसा CAPTCHA है जिसमें user DOOM® खेलकर अपने human होने का प्रमाण देता है
  • implementation में Emscripten का उपयोग करके minimal Doom port को WebAssembly में compile किया गया है
  • C-based game loop g_game.c और JavaScript-based CAPTCHA UI को इस तरह बनाया गया है कि वे आपस में state भेज और प्राप्त कर सकें
  • starting point SDL-based minimal Doom port है, जिसे WebAssembly में efficiently compile किया जा सकता है
  • legal use के लिए build को shareware version wad यानी doom1.wad के साथ compatible बनाया गया है

CAPTCHA के लिए किए गए game changes

  • Menu और respawn handling

    • CAPTCHA flow के हिसाब से gameplay को simplify करने के लिए unofficial run flags जोड़े गए
    • -nomenu: m_menu.c में main menu skip करके सीधे game में enter करता है
    • -autoreborn: p_mobj.c में player की death के 2 seconds बाद automatically respawn कराता है
  • UI को भेजे जाने वाले game events

    • CAPTCHA UI JavaScript callbacks के जरिए game state लेकर verification flow में उपयोग करता है
    • onPlayerBorn: player के spawn या respawn होने पर call होता है
    • onPlayerKilled: player की death पर call होता है
    • onEnemyKilled: main player द्वारा enemy kill करने पर call होता है
  • Default run difficulty

    • d_main.c के default run flags बदलकर शुरुआत से ही स्थिति को और कठिन बनाया गया है
    • -skill 5: difficulty को "Nightmare!" पर set करता है
    • -fast: game को और कठिन बनाता है
    • -warp e1m1: game को action वाले point से शुरू करता है
    • -nomenu: player को main menu खोलने से रोकता है

Source और use conditions

  • v0 UI generation result और source code देखे जा सकते हैं
  • यह project non-commercial use के लिए जारी DOOM® shareware version पर आधारित है, और DOOM® id Software LLC का registered trademark है

1 टिप्पणियां

 
GN⁺ 2025-01-02
Hacker News की राय
  • मैंने इसे इरादे के मुताबिक खेलने की कोशिश की, लेकिन यह बहुत कठिन था, और शुरुआती जगह पर टिके रहकर दाईं ओर से आने वाले दुश्मनों को मारते हुए जुगाड़ से क्लियर करना संभव था

    • उन शुरुआती शर्तों में वह जुगाड़ नहीं, बल्कि मानक रणनीति है। जब आपके पास सिर्फ पिस्तौल हो या दूसरे हथियारों का ammo कम हो, तब यही तरीका इस्तेमाल होता है।
      इन गेम्स में पिस्तौल की accuracy बेहिसाब अच्छी होती है, इसलिए दूर से कुछ गोलियाँ चलाकर दुश्मनों को मारा जा सकता है, और यहाँ दुश्मन shotgun चलाते हैं, जो लंबी दूरी पर बहुत अप्रभावी है। गेम shotgun spread को अवास्तविक रूप से बहुत चौड़ा simulate करता है, इसलिए दूर का दुश्मन सही निशाना लगाए तब भी damage बहुत कम होता है।
      पहले जब मैं कॉलेज के NetWare LAN पर खेलता था, तब भी सिर्फ दूरी बनाए रखकर मैं उन लोगों को हरा देता था जिनके पास ज़्यादा ताकतवर लेकिन कम सटीक हथियार होते थे। आमतौर पर shotgun या बाद के versions की double-barrel shotgun होती थी, और सबको वही सबसे मज़ेदार लगती थी।
      जब तक कोई पीछे से पास न आ जाए, यह अच्छी तरह काम करता है, और मरने के बाद अगर ठीक-ठाक जगह respawn हो जाएँ तो उस आदमी को जल्दी ढूँढ़कर पिस्तौल से बदला भी लिया जा सकता है। rocket launcher के खिलाफ भी यह काम करता है, बस सीधी hit न लगे या आप ऐसी जगह न खड़े हों जहाँ चूके हुए विस्फोट का damage आपकी योजना बिगाड़ दे।
      पुराने अंदाज़ में कहें तो यह बहुत से DOOM-जैसे गेम्स और उनके उत्तराधिकारियों में कारगर तरीका है। HL2 में भी default pistol trigger दबाए रखने पर बिना किसी सीमा के चलती है, और दूसरे हथियारों की तरह minimum fire interval नहीं है, इसलिए वह भी बढ़िया काम करती है
    • यह पहला level नहीं है, लेकिन उस level में प्रवेश करते समय हथियारों की शर्तें वैसी ही हैं।
      ऊपर से यह सिर्फ keyboard-only है, इसलिए left/right arrow character को घुमाते हैं; modern first-person shooters में हम left/right movement और mouse से turning के आदी हैं, इसलिए reflex बिगड़ जाते हैं
    • अगर सब कुछ client-side पर चल रहा है, तो जुगाड़ की भी ज़रूरत नहीं है। server के पास यह verify करने का कोई तरीका नहीं है कि सच में ज़रूरी संख्या में दुश्मन मारे गए या नहीं
    • मैंने भी बिल्कुल यही किया। back arrow दबाकर पीछे हटो, और हर 1 सेकंड में spacebar दबाते रहो, बस। करीब 30 सेकंड बाद captcha पार हो जाता है
    • इस level को pistol start पर रखना थोड़ा क्रूर है। कम से कम shotgun तो देनी चाहिए
  • तकनीकी क्षमता +100, usability -100। nostalgia trip के लिए +10, और अब यह आत्मबोध भी मिल गया कि मैं अब गेम्स में अच्छा नहीं रहा

    • यह वही secret level E1M9 है, जो आमतौर पर E1M3 के बाद मिलता है। सामान्य progression में इस बिंदु तक आपके पास shotgun, chaingun, rocket launcher, और शायद armor भी होता।
      इस level को सिर्फ पिस्तौल के साथ शुरू करवाना, और ऊपर से दिखने में Ultra-Violence या Nightmare difficulty पर रखना, मतलब सीधे मरने की दुआ करना है
    • mouse look न हो तो यह बहुत ज़्यादा कठिन हो जाता है। इसे पार करने में मुझे 10 से ज़्यादा कोशिशें लगीं, और Overwatch में मैं Diamond हूँ
    • पता नहीं bots के खिलाफ यह वास्तव में कितना सुरक्षित है। आजकल तो शायद इंसान जितना DOOM खेलने वाला AI बनाया जा सकता है
    • मज़ेदार बात यह है कि मेरे keyboard में arrow keys ही नहीं हैं। वे किसी दूसरी layer पर bind हैं, लेकिन इस setup के लिए वह ठीक नहीं बैठता।
      अगर इस implementation में अब standard बन चुका WASD support होता, और original की तरह left mouse button से fire किया जा सकता, तो मेरे लिए यह साबित करना काफी आसान होता कि मैं इंसान हूँ
  • यह कठिन level है, और अगर मुझे सही याद है तो यह hidden levels में से एक है। ऐसा भी लगता है जैसे -fast चालू हो, और strafing न कर पाने से यह और भी मुश्किल हो जाता है। फिर भी बहुत प्यारा है

    • सही। यह E1M9 है, shareware version का secret level, और Nightmare difficulty पर है।
      पुराने तरीके से Alt दबाए रखने पर strafe किया जा सकता है।
      मेरे environment में sound अजीब तरह से बहुत ऊँची pitch में आ रहा था, पता नहीं क्यों। इस बेतुके अनुभव के साथ वह बहुत बड़ा मसला भी नहीं लगा
    • Linux के Firefox में strafing काम करती है। हो सकता है OS या browser settings इसे रोक रही हों
    • क्या यह वाकई इतना कठिन है? मैं मोबाइल पर न चलने की हल्की शिकायत करने के लिए तैयार था, लेकिन touchscreen controls ठीक चले और तीन दुश्मनों को मारने में मुझे तुरंत कोई खास दिक्कत नहीं हुई।
      हाँ, हाल में मैंने classic Doom काफी खेला है
    • Alt दबाए रखने पर सच में strafe किया जा सकता है। कम से कम मेरे यहाँ तो हुआ
    • हाँ, E1M9 pistol start के लिए बदनाम तौर पर कठिन है। देखते ही पहचान लिया; इससे पता चलता है कि बचपन में Doom पर मैंने कितना समय लगाया था
  • monsters बहुत ज़्यादा हैं, इसलिए मुझे 3~4 बार कोशिश करनी पड़ी। सचमुच captcha जैसा लगा

    • इसलिए मैंने इसे parody की तरह लिया
    • असली CAPTCHA की तरह ही यह disabilities वाले लोगों के लिए नर्क है। 10 में 10
  • कौन-सा राक्षस WASD भी नहीं देता, और कम से कम Ctrl fire भी नहीं देता? फिर भी बढ़िया captcha है

    • ijkl;
  • जब भी AWS console में लॉग इन करने के लिए captcha हल करना पड़ता है, मुझे यही लगता है कि जिन लोगों को यह रोकना चाहता है वे तो इसे आसानी से automate कर सकते हैं, जबकि ज़्यादातर users इस “feature” की वजह से परेशान होते हैं।
    कुछ open source models तो ऐसी “AI safety” gatekeeping के बिना भी इसे हल कर सकते हैं।
    Apple ने captcha का एक समाधान प्रस्तावित किया है[1], और मैं इंतज़ार कर रहा हूँ कि यह standardize होकर व्यापक रूप से इस्तेमाल हो।
    [1] https://support.apple.com/en-us/102591

    • इसका तरीका यह है: “ऐप या वेबसाइट में लॉग इन करते समय CAPTCHA माँगने के बजाय Apple server device और Apple Account को verify करता है, और यह verification Apple द्वारा सत्यापित third-party token issuer server को भेजी जाती है, जो फिर ऐप या वेबसाइट के लिए user को validate करने वाला Private Access Token बनाता है।”
      यह साफ़ तौर पर privacy के लिए बेहतर नहीं है, और Apple को और ज़्यादा control देता है। मैं तो captcha पर 3 सेकंड और लगा लूँगा
    • “आपको CAPTCHA पूरा करने की ज़रूरत नहीं है। बस ऐप या साइट में sign in करें” — नहीं चाहिए।
      यह पंक्ति पढ़ते ही मैंने Apple support document पढ़ना बंद कर दिया
  • एक trivia: Doom के निर्माताओं ने खुद खेलकर यह सुनिश्चित किया था कि हर level को पिस्तौल और 50 गोलियों के साथ शुरू करके भी पूरा किया जा सके

  • GitHub repository में मूल Doom Captcha creator को credit देना सही काम था। आजकल पूरे software industry से उम्मीदें ऐतिहासिक न्यूनतम पर हैं, इसलिए यह देखकर अच्छा लगा।
    कुछ साल पहले का original यहाँ है
    https://vivirenremoto.github.io/doomcaptcha
    https://github.com/vivirenremoto/doomcaptcha

  • यह मुश्किल है। शायद मैं इंसान नहीं हूँ।
    Doom खेले बहुत समय हो गया, और strafe न हो तो यह लगभग असंभव है

    • और जगहों पर भी बताया गया है, Alt + left/right दबाने पर strafing होती है
    • आगे बढ़ो, monsters को lure करो, फिर तुरंत शुरुआती जगह पर लौटकर cover लो, और दूर से एक-एक करके मारो। आसान
  • यह Vercel के AI assistant v0 से बनाया गया था।
    chat link यहाँ है: https://v0.dev/chat/4X85A52Dzde?b=b_tOXbbZzZPgT&f=0

    • यहाँ “with” शब्द काफी ज़्यादा भार उठा रहा है। logs देखने पर लगता है कि AI assistant ने सिर्फ UI design किया था, असली गेम implement नहीं किया।
      यह प्रभावशाली लग सकता है, लेकिन कुछ सेकंड के लिए “loading” दिखाने वाले button जैसे मामूली interactions जोड़ने से आगे, functional रूप में यह winforms जैसे drag-and-drop UI designer से बहुत अलग नहीं है। उसका पूर्वज Visual Basic तो 90s में ही मौजूद था
    • JS वाला हिस्सा दिख ही नहीं रहा। लगता है assistant सिर्फ layout बनाने के लिए इस्तेमाल हुआ, असली DOOM integration के लिए नहीं।
      फिर भी वह chat थोड़ी देर बाद पढ़ने में कष्टदायक हो जाती है। सार यही है: “button के अंदर text को center करो”, “यह center नहीं है, center करो”, “प्लीज़ text को center करो”
    • मैंने chat पढ़ी; सब कुछ layout के छोटे-मोटे बदलावों के बारे में है, और कहीं भी DOOM insert होने की जगह नहीं दिखती। समझ नहीं आता आसान हिस्सा AI से करवाया और कठिन हिस्सा खुद code किया, या क्या किया
    • जैसा दूसरे लोगों ने भी कहा, उसमें सिर्फ UI setup किया गया था।
      बाकी source वाला repository यहाँ है: https://github.com/rauchg/doom-captcha
      menu skip करने और ज़रूरी callbacks जोड़ने जैसी कुछ adjustments के लिए Doom को भी modify करना पड़ा था