bash.im ithappens.me zadolba.li
11445

Дюк Глюкем 3D

Вспомню и я свою молодость. БК-0010, прыгающие шарики, синусоиды, самодельные игры и даже некое подобие цветомузыки — на экране прыгало нечто при наличии любого сигнала на входе с магнитофона. Затем появился доступ к 386, под руку попалась очень интересная книга «Как написать компьютерную игру» — по сути, отличный учебник по ассемблеру. Жаль, что там не рассматривался защищённый режим, его я так и не осилил. И понеслось… С приятелями писали вирусы наперегонки, меняли синий Нортон на зелёный, приятель реализовал анимацию огня на загрузочном секторе дискеты — 512 байт!

Как-то в начале 2000-х попался мне в руки первый «пень» с EGA-видеокартой и монитором — 16 цветов! В те времена любили мы с другом гонять Дюка 3D по сетке (звонили по модему). Не обращая внимания на EGA-карту, Дюк спокойно запускался: то ли карта была хитрая, то ли проверки не было. На экране была цветная каша, ибо в EGA цвет кодировался непосредственно самим байтом (или полубайтом — не помню), то есть по такому же принципу, как и в нынешних видеокартах, а в режиме VGA с 256 цветами байт в видеопамяти — это индекс, который ссылался на 18-битный (если не ошибаюсь) регистр, в котором уже кодировался сам цвет. А поиграть хочется!

Что делаем? Распаковываем GRP-файл из Дюка — получаем кучу BMP-спрайтов. Пишем на ассемблере программу, которая открывает указанный в командной строке BMP и округляет цвет каждой точки до палитры EGA. Запускаем Windows 98, вписываем соответствующую команду в реестр, выделяем в проводнике все BMP — правой кнопкой — наша команда. Идём пить чай, ибо по лени программу я не оптимизировал и закрывал файл после конвертации каждой точки, а для каждой следующей точки открывал снова. Знаю, убить меня мало за такое издевательство над компьютером. Но хорошо, что это был ассемблер, и в конце концов все файлы были обработаны. Пакуем GRP, запускаем игру. Картинка ужасная, но, по крайней мере, играть уже можно!