- Wing Commander I की “Thank you for playing Wing Commander” वाली कहानी यह कहती है कि exit error message को hex edit करके बदला गया था, लेकिन यह bug रिलीज़ वर्ज़न में वैसे का वैसा नहीं बचा था
- मूल स्रोत के सबसे क़रीब रिकॉर्ड 2009 के Gamasutra Dirty Coding Tricks कमेंट में मिलता है, जहां Ken Demarest ने development के दौरान EMM386 exit error को अस्थायी रूप से छिपाने की बात लिखी थी
- DOSBox, उस समय के hardware, और binary string search में सामान्य exit पर यह संदेश नहीं मिला, जबकि barracks airlock exit path अलग से एक joke message दिखाता है
- Electronic Arts के पास सुरक्षित अधूरे Wing Commander I source code में भी airlock message सामान्य game code के रूप में मिला, और यह memory manager hex edit वाले मामले से अलग था
- Ken Demarest ने कहा कि hack ख़ुद सच था, लेकिन error का कारण मिलने के बाद उसे रिलीज़ से पहले हटा दिया गया था, इसलिए यह कहानी घटिया shipped product से ज़्यादा एक अस्थायी engineering trick के क़रीब है
“Thank you for playing Wing Commander” कहानी का स्रोत
- मशहूर कहानी के मुताबिक, Wing Commander के developer गेम बंद करते समय आने वाली EMM386 memory manager error को ठीक नहीं कर पाए, इसलिए error string को hex edit करके “thank you for playing Wing Commander” में बदल दिया गया
- पिछले 10 साल में यह कहानी इंटरनेट पर “मज़ेदार software hacking” के उदाहरण के रूप में फैली और “dirty-but-functional hack” के एक case की तरह इस्तेमाल होने लगी
- कुछ Star Citizen fans ने Chris Roberts की क्षमता की आलोचना करते समय भी इस उदाहरण को उठाया
- यहां यह बात जोड़कर पेश की गई कि Roberts दूसरे CEOs से अलग Star Citizen पर अब भी coding करते हैं
- Wing Commander I fans को इसके साथ घूम रही screenshot पर शक था
- Wing Commander I का default install path
c:/wc1नहीं है - गेम का रिलीज़ वर्ज़न exit पर “Thank You for Playing Wing Commander!” नहीं दिखाता
- Wing Commander I का default install path
2009 का Gamasutra कमेंट मूल के सबसे क़रीब है
- मूल वाक्य और screenshot के स्रोत को ट्रैक करने पर 20 अगस्त 2009 को Brandon Sheffield के Gamasutra लेख Dirty Coding Tricks पर किया गया कमेंट मिला
- कमेंट का सार यह था
- Wing Commander 1 में गेम बंद करते समय EMM386 memory manager exception होती थी
- स्क्रीन साफ़ करने पर “EMM386 Memory manager error...” जैसी एक पंक्ति दिखाई देती थी
- जल्दी रिलीज़ करना था, इसलिए memory manager के अंदर error string को hex edit करके “Thank you for playing Wing Commander” कर दिया गया
- Gamasutra game developers के बीच लोकप्रिय साइट थी और 2021 में इसका rebrand होकर Game Developer नाम हो गया
- मूल लेख नई साइट पर मौजूद है, लेकिन लगता है migration के दौरान comments गुम हो गए
- कमेंट लिखने वाले Ken Demarest थे
- Ken Demarest III ने Origin Systems में पहले Wing Commander पर software engineer के रूप में काम किया था, और बाद में Ultima VII के lead programmer तथा कंपनी के Director of Technology बने
- Wing Commander लेखक Jeff George ने कहा था कि Chris Roberts को छोड़कर Demarest ने गेम को रिलीज़ तक पहुंचाने में सबसे बड़ा योगदान दिया
Reddit वर्ज़न और screenshot से पैदा हुई गलतफहमी
- 2015 में Reddit
/r/shittyprogrammingपर फैला वर्ज़न 2009 के मूल कमेंट से दो तरह से अलग था- मूल कमेंट में screenshot नहीं था
- exit message की wording थोड़ी बदली हुई थी, जिससे twist और ज़्यादा नाटकीय लगता था
- लगता है Reddit वाला वर्ज़न 2012 में किसी तीसरे व्यक्ति की LinkedIn share के रास्ते फैलना शुरू हुआ
- बाद में जुड़ी screenshot से ऐसा लगा मानो यह bug रिलीज़ वर्ज़न में मौजूद था, लेकिन मूल कमेंट में ऐसा दावा नहीं था
- इसलिए मूल कहानी का स्रोत विश्वसनीय लगता था, लेकिन यह वाकई “रिलीज़ वर्ज़न में बचा हुआ bug” था या नहीं, इसकी अलग से जांच ज़रूरी थी
रिलीज़ वर्ज़न Wing Commander I में जांच के नतीजे
- Wing Commander I सामान्य exit पर “thank you for playing Wing Commander” नहीं दिखाता
- इसे DOSBox और उस समय के hardware पर test किया गया
- गेम की पूरी binary में यह string खोजी गई, लेकिन नहीं मिली
ALT-Xदबाने पर गेम बस DOS prompt पर लौट जाता है
- एक अपवाद है: Tiger’s Claw barracks के airlock door पर क्लिक करके exit करने पर अलग flow चलता है
y/nconfirmation prompt आता है- DOS पर लौटते समय “You step out of the airlock and into…” संदेश दिखता है
- यह पंक्ति उसी exit method से सीधे जुड़ा एक joke है
- यह airlock message वास्तव में गेम binary में मौजूद है
- Ken Demarest का उस barracks screen से भी संबंध है
- उन्हें bucket में गिरती पानी की बूंदों वाला effect बनाने के लिए जाना जाता है
- यह effect Chris Roberts की immersion पर ज़ोर देने वाली शैली के उदाहरण के रूप में अक्सर उद्धृत होता है
source code और Ken Demarest का जवाब
- Electronic Arts के पास सुरक्षित Wing Commander I के अधूरे source code का इस्तेमाल जांच के लिए किया गया
- ये source files Wing Commander I release build में इस्तेमाल हुई थीं और बाद में FM Towns port टीम को भी दी गई थीं
- memory management routines सहित कुछ सामग्री अब मौजूद नहीं है
- बचा हुआ code भी airlock message के स्रोत की पुष्टि करने के लिए काफ़ी था
BARRACKS.Cbarracks game flow screen की functionality सेट करता है- गेम memory unload करने के बाद airlock message और newline print करता है
- यह वास्तविक execution result से मेल खाता है और memory manager hex edit वाला मामला नहीं है
- दूसरा exit path
COCKPIT.Cमें है और वह कोई message नहीं दिखाता - Darren Xczek ने Ultima VII की संभावना उठाई
- Ultima VII DOS पर लौटते समय “thank you for playing Ultima VII” message दिखाता है
- Ken Demarest, Ultima VII के lead programmer थे
- Ultima VII memory management issues के लिए मशहूर था; उसके internal system का नाम ही “Voodoo Memory Manager” था
- Ken Demarest से सीधे पुष्टि करने पर यह साफ़ हुआ कि hex edit hack development के दौरान सचमुच किया गया था
- उनका कहना था कि वे उस hack के साथ रिलीज़ भी करना चाहते थे, लेकिन error का कारण मिल जाने के बाद ज़मीर ने उसे रहने नहीं दिया
- उन्होंने यह भी कहा कि manually edit करने की प्रक्रिया build completion time बढ़ाती थी, इसलिए यह अप्रभावी भी थी
- आख़िर में, यह कहानी development के दौरान की एक अस्थायी trick निकली, जो रिलीज़ वर्ज़न में नहीं बची
- यह घटिया product ship करने का सबूत नहीं, बल्कि रिलीज़ से पहले हटाया गया एक temporary development hack ज़्यादा था
1 टिप्पणियां
Hacker News पर रायें
Sega Genesis/Megadrive के लिए Sonic 3D Blast में Traveller's Tales ने जो hack डाला था, वह याद आ गया
अगर console का power on रहते हुए cartridge को काफी हिलाया या ठोका जाए तो "secret level select" screen खुलती है। लंबे समय तक इसे Easter egg माना गया, लेकिन असल में यह custom crash handler था, जो main CPU के error interrupt को intercept करके level select screen पर भेज देता था
इसे इसलिए बनाया गया था ताकि Sega QA द्वारा build reject होने और release delay होने से बचा जा सके। QA में कई हफ्ते लगते थे, इसलिए एक crash का मतलब फिर से शुरुआत से शुरू करना होता था। Cartridge हिलाने पर contact पल भर के लिए टूट जाता था और processor error आ जाता था
स्रोत का 3 मिनट वाला YouTube वीडियो: https://www.youtube.com/watch?v=ZZs2HUW9tDA
लिंक किए गए "Coding Secrets" YouTube channel में ऐसे ही hacks पर और videos हैं, और उस दौर के developers ने hardware और business constraints के बीच game को चलाने के लिए जो किया, वह सच में कमाल है
आजकल AAA games में कभी-कभी लगता है कि publisher या console maker कुछ मिनटों की QA भी skip कर देते हैं
ऐसी चीज़ों में primary source तक पहुंच पाना वाकई जादुई ताकत जैसा है
खासकर जब मेरी तरह उम्र का फर्क या geographic दूरी हो, तो कभी-कभी यह लगभग असंभव सा लगता है
मैं 80s में Sweden में बड़ा हुआ और तब भी computers में पूरी तरह डूबा रहता था। मैं Commodore 128 इस्तेमाल करता था और बाद में Amiga पर चला गया, लेकिन C64 mode में बहुत games खेलता था, और ज़ाहिर है "Uridium" [1] और "Paradroid" [2] लगभग ऐसे essential titles थे जिन्हें हर कोई जानता था
लेकिन यह बात आज भी अजीब लगती है कि उनके developer Andrew Braybrook मेरे Xitter feed [3] में हैं और अब भी game development कर रहे हैं। उस समय वे UK में रहने वाले, मुझसे 10 साल से भी अधिक बड़े, दूर के किसी जादूगर जैसे लगते थे; अब कम से कम पेशेवर तौर पर वे कुछ हद तक colleague जैसे लगते हैं
Internet से पहले भी ऐसी चीज़ें होती होंगी, लेकिन शायद कहीं ज़्यादा मुश्किल और दुर्लभ रही होंगी
[1]: https://en.wikipedia.org/wiki/Uridium
[2]: https://en.wikipedia.org/wiki/Paradroid
[3]: https://twitter.com/UridiumAuthor
2023 में भी up-to-date रहने वाली Wing Commander news site मौजूद है, यह सच में अच्छा है
मैंने एक developer की कहानी सुनी थी जो missile code audit कर रहा था। उसने जल्दी से बताया कि जगह-जगह memory leaks हैं, लेकिन पता चला कि यह intended design था—कुछ ऐसा कि missile flight के अंत में अपनी garbage collection खुद करता है
memory shortage की समस्या को missile flight के दौरान expected memory usage को double मानकर handle किया गया था
लिंक किए गए Reddit thread में यह comment है:
मैंने Ultima VII भी बहुत खेला था, तो article में जैसे कहा गया है, यादें आपस में मिल गई होंगी
इस तरह के exit messages पुराने समय में uncommon नहीं थे, और वह story पढ़ना ही false memory या mixed memory बनाने के लिए काफी है
यह कहानी आखिरकार सच नहीं निकली, लेकिन मुझे याद है कि 1999/2000 में मैंने Half-Life 1 multiplayer game launcher install किया था
"install" दबाते ही एक dialog box खुला, जिसमें लगभग लिखा था, "अगर installer कहे कि installation fail हो गया, तो चिंता न करें। program ठीक से install हो गया है"
मैंने screenshot भी लिया था और कई साल तक रखा था। शायद खो गया, या माता-पिता के घर के किसी पुराने computer में कहीं हो, लेकिन मैं कसम खाकर कह सकता हूं कि यह सच था
सच में error message आया था, और program ठीक से install हो चुका था
एक बार मैंने Twitter पर यह कहानी बताई, तो किसी ने जवाब दिया कि यह known issue है, और अगर मेरी memory सही है तो इसका संबंध Windows 97 के registry update से था
आम तौर पर पूरा Program Files उड़ जाता था
अजीब है, क्योंकि बचपन में मुझे "Thank you for playing Wing Commander!" message देखने की काफी पक्की याद है। क्या सिर्फ मेरे साथ ऐसा है?
पीछे मुड़कर देखता हूं तो मैंने बहुत सारे DOS games खेले थे, इसलिए शायद यादें मिल गई हों। exit पर कुछ print करना इतना uncommon नहीं था
Stories फैलते-फैलते उनमें थोड़ी-थोड़ी distortion जुड़ना वाकई irritating हो सकता है। इस case में नुकसान नहीं है, लेकिन फिर भी
मुझे पूरा यकीन है कि यह message original में नहीं, बल्कि Wing Commander 2 में था