Перейти к содержанию

F2: Заметки о новом движке.


Jordan

Рекомендуемые сообщения

Всем привет. Проект не заброшен.

 

Много времени уходит на написание базового движка. (Графика, GUI ит.д)

 

В последнем обновлении добавил загрузку frm. 

 

Код

https://github.com/JordanCpp/Commune

 

Ссылка для скачивания https://github.com/JordanCpp/Commune/archive/refs/heads/master.zip

Скачайте и запустите Fallout.bat

Скачайте и запустите Disciples.bat (Если интересно)

 

Ссылка для клонирования репозитария https://github.com/JordanCpp/Commune.git

 

Для компиляции нужна только Visual Studio Community 2019. Все остальные файлы включены в проект.


На данный момент закладываю основы. В след обновлении добавлю редактор и вывод карты. Далее улучшить редактор. Добавить редактирование карты.
Рад если кто нибудь присоединится к проекту. Советом или кодом.
Ссылка на комментарий

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

 

На сайте https://github.com/falltergeist/falltergeist как раз есть исходники инструментов.

 

Конечно это будет нарушение прав, но кому сейчас какая разница.

Ссылка на комментарий

Фолу нужен хороший редактор скриптов, чтоб непрограмисты, простыми словами могли создавать квесты.
Напроимер: в интерфейсе пишем идти на карту 11, ждать 2 часа, поговорить с неписем Фред. А код пишется сам. Интеллектуально.
Но перекодировка форматов тоже хорошо. Фолтергейст, чтото там пытался в свое время.

Fallout 2Путеводитель по модам | FAQ | Перевод модов | Путеводитель по RP

Nevada Band: Путеводитель по играм серииFAQ

Fallout Tactics: Путеводитель по модам | FAQ

База Данных: YD\YD\MF

Помогая другим, не забывай о себе =) 

Ссылка на комментарий

Фолу нужен хороший редактор скриптов, чтоб непрограмисты, простыми словами могли создавать квесты. Напроимер: в интерфейсе пишем идти на карту 11, ждать 2 часа, поговорить с неписем Фред. А код пишется сам. Интеллектуально.

 

Это все от инструментария зависит. Я пишу простой движок вывода спрайтов с альфа каналом. Это если упрощать, там точно не будет такого инструментария. Максимум внедрить lua скрипты и конвертнуть ssl в lua. Я не пилю игру на Unity и иже с ним. Меня больше прельщает писать скрипты на С++, на языке движка. Пример как будет выглядеть скрипт вывода сообщения в консоль игры.

 

void Tester::MapEnter()

{

  if (Self()->GetStat(Stat::Strength) > 7)

  {

    Game::Console("А ты силён!");

  }

}

 

Наработки по конвертации ssl в С++ есть.

Ссылка на комментарий

Это все от инструментария зависит. Я пишу простой движок вывода спрайтов с альфа каналом. Это если упрощать, там точно не будет такого инструментария. Максимум внедрить lua скрипты и конвертнуть ssl в lua. Я не пилю игру на Unity и иже с ним. Меня больше прельщает писать скрипты на С++, на языке движка. Пример как будет выглядеть скрипт вывода сообщения в консоль игры.

 

void Tester::MapEnter()

{

  if (Self()->GetStat(Stat::Strength) > 7)

  {

    Game::Console("А ты силён!");

  }

}

 

Наработки по конвертации ssl в С++ есть.

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

 

На вашем примере:

В gui пользователь пишет (выбирает) "сообщение в консоль" и этот код прописывается автоматом.

Fallout 2Путеводитель по модам | FAQ | Перевод модов | Путеводитель по RP

Nevada Band: Путеводитель по играм серииFAQ

Fallout Tactics: Путеводитель по модам | FAQ

База Данных: YD\YD\MF

Помогая другим, не забывай о себе =) 

Ссылка на комментарий
Фолу нужен хороший редактор скриптов, чтоб непрограмисты, простыми словами могли создавать квесты.

------------

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

Ссылка на комментарий

------------

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

Так не палочка, а код преобразовывать в слова ,(точнее на оборот), написать скажем 30 действий с вариациями и уже можно разнообразный примитив, а крученый и печеный, что никто не разберется, такое и даром не надо

Fallout 2Путеводитель по модам | FAQ | Перевод модов | Путеводитель по RP

Nevada Band: Путеводитель по играм серииFAQ

Fallout Tactics: Путеводитель по модам | FAQ

База Данных: YD\YD\MF

Помогая другим, не забывай о себе =) 

Ссылка на комментарий

Такой редактор будет строить примитивные диалоги. Всмысле если не шаришь в базовом програмировании, то получишь на выходе примитивный диалог, без логики, без переменых.

Так что он посути тебе и не поможет, а те кто хоть как-то понимают в програмировании скриптов такой конструктор и не нужен будет.

В качестве помощника только если.

Ссылка на комментарий

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

Чего-то вспомнилось, для Арканума вроде ты тоже новый движок делал?

Ссылка на комментарий

Такой редактор будет строить примитивные диалоги. Всмысле если не шаришь в базовом програмировании, то получишь на выходе примитивный диалог, без логики, без переменых.

Так что он посути тебе и не поможет, а те кто хоть как-то понимают в програмировании скриптов такой конструктор и не нужен будет.

В качестве помощника только если.

 

Да так и есть. Проще писать кодом. Чем бороться с ограничениями такой программы.

добавлено позже

Чего-то вспомнилось, для Арканума вроде ты тоже новый движок делал?

 

Да. Я делал такой проект

 

https://github.com/JordanCpp/Commune

 

Он объединял три игры, но один движок. Сейчас я пересмотрел концепцию. В основе останется прежней, единая библиотека по работе с графикой, музыкой и т.д + отдельно игры.

 

Arcanum и Fallou 2 почти идентичны по написанию движка, есть небольшие различия в геймплее. Но в остальном код будет между ними одинаков.

 

Вот отдельный вариант для Arcanum

https://github.com/JordanCpp/ArcanumWorld

 

Сейчас я у себя в голове окончательно собрал весть проект:) Теперь можно браться за реализацию. У меня еще много кода на локальном ПК, где я экспериментировал, с 3Д, скриптами и т.д

 

Сейчас я готов воплощать.

добавлено позже

Все так же открытый код, язык С++ (высокоуровневый С++11) не сложнее питона. Внизу SDL2. Скрипты будут писать на С++ и собираться вместе с движком. Редактор будет встроен. В меню добавлю кнопку редактор.

 

Движок будет работать только с новыми форматами изображений png, mp3, xml.

 

Для основы возьму файлы Sonor'ы и сконвертирую в новые форматы. Как раз не будет проблем с распространением ресурсов.

добавлено позже

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

добавлено позже

Качество исходников чистый си + глобальные переменные по всему коду. Поддерживать ещё реально. Но вот внедрять фичи, ой как не просто, не поломав все.
Ссылка на комментарий

Качество исходников чистый си

подход там говняный))

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

В общем совсем разочаровал подход к тем исходникам.

Ссылка на комментарий

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

 

https://github.com/JordanCpp/Revival

 

Как юзать.

 

1. Скачать с гит хаба репозиторий https://github.com/JordanCpp/Revival/archive/refs/heads/master.zip

2. Распаковать.

3. Перейти в каталог Games/Fallout и запустить Fallout.exe

 

Архитектурно разделил движок на две части.

 

1. Библиотека скрывающая SDL2 называется Ext

2. Сам движок Fallout юзающий данную библиотеку.

3. Сам проект называется Revival - Возрождение. Возможно кто то захочет возродить другую игру используя библиотеку Ext. Для этого нужно создать каталог в репозитории и прописать его в cmake.

 

Обо всех изменениях буду писать сюда.

добавлено позже

Сейчас переношу функционал из данного проекта https://github.com/JordanCpp/Commune

добавлено позже

Что буду делать.

1. Доработать Painter для вывода графики, картинок.

2. Написать необходимые менеджеры, типа менеджер картинок.

3. Написать простой GUI.

4. Реализовать с помощью GUI, UI интерфейс для игры.

5. Создать локацию, научить движок сохранять и загружать.

добавлено позже

Многое из списка сделано, буду брать код и адаптировать к новому проекту.

добавлено позже

Ресурсы для игры будут взяты из мода Sonora. Графика frm будет конвертирована в png.

добавлено позже

Сама игра и ее ресурсы будут находится в данном репозитариq. После каждого обноdления, нужно будет скачать репозиторий и распаковать. Если кто то умеет в плюсы, просто клонируйте репозиторий в Visual Studio. Чуть позже добавлю доработки в cmake, что бы двиг собирался под linux.

добавлено позже

Буду рад техническим советам по движку и вообще. Только не нужно советовать брать unity или юзать 3D, тупо долго разбираться. Пока будет простой 2D движок.

Ссылка на комментарий

Добавил в проект библиотеку rapidjson, все текстовые файлы будут в json формате.

добавлено позже

Прототипы объектов, конфиги игры, карты, файлы локализаций тоже будут в json формате.

добавлено позже

Анимация будет хранится в png файле. Каждая анимация идёт в комплекте с json файлом. Где описаны свойства анимации и очередность кадров с направлениями, у каждого кадра есть размеры и координаты.

 

Пример

https://vsegda-pomnim.com/uploads/posts/2022-02/1645901012_45-vsegda-pomnim-com-p-spraiti-foto-55.png

добавлено позже

Собираюсь добавить поддержку модулей. Каждый мод будет находится в своем одноименном каталоге. При загрузке их можно подключить. Примерно понимаю как реализовать данную возможность. Я ушел от концепции числовых идентификаторов как в оригинальном движке. Только namespace + имя ресурса.
Ссылка на комментарий

Что буду делать.


1. Доработать Painter для вывода графики, картинок. Готово


2. Написать необходимые менеджеры, типа менеджер картинок. Готово


3. Написать простой GUI. В процессе, реализованы базовые вещи


4. Реализовать с помощью GUI, UI интерфейс для игры. В процессе (Есть главное меню:))


5. Создать локацию, научить движок сохранять и загружать. Ожидает


Ссылка на комментарий

Пилю главное меню. Кнопка красным выделяется при наведении курсора, на скрине его не видно.  Еще обновил SDL библиотеки до последних версий. Понимаю, что не густо:)

 

image.png

добавлено позже

Пишу по заветам отцов, каждый класс реализует конкретный функционал. В дальнейшем будет легко написать тесты. Главное не запутаться в классах:)

добавлено позже

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

добавлено позже

Ссылка на скачивание https://github.com/JordanCpp/Revival/archive/refs/heads/master.zip

 

Распакуйте и запустите Games/Fallout/Fallout.exe

Ссылка на комментарий

А нельзя достать движок Цвета как-то? Может, это упростит задачу?

Его движок давно открыт.

https://github.com/cvet/fonline

 

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

 

Я стараюсь все делать как можно проще, но не проще необходимого. У меня нет идей, как ускорить проект. Переходить на unity:)

добавлено позже

Я пару дней посвящу написанию тестов. Без них время на исправление ошибок увеличивается. Так как не понятно, что и где сломалось.
Ссылка на комментарий

Я сам бэкенд разработчик, основная специализация базы данных, обвязка C#. И упор на оптимизацию. Сейчас с новой работой ещё и часть фронта добавилась. Поэтому разработка даже простых 2D игр для меня в новинку.

добавлено позже

Не надо на Юнити переходить. Оно - мертвое

Да это больше шутка. Пока изучишь этот юнити, проще по туториалам на С++.

добавлено позже

Буду рад советам по реализации движка. Ссылки на статьи или по коду.

добавлено позже

Разобрал ресурсы мода Fallout Sonora. Интересно у них можно как то попросить рендеры в 32 битном цвете и в png. Конвертирую утилитой frm2bmp, чёт цвета бледные получаются.
Ссылка на комментарий

Вкрячиваю в двиг работу с json. Использую rapidjson. Не могу побороть ошибку.

 

Ошибка заключается в том, что при чтении файла, строка заполняется так line = "\t\"Integer\": 42"

 

Ext::Formats::TextFile* Ext::Loaders::TextFileLoader::Load(const std::string& path)
{
_Input.open(path, std::ios::in);
 
if (!_Input.is_open())
throw Ext::Core::RuntimeError("Not found file " + path);
 
_Result.clear();
 
std::string line;
 
while (getline(_Input, line))
{
_Result += line;
//_Result += '\n';
}
 
_Input.close();
 
return new Ext::Formats::TextFile(_Result);
}
 
Сам json
 
{
  "Integer": 42,
  "Double": 36.6,
  "Boolean": "true",
  "String": "Hello, i am String!"
}     
 
Когда я читаю ключ "Integer" библиотека выдает ошибка нет ключа. Но если читать как "Integer\\" всё ок.
Не пойму, помечу в файле есть символ \? Кодировка файла utf8
 
Есть мысли?
Ссылка на комментарий

Писал бы ты на Java - я бы подсказал.  ;)
А так, во первых лучше маппить на объект, а не коллекцию - гораздо проще использовать. На C должно быть миллион библиотек мапперов, да и текущая должна предоставлять такие возможности. 

Вообще, мне кажется, что вот ответ на твой вопрос - ты просто не те методы используешь. 
У тебя либа эскейпит кавычки из джейсона.
https://stackoverflow.com/questions/60410431/writing-normal-c-string-to-rapid-json-is-resulting-in-string-with-backslash

Ссылка на комментарий

Писал бы ты на Java - я бы подсказал.  А так, во первых лучше маппить на объект, а не коллекцию - гораздо проще использовать. На C# должно быть миллион библиотек мапперов, да и текущая должна предоставлять такие возможности. 

 

Мне C# на работе хватает.:)

 

 

Вообще, мне кажется, что вот ответ на твой вопрос - ты просто не те методы используешь.  У тебя либа эскейпит кавычки из джейсона. https://stackoverflo...-with-backslash

 

Посмотрю, файл я читаю стандартным способом. А данные символы все равно появляются. Что странно.

Сделал пока, что бы работало и тесты проходились, небольшой костылёк:)

https://github.com/JordanCpp/Revival/blob/master/Ext/Ext/Readers/JsonReader.cpp#L18

 

Зато работает, без мам, пап и смс:)

Ссылка на комментарий

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйте новый аккаунт в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...