Зеркала в Duke Nukem 3D
Году эдак в 1998, я раздобыл редактор уровней для Duke Nukem 3D, и первым делом я создал собствнный уровень, где поставил два зеркала друг напротив друга, зеркальный коридор. Загрузился в эту карту, вошел между зеркалами и игра зависла.
Недавно энтузиаст решил проверить все свойства зеркал в Duke Nukem 3D. Нашел много забавного и интересного.
На первом уровне есть туалет. Один. Значит общий для мальчиков и девочек. С огромным проёмом без двери и с писсуарами. Хм… И с диваном.
![image](https://64.media.tumblr.com/ffdcd9c181d11ef1645c9095cd512d09/47eacc7d19899727-01/s1280x1920/2b6883f31ce41b2980f1ac6435b0f2cfcd8c985c.png)
В бета версии были и мужские и женские туалеты.
Возможно, главная причина существование туалета — это зеркало. Чтобы продемонстрировать крутость движка. Настолько крутой, что может даже зеркало.
В зеркале отображаются монстры.
![image](https://habrastorage.org/webt/pc/ah/j7/pcahj72nsp2xw6gxmfp40sc4j8s.gif)
По зеркалам можно стрелять, на них остаются слуды от пуль, но они сломаются от взрыва или если в них просто кинуть гранату.
![image](https://habrastorage.org/webt/b_/a8/ex/b_a8exmavv-cwzmczbcux1s9i-o.gif)
Но самое интересное начинается, если вы введёте читкод на прохождение сквозь стены… и пройдёте сквозь зеркало.
Движок устроен так, что по ту сторону зеркала генерируется такая же комната и немного «магии», чтобы спрайты работали.
В зазеркалье, как и в реальной комнате есть телефонный номер на стене, но он «вывернутый».
В игре есть бомбы с дистанционным взрывателем. Что если…
![image](https://habrastorage.org/webt/w6/xs/ac/w6xsacig7-r4iyx0vwpzygn8sfq.gif)
… войти в зазеркалье, оставив бомбу снаружи и её взорвать?
![image](https://habrastorage.org/webt/by/yl/7h/byyl7huow2wzc6ir3slfstpzafu.gif)
Мда.
Игра не отображает на карте область зазеркалья.
![image](https://habrastorage.org/webt/7e/mq/rg/7emqrgg0df1apbqzkuu82_wuvvu.gif)
Если вы уйдете в зазеркалье далеко, то вы умрёте, даже с кодом на бессмертие.
Вот так выглядит редактор уровней. Красная линия сверху — зеркало.
Если войти в «предпросмотр», то увидим заполнени буковками «S». Спецэффект под названием Sector Effector.
Вопрос: разработчик ручками должен прорисовать «зазеркалье» или движок автоматически копирет «реальность»?
Копирует.
Но при этом центр карты уполз. Почему?
Если вы уменьшите масштаб, вы увидите огромноую комнату.
Если мы в неё войдём, оглянувшись, мы увидим туалет.
Но это большая пустая комната.
Движок копирует реальность, но в момент загрузки уровня. Он находит все зеркала и копирует «отражение» в зарезервированную область.
Если вы выходите за перделы этой комнаты в зазеркалье, вы умираете.
А если специально уменьшить эту «комнату»? Что произойдет?
![image](https://habrastorage.org/webt/yw/jl/dt/ywjldtce-l1zdmrjp89zfzwbqnk.gif)
Издалека зеркало не будет работать. Оно будет работать только для тех участков, которые поместились в уменьшенную комнату.
![image](https://habrastorage.org/webt/zs/lm/ri/zslmrisj2p2tusfjcmty9c0o26a.gif)
Вблизи — работет. Отдаляемся — не работает.
![image](https://habrastorage.org/webt/mg/zb/zw/mgzbzwjzlk-x_yhrhv5e3lxlcdm.gif)
Мы видим, так же что и смерть с кодом на бессмертие также наступает при пересечении границы уменьшенной комнаты.