SHEPPARD POPOV KENDALL O'NEALLY
GAMES (часть 2): Вскрытие сердца id Software для чайников.

Генри Шеппард (www.sheppard.ru / www.openmusic.ru)

Хмурым вечером делать нечего. Эта аксиома отлично накладывается на раннезимнюю хандру и быстронаступающие сумерки - осталось только выбрать форму реализации психологического отклонения: тяжелую депрессию или полное погружение в истерический трудоголизм. Если вы студент, то до сессии делать все равно занять себя трудно. Если вы успели позабыть, как выглядит зачетка в руках препода, значит хмурая погода наверняка сочетается с тяжелым самодурством босса. Разделимся: пусть сторонники маниакально-депрессивного психоза сто раз перечитают рубрику "Горячая линия", чтобы еще в сотый раз убедиться, что количество проблем в мире никак не уменьшается, а остальные - за мной в Царство бреда, кода и загадочных символов.

Математическая и логическая ненормальность имеет глубокие корни. Еще пару сотен лет назад счастливые жертвы жесткой викторианской морали нашли себе развлечение: Кэррол замучал несчастную Алису логическими вывертами, а Вейерштрасс до сих пор пугает первокурсников теоремами, количество которых явно не укладывается в поле рациональных чисел. Более древние изыски жрецов Раннего Царства в Египте умудрялись сводить с ума всего четырьмя примитивными арифметическими действиями, да так, что до сих пор находятся декаденствующие "ученые", которые с измерительными рулетками промеряют пирамиды, в тщетной надежде извлечь из этих измерений дату Апокалипсиса.

Каждый дурак развлекается по-разному. Но что нужно умному человеку, чтобы развлечь себя? Уже несколько сотен лет список приспособлений для самодельного "Аншлага" невелик: бумага, карандаш, свеча и кружка пива. В современном мире бумагу и карандаш лучше заменить на компьютер, свечу упразднить в счет хорошего видеоускорителя, а в пиво добавить немного консервантов. Но суть развлечения не изменится: математика, логика и оптимизация - вот спутники настоящего мужчины, отринувшего надоедливые женские ласки, телевизор и утреннее бритье в пользу Познания.

А чтобы в течение лекции у школяров не пропало желание постичь Учение, я привожу пример того, чего можно добиться при помощи кружки пива и карандаша: на диске лежит инсталлятор игры Soldier of Empire (/quake2/SoE/SoE.exe), которая была создана по всем канонам Учения. Раз уж каждый уважающий себя пророк сначала демонстрировал чудеса, и только потом принимался за обучение апостолов, учеников и последователей, то я тоже не буду выбиваться из общего правила. Узрейте Чудо, запустивши этот файл...

Лекция о Нравственности.

Как я ранее упоминал, уважаемые слушатели, текущая лекция будет являться продолжением предыдущего обзора сравнительно честных способов создания современного шутера. Отложите в сторону ваши конспекты, забудьте о символах и обозначениях, которые вбивал вам в голову предыдущий лектор, погрязший во грехе аналитической алгебры - этот мусор нам не пригодится.

Прежде чем проверять ранее усвоенные знания я еще раз кратко напомню теологические тезисы, которые озвучил перед аудиторией в прошлый раз:
1. Нет Бога, кроме Quake.
2. Нет Величайшего Бога, кроме Quake2.
3. Нет ничего предосудительного или невозможного, что можно сделать с Величайшим Богом.

Логично, что сатанинские посулы Обычного Пользователя необходимо отринуть всею силою своей Веры. Играть в Quake любой версии можно только для того, чтобы укрепить свою Веру и еще раз осознать Всевеличие мысли Создателя, имени которого мы не можем упоминать всуе - Дж..на К..рмака.

В Новом Завете - в исходниках gamex86.dll - мы можем предугадать некоторые пути Божественного Замысла, например способы Исканий монстрами своего предначертанного Пути, но все же основная мысль содержится в более древнем и глубоком сборнике скрижалей исходников движка Quake2. С этих откровений и начнем.

Лекция о Достижении Нирваны.

Ученик, запомни: всякое движение есть суета. Сначала на это намекал обезьяний Бог Ориссы, оправдывая сумбурную деятельность сородичей, а теперь нам приходится снова открывать эту мысль Конфуция на примере Quake2.

Игра делится на две части - движок, отвечающий за графику и основную физику, и dll-библиотеку, которая описывает модели, анимацию, оружие и прочие логические связки в игре. Библиотеку мы рассмотрим позже - без нее вполне можно добиться неплохих результатов. Самая сложная часть содержится в графической части движка, остальное - Суета.

Скриншоты демонстрируют, что замена 256-цветных текстур на 24х и 32хбитные значительно повышает реалистичность сцены


Начнем с азов.
Пользователь перед запуском игры сразу же переключает в настройках разрешение с 640х480х16бит как минимум на 1024х768х32бит. Поэтому мы должны позаботиться о качестве текстур, чтобы не пугать зрителя монстрами, увешанными пикселями, как медалями, и стенами в клеточку a'la taxi. Затем самые въедливые игроманы обязательно выставят освещение и тени в максимальное качество. Значит необходимо обеспечить четкость теней и сочность красок текстур.

Как это ни странно, больше ничего наша паства не желает. Яркие краски, высокое разрешение и приличное освещение - предел мечтаний наших пейзанов, которые способны только поглощать жвачку в виде игр. Поверьте, светлого благословления и напутственного слова в виде короткого сюжета за глаза хватит, чтобы удовлетворить тягу пользователя к прекрасному. Вам не придется раскрывать прекрасную наготу фресок Рафаэля и Буоневетто перед этими поглотителями Кока-колы.

В сухом остатке мы имеем очень простую задачу: необходимо добавить к движку Quake2 текстуры любого разрешения в формате, который поддерживает 16ти, 24х и 32хбитный цвет. Идеальный выбор - JPG и TGA. Причем первый вариант можно отбросить для простоты и торжества Его Величества Логики: JPG формат является архивом, который в видеопамяти все равно должен храниться в распакованном виде. При этом JPG объективно имеет погрешности в цветовыводе, что однозначно приводит к выводу, что этот формат нет необходимости поддерживать.

Если не только заменить текстуры, но и отрисовать их с 4хкратным запасом качества (не 64х64, а, например, 256х256 пикселей), то картинка получается еще более вкусной.


Вторая задача, связанная с тенями и освещением, решается несколько нестандартно: хочешь верить - верь! А если не хочешь, то будь обречен на вечные адские муки, чертовы сковородки и монотонное бубнение про все круги Ада в стиле Божественной Комедии. Пусть презренный неверующий попробует самостоятельно пройти путь искупления от программного вычитания 10-15 уровней яркости от R, G и B компонент яркости VGA-точек, до управления 256-цветной палитрой GIF-картинок. Огромное количество кодинга, возни с исходниками и постоянное перекомпилирование - не наш путь. Я же предостерегу молодых и горячих послушников от поисков Святого Грааля. Никто его не нашел, и вам не светит его обрести. А раз не светит, но и не стоит зацикливаться на предрассудках необразованных пейзанов, которые с оглядкой верят в болотные огоньки и реалистичное освещение в играх. Его не существует. Это наш маленький иезуитский прием. Пока отложим его - есть задача посерьезнее.

Лекция о Материальном.

Займемся самой насущной проблемой - высококачественными текстурами. Для этого нам понадобится теперь уже классический MSVC 6 и исходники Quake2, которые нам предоставил тот, чьего имени мы не поминаем всуе. Необходимые файлы вы найдете в папке /quake2/source-quake2-v320/ на диске или скачать с моего сервера www.filezone.ru/source-quake2-v320.zip. Не забудьте ознакомиться с прилагаемым откровением от GNU - это очень важно для соблюдения истинного благочестия.

Достаточно распаковать этот кладезь вселенской мудрости, установить MSVC 6 и дважды кликнуть на чудо-файле quake2.dsw, чтобы узреть божественное провидение: файлы исходников аккуратно разложены по типам, так что нам не придется разбираться с функциями, с кодом и прочими низменными субстанциями, коими нас попытаются ввести в соблазн приверженцы материалиализма.

Лекция о Сбывшемся Несбыточном.

Сатана во всех своих проявлениях не дремлет. Он нашептывает нам: "Отрекись, заблудший, как можно сравнивать безнадежно устаревший Quake2 1997го года выпуска с Quake4 или UT2003?!", но после упорных молитв несложно найти в себе силы, чтобы отринуть кощунственные златые горы эффектов, которые Сатана воздвиг на пути Познания. Однако главный козырь рогатого ангела Тьмы под пошлым именованием "графика" заключется в паре десятков строк дополнительного кода, которые необходимо добавить в оригинальный движок Quake2.

Для начала заметим, что quake2 использует форматы WAL и PCX. Загадочный WAL является несколько искуственным аналогом PCX с небольшими изменениями в формате данных. Практически вся графика сводится к Святой Троице: текстурам карт (wal), скинам моделей (pcx) и графике в меню (pcx).

Но отбросим слепую веру. Первый удар по незыблемости догматов наносит банальный контекстный поиск в тексте исходников. Введите ".tga" в окошке поиска - получите примерно это:

D:\work\PLK\games2\files\source-quake2-v320\client\cl_main.c(1331): Com_sprintf(fn, sizeof(fn), "env/%s%s.tga",
D:\work\PLK\games2\files\source-quake2-v320\ref_gl\gl_image.c(1388): else if (!strcmp(name+len-4, ".tga"))
D:\work\PLK\games2\files\source-quake2-v320\ref_gl\gl_rmisc.c(115): strcpy(picname,"quake00.tga");
D:\work\PLK\games2\files\source-quake2-v320\ref_gl\gl_warp.c(644): Com_sprintf (pathname, sizeof(pathname), "env/%s%s.tga", skyname, suf[i]);
D:\work\PLK\games2\files\source-quake2-v320\ref_soft\r_image.c(530): else if (!strcmp(name+len-4, ".tga"))

На самом деле движок не только умеет читать файлы в формате TGA, но может также их генерировать (quake00.tga - не что иное, как "затравка" для создания скриншотов). Оказывается, что Дж..н К..рмак воистину облажался, изобретая никому не нужный формат WAL. Нам остается только исправить эту глупость и включить формат TGA как основной. Для этого раскрываем подпроект ref_gl, открываем файл gl_model.c и находим в нем процедуру Mod_LoadTexInfo, которая управляет информацией, необходимой для загрузки текстур для карт.

Достаточно сменить блок кода out->next = NULL;
Com_sprintf (name, sizeof(name), "textures/%s.wal", in->texture);
out->image = GL_FindImage (name, it_wall);
на

out->next = NULL;
Com_sprintf (name, sizeof(name), "textures/%s.tga", in->texture);
out->image = GL_FindImage (name, it_wall);
if (!out)
{
Com_sprintf(name, sizeof(name), “textures/%s.wal”, in->texture);
out->image = GL_FindImage (name, it_wall);
}

Несложно понять логику этого хода: мы подменяем загрузку WAL-файлов форматом TGA, но в случае если нужный файл не найден, загружаем .WAL. Это сделано исключительно для совместимости со старыми медиа-файлами Quake2 - вы сможете без проблем загружать старые карты.

Эту операцию необходимо повторить и для моделей. Ищем в gl_model.c строку
dmdl_t *pheader;

и добавляем под ней char md2skin[MAX_PATH];

затем нижеприведенные две строки файла gl_model.c в процедуре R_RegisterModel

for (i=0 ; inum_skins ; i++)
mod->skins[i] = GL_FindImage ((char *)pheader + pheader->ofs_skins + i*MAX_SKINNAME, it_skin);

заменяем на

for (i=0 ; inum_skins ; i++)
{
COM_StripExtension((char *)pheader + pheader->ofs_skins + i*MAX_SKINNAME, md2skin);
strcat(md2skin, ".tga");
mod->skins[i] = GL_FindImage (md2skin, it_skin);
if(!mod->skins[i])
mod->skins[i] = GL_FindImage ((char *)pheader + pheader->ofs_skins + i*MAX_SKINNAME, it_skin);
}

Наконец осталось подправить gl_draw.c, чтобы избавиться от PCX-ужаса в меню, консоли и статус-окнах. В функции image_t *Draw_FindPic (char name) необходимо заменить

Com_sprintf (fullname, sizeof(fullname), "pics/%s.pcx", name);
gl = GL_FindImage (fullname, it_pic);

на

Com_sprintf (fullname, sizeof(fullname), "pics/%s.tga", name);
gl = GL_FindImage (fullname, it_pic);
if (!gl)
{
Com_sprintf (fullname, sizeof(fullname), "pics/%s.pcx", name);
gl = GL_FindImage (fullname, it_pic);
}

Теперь снова вернемся в gl_model.c в процедуру R_RegisterModel, где мы объявили переменную char sp2skin[MAX_PATH];, и заменим

for (i=0 ; inumframes ; i++)
mod->skins[i] = GL_FindImage (sprout->frames[i].name, it_sprite);

на

for (i=0 ; inumframes ; i++)
{
Com_StripExtension (sprout->frames[i].name, sp2skin[MAX_PATH]);
strcat (sp2skin, “.tga”);
mod->skins[i] = GL_FindImage (sp2skin, it_sprite);
if (!mod_skins[i])
mod->skins[i] = GL_FindImage (sprout->frames[i].name, it_sprite);
}

На этом можно закончить переустройство Мира. Аналогичным способом можно изменить мелкие детали вроде системы частиц (взрывы, декали и проч), но это уже эстетство, что, очевидно, является грехом. Грешить легко, что радует - сравните религиозный аскетизм Quake2 с барокко нашего детища:

Лекция о Видимости.

Нетрудно заметить, что переделка системы текстур привнесла много нового в наше мировоззрение как в переносном, так и буквальном смыслах. Однако сказано было:"И возник Свет". В игровой интерпретации это означает, что возникла тень - ведь на светящемся экране мы видим реальный, а не отраженный источник света. Чтобы реалистично отобразить освещение нужно грамотно отрисовать тени - ужасная правда миропорядка.

Кто пробовал активировать gl_shadows в Quake2, тот наверняка запомнил это тягучее чувство отвращения при виде "составной" тени из четырехугольников разной яркости, которые к тому же пересекаются между собою, смешивая уровень освещения в пересечениях - эдакий сумбур оттенков серого. Скрепя сердце признаем, что не только на старуху, но и на Дж..на К..рмака бывает проруха. Но мы, как истинные правоверные, поможем нашему невнимательному божеству, да низольется сладчайший шербет на его замыслы.

Эта тень больше похожа на правду...


Простейший способ помочь залатать проруху заключается в использовании stencil-буфера (принцип его работы сходен с обычным буфером-трафаретом: производится проверка яркости каждого пикселя. Если этот показатель равен ранее определенному уровню, то пиксель выводится на экран, а сам уровень пересчитывается. Это позволяет приводить яркость пикселей тени к общему уровню - сам алгоритм может иметь тысячи реализаций).

Нам снова потребуется небольшое начилие над исходниками. Повторно вторгаемся в gl_ref, но на этот раз в файл glw_imp.c. Для начала над функцией VerifyDriver объявим переменную, с помощью которой мы будем управлять stencil-буфером:
qboolean have_stencil = false;

Затем опустимся ниже, пока не доберемся до функции GLimp_InitGL, которая отвечает за инициализацию OpenGL. Наша цель - дескриптор формата пикселя. Заменяем строки:
32,
0,

на

24, // 24-bit z-buffer
8, // 8bit stencil buffer

По сути мы "отрезали" от буфера глубины 8 бит для stencil - сердито, но все равно только профессиональный художник отличит палитру в 24 бит от 32.

Теперь попробуем избежать обвинений в кодировальном графоманстве и оправдать объявление переменной have_stencil, для чего найдем в GLimp_InitGL строки

i.Con_Printf( PRINT_ALL, "GL PFD: color(%d-bits) Z(%d-bit)\n", ( int )
pfd.cColorBits, ( int ) pfd.cDepthBits );

и прямо после которых добавим волшебное буквосочетание

if (pfd.cStencilBits) have_stencil = true;

В этом файле мы закончили ковыряться, но нас ждет еще множество примитивных дикостей в стиле банального copy-paste. Теперь перейдем к процедуре, которая отрисовывает тени. Для этого в файле gl_mesh.c нужно найти функцию GL_DrawAliasShadow и прямо перед нею сделаем "ссылку" на ранее объявленную переменную have_stencil:
extern qboolean have_stencil;

Теперь спустимся вниз внутри самой процедуры GL_DrawAliasShadow, пока не доберемся до строки

height = -lheight + 1.0;

и прямо под нею обеспечим инициализацию буфера. Сначала проверим, имеем ли мы буфер в наличии, затем "используем" его, если все в порядке:

if (have_stencil) {
qglEnable(GL_STENCIL_TEST);
qglStencilFunc(GL_EQUAL,1,2);
qglStencilOp(GL_KEEP,GL_KEEP,GL_INCR);
}

Глубоко вгрызаться в смысл этих иероглифов не стоит, хотя он неглубок. Функция qglStencilFunc разрешает "рисовать" только пикселы со stencil-значением, равным 1, а qglStencilOp управляет обработкой пикселей после прохождения тестов буферов stencil и глубины. Как видите, ничего сложного, только непонятно.

После отрисовки тени нужно отключить использование stencil-буфера, для этого в самом конце текущей процедуры необходимо вставить строку:
if (have_stencil) qglDisable(GL_STENCIL_TEST);

Теперь осталось последнее изменение. Необходимо открыть файл gl_rmain.c и найти функция R_Clear. В самом конце функции мы должны протестировать наличие буфера при помощи переменной have_stencil и, если буфер есть, очистить его, присвоив значение stencil, равное 1, для каждого пикселя:
if (gl_shadows->value) {
qglClearStencil(1);
qglClear(GL_STENCIL_BUFFER_BIT);
}

Полученный код можно откомпилировать, затем в консоли набрать "gl_shadows 1" для включения теней. Абсолютно все современные видеокарты поддерживают работу со stencil-буфером, поэтому тени будут выглядеть ровно и аккуратно, без стыков и разных уровней "темности". Если же видеокарта оказалась уровня самых первых Riva или i740, то тени останутся как в старом Quake2, но все равно будут работать. Лекция о Лености.

Предыдущие сложнейшие заклинания и формулы добычи Философского Камня могут отпугнуть новичка, хотя я их привел не для того, чтобы раскрыть тернистость пути программиста. Это было скорее руководство в стиле "Как стать Дж..ном К..рмаком для Чайников". Несложно заметить, что все переделки минимальны, используют готовые возможности OpenGl или даже недоделки id Software, и при этом дают возможность получить хорошие результаты. Естественно, что на этом нельзя останавливаться, так как мы поправили только основную часть движка, отвечающую за графику. Однако для полноценной доработки необходимо включить поддержку какого-нибудь современного формата моделей и улучшиь мелочи вроде декалей, спрайтовых эффектов вроде взрывов и т.д.

Если вы попытаетесь самостоятельно реализовать изменения, которые я привел, увидеть результат сразу не получится: эти апгрейды дают возможность движку подгружить TGA-файлы, но чтобы их подгружать, их нужно иметь!

Сначала поподробнее остановимся на проблеме дальнейшего расширения вкусностей. Так как мы работаем в рамках условий General Public License, то мы не только обязаны раскрывать исходники всем желающим, но в свою очередь можем использовать чужие разработки. Среди двух десятков конкурирующих движков самым стабильным, быстрым и нашпигованным эффектами является Quake2Evolved v.0.40 от Team Blur. Более того, этот движок специально рассчитан на полную совместимость с классическим Quake2, что дает возможность приступить к созданию игры без предварительной подготовки и при помощи стандартного инструментария. Скачать все необходимые файлы можно с моего сервера - в дальнейших примерах я буду использовать именно их - http://www.quake2evolved.com/files.htm или найти на диске в папке /quake2/quake2evolved/. (не забудьте об OpenAL! Эта крохотная библиотека позволяет реализовать трехмерный звук, и она необходима для запуска).

Эта версия движка идеально документирована, стабильна и уже выдержала минимум две коммерческие реализации в виде игр. Движок поддерживает практически все шейдерные функции уровня Quake3, использует для моделей формат MD3 (Quake3), что избавляет от десятка весьма специфических проблем, имеет кучу мелких апгрейдов и совершенно не затрагивает логику игры - значит логикой можно заниматься независимо от движка. Небольшие дополнительные вкусности вроде поддержки формата pk3-zip облегчают жизнь и отладку.

Теперь подробнее остановимся на том, что мы имеем то, чего не видим. Загадочная фраза означает, что для видимого эффекта придется поработать в Photoshop, создавая собственные текстуры, затем поковырять GTK Radiant, чтобы создать собственные уровни и т.д. Но об этом - в следующий раз, чтобы не запутывать читателя. Самая скучная и рутинная часть закончена, так что о ней нужно забыть максимально быстро. Пока же для того, чтобы убедиться, что все наши улучшения действительно работают, необходимо распаковать все pak-файлы в директории /baseq2/ и удалить их, чтобы не мешали. Затем в папке /baseq2/textures/ выбираем нужный нам эпизод, например папку /e1u1/ (первый эпизод, первый unit) и заменяем в нем некоторые часто используемые wal-текстуры на собственные tga-файлы с теми же названиями. TGA-текстура должна автоматически появиться на картах этого эпизода. Для распаковки pak-файлов лучше всего использовать утилиту WinPak (www.filezone.ru/winpak.zip или /quake2/utils/winpak.exe на диске), а для просмотра текстур в формате wal идеально подойдет утилита Wally (www.filezone.ru/wally.zip или /quake2/utils/wally.exe на диске).

Следующее откровение будет посвящено практическому вызову духов и разнообразной нечисти, а так же способам управления этими милыми существами c "живыми" примерами. Готовьтесь! Зубрежная тоска закончилась.

   ТОЧКА ВХОДА
   РЖАВЫЙ ВИВИСЕКТОР
   ВЕРБАЛЬНАЯ ДИАРЕЯ
   ЯЩИК С ИГРУШКАМИ
   ПОКАТУШКИ
   РЭГТАЙМ
   ЧЕРТЕЖИ
   РЕАЛИЗМ
   ИГРЫ В СОЛДАТИКИ
   SUPERCOMMANDO.COM
   TRASHSTUDIO.COM
   STRANGEART.RU
   ПИСАТЬ СЮДА
ДРОИД-ШПИОН - контрольный запуск   
МЕНТАТ-ДРАЙВЕР - в тесте   
ИМПУЛЬСНАЯ ВИНТОВКА - в тесте   
УРАН НА ЛУНЕ - тесты завершены   
ПРОЕКТ ЗАВЕРШЕН  
СУПЕРСИЛА ДЛЯ ДИСТРОФИКА:  

Подавляющее число людей не отличается не то чтобы атлетическим телосложением, но и вообще не обладают сколько-нибудь заметной физической силой, чтобы противостоять, скажем, трем противникам одновременно. А так хочется посрамить постановочные трюки Джеки Чана!

далее   
ПРОЕКТ ЗАВЕРШЕН  
ДВИГАЙ МЫСЛЬЮ, А НЕ ЗАДНИЦЕЙ!:  

И пока Москву заполоняли крысы размером с ротвейлера, а старых дев похищали гости с Альфа Центавры, на тему телекинеза отчаянно измывался даже беззубый Ералаш. Классика жанра: школьник легко мог двигать дневник "силой мысли" до тех пор, пока злобная училка не пригвоздила его жирной увесистой двойкой по физике... за что предадим анафеме старую школьную мегеру и докажем, что этой дуре самой было бы неплохо подучить физику.

далее   
ПРОЕКТ ЗАВЕРШЕН  
БРИНАЛЬНЫЙ МАЗОХИЗМ:  

Киборги! Вот чего нам необходимо опасаться. Они будут лучше нас, людей, во много раз. Умнее, с лучшей памятью, со встроенными телефонами, модемами, фото- и видеоаппаратами и прочей дребеденью, которую мы сейчас таскаем на себе как вьючные животные.

Очевидно, что Врага нужно изучить, тем более что существуют прототипы. Пока слабые и неопасные, но многообещающие уже в недалеком будущем.

далее   
ПРОЕКТ ЗАВЕРШЕН  
ИГРЫ С РАДИАЦИЕЙ:  

"Тяжелая физика", которая связана в первую очередь с легкими частицами, как правило вызывает отнюдь не легкую оторопь у новичка. Загадочные названия, неудобоваримые правила сведения формул и совершенно ненормальные прилагательные сбивают с толку даже самых стойких. Последний фактор, кажется, пугает больше всего: описывать очередную частицу как "красивую", "очаровательную" или "очарованную" - выше понимания среднестатистического человека.

Нас же интересует практическое применение радиации. Вы не "очитались": на самом деле радиация страшна только в газетных заметках или на территории ядерных полигонов, где она заботливо культивируется.

далее   
ПРОЕКТ ЗАВЕРШЕН  
ПИВНАЯ АКУСТИКА:  

Обычно псевдонаучный термин "пивная акустика" используется работниками приличных баров и ресторанов, когда они выводят слегка перебравших посетителей с завышенным самомнением. Вопли класса "я свои права знаю!" или "уберите ваши грязные лапы!" отличаются неприятными амплитудно-частотными характеристиками и очень мешают окружающим, поэтому охрана старается как можно быстрее вывести такие источники звуковых волн на свежий воздух. Не правда ли, неприятная, но вполне обычная ситуация?

Но каждая идиома с переносным смыслом может быть расшифрована самым грубым и прямым способом. Впервые мне пришлось наблюдать этот подход в Кардиффском клубе ветеранов. Какой-то ненормальный коллекционер в пивном угаре подарил клубу шестифунтовую противотанковую пушку - это изящное канадское страшилище гордо стоит напротив барной стойки. Гильзы снарядов к пушке достаточно тяжелы и требуют аж двух человек обслуги, но сам снаряд удивительно точно повторяет очертания современной пивной банки.

далее   
ПРОЕКТ ЗАВЕРШЕН  
AI-КАМЕРА:  

Достаточно иметь голову на плечах и руки с десятком-другим пальцев, чтобы оценить все прелести старой техники. Списанная рухлядь имела пару неоспоримых преимуществ по сравнению с современными монстрами: она была простой и имела практически полностью открытый интерфейс. Старым хламом можно было управлять через драйвера, а можно и вручную через набор портов и регистров. А вот попробуйте молотком и кусачками разворотить корпус вашего нового мобильника, извлечь из него встроенную фотокамеру, а потом попытаться прикрутить ее к USB-порту! Даже инженеры, которые создавали этот шедевр миниатюризации, обреченно покрутят пальцем у виска горемыки, прогоревшего на попытке проделать этот фокус. Ни пользы, ни финансовой составляющей в этой операции не усматривается.

далее   
ПРОЕКТ ЗАВЕРШЕН  
АКТИВНАЯ ШПИОНОМАНИЯ:  

Очевидно, что оборона - удел лузеров. Однако я редко встречал авторов, которые прислушивались к этой прописной истине. Всевозможные поделки в журналах вроде Радио, РадиоАматор или в дурацком Хакер сводятся исключительно к пассивным методам шпионажа - украсть пароль, отсниффить поток данных и т.д. Скучно.

Ну раз все так тускло на российском железном небосклоне, придется поделиться сакральным знанием, как самостоятельно заняться прямой агрессивной пропагандой, благо теперь это модно в "узколиберальных" кругах. Так как политические пристрастия нашей команды колеблются в диапазоне от утопизма Мора до тотального протекционизма, то идею мы дарим всем.

Первые опыты прошли успешно, теперь мы решаем, на чем сосредоточить свои усилия: на радио или ТВ. Первый вариант отличается простотой, но второй, очевидно, более интересен читателю ;)

далее   
ПРОЕКТ ЗАВЕРШЕН  
ВЕБСЕРВЕР НА КАРТОФЕЛЕ:  

Веб-сервер, который работает при помощи необычного источника питания - двух картофелин, 20 таблеток аскорбиновой кислоты и 50ти копеек, разменянных на однокопеечные монеты... Поверить в это трудно, ведь очевидно, что такой источник обладает крайне низкой "мощностью".

Но наш сервер использует в качестве "базы" старую плату с 286-ым процессором, 2Мб памяти и немного модифицированный веб-сервер BoA под управлением MsDOS. Плата пережила небольшую хирургическую операцию по удалению всех лишних и энергоемких деталей, плата MIO использует 8-мибитную шину, а вся информация расположена в оперативной памяти сервера. Даже сигнальные светодиоды сетевой платы перекусаны, чтобы зря не светились! ;)

Это необычное устройство будет подробно описано на страницах январского номера ПЛ-Компьтеры. В связи с новогодними праздниками, которые наверняка затянутся примерно до 15 января, у нас есть возможность поддерживать эти сервер и сайт в рабочем состоянии в свободное от безделья время.

далее   
ПРОЕКТ ЗАВЕРШЕН  
UBER-SPEED:  

Знакомый психолог однажды заметил, что каждому человеку присущ садизм. У одних это проявляется в виде рыка на подчиненных, у других - промывании мозгов родственникам. Даже самые тишайшие и скромнейшие очкарики в снах разрывают на части своих врагов изощреннейшими методами. Но это слишком примитивные и неэстетичные способы удовлетворить маленький зуд разрушения. Ломать и портить нужно с пользой для дела и желательно с материальными следами.

Выше я уже упоминал, что разгон современного процессора не является особенной доблестью. Это скорее пограничный тюнинг, не более. Посрамить современные процессоры эти достижения не могут ни под каким видом. Нужно что-то особенное! Представьте себе космический межзвездный корабль, собранный на базе Жигули! Вот это уже действительно серьезная заявка на суперхит.

На этот раз мы беремся разогнать процессор более чем в 10 раз (десять!!!) при помощи подручных материалов безо всяких жидких азотов и прочей "кулхацкерской" атрибутики.

далее   
ПРОЕКТ ЗАВЕРШЕН  
ФОТОСИНТЕЗ В БИТАХ:  

Новомодное течение отключать электроэнергию в масштабах мегаполисов или целых стран процветает и гордо шествует по всему миру. Если где-нибудь в Гане или в Кот-Д-Ивуаре (проверил сам) это увлечение не находит должного отклика в массах и прессе ввиду отсутствия самой энергии и прессы как таковых, то в более развитых странах останавливающееся метро вызывает бурю эмоций и обеспечивает вас нудными историями для будущих внуков. Рядовой американец тут же укладывается спать, надеясь на то, что электричество будет отключено до 10 утра и на работу идти не придется, рядовой британец застревает в пабе на всю ночь при свечах (гонг в 11 отменен), но российский обыватель почему-то не может оценить редкую возможность насладиться романтикой. Лампочка не светит, холодильник не гудит, а сам обыватель жестоко матерится и вспоминает главу РАО ЕЭС.

Сделаем простой расчет. Пусть у нас есть солнечная батарея с эффективной площадью в один квадратный метр, солнце в небе и тестер в руках. Для пущей реалистичности будем считать, что КПД нашего чуда равен всего лишь 10%. Получаемый киловатт энергии быстро делим на 10 и получаем половину стандартного блока питания АТ-корпуса. В принципе этого должно хватить для питания машины на уровне 386SX/DX или 486DLS/DLX. Почему такие странные запросы?

далее   
ПРОЕКТ ЗАВЕРШЕН  
РЕЗИСТОРНАЯ МУЗЫКА:  

На заре компьютерной эры основной движущей силой прогресса была стесненность в средствах, точнее дороговизна компьютерных плат. Разнесчастная восьмибитная моно(!) звуковая карта от ESS могла с легкой хрипотцой прокаркать голосом ментата из Dune2 или на худой конец пошлепать огненными шарами из Doom2, правда, с жутким скрежетом. При этом подобное сомнительное удовольствие оценивалось в 300-400 долларов. Умельцы вспоминали азы радиоэлектроники и вооружались паяльниками, писали всевозможные драйвера для своих устройств и успешно конкурировали с Crеative и ESS.

Сейчас вполне приличные карты от ESS стоят в 100 раз дешевле, а звучат во столько же раз качественнее. Романтика былого времени уже забыта, однако наработки пионеров компьютерной индустрии до сих пор могут приносить пользу. Самый известный и распространенный перл того времени - COVOX. В простейшем варианте он представлял собою россыпь из десятка резисторов, одного конденсатора и разъема LPT-порта, а позволял выводить звук с качеством не хуже звуковых карт того времени. Небольшая доводка "драйвера" или программы, с которой он работал, превращала его в универсальный цифроаналоговый преобразователь. Его можно было превратить в устройство, управляемое программно любым аналоговым прибором.

далее   
Henry Sheppard / Генри Шеппард