Зеркала в Duke Nukem 3D

image

Году эдак в 1998, я раздобыл редактор уровней для Duke Nukem 3D, и первым делом я создал собствнный уровень, где поставил два зеркала друг напротив друга, зеркальный коридор. Загрузился в эту карту, вошел между зеркалами и игра зависла.

Недавно энтузиаст решил проверить все свойства зеркал в Duke Nukem 3D. Нашел много забавного и интересного.
image

На первом уровне есть туалет. Один. Значит общий для мальчиков и девочек. С огромным проёмом без двери и с писсуарами. Хм… И с диваном.

image

В бета версии были и мужские и женские туалеты.

image

Возможно, главная причина существование туалета — это зеркало. Чтобы продемонстрировать крутость движка. Настолько крутой, что может даже зеркало.

image

В зеркале отображаются монстры.

image

По зеркалам можно стрелять, на них остаются слуды от пуль, но они сломаются от взрыва или если в них просто кинуть гранату.

image

Но самое интересное начинается, если вы введёте читкод на прохождение сквозь стены… и пройдёте сквозь зеркало.

Движок устроен так, что по ту сторону зеркала генерируется такая же комната и немного «магии», чтобы спрайты работали.

image

В зазеркалье, как и в реальной комнате есть телефонный номер на стене, но он «вывернутый».

В игре есть бомбы с дистанционным взрывателем. Что если…

image

… войти в зазеркалье, оставив бомбу снаружи и её взорвать?

image

Мда.

image

Игра не отображает на карте область зазеркалья.

image

Если вы уйдете в зазеркалье далеко, то вы умрёте, даже с кодом на бессмертие.

image

Вот так выглядит редактор уровней. Красная линия сверху — зеркало.

image

Если войти в «предпросмотр», то увидим заполнени буковками «S». Спецэффект под названием Sector Effector.

Вопрос: разработчик ручками должен прорисовать «зазеркалье» или движок автоматически копирет «реальность»?

Копирует.

image

Но при этом центр карты уполз. Почему?

image

Если вы уменьшите масштаб, вы увидите огромноую комнату.

image

Если мы в неё войдём, оглянувшись, мы увидим туалет.

image

Но это большая пустая комната.

Движок копирует реальность, но в момент загрузки уровня. Он находит все зеркала и копирует «отражение» в зарезервированную область.

Если вы выходите за перделы этой комнаты в зазеркалье, вы умираете.

image

А если специально уменьшить эту «комнату»? Что произойдет?

Ответ
image

Издалека зеркало не будет работать. Оно будет работать только для тех участков, которые поместились в уменьшенную комнату.

image

Вблизи — работет. Отдаляемся — не работает.

image

Мы видим, так же что и смерть с кодом на бессмертие также наступает при пересечении границы уменьшенной комнаты.

© Habrahabr.ru