Author Topic: Конструктор олдскульных FPS (кодовое имя RGC)  (Read 299 times)

0 Members and 1 Guest are viewing this topic.

Online Vuvk

  • Friends
  • Baron (-ess)
  • *
  • Posts: 337
  • Reputation 31
  • Lokemundux Desco Domus Shaantitus
Всем привет! По просьбе Alec'а создаю тему, где буду эпизодически выкладывать информацию о ходе разработки конструктора шутеров от первого лица на базе движка WS3D.

Raycasting Game Constructor (название временное)- конструктор олдскульных игр жанра FPS
Жанровая направленность: FPS, Action
Graphic API: OpenGL, DirectX, Software Rendering (Burning's Video)
Язык программирования: D для "запускатора", ObjectPascal/FreePascal для редактора карт и ресурсов
Движок: в раннере используется WorldSim3D
Платформы: Linux, Windows, гипотетически MacOS
Лицензия: коммерческая, проприетарная?

Отличия от известного прототипа RGM:
- три типа рендеринга;
- поддержка современных разрешений экрана;
- текстуры более высокого разрешения (ограничено искусственно);
- гипотетическая возможность добавления бесконечного количества текстур, спрайтов, кадров анимации;- настраиваемые коллизии;- масштабирование спрайтов;
- скайбоксы и их предпросмотр прямо в редакторе;
- послойное рисование полов, стен, потолков;
- поддержка множества форматов текстур: jpg, jp2000, bmp, png, tiff, tga и проч.
- автоматическая подгонка редактором загружаемых текстур под размеры и необходимый движку формат;
- управление количеством карт и скайбоксов;
- удобный редактор, включающий в себя редактор ресурсов, карт, IDE для написания скриптов;
- скриптовый язык программирования для управления логикой игры.

На данный момент готово что-то около 50% от заранее задуманного, несмотря на то, что разработка началась прямо с новогодних каникул 2018 года. В основном это связано с тем, что формат редактора, хранения данных и используемые инструменты менялись не раз из-за потребностей пользователей. Сейчас, когда готова гибкая база, я планирую остановиться на играх уровня "чуть лучше Wolf3D" и закончить наконец конструктор. А затем буду двигаться в сторону многоэтажности и, быть может, усложнения архитектуры уровней (средствами BSP карт).

Вдогонку несколько картинок и видео.
Картинки (кликабельно):




Видео (от старых к новым):

Редактирование текстур и рисование карты
Предпросмотр скайбокса в редакторе
Настройка коллизий
Взаимодействие с дверями, рестарт интерпретатора и разное поведение дверей

Вообще, основной лог разработки ведётся у меня в дневнике - Antoshka's Diary, но буду стараться не забывать отписаться и сюда о прогрессе.
Crudux Cruo!

Offline Nikolas - WS3D Developer

  • Programmer
  • Global Moderator
  • Marquess
  • *
  • Posts: 869
  • Reputation 61
Хорошая новость. Я слежу за данным проектом с самого начала. Вообще написать конструктор игр=(написать игру+написать редактор уровней)*N / K, где N-коэффициент багов инструментария плюс свои плюс учет всех пожеланий потенциальных пользователей, K-коэффициент энтузиазма, помноженный на свободное время. Лично сам так и не смог полностью закончить свои попытки написать даже редактор. В основном приходил к выводу, что никуда не годно. Последняя попытка была на связке irrlicht+Qt.
Пожелаем терпения автору. Будем следить за прогрессом и по возможности помогать.
Под лежачий камень мы всегда успеем...

Offline Alec - WS3D Developer

  • Producer
  • Administrator
  • Marquess
  • *
  • Posts: 885
  • Reputation 34
  • Game making is my hobby for life!
Очень хороший проект! На странице VK видно, что проект вызывает немалый интерес.  :)

За полгода 50% от задуманного - хороший темп. Т.е. вероятно есть версия v0.5?
Хорошо, что есть видео и скрины.
Интерфейс конструктора, судя по скринам, сделан аккуратно, приятно смотреть и приятно будет работать с ним. Удачный приятный шрифт у элементов интерфейса.

А демки есть?
« Last Edit: June 04, 2018, 05:50:23 PM by Alec - WS3D Developer »
WorldSim3D = 3D + FreeBasic. Программируй в удовольствие, а не "в тягость"! Make your project with pleasure, not with strain!

Online Vuvk

  • Friends
  • Baron (-ess)
  • *
  • Posts: 337
  • Reputation 31
  • Lokemundux Desco Domus Shaantitus
Демка, которую я выкладывал 26 мая сего года  ::) скачать бесплатно без регистрации и СМС

Описание:
Раннер загружает всегда первую карту и использует ресурсы ПАКОВ, т.е. в редакторе нужно тыкать "Project->Export". В будущем раннер будет уметь работать с ресурсами проекта без экспорта в режиме превью и запускать любую карту, а не только первую (уже заложено), редактор сможет работать с проектами, лежащими в иной папке, а не в корне (тоже уже заложено).

Что в архиве:
rgc_editor.exe - редактор rgc_runner.exe - среда выполнения
run_d3d.bat - запуск с рендерингом на DirectX 9
run_ogl.bat - запуск с рендерингом на OpenGL
run_soft2.bat - запуск с программным рендерингом Burnings Video

Сейчас занимаюсь внедрением более быстрого интерпретатора скриптов на JavaScript. Когда оно будет готово, выложу новую демку со сравнением старой и новой версий раннера.
Crudux Cruo!

Online Vuvk

  • Friends
  • Baron (-ess)
  • *
  • Posts: 337
  • Reputation 31
  • Lokemundux Desco Domus Shaantitus
Вот и закончена недельная эпопея по переезду с одного интерпретатора скриптового языка на другой. Теперь скрипты при загрузке компилируются в байткод и этот самый байткод выполняется в игре. Улучшено управление памятью. Ускорены операции очищения массивов с помощью сишных команд вместо дишных.

Прикладываю ссылку на архив с маленькой сценкой и двумя раннерами:
rgc_runner_d.exe - старый раннер с интерпретатором duktape
rgc_runner_js.exe - новый раннер с интерпретатором JerryScript
Намеренно отключена верт.синхронизация и ограничение кадров, чтобы можно было посмотреть максимальный FPS (что чревато багами с физикой, к сожалению). Кстати, интересно почему появляются застревания в стенах при высоких ФПС?
« Last Edit: June 05, 2018, 03:26:17 PM by Vuvk »
Crudux Cruo!

Offline Nikolas - WS3D Developer

  • Programmer
  • Global Moderator
  • Marquess
  • *
  • Posts: 869
  • Reputation 61
Привет автору.
Про застревания не замечал, надо наверное, апгрейд своему компу делать: с моим фпс-ом все норм. Впрочем, это как-раз аргумент ничего не менять ;D.
Очевидно, JerryScript быстрее, чем duktape (при условии одинаковой организации обработки скриптов).
fps: 180 vs 140

Так что, с D снова на С ?
Под лежачий камень мы всегда успеем...

Online Vuvk

  • Friends
  • Baron (-ess)
  • *
  • Posts: 337
  • Reputation 31
  • Lokemundux Desco Domus Shaantitus
Quote
Впрочем, это как-раз аргумент ничего не менять ;D.
К несчастью, с этим что-то надо делать, т.к. не я один заметил появляющийся баг с застреванием игрока в стенах, дверях и прочем при повышенном FPS.

Quote
Очевидно, JerryScript быстрее, чем duktape (при условии одинаковой организации обработки скриптов).
Да, скрипты одни и те же, обработка практически идентична (разница лишь в API интерпретаторов).

Quote
с D снова на С ?
А зачем? D позволяет писать как на низком сишном уровне, так и уровнем выше, чем C++, наравне с C#. Основную часть пишу на высоком уровне, но есть места для вставок на Си для ускорения. Не вижу смысла отказываться от тех средств, которые предоставляет Ди.
Crudux Cruo!

Offline Nikolas - WS3D Developer

  • Programmer
  • Global Moderator
  • Marquess
  • *
  • Posts: 869
  • Reputation 61
Привет, Vuvk!
Quote
К несчастью, с этим что-то надо делать, т.к. не я один заметил появляющийся баг с застреванием игрока в стенах, дверях и прочем при повышенном FPS.
Есть парочка мыслей. Для начала давай попробуем такой вариант. Собрал Irrlicht+WS3D в режиме accurate_math (было ранее fast_math). М.б. это устранит неприятность с застреванием? Проверить сам не имею шансов за неимением мощного железа. Написал в ЛС.
Если нет, попробуем тогда поковырять менеджер коллизий. Там есть фишка с рекурсивной проверкой. Можно увеличить порядок рекурсии при проверке столкновений. Но это пока догадки.
Под лежачий камень мы всегда успеем...

Online Vuvk

  • Friends
  • Baron (-ess)
  • *
  • Posts: 337
  • Reputation 31
  • Lokemundux Desco Domus Shaantitus
Quote
баг с застреванием игрока в стенах, дверях и прочем при повышенном FPS
исправлен в ходе беседы с Nikolas'ом  8)
Crudux Cruo!

Offline Alec - WS3D Developer

  • Producer
  • Administrator
  • Marquess
  • *
  • Posts: 885
  • Reputation 34
  • Game making is my hobby for life!
Ух ты, это хорошо. У меня тоже в проектах этот баг был.
WorldSim3D = 3D + FreeBasic. Программируй в удовольствие, а не "в тягость"! Make your project with pleasure, not with strain!

Online Vuvk

  • Friends
  • Baron (-ess)
  • *
  • Posts: 337
  • Reputation 31
  • Lokemundux Desco Domus Shaantitus
В ходе разработки возникли два вопроса к движку:
1. Функции работы с wImage в описании требуют то wImage, то wTexture. Если сгенерированную текстуру конвертирую в имадж, то функции рисования падают. Путаница опять-таки:
пример
Code: [Select]

void wImageDraw (
    wTexture* texture,
    wVector2i pos,
    bool useAlphaChannel,
    wColor4s color);
но при этом
Code: [Select]
wColor4s wImageGetPixelColor (wImage* img, wVector2u pos)2. Какой бы цвет в формате wColor4s ни передал в wSceneBegin или wSceneBeginAdvanced, цвет всегда белый  ::)  Какая переменная ожидается и какого размера в байтах? Может косяк на стороне D...
3. Не нашёл никакой возможности отключить фильтрацию/сглаживание при рисовании двумерных wImage, а отсюда всякие косяки - тонкие линии на краях, обводка:


Crudux Cruo!

Offline Nikolas - WS3D Developer

  • Programmer
  • Global Moderator
  • Marquess
  • *
  • Posts: 869
  • Reputation 61
Привет, Vuvk.

Первый вопрос мы как-то ранее уже обсуждали. wImage и wTexture- разные типы. В функциях wImageDraw... используется только в wTexture.
У wImage нет метода рисования в принципе, это, скорее, вспомогательный тип. {Хотя, в ГУИ он как-то рисуется...

 Доступ к пикселям по координатам (x,y) есть только у wImage, у wTexture- только перебором, как примере 70, ну можно самому организовать двумерный массив у себя, если требуется постоянный контроль над цветом пикселей.

Но я все-же переименую функции wImageDraw..... в wTextureDraw, чтоб закрыть этот вопрос.

Второй момент- однозначно косяк не WS3D. В wSceneBegin принимает цвет из структуры, размерность которой  4 * sizeof(uint16_t), т.е. по сути
4 * sizeof(unsigned short). Кстати, при подключении к QtCreator-у пришлось первый вариант закомментить, а использовать именно вторую форму записи- ругается.

По поводу 3-го вопроса надо думать.   Может, стоит попробовать рисовать через  wGuiImageCreate+wGuiObjectDraw? Только там опять таки нужен тип именно wTexture
Под лежачий камень мы всегда успеем...

Online Vuvk

  • Friends
  • Baron (-ess)
  • *
  • Posts: 337
  • Reputation 31
  • Lokemundux Desco Domus Shaantitus
Code: [Select]
wGuiImageCreate+wGuiObjectDraw
Буду пробовать

Code: [Select]
wGUIImageUseAlphaChannel
не по канону
« Last Edit: June 14, 2018, 12:01:24 PM by Vuvk »
Crudux Cruo!

Offline Nikolas - WS3D Developer

  • Programmer
  • Global Moderator
  • Marquess
  • *
  • Posts: 869
  • Reputation 61
Quote
не по канону
Готово. 
Под лежачий камень мы всегда успеем...

Online Vuvk

  • Friends
  • Baron (-ess)
  • *
  • Posts: 337
  • Reputation 31
  • Lokemundux Desco Domus Shaantitus
В общем, проверил. Обводки и сглаживания нет - верно. Но я так и не смог скрыть объект ни командой wGuiObjectSetVisible, ни wGuiObjectSetEnable. Странненько. Опять же нет возможности вращать картинку - в этом смысле мне wImageDraw нравится больше.
Crudux Cruo!