2 पॉइंट द्वारा GN⁺ 2023-06-26 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • Hypersomnia एक community-driven मल्टीप्लेयर शूटर है, जो दोस्तों के बीच duel और दो clans के बीच battles को support करता है, और 2017 से online play के लिए उपलब्ध गेम है
  • यह Modern C++ में लिखा गया है, बिना किसी game engine के बनाया गया है, और एक free open source game के रूप में उपलब्ध है
  • गेम की बनावट Counter-Strike की tactics, Hotline Miami की dynamism, और old-school RPG की pixel art nostalgia का मिश्रण है; इसमें फिलहाल 24 unique guns, 10 community maps, और Bomb defusalGun game दो modes उपलब्ध हैं
  • वितरण के रास्ते browser play, Steam, Windows, Linux AppImage, और macOS dmg हैं; गेम शुरू होने पर interactive Tutorial चलता है
  • सर्वर चलाना Server Docker या Headless AppImage से संभव है, और सभी archives digitally signed हैं तथा signature verification का रास्ता दिया गया है
  • बिल्ट-इन map editor 100% WYSIWYG तरीके से सीधे game world में काम करता है, ImGui से बना है, और JSON map format का उपयोग करता है
    • अगर map directory में PNG, WAV, OGG folders पेस्ट किए जाएँ, तो गेम उन्हें अपने-आप पहचान लेता है
    • किसी GIF को scene में drag-and-drop करने पर वह गेम के अंदर तुरंत animation की तरह काम करने लगता है
    • जिस map पर काम चल रहा हो, उसे एक क्लिक में playtest किया जा सकता है, और connected clients मौजूदा version का map और custom resources अपने-आप download कर लेते हैं
    • server, game, और editor हर OS पर एक ही executable के अंदर हैं, इसलिए editor से session शुरू करके ESC से रोकने के बाद फिर मूल स्थिति में लौटना संभव है
  • networking cross-platform simulation determinism पर आधारित है, और browser client, Windows, Linux, macOS native clients, यहाँ तक कि native ARM builds पर भी 100% deterministic तरीके से काम करती है
    • नेटवर्क पर लगातार सभी object states भेजने के बजाय केवल player inputs भेजे जाते हैं, और बाकी सब हर client लोकल में simulate करता है
    • floating-point calculation determinism के लिए हर OS पर clang का उपयोग किया जाता है, Windows builds में /fp:strict, ARM builds में -ffp-model=strict लगाया जाता है, और std::sin, std::sqrt जैसे math functions को STREFLOP family implementations से बदला गया है
    • दो player-controlled characters वाले उदाहरण में, 60Hz tickrate पर traffic लगभग 40 kbit/s (= 5 KB/s) है, और network traffic में केवल player-controlled characters ही योगदान देते हैं
  • browser client और native clients libdatachannel और datachannel-wasm की बदौलत एक ही server पर साथ खेल सकते हैं
    • browser में server host करके native client से connect किया जा सकता है, और native client में server खोलकर browser access link भी भेजा जा सकता है
    • browser version Discord login, ranked matches, और global Leaderboards को support करता है; Discord account और Steam account को link करने पर Steam version और web version एक ही rating साझा करते हैं
  • texture packing के लिए लिखा गया rectpack2D, Assassin's Creed: Valhalla, एक drone manufacturer, और 2 scientific papers में इस्तेमाल हुआ है
  • memory pool implementation contiguous storage, O(1) allocation, O(1) deallocation, O(1) dereference, auto-expansion, और deterministic behavior देती है; initial world state transfer के समय game object pool की internal state भी शामिल की जाती है, ताकि clients वही object identifiers और memory order को deterministic रूप से simulate कर सकें
  • बिल्ट-इन self-updater updates को अपने-आप download और apply करता है, ssh-keygen call के जरिए यह verify करता है कि update hardcoded developer public key से आया है, और अगर build hosting hack होकर malicious version अपलोड हो जाए तो मौजूदा clients उस update को लागू करने से मना कर देते हैं

1 टिप्पणियां

 
GN⁺ 2023-06-26
Hacker News की राय
  • मुझे यह नहीं पता था कि floating point में 100% deterministic behavior पाने के लिए, वही math functions इस्तेमाल करने पर भी वही compiler चाहिए
    मैं सोच रहा था कि क्या floating point arithmetic पूरी तरह specified नहीं है, लेकिन पहले search कर लेना चाहिए था: https://stackoverflow.com/questions/49471943/floating-point-...
    • मेरी समझ से standard math functions तक को specify नहीं करता
      यह सिर्फ एक sqrt instruction से खत्म नहीं होता, बल्कि Taylor approximation से शुरू करके Newton method को कुछ बार चलाकर जवाब refine किया जाता है, इसलिए Taylor series की degree, center point, और iteration count जैसी choices आती हैं
      IEEE 754 multiplication को define कर सकता है, लेकिन sqrt, sin, cos, tan के लिए calculation method तय करनी पड़ती है, और आमतौर पर उसका implementation compiler द्वारा दी गई standard library में होता है
      ऊपर से, floating point में associativity नहीं होती, यानी (a+b)+c != a+(b+c), इसलिए basic operations का order बदलने भर से भी result अलग हो सकता है
    • अलग architecture पर भी determinism guaranteed है या नहीं, यह पक्का नहीं है
      rounding behavior architecture के हिसाब से बदल सकता है, और अगर arm/amd/intel को मिलाया जाए तो nondeterministic behavior आने की संभावना है: https://en.wikipedia.org/wiki/IEEE_754#Reproducibility
      लगता है यह game इस समस्या से बचने के लिए software floating point implementation इस्तेमाल करता है, और अगर unified compiler भी जोड़ दिया जाए तो ज़्यादातर समस्याओं से बचा जा सकता है
    • Sun ज़माने के docs में इस पर काफ़ी लंबा लेख है, लेकिन अब वह Oracle के पास है, इसलिए शायद conclusion पहले पढ़कर फिर उल्टे क्रम में देखना आसान होगा
      https://docs.oracle.com/cd/E77782_01/html/E77791/z4002282485...
    • floating point determinism सिद्धांत में deterministic लगती है, लेकिन व्यवहार में यह लगभग wild west जैसा है
      C सहित कई भाषाओं में आम operators किसी खास floating point operation से explicitly map नहीं होते, इसलिए compiler के पास काफ़ी discretion होता है
      और rounding mode जैसी अदृश्य global state भी कुछ हद तक इस्तेमाल होती है; याद पड़ता है कि DirectX पीछे से flags बदल दिया करता था
    • वही compiler होने पर भी अगर -march अलग हो, तो results काफ़ी बदल सकते हैं
  • “networking is based on cross-platform simulation determinism” वाला हिस्सा Springrts[0] 2000 के दशक के आख़िरी वर्षों में इसी वजह से पहले ही कर रहा था, और शायद कई RTS games भी ऐसा करते रहे होंगे
    बस वह open source नहीं था; इसका मतलब यह नहीं कि यह कोई achievement नहीं है। असल में यह बहुत कठिन काम है
    [0] https://springrts.com/
    • जिस title को quote किया गया है, उसके नीचे details में वह हिस्सा आता है
      यहाँ फर्क यह है कि RTS games deterministic floating point physics इस्तेमाल नहीं करते, इसलिए Hypersomnia को नए समाधान की ज़रूरत है
    • Spring को Balanced Annihilation के साथ बहुत लंबे समय तक खेला गया
      उसने TA और SupCom के छोड़े खालीपन को भरा, और SupCom 2 अपने आप में काफ़ी अच्छा casual और छोटा RTS था, लेकिन उतना नहीं
      और PA की बात न ही करें तो बेहतर
      BAR भी काफ़ी promising लगता है: https://www.beyondallreason.info
  • दिलचस्प लग रहा है, लेकिन title सच में पढ़ने में मुश्किल था
    • मुझे भी ऐसा ही लगा, और अभी भी यह थोड़ा misleading लगता है
      game खुद AC:Valhalla में नहीं गया था, बल्कि development के दौरान बनाई गई texture packing library गई थी[1]। बेशक, इससे उस उपलब्धि को कम नहीं आँक रहा; वह अपने आप में एक अलग लेख का विषय है
      और यह कहना भी थोड़ा बढ़ा-चढ़ाकर लगता है कि यह Unity में इस्तेमाल हुए ECS system का source था। मैंने 2010 से पहले भी ECS इस्तेमाल करने वाले game engines उपयोग किए हैं, और game engine की दुनिया में यह Operation Flashpoint[2] से निकला हुआ लगता है
      [1] https://github.com/TeamHypersomnia/rectpack2D
      [2] https://t-machine.org/index.php/2007/09/03/entity-systems-ar...
  • ऐसे लेख और projects सच में बहुत अच्छे लगते हैं, और यह open source में उपलब्ध हैं, इसके लिए आभार
    कभी समय मिला, शायद retirement के बाद, तो मैं भी ऐसा कुछ करना चाहूँगा, और ऐसे projects उस दुनिया को सीखने के लिए अच्छे learning material बन सकते हैं
  • शानदार लग रहा है
    इससे 90s के आख़िरी दौर का ARC, यानी Attack Retrieve Capture, याद आता है, जो अब मुश्किल से Armor Critical के रूप में ज़िंदा है
    https://en.wikipedia.org/wiki/Attack_Retrieve_Capture
    http://armorcritical.com
  • यह एक अद्भुत उपलब्धि है और game भी शानदार दिखता है
    project को बनाए रखने के लिए commercial तौर पर और क्या-क्या काम किए गए हैं, क्या Steam release की कोई योजना है, और persistent world gameplay को कैसे प्रभावित करती है—यह जानने की जिज्ञासा है
    यह भी जानना है कि जब नया player जुड़ता है तो physics state को reconstruct करने की जो चतुर तकनीक है, वह मौजूदा players को कैसी दिखती है। उदाहरण के लिए, क्या bullets की position हिलती हुई दिखती है
    • हाल में मैंने PUBG के इस mini-game में gameplay programming की है: https://www.youtube.com/watch?v=tSP5P0QGWa4
      मैंने अपनी savings भी अच्छी तरह invest की थीं, इसलिए Hypersomnia पर पूरी तरह focus कर सका
      मैं इसे 2024 से पहले Steam पर लाना चाहता हूँ

अभी कोई persistent world बिल्कुल नहीं है; यह बस एक तरह का teaser था कि अगर गेम सफल हुआ तो आगे किस दिशा में जा सकता है
physics reconstruction में positions बिल्कुल नहीं बदलनी चाहिए। दोबारा बनाया जाने वाला हिस्सा सिर्फ contact या tree जैसी “hot state” है, और यह state सिर्फ उस क्षण मायने रखती है जब simulation को एक state से अगली state तक चलाया जाता है, इसलिए बाद की rendering पर इसका असर नहीं पड़ता
मौजूदा खिलाड़ियों पर इसका एकमात्र असर यही हो सकता है कि अगर reconstruct की जाने वाली physics world बहुत बड़ी हो तो एक बार frame drop हो जाए, लेकिन वास्तव में अभी सभी maps छोटे हैं और 3v3 मैचों के लिए सबसे उपयुक्त हैं

  • client connect होने पर physics state को reconstruct करना sync समस्या का बहुत बढ़िया समाधान है
  • पहली बात, यह सच में अविश्वसनीय रूप से शानदार दिखता है, और ऐसी चीज़ें देखकर फिर से एहसास होता है कि मुझे computer science के बारे में कितना कम पता है
    दूसरी बात, मुझे MacOS पर एक बड़ा bug मिला। pause screen/settings में mouse input बहुत ज़्यादा misaligned है, इसलिए main menu के options तक click नहीं हो पा रहे
    मैंने screen capture, logs, और system report इकट्ठा कर लिए हैं: https://youtu.be/O4OoMdeFAt0
    • MacOS समस्या के लिए माफ़ी
      मैं लगभग हमेशा Windows और Linux पर खेलता हूँ, इसलिए MacOS पर लंबे समय तक चलाकर नहीं देखा, लेकिन देखूँगा कि इसे ठीक किया जा सकता है या नहीं
  • अरे, अब जाकर एहसास हुआ कि मैं कई सालों से अनजाने में आपकी कुछ posts पढ़ता आ रहा था
    खासकर ECS और networking से जुड़ी posts
    यह देखकर अच्छा लगा कि आपने इतनी प्रगति की है
    • मैंने 2013 में Stack Exchange पर ECS के बारे में लिखा था, लेकिन networking पर यह शायद पहली बार है जब मैंने कुछ ढंग का प्रकाशित किया है
      README में deterministic architecture समझाते समय मैंने Glenn Fiedler की एक महत्वपूर्ण blog post लिंक की थी, लेकिन मैं वह व्यक्ति नहीं हूँ, इसलिए अगर कोई गलतफ़हमी हुई हो तो मेरा वह इरादा नहीं था
  • gameplay से 2000 के शुरुआती दौर का पुराना top-down multiplayer shooter Infantry Online याद आता है
    https://www.freeinfantry.com/
    https://en.m.wikipedia.org/wiki/Infantry_(video_game)