Quake II Rerelease Game Source - Quake II 2023 री-रिलीज़ के लिए गेम कोड
(github.com/id-Software)- इसमें Quake II 2023 री-रिलीज़ संस्करण का गेम कोड और संदर्भ के लिए मूल गेम कोड शामिल है, जो उपयोगकर्ताओं को गेम को mod करने के लिए source code उपलब्ध कराता है
- mods को मूल गेम की तरह ही री-रिलीज़ संस्करण में लोड किया जा सकता है; लॉन्च के समय
+set game mymodका उपयोग करें या चलते समय console मेंgame mymodदर्ज करें - मूल गेम फ़ाइलों में बदलाव से बचने के लिए mods को
%USERPROFILE%\Saved Games\Nightdive Studios\Quake IIडायरेक्टरी में इंस्टॉल करने की सिफारिश की जाती है - री-रिलीज़ संस्करण server और game module के बीच संचार के लिए नया API उपयोग करता है, और पहले hardcoded client behavior को बदलने के लिए Quake III Arena के
cgamemodule जैसा एक हल्का client game module पेश करता है - codebase मूल गेम के
baseq2,ctf,rogue,xatrixgame modules को जोड़कर बनाया गया है, और इसके लिए C++17 compiler आवश्यक है - compilation केवल Clang, VS2019, VS2022 पर test किया गया है, और यह C++17 तथा C++20 दोनों में compile हो सकता है; C++20 उपयोग करने पर
fmtlibdependency छोड़ी जा सकती है - dependencies हैं fmtlib और jsoncpp, और इन्हें
vcpkg install jsoncpp:x64-windows fmt:x64-windowsसे install किया जा सकता है - री-रिलीज़ संस्करण की DLL में मूल expansion pack maps सही तरह से load न हों, क्योंकि कुछ मामलों में टकराने वाले
spawnflagsकी समस्या हल करने के लिए maps को संशोधित किया गया है - मौजूदा mods को game export interface में हुए बदलावों के अनुरूप port किया जा सकता है, लेकिन सभी expansion packs को एक codebase में support करने और नई सुविधाओं को दर्शाने के लिए structure और layout में बड़े बदलाव हुए हैं, इसलिए नया codebase उपयोग करते समय दोबारा लिखना पड़ सकता है
- game DLL के अंदरूनी logic को मूल engine के 10hz की जगह 40hz tickrate के लिए समायोजित किया गया है; 25ms step granularity और bandwidth तथा CPU संबंधी विचारों के बीच संतुलन के कारण 40hz चुना गया
- save system अब pointer offsets और memory copies के बजाय level और game data को UTF-8 JSON में लिखता है, और save system अब filesystem के साथ सीधे interface नहीं करता
- Quake II री-रिलीज़ संस्करण server protocol version 2023 का उपयोग करता है; अधिकांश messages backward compatible हैं, लेकिन नई सुविधाओं, बदली हुई सुविधाओं और बढ़ी हुई limits के लिए कुछ समायोजन किए गए हैं
- id Software इस release के लिए support प्रदान नहीं कर सकता, और community-driven resources का उपयोग करने की सिफारिश की जाती है
1 टिप्पणियां
Hacker News की टिप्पणियाँ
Quake II मेरा पहला अनुभव था जिसमें मैंने C लिखकर देखा था
कोड साफ़, consistent और सीधा था; यह नहीं कहूँगा कि वह अब तक पढ़ा मेरा सबसे अच्छा source था, लेकिन उसने benchmark ऊँचा कर दिया। बाद में मैंने कई game sources में अजीब कोड देखा—screen के दाएँ किनारे से भी आगे निकलती nesting, ढेरों काम करने वाले विशाल functions—और यह शुरुआती सीख मिली कि simple code से भी शानदार चीज़ें बनाई जा सकती हैं
1990s के आखिर से 2000s की शुरुआत तक मैंने Quake और Quake II के ज़रिए बच्चों को VR classes कराईं। VR headsets और Q.E.D. या Qoole installed कुछ PCs रखे, और 12–14 या 14–18 साल के students से अपना खुद का virtual reality game बनवाया
असल में वे Quake/Quake II के ऐसे levels बनाते थे जिनमें monsters या guns नहीं होते थे, और level के अंदर triggers से screen messages दिखाकर कहानी सुनाई जाती थी। एक team ने slime पार करने और button से pump चालू करके slime निकालने वाला level बनाया; दूसरी team ने space में तैरती हुई पानी की 3D maze बनाई, जिसमें तैरकर निकलना था। कुछ student-made levels अभी भी मेरे hard disk पर हैं, लेकिन कुछ ठीक से चलते नहीं हैं
class के लिए मैंने एक mod बनाया था जिसमें blaster की जगह flare gun दी जाती थी। मूल रूप से वह blaster ही था, लेकिन sound effects अलग थे, weapon model नहीं था, और projectile gravity से प्रभावित होकर bounce करता था और कुछ समय बाद बुझ जाता था। अगर आप उस class में होते, तो शायद headset आज़माने को न मिला होता, क्योंकि वह हमेशा ठीक से काम नहीं करता था
functions के अंदर comments अपेक्षाकृत कम हैं, और 3D graphics की गहरी समझ न हो तो अक्सर cipher जैसी expressions चौंका देती हैं। Carmack जैसे industry leader का output है, इसलिए यह स्वाभाविक भी है, लेकिन confidence के साथ follow करने के लिए बहुत सारा prior knowledge और कुछ हद तक mathematical inclination चाहिए
पहले मैं लगातार macaroni code लिखता था; 25 lines का code बारह तरह के features का ढांचा बन जाता, और फिर उसके ऊपर बारह और चीज़ें चढ़ जातीं। execution बहुत तेज़ होता था, लेकिन technical debt तेज़ी से जमा होती थी, और आखिर में वे functions ऐसे हो जाते कि उन्हें छूने पर ऊपर रखी बहुत सारी चीज़ें टूटने का खतरा रहता, इसलिए उन पर हाथ नहीं लगाया जा सकता था
comments से समझाने की कोशिश की, लेकिन communication अच्छा नहीं था, इसलिए सिर्फ़ यह लिखता था कि function क्या करता है, यह नहीं कि वह कैसे काम करता है। जैसे “SINE table processing”, “table defragmentation”, “binary interpretation” वगैरह। सब कहते थे, “ये आखिर है क्या? लेकिन तेज़ तो बहुत है,” और अगर यह videogames के अलावा किसी और field में होता, तो शायद न मैं टिकता, न product
यह देखकर हैरानी हुई कि सफल, मज़ेदार और पर्याप्त stable games पर्दे के पीछे पूरी तरह disaster जैसे code के साथ ship हुए थे। अगर इतना बेतरतीब जोड़-तोड़ वाला trash भी पर्याप्त पैसा कमा सकता है, तो chaos रोकने में लगाया मेरा effort और समय कभी-कभी सवालों में पड़ जाता है
इस हिस्से पर हँसी आ गई: https://github.com/ESWAT/john-carmack-plan-archive/blob/mast...
31 जनवरी 1997 के John Carmack के .plan में लिखा है कि वे नई F355 को “reasonable” car के तौर पर खरीदने Ferrari dealership गए थे, लेकिन सामने रखी F40 देखकर आखिरकार वही खरीद ली। आगे उन्होंने यह plan भी लिखा कि अब Ferraris बहुत ज़्यादा हो गई हैं, इसलिए अपनी पहली Ferrari को Quake tournament के winner के prize के तौर पर देंगे
prize 1987 model 328 GTS turbocharged था, जो जनवरी 1994 की Turbo magazine में featured था; chassis dyno पर rear wheels पर 360 horsepower देता था, नया engine और नई paint job थी, लेकिन interior में कुछ काम बाकी था। वे taxes और insurance संभालने के लिए cash भी साथ देने वाले थे
Quake II से जुड़ी एक बात बताऊँ तो, Quake II पहला first-person shooter game था जिसे मैंने शुरू से अंत तक पूरा किया
गर्मियों में दूसरे state में रहने वाले दोस्त से मिलने गया था, तब एक हफ्ते तक खेला; वरना शायद मुझे इसकी अनुमति कभी नहीं मिलती। शुरुआत में मैंने पहले सिर्फ़ DOOM खेला था, इसलिए वही controls इस्तेमाल किए, और हैरानी की बात है कि वे काम कर गए, इसलिए बिना ज़्यादा सोचे आगे बढ़ता गया
फिर अचानक viewpoint ceiling पर lock हो गया और मैं पूरी तरह confused हो गया। पता चला कि मैंने mouse छू दिया था, और काफ़ी देर छेड़छाड़ करने के बाद mouse-look controls की concept समझ आई। उसके बाद game बहुत आसान हो गया
internet नहीं था, न मुझे और न मेरे दोस्त को mouse-look controls का पता था, और हमने किसी को real 3D FPS खेलते हुए भी नहीं देखा था। अब knowledge इतनी widely spread है कि उस समय game interfaces कितने अजीब और alien लगते थे, इसकी कल्पना करना मुश्किल है। source code public हुआ, यह देखकर अच्छा लगा
[0]: https://github.com/id-Software/Quake-2
[1]: https://github.com/id-Software
करीब 1999 में मैं Rome, Italy के ComicCon में था; Half-Life बस gold master में गया था और multiplayer demo public हुआ था। कम से कम 20 लोग सभी LAN multiplayer Half-Life खेल रहे थे, और mouse भी इस्तेमाल कर रहे थे। वह पागल कर देने वाला नज़ारा था
उसके बाद 2005 तक मैं ढेर सारी LAN parties में गया, लेकिन online matchmaking ने QuakeNet और social culture को खत्म कर दिया
आह, यादें ताज़ा हो गईं
1999 में Quake II वही गेम था जो मैं खेलता था, सच कहें तो लगभग इकलौता गेम। मैंने QII में बहुत ज़्यादा समय लगाया, और mod बनाने के दौरान अपना पहला code लिखा
यह कहना अतिशयोक्ति नहीं होगा कि Quake II ने मुझे computer user से programmer बना दिया। इसने मेरी वयस्क ज़िंदगी और career की दिशा तय कर दी
अपना पहला mod बनाते हुए मैंने vector calculations, मौजूदा codebase को समझना, और तेज़ testing के लिए automated builds को integrate करना सीखा। Map बनाने और 3D art में भी थोड़ा हाथ आज़माया, लेकिन जल्द ही समझ गया कि मैं artist या designer नहीं हूं
उस समय version control और backup policy बिल्कुल नहीं थी, इसलिए असली code सब खो गया। इसके बाद जिस game में मैं इसी तरह डूबा, वह Tribes 2 था, और उसमें संभव scripting और modding सचमुच कमाल की थी
https://xn0.co/Xeno-Mod_1.9_Setup.exe
HN पर सभी लोग तो जाहिर है किसी भी internet source से executable download करके चला ही लेंगे! फिर भी अगर आपके पास original QII है और जिज्ञासा है, तो इसे चलाना सुरक्षित है
श्रद्धांजलि: http://guake-project.org/
जबरदस्त, यह मुझे सीधे 90s में वापस ले गया। ठीक-ठीक कहूं तो पहले Quake की बात है
bedroom के floor पर एक PC था, शायद Pentium 166MMX, और मेरा दोस्त उससे थोड़ा तेज़, करीब 233 वाली मिलती-जुलती machine लेकर आया था। LAN cards नहीं थे
पिता की पुरानी parallel cable का इस्तेमाल करके Windows को ऐसा समझाया जैसे यह LAN connection हो, और यह इतना ठीक चला कि हमने कई दिनों तक खेला। फिर थोड़ा ऊब गए और modding scene में घुस गए; खुद कुछ बनाया नहीं, बस public में उपलब्ध चीज़ें download करके आज़माईं। Girobot और KQP(Killer Quake Patch) कभी नहीं भूल सकता
Girobot bots terrain में फंस न जाएं तो काफी ताकतवर थे। असली खजाना KQP था, जिसमें हर तरह के पागलपन भरे mods और weapons, bot system जुड़ जाते थे। Vampire Gun हर बार हंसा-हंसाकर लोटपोट कर देता था, क्योंकि जिसे लगती वह player धीरे-धीरे, लेकिन बहुत धीरे भी नहीं, मांस के टुकड़ों में टूटकर मरता था। 90s की सच में बहुत याद आती है
वैसे मुझे लगता है KQP में ZeusBots भी शामिल थे
[1] https://github.com/Jason2Brownlee/QuakeBotArchive
मैंने कहीं और लोगों को यह शिकायत करते देखा कि rerelease में Linux version नहीं है, लेकिन इन्होंने source release कर दिया है और लिखा है कि इसे clang से test किया गया है। अपने सिद्धांत निभाने के लिए id को ज़ोरदार सलाम
मुझे लगता है पुराना code भी उन्हीं के स्वामित्व में रहा होगा, इसलिए legal obligation नहीं रहा होगा
ऐसे बहुत से games हैं जो अब बेचे नहीं जाते और modern software/hardware stack पर चलते भी नहीं
अच्छा होता अगर कोई कानून होता कि अगर software के लिए 20 साल तक नए platforms पर चलाने वाले patches जारी नहीं किए गए, तो cultural importance के नज़रिए से उसे open source करना चाहिए
सोच रहा हूं कि इस source की तरह C/C++ में type suffix के तौर पर _t इस्तेमाल करने के बारे में लोग क्या सोचते हैं
मेरी समझ में यह language-defined types के लिए reserved है, लेकिन मैंने कोई वाजिब विकल्प नहीं देखा। suffix न हो तो code कभी-कभी अजीब लगने लगता है। उदाहरण के लिए “viewport” के custom type के लिए मुझे
viewport viewport;की तुलना मेंviewport_t viewport;बेहतर लगता हैआमतौर पर इतना विरोध करने लायक नहीं होता, इसलिए style guide जैसे चाहे वैसे type names रखता हूं।
tprefix उससे भी खराब है, और पूरा wordtypedefजोड़ना भी उससे खराब_tsuffix को reserve करने वाला C नहीं, POSIX हैफिर भी id Tech codebase पर काम करते हुए
_s/_tकी आदत लग गई, और मैंने तय किया कि मेरे C codebase पर हमेशा के लिए “POSIX non-compliant” का ठप्पा लग जाए तो भी ठीक है। असल में उसका जो भी मतलब हो। C++ में मैं बस InitialCamelCase इस्तेमाल करता हूंunder_scoresइस्तेमाल करता हूं।Viewport viewport;जैसा रूप आ जाता है, लेकिन कम से कम यह आसानी से समझ आ जाता है किViewporttype है_typeइस्तेमाल करने को कहती हैदिलचस्प बात यह है कि custom OS इस्तेमाल करने वाले embedded product के बहुत बड़े codebase में fixed-width integer types के लिए
uint32_tजैसे types नहीं इस्तेमाल होते। इसके बजाय company का common header_tsuffix के बिनाuint32वगैरह define करता है। ऐसा decision क्यों लिया गया, मुझे नहीं पताबड़े होते समय मेरे लिए यह गेम ही सब कुछ था। क्लैन, लैडर और असली ऑनलाइन गेमिंग culture से पहली बार इसी ने परिचय कराया
मेरा मैप The Edge था, और हथियार railgun या rocket launcher। उस समय dial-up था, इसलिए कम latency वाले server ढूंढना ज़रूरी था। सबसे परेशान करने वाली बात वे लोग थे जो वह gun इस्तेमाल करते थे जिससे सबको lag होता था
मुझे पता है कि Q3 इस genre को परफेक्ट करने वाला बड़ा game था, लेकिन मेरा पसंदीदा हमेशा Quake 2 ही रहेगा। इसमें मजबूत single-player और expansion packs भी थे, और इसकी pace भी मेरे लिए बिल्कुल सही थी। Q3 के आने के बाद सब कुछ बहुत तेज़ हो गया
VQL, Q2 के काफी करीब है, और PQL, CPMA या QuakeWorld के ज्यादा करीब है। बोनस के तौर पर, The Edge भी Quake Live में खेला जा सकता है
अगर आप Quake 2 के fan हैं और Oculus Quest 2 इस्तेमाल कर सकते हैं, तो Quake2Quest आज़माने की सलाह दूँगा। जिन maps पर पहले बेहद लंबा समय बिताया था, उनमें खुद दौड़ते-फिरते महसूस करना वाकई अलग अनुभव है