Найти в Дзене

Как я начал делать 2.5D игру (и чем это кончилось?)

Текстуры пола и стен честно реквизированы из "The elder scrolls: Arena" для сравнения степени схожести своей игры с неповторимым оригиналом.
Видео выше демонстрирует, на чём я сейчас остановился.
Как я до этого дошёл, и почему остановился? Сейчас я всё объясню.
Сначала у меня был невероятно простенький алгоритм (на основе клеточного автомата) для создания двумерных пещер:
Текстуры пола и стен честно реквизированы из "The elder scrolls: Arena" для сравнения степени схожести своей игры с неповторимым оригиналом.

Видео выше демонстрирует, на чём я сейчас остановился.

Как я до этого дошёл, и почему остановился? Сейчас я всё объясню.

Сначала у меня был невероятно простенький алгоритм (на основе клеточного автомата) для создания двумерных пещер:

Результат работы алгоритма создания 2-м пещер
Результат работы алгоритма создания 2-м пещер

А ещё у меня была игра "The elder scrolls: Arena". И я знал, что она использует псевдотрёхмерный движок, но особо в это не углублялся. Потом я увидел где-то заметку в духе "Псевдотрёхмерный движок за 91 строчку кода!". Прочитав и осознав, я вдруг понял, чего я хочу.

Я хочу бродить по своим пещерам в псевдотрёхмерной бродилке собственного написания.

Сказано - сделано. И вот на свет появляется первый прототип:

Да, оно написано на PascalABC.NET
Да, оно написано на PascalABC.NET

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

https://lodev.org/cgtutor/raycasting.html

Но этот вариант меня не удовлетворял. 12 кадров в секунду при полном отсутствии текстур? Ужасно! НИП? А их тоже нет!

Текстуры и спрайтовые НИПы
Текстуры и спрайтовые НИПы

Потом я решил добавить многоэтажность. Трёхмерность в псевдотрёхмерный движок. Прямо как это сделали разработчики игр в реальности (к слову, в Арене тоже есть некоторая вертикальность)

У стен появился второй этаж
У стен появился второй этаж

Принцип работы многоэтажной отрисовки очень простой:
Это просто сдвиг этажей на дробную часть высоты этажа. К слову, точно также рисуются и ямы, и даже прыжки.

Мой рисунок, с помощью которого я понял механику прыжков и многоэтажности
Мой рисунок, с помощью которого я понял механику прыжков и многоэтажности

Следующим этапом был текстурированный пол/потолок.

Эпилептическая текстура из paint прилагается
Эпилептическая текстура из paint прилагается

Главной проблемой текстурного пола является то, что отрисовка стен для одного кадра занимает x операций, а отрисовка пола x*y/2 операций. Между тем без текстур пола не обойтись. Как я буду решать эту проблему? Очень просто. Я обращусь к статье по ссылке, которую давал выше.

Эксперимент: я вырезал интерфейс своей "игры" и Арены, и наложил его на скриншоты из обеих игр.

Моя "игра" выглядит дешёвой китайской подделкой :(
Моя "игра" выглядит дешёвой китайской подделкой :(

И тут внезапно оказалось, что раз я делал всё в тестовом режиме, "просто посмотреть, что получится", то итоговый вариант с точки зрения кода и подключения к физическому игровому движку абсолютно ужасен.

ОКОНЦОВКА

Вышло сумбурно и непонятно, просто хотелось поделиться своей поделкой.

Однако у меня есть планы:

1. Если есть интерес, то я могу сделать перевод предположительно лучших статей про создание псевдотрёхмерного графического движка

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