fbpx
-4.3 C
София

Създателят на порта на Pinball за Windows ХР обясни защо тази игра няма да излезе за Windows 11

Оригиналът е на Dave Plummer

Най-четени

Даниел Десподов
Даниел Десподовhttps://www.kaldata.com/
Новинар. Увличам се от съвременни технологии, информационна безопасност, спорт, наука и изкуствен интелект.

Здравейте, аз се казвам Дейв Пламър и съм бивш разработчик на операционните системи на Microsoft. Работя в тази компания още от епохата на MS-DOS и Windows 95. Навремето ми поставиха задача да портна играта Space Cadet и тя да бъде добавена към комплекта програми за Windows. Този път ще покажа как да се стартира играта пинбол в средата на Windows 10 и ще я тествам как се представя в ОС Windows 11. Искам да разбера, дали всичко ще работи след почти 25 години.

Веднага искам да добавя, че аз лично не съм работил върху графиката, звука, дизайна на масата за пинбол и не съм разработвал геймплея. Дори и оригиналният код не съм писал аз. Първоначално това беше самостоятелната игра Full Tilt! Pinball, която Maxis представи през 1995 година. Единственото с което мога да се похваля е, че съм взел една сравнително малко известна игра и съм я портнал за операционна система с над 1 милиард потребители. Историята започна с това, че аз доброволно пожелах да портна играта за Windows NT.

В оригиналната игра Full Tilt! Pinball имаше три пинбол маси: Space Cadet, Skullduggery и Dragon’s Keep

 

И така, това беше 1995 година, когато се занимавах с прехвърлянето на графичната среда на Windows 95 към Windows NT. Десктоп средата включваше иконките на работния плот, папките, общите графични елементи за управление на операционната система, диалоговите прозорци и основната част на потребителския интерфейс, който се вижда от потребителите. Нашият вицепрезидент Джим Олчин искаше да включим в комплекта към Windows NT нещо, които ще може много добре да демонстрира новите графични и звукови API, които за първи път бяха добавени към тази операционна система. Разбира се, най-доброто решение би била една зрелищна игра с хубав звук и интересен геймплей. Това щеше да даде възможност да се премахне етикета на Windows NT като „скучна“ ОС. Подобно на пасианса, тази игра стана своеобразен символ на операционните системи, в които бе добавена.

Докато работех по прехвърлянето на графичната среда от Windows 95 към Windows NT при мен дойде моя шеф и запита, дали ще ми е интересно да портна играта Pinball от Windows 95 към Windows NT. Задачата не изглеждаше много сложна, но аз вече знаех, че понякога прехвърлянето на код от 95 към NT може да бъде твърде трудно. Всичко зависи от това, по какъв начин този код е написан и структуриран и какви API са използвани. Но се съгласих, понеже много харесвах тази игра, бях много млад и си мислех, че ще мога да играя колкото си искам, като за това дори ще получавам заплата.

 

Моята основна специалност в екипа за разработването на графичната среда бе откриването и отстраняването на проблемите свързани с RISC процесори с MIPS архитектура. Всички ние заедно работехме върху това, графичната среда на Windows 95 да започне добре да работи в NT, като аз се занимавах с всички въпроси, възникнали по отношение на MIPS. По това време Windows поддържаше няколко архитектури, включително Intel, MIPS RISC, PowerPC и Alpha AXP. Потребителят можеше да си купи версия на Windows, която е компилирана за една от тези процесорни архитектури. В нашия екип с всяка отделна архитектура се занимаваше отделен специалист, който решаваше уникалните за своята платформа проблеми. Лично аз работих с MIPS. Дори нямах компютър с x86 процесор и стартирах NT 3.51 на компютър с MIPS. Аз бях прехвърлен от i486 директно към MIPS напълно пропускайки етапите за работа с Intel Pentium.

По това време, ако успеехме да накараме даден код да започне да работи на един от RISC чиповете, то той с много голяма вероятност ще работи на всеки друг подобен чип, но да се постигне това бе твърде сложно, понеже тези процесори изискваха данните да се намират в 32-битови области. В x86 архитектурата е ценен всеки бит и затова в по-голямата част от кода за х86 процесорите, променливите се вмъкваха в границите на само един байт, което съвсем не е подходящо за RISC.

 

Може да се каже, че ако можех да накарам тази игра да работи на моя компютър с MIPS процесор, то тя ще може да работи на компютри с всякакви процесори. Само че възникнаха няколко проблема. Първо, на някои места кодът бе твърде объркан. Кодът на тази игра не е писан от нашите програмисти. Microsoft просто го е купил и той не бе написан в стила, към който бях свикнал. Разликата между играта и операционната система е, че играта често пъти има само една версия, а операционните системи излизат версия след версия, една след друга, като е необходимо да бъде запазена съвместимостта. Редица игри се пишат на принципа „излязла и е, забрави я“, като структурираното на кода съвсем не е толкова важно. По-важно е колко бързо се работи върху тази игра, за да може тя да излезе на пазара колкото се може по-скоро.

 

Най-много ме учуди кодът на звуковия енджин. Всичко работеше много добре, само че бе написан на х86 асемблер. Този x86 код с нищо не ми помагаше в работата ми с MIPS, PowerPC и Alpha. Кодът на операционните системи от типа на Windows е 99,99% написан на С и С++, а асемблерът се изучава само в хардуерния абстракционен слой (HAL) и в кода на програмата за начално зареждане. В края на краищата, ако се налага да пишете код за половин дузина процесорни архитектури, едва ли ще пишете на асемблер за всяка една от тях. По-добре всичко да напишете само един път на езика за програмиране C. А това означаваше, че за да може тази игра да тръгне, трябва да извадя целия асемблерен код и да го заменя със собствен С код, който след това ще бъде компилиран в нативен код за всяка една от поддържаните процесорни архитектури.

По щастливо стечение на нещата, два месеца преди това се срещнах с екипa разработчици на комплекта игри Microsoft Arcade, за да тестваме тяхната реализация на една стара игра на Atari за аркадните автомати Tempest. Помолих момчетата да ми изпратят кода на демото, който реализира звука, за да заменя с него асемблерния код на пинбола. След като прегледах техния пример на C, аз написах свой собствен звуков енджин на C++, който се компилираше и работеше на всичките поддържани процесори. Малко по-късно успях да накарам играта да започне да работи дотолкова добре, че да започнат тестовете. Честно казано, харесваше ми да получавам заплата, за да играя пинбол, но работата ми върху тази тема приключи и аз се заех с други проекти.

Играта Tempest
 

За да разбера какви са причините за премахването на пинбола от Windows, аз се срещнах с Реймънд Чен – програмист на Microsoft, който работи върху всичките версии на Windows от средата на 90-те години. Оказа се, че точно като на мен, на него са му наредили да портне тази игра към 64-битовата версия на Windows. Навремето на мен ми дадоха няколко седмици, за да работя само върху пинбола, но за Реймънд това е само една съвсем малка част от неговата работа по обновяването на цялата графична среда до 64 бита.

По принцип пинболът много трудно се поддава на портване. Нещо повече, при компилирането за 64-битовата ОС системата за разпознаване но колизиите работеше некоректно – топчето преминаваше през препятствията и не се отблъскваше от тях. Стана очевидно, че в кода на оригинала са заложени някакви трикове или зависимости от 32-битовата компилация.

Когато става ясно, че заради пинбола те няма да могат да спазят наложения график, останал единственият вариант – играта да бъде махната. Точно така и става – пинболът така и не осъществява прехода от 32 към 64 бита.

Но след като не съществува нито една 64-битова версия на тази игра, как става така, че тя може да бъде стартирана в 64-битова версия на Windows?

 

Това е възможно благодарение на WoW64. По принцип Windows нативно работи с 64 бита, а 32-битовите приложения работят в специалния софтуерен слой  Windows on Windows, който осигурява съвместимостта с 32-битовите приложения. Подходът много прилича на този, когато ние стартирахме 16-битовите програми на Windows 3.1 в 32-битовата версия на Windows, само че всичко е доста по-усъвършенствано. 

Доколкото ми е известно, при инсталирането на ново копие на 64-битовата Windows всичките нейни двоични файлове са единствено 64-битови и в нея няма нищо 32-битово, а това означава, че не се налага подсистемата WoW64 да бъде стартирана всеки път. Тоест, тя не отнема време и ресурси при стартирането на операционната система, докато не бъде стартирано някое 32-битово приложения.

Rазбира се, би било твърде странно и непрофесионално в една 64-битова операционна система да бъде оставен един-единствен 32-битов файл на една древна игра. Нещо повече, ако някой потребител реши да изключи WoW64 слоя, то тази игра няма да тръгне. А и пинболът е вече морално остарял в сравнение с Windows 10 и Windows 11, неговата графика не е красива и ще се наложи коренна промяна на нейния код, промяна на размерите и мащаба и още много други неща. Това са основните причини тя да не бъде включена в най-новите 64-битови версии на операционната система Windows.

 

Аз знам, че дълбоко в играта Pinball има код, който никой не разбира напълно. Това е една скрита машина, за която няма никаква документация. Всеки път, когато изпълнението на програмата стига до този код, състоянието на тази машина се променя и се следи от разхвърляните навсякъде променливи, като по този начин става изключително трудно да се разбере по какъв начин всичко това работи.

Да допълня, че в Pinball има root режим. Ние почти никога не правим така и на практика това е единствената подобна програма в ОС Windows. Разбира се, тя не променя нивата на потребителя до ниво администратор, а само му дава нови възможности в играта. За да активирате този режим започнете нова игра, изчакайте топчето да започне да пада и въведете от клавиатурата hidden test. След това ще получите възможност да управлявате физиката на топчето с помощта на мишката и да го премествате по цялото поле. Има и други подобни команди, които дават на геймъра допълнителни топчета, повишават неговия ранг и дават възможност за поставянето на големи рекорди. Но за това ще разкажа следващия път.


Коментирайте статията в нашите Форуми. За да научите първи най-важното, харесайте страницата ни във Facebook, и ни последвайте в Telegram и Viber или изтеглете приложението на Kaldata.com за Android, iOS и Huawei!

Абонирай се
Извести ме за
guest

0 Коментара
Отзиви
Всички коментари

Нови ревюта

Подобни новини