1992 की तरह compile करें (2014)
(fabiensanglard.net)- 1992 के Wolfenstein 3D के मूल source आधुनिक systems के साथ सीधे compatible नहीं हैं, लेकिन DosBox और Borland C++ 3.1 का environment दोबारा बनाकर इन्हें फिर से compile किया जा सकता है
- जरूरी setup में Wolfenstein 3D source code, DosBox, Borland C++ 3.1, और चलाने के लिए shareware assets शामिल हैं
- build process में Borland C++ project settings के अलावा
PATH,SIGNON.OBJ,GAMEPAL.OBJpaths को manually ठीक करना पड़ता है - पहली बार चलाने पर graphics टूटे हुए दिखने की वजह यह है कि engine में compiled graphics index और asset files के अंदर की locations आपस में mismatch हो जाती हैं
- regenerated VGA assets को copy करके और DosBox का aspect correction चालू करने पर इसे 1992 के CRT aspect ratio के करीब चलाया जा सकता है
1992 का build environment दोबारा बनाना
- Wolfenstein 3D का 1992 का मूल source code, 20 साल से ज्यादा समय बीत चुके आधुनिक systems पर वैसे ही इस्तेमाल करना मुश्किल है, लेकिन उस समय के tools और runtime environment को match करें तो इसे compile किया जा सकता है
- जरूरी setup ये चार चीजें हैं
- Wolfenstein 3D source code
- DosBox
- Borland C++ 3.1
- Wolfenstein 3D shareware assets
DOS drive की तरह इस्तेमाल करने के लिए directory तैयार करना
- local में DOS drive की तरह इस्तेमाल करने के लिए 2 directories बनाएं
system/csystem/a
system/aमें Borland C++ 3.1 compressed file डाउनलोड करेंsystem/cमें Wolfenstein 3D source code और VGA files डाउनलोड करें- unzip करने के बाद file layout इस तरह व्यवस्थित होता है
system/a:BCPP31.zipsystem/c:wolfsrc.zip,vgafiles.zip
DosBox में compiler और source install करना
- DosBox चलाने के बाद local folders को DOS drives के रूप में mount करें
~/system/cकोC:के रूप में mount करें~/system/aकोA:के रूप में mount करें
A:\BCPP31मेंinstallचलाकर Borland C++ 3.1 install करें- default settings बनाए रखें और installation शुरू करें
- Microsoft Windows folder नहीं मिल पाने की warning जरूरी नहीं है, इसलिए Enter दबाकर आगे बढ़ें
C:\में Wolfenstein 3D source installer चलाएं और default path\WOLFSRCइस्तेमाल करें
Borland C++ project build करना
C:\BORLANDC\BIN\BC.EXEसे Borland C++ 3.1 चलाएं..\..\WOLFSRC\WOLF3D.PRJproject खोलें और directories को इस तरह set करेंInclude Directories: C:\BORLANDC\INCLUDELibrary Directories: C:\BORLANDC\LIBOutput Directories: OBJSource Directories: C:\WOLFSRC
- पहले build में
Cannot find executable TASMerror आता है- Borland C++ बंद करें,
PATH=C:\BORLANDC\BINset करें, फिर दोबारा चलाएं
- Borland C++ बंद करें,
- अगले build में link stage पर
Unable to find OBJ fileerror आता है- project में
SIGNON.OBJऔरGAMEPAL.OBJगलत तरीके सेC:\SOURCE\WOLF\path पर specified हैं - दोनों entries को project से delete करें और
WOLFSRC\OBJ\SIGNON.OBJ,WOLFSRC\OBJ\GAMEPAL.OBJके रूप में फिर से add करें
- project में
- इसके बाद
Compile -> Build Allचलाने पर build सफल हो जाता है
Runtime assets और graphics टूटने की वजह
- compiled executable चलाने के लिए Wolfenstein 3D shareware या full version assets चाहिए
- shareware install करने के बाद compiled
.EXEको game folder में copy करके चलाएं तो screen अजीब तरह से दिखती है - वजह graphics files बनाने वाली production pipeline और engine के asset access तरीके में है
- Adrian Carmack और Kevin Cloud ने graphics files बनाने के बाद उन्हें IGRABed tool से bundle किया
- output में
VGAHEAD.WL1,VGAGRAPH.WL1,VGADICT.WL1ये 3 files औरGRE.H,GRE.EQUये 2 files शामिल होती हैं
VGAHEAD.WL1,VGAGRAPH.WL1के अंदर data locations की ओर इशारा करने वाला index हैVGAGRAPH.WL1में Huffman-compressed data stored होता हैVGADICT.WL1में decompression के लिए Huffman dictionary होती है
GRE.HऔरGRE.EQUवे files हैं जिनसे engine assets को नाम से access कर पाता है- उदाहरण के लिए
L_GUYPICजैसा logical name असली index value से जुड़ता है - engine image index को hardcode किए हुए state में build होता है
- उदाहरण के लिए
- Wolfenstein 3D shareware release के बाद assets और codebase Spears of Destiny के साथ बदलते गए, जिससे नए compiled game के indexes मौजूदा asset files की locations से match नहीं रहे
VGA assets बदलना और aspect ratio correction
- समाधान है source code में शामिल
.H,.EQUindexes से match करने के लिए regenerated VGA assets को game folder में copy करना - shareware assets इस्तेमाल करते समय file extension को
.WL6से.WL1में बदलकर copy करना होगाVGADICT.WL6→VGADICT.WL1VGAGRAPH.WL6→VGAGRAPH.WL1VGAHEAD.WL6→VGAHEAD.WL1
- replacement के बाद
WOLF3D.EXEदोबारा चलाएं तो game सही तरह काम करता है - DosBox की default screen 1992 में लोगों ने जो मूल screen देखी थी, उससे अलग है
- VGA framebuffer 320x200 है
- CRT monitor का aspect ratio 4:3 था, इसलिए output vertical direction में stretched दिखता था
- DosBox settings में
[render]केaspect=falseकोaspect=trueमें बदलने पर aspect ratio correction लागू होता है - aspect ratio correction लागू करने तक, Wolfenstein 3D उस समय के CRT display तरीके के करीब रूप में चलता है
1 टिप्पणियां
Hacker News की रायें
लेख के अंत में उल्लेख की गई Wolfenstein 3D किताब की ज़ोरदार सिफारिश करता हूँ। तकनीकी सामग्री होने के बावजूद यह रूखी या उबाऊ नहीं है, और इसमें पुराने दौर की बहुत-सी optimizations हैं—जैसे wall texture scaling के लिए फैलाकर रखे गए 64 functions, sprites को “साइडवेज़” स्टोर करने का तरीका, अजीब graphics cards से निपटना, और शुरुआत में ही game जैसा दिखाने के लिए graphics mode को hack करना
यह अभी रिलीज़ हुई लगती नहीं, सही है?
retro systems की अच्छी बात यह है कि tools इकट्ठा कर लें तो उन्हें फिर से build किया जा सकता है। हाल ही में मज़े के लिए पुराने Uplink game को फिर से compile किया; बस Visual Studio 6.0 चाहिए था, और development archive में build के लिए ज़रूरी सारी dependencies मौजूद थीं
dependencies ठीक करने में करीब एक घंटा लगा, लेकिन आखिरकार सफल रहा और game भी ठीक चला। कुछ छोटी खामियाँ भी ठीक कीं और इधर-उधर छोटे improvements भी जोड़े। आज के software के साथ ऐसा करने की सोचें तो यह वाकई पागलपन लगेगा
thirdparty/folder में vendor करते देखा है, और इस्तेमाल होने वाला toolchain भी pin किया होता है, इसलिए setup हमेशा reproducible रहता थामैंने programming Borland Turbo C++ से सीखी। उस समय की याद आने की एक वजह यह है कि जटिल दिखने वाले काम बहुत आसानी से हो जाते थे। geometry functions को call करते ही screen पर drawing बन जाती थी, और shape draw करने के बाद थोड़े अलग shape पर
xorfunction call कर दें तो animation भी बना सकते थेदोस्तों के साथ इन techniques से Final Fantasy जैसा game बनाया था—हाथ से बनाए sprites, screen-based maps, edge पर जाने से adjacent map में जाने वाली world, और हर step पर natural number 1 आने पर battle में जाने वाला structure तक बनाया। झंझट तो था, लेकिन high school student के लिए बेहद मज़ेदार था, और आज की तरह शुरुआत से ही SFML, ActiveX, OpenGL सीखने के बजाय बस
circlecall कर देना बहुत बड़ी बात थीconio.hऔर Borland के BGIgraphics.hकी याद आती है। आजकल SDL कुछ हद तक वही भूमिका निभाता है, लेकिन उतना simple नहीं हैयहाँ कई सालों से इसका बार-बार ज़िक्र देखकर कुछ महीने पहले आखिरकार मैंने Masters of Doom पढ़ी, और यह शानदार किताब थी। उस समय वे जो games बना रहे थे, वे खेलने में भी बेहद रोमांचक थे, लेकिन पीछे मुड़कर देखें तो कम संसाधनों वाले कुछ युवा developers क्या बना सकते थे—यह और भी ज़्यादा प्रेरणादायक है
DOS की text-based UI की बहुत याद आती है। 1997 के आसपास तक इस्तेमाल किए गए भरोसेमंद PS/2 की याद आ गई
C drive पर install करना—क्या luxury थी! Hard disk नहीं थी, इसलिए A और B drives के बीच floppy बार-बार बदलनी पड़ती थी, और compiler बार-बार बदले हुए हिस्से माँगता था। फिर भी हम मज़े लेते थे। आजकल के बच्चे ऐसी बातें सुनाएँ तो यकीन नहीं करेंगे
Borland C++ वाकई कमाल था। C++ compiler, standard library और debugger वाली IDE करीब 5MB में आ जाती थी, और पीले अक्षरों व नीले background वाला आरामदेह Borland color palette भी था
Borland के MS-DOS IDEs मीठी यादें हैं
इस साल Advent of Code के कुछ दिनों के लिए इस्तेमाल किया, लेकिन nostalgia जल्दी ही उतर गई। Modern environment की आदत पड़ जाने के बाद IDE की सीमाएँ और Pascal की verbosity रोज़ इस्तेमाल के लिए “fun” नहीं थीं। फिर भी यादें निश्चित रूप से मीठी हैं
खासकर standalone Alt key input, Alt+letter combinations, और Ctrl+Shift+left/right arrow keys को recognize नहीं कर पाते
संबंधित लेख: Let’s compile like it’s 1992 (2014) - https://news.ycombinator.com/item?id=13750097 - फरवरी 2017, 80 comments
archive खोलने में समस्या हुई।
wolfsrc.zipपर End-of-central-directory signature not found error आया, और बताया गया कि यह zip file नहीं है या कई disks में बँटे archive का हिस्सा हो सकता हैcurl -O [http://fabiensanglard.net/Compile_Like_Its_1992/tools/wolfsr...](<http://fabiensanglard.net/Compile_Like_Its_1992/tools/wolfsrc.zip>)इस्तेमाल करने पर HTML file डाउनलोड हुई$ file wolfsrc.zipका result भीwolfsrc.zip: HTML document text, ASCII textथा। इसके उलटwgetने file सही से डाउनलोड की और बिना समस्या unzip हो गई