Пятница, 19 Апреля 2024, 22:04

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 2 из 6
  • «
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • »
Форум игроделов » Записи участника » Kos94ok [114]
Результаты поиска
Kos94okДата: Воскресенье, 14 Июня 2015, 22:14 | Сообщение # 21 | Тема: [2D] Taiga Survival [Survival / RPG]
почетный гость
Сейчас нет на сайте
Цитата Remmintan ()
это очень сильно упрощает поиск и исправление багов.

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

Добавлено (14 июня 2015, 22:14)
---------------------------------------------
Настало время очередного технического поста! Как и обещал, немного информации о базовой структуре движка (которая только недавно окончательно устаканилась). Сегодня я буду приводить некоторое количество кода в качестве примера, но, я надеюсь, он будет понятен всем.

Говоря об основной структуре, мне кажется, что я должен упомянуть самое простое и основное - структуризацию файлов исходного кода. На данный момент я пользуюсь Visual Studio 2013 в качестве среды разработки, и список файлов проекта выглядит примерно так:

Файл main.h является основным заголовочным файлом, который включает в себя перечень всех классов и функций, использованных в коде.
Каждый файл исходного кода (*.cpp) начинается с директивы
Код
#include "main.h"

Это открывает доступ к любому участку кода без необходимости включать многочисленные заголовочные файлы. К слову, на момент написания в проект включено 30 заголовков и 60 файлов исходного кода (я тоже удивлен таким ровным числам).
Кроме прочего, main.h содержит объявление класса cCore, который используется для слежения за работой всех прочих потоков. Подробнее об этом - чуть позже.

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

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

Как только вся память выделена, и объекты готовы к работе, инициализация продолжается. Первым делом нам необходимо проверить, не переданы ли какие-то параметры запуска нашей игре. Делается это с одной целью - возможно, нужно переключиться в режим сервера. Отличается от обычного режима он отсутствием графического и звукового потоков.
Далее происходит загрузка баз данных:
Код
settings.setDefault();  // Настройки по-умолчанию
settings.load();  // Загрузка настроек из settings.ini
database.init();  // Основная внутренняя база данных
craft.loadRecipes();  // Рецепты крафта
visual.init();  // Шрифты и шейдеры
world.analyzeBlueprints();  // Компоненты генерации мира


В этот момент начинается интересная часть. Основная идея, которая отличает данный движок от моей предыдущей попытки - многопоточность.
На момент написания, нагрузка движка разнесена в десять потоков, включая основной:
Код
thread threadWindow(windowMain);   Sleep(10);  // Ввод и рендер
thread threadServerWorld(serverWorldMain);  Sleep(10);  // Основная игровая логика
thread threadServerConnect(serverConnectMain);    Sleep(10);  // Входящие соединения на сервер
thread threadServerReceive(serverReceiveMain);    Sleep(10);  // Входящие сообщения на сервер
thread threadServerSend(serverSendMain);  Sleep(10);  // Исходящие сообщения
thread threadClientReceive(clientReceiveMain);  Sleep(10);  // Входящие сообщения на клиент
thread threadClientSend(clientSendMain);  Sleep(10);  // Исходящие сообщения
thread threadWorldLoader(worldLoaderMain);  Sleep(10);  // Загрузка мира с диска или запрос данных с сервера по необходимости
thread threadAICore(AICoreMain);    Sleep(10);  // Искусственный интеллект
thread threadAudio(audioMain);    Sleep(10);  // Звук

Задержка в десять миллисекунд после старта каждого из потоков не необходима, но позволяет избежать смешения вывода в консоли. По сути - просто для красоты.
Каждый из данных потоков обладает собственным вечным циклом, который обрывается по команде основного потока. При каждой итерации поток обязан проверить состояние переменной core.thread_shutdown[threadId], где threadId - идентификатор потока, а так же обнулить переменную core.thread_antifreeze[threadId]. Но, опять же, об этом чуть позже.

Как только все потоки запущены, движок готов к работе. Основной поток переходит в своеобразный режим ожидания, наблюдая за работой всех остальных. Он подсчитывает частоту кадров, количество тиков потока логики, а так же следит за тем, чтобы никто не отлынивал от работы, ибо как только переменная core.thread_antifreeze одного из потоков перевалит за тысячу тиков, то консоль сообщит об этом.
Код
while (!core.shutdown)
{
    // Counting ticks
    if (timeGetTime() - globalTime >= 1000)
    {
     globalTime = timeGetTime();
     core.thread_windowTicksPerSec = core.thread_windowTicks;
     core.thread_serverWorldTicksPerSec = core.thread_serverWorldTicks;
     core.thread_windowTicks = 0;
     core.thread_serverWorldTicks = 0;
    }
    // Adding some antifreeze
    for (int i = 0; i < 10; i++) {
     if (core.thread_antifreeze[i] > 1000) {
      core.thread_antifreeze[i] = 0;
      console.error << "[MAIN] Thread " << i << " appears to be frozen..." << endl;
     }
    }
    Sleep(1);
}


Но в какой-то момент спокойной жизни приходит конец и появляется сообщение core.shutdown. В таком случае, приходится сворачивать удочки.
По сути, основному потоку остается только по порядку отключить все прочие потоки. Но сначала нужно дождаться завершения скриптовых потоков, которые создаются динамически по необходимости, выполняя разнообразную грязную работу.
Финальная часть кода выглядит очень даже опрятно.
Код
core.thread_shutdown[9] = true;  threadAudio.join();
core.thread_shutdown[8] = true;  threadAICore.join();
core.thread_shutdown[7] = true;  threadWorldLoader.join();
core.thread_shutdown[6] = true;  threadClientSend.join();
core.thread_shutdown[5] = true;  threadClientReceive.join();
core.thread_shutdown[4] = true;  threadServerSend.join();
core.thread_shutdown[3] = true;  threadServerReceive.join();
core.thread_shutdown[2] = true;  threadServerConnect.join();
core.thread_shutdown[1] = true;  threadServerWorld.join();
core.thread_shutdown[0] = true;  threadWindow.join();

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

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

Бонус: Пример вывода консоли при запуске игры и моментальном закрытии.
Код
[MAIN] Main thread started
[MAIN] Parsed [1] arguments
[MAIN] Initializing
[MAIN] Detected Nvidia video card
[MAIN] Loading databases
[DATABASE] Loading Items
[DATABASE] Loading Units
[DATABASE] Loading UI
[DATABASE] Loading Textures
[DATABASE] Loading External
[DATABASE] Main database ready
[MAIN] Blueprints analyzed: 28. Correct: 28, Wrong: 0
[MAIN] Starting the threads
[WND] Window thread started
[WND] Creating 1600x900 window rendering at 1600x900
[SRV_WORLD] Starting the server world thread
[SRV_CONNECT] Starting the server connect thread
[SRV_CONNECT] Listening at port 21045.
[SRV_RECEIVE] Starting the server receive thread
[SRV_SEND] Starting the server send thread
[CLIENT_RECEIVE] Starting the client receive thread
[CLIENT_SEND] Starting the client send thread
[WORLD_LOADER] Starting the world loader thread
[AI_CORE] Starting the AI core thread
[WND] Starting the main loop
[AUDIO] Starting the audio thread
[MAIN] Making some menu
[MAIN] Overlooking the threads...
[MAIN] Waiting for script threads to finish...
[MAIN] Waiting for core threads to finish...
[AUDIO] Cleaning up
[AI_CORE] Cleaning up
[WORLD_LOADER] Cleaning up
[CLIENT_SEND] Cleaning up
[CLIENT_RECEIVE] Cleaning up
[SRV_SEND] Cleaning up
[SRV_RECEIVE] Cleaning up
[SRV_CONNECT] Cleaning up
[SRV_WORLD] Cleaning up
[WND] Cleaning up
[MAIN] Cleaning up


Сообщение отредактировал Kos94ok - Воскресенье, 14 Июня 2015, 22:16
Kos94okДата: Воскресенье, 14 Июня 2015, 10:32 | Сообщение # 22 | Тема: [2D] Taiga Survival [Survival / RPG]
почетный гость
Сейчас нет на сайте
Tymonr, Объективно - практически никакого. Но меня это никогда не останавливало.
Remmintan, Ты удивишься, насколько просто реализованы многие вещи, но спасибо за интерес. В ближайшее время вывешу пост об основной архитектуре движка, а если есть конкретные вопросы помельче - задавай. Тот список, что ты там вывесил, считаю слишком длинным, чтобы подробно ответить на всё )
Kos94okДата: Пятница, 12 Июня 2015, 16:19 | Сообщение # 23 | Тема: [2D] Taiga Survival [Survival / RPG]
почетный гость
Сейчас нет на сайте
beril, Ну так не о чем рассказывать особо ) Работаю в соло, пытаюсь все сделать как можно лучше, так что идет довольно медленно. Если бы я рассказывал обо всех технических аспектах, то, судя по консольке, это не очень интересно будет народу )
Kos94okДата: Пятница, 12 Июня 2015, 15:52 | Сообщение # 24 | Тема: [2D] Taiga Survival [Survival / RPG]
почетный гость
Сейчас нет на сайте
WoK, Благодарю, в него вложено очень много сил и времени. Возможно, даже слишком много.
Kos94okДата: Пятница, 12 Июня 2015, 14:15 | Сообщение # 25 | Тема: [2D] Taiga Survival [Survival / RPG]
почетный гость
Сейчас нет на сайте
Небольшое обновление. В последнее время я работал над несколько иным режимом игры, чтобы было что-нибудь, удобное для тестирования основных функций движка. Хоть и этот режим очень примитивен, он достаточно скоро будет готов для демонстрации.
Есть желающие пострелять по красным кругам, которые хотят вас сожрать, одновременно с этим собирая куски чьего-то тела, разбросанного по ночной тайге? )

Добавлено (12 июня 2015, 14:15)
---------------------------------------------
Обзавелся новой модной консолькой. Зачем? Она круче выглядит, ей удобнее пользоваться, чем стандартной виндовой, а еще она не требует блокирующего потока для ввода текста.

А, ну да, еще вывод текста в консоль стал в несколько тысяч раз быстрее, но это мелочь, я понимаю. )


Сообщение отредактировал Kos94ok - Пятница, 12 Июня 2015, 14:20
Kos94okДата: Воскресенье, 10 Мая 2015, 16:40 | Сообщение # 26 | Тема: [2D] Taiga Survival [Survival / RPG]
почетный гость
Сейчас нет на сайте
stalker_zona, Я слишком многих людей повстречал, чтобы помнить всех, извини.

Добавлено (10 мая 2015, 16:40)
---------------------------------------------
Небольшой вопрос. Есть ли желающие посмотреть на исходный код движка или даже поучаствовать в разработке? Или же стоит демонстрировать только результат, как я и делал все это время?

Сообщение отредактировал Kos94ok - Четверг, 07 Мая 2015, 18:39
Kos94okДата: Четверг, 07 Мая 2015, 16:27 | Сообщение # 27 | Тема: [2D] Taiga Survival [Survival / RPG]
почетный гость
Сейчас нет на сайте
stalker_zona, Рад за тебя, собственно )
blackcatkpi, Ну да, почему бы ему и не быть похожим на мой же проект, построенный на той же концепции? )
Kos94okДата: Вторник, 05 Мая 2015, 21:22 | Сообщение # 28 | Тема: [2D] Taiga Survival [Survival / RPG]
почетный гость
Сейчас нет на сайте
divol13, Четыре.
А что делать, если графики нет?
Kos94okДата: Вторник, 05 Мая 2015, 13:26 | Сообщение # 29 | Тема: [2D] Taiga Survival [Survival / RPG]
почетный гость
Сейчас нет на сайте
Эргалон, То ведь старые скрины. Текстура земли одна, а куски содержат только объекты типа деревьев и прочего. Сейчас один кусок имеет размер 500х500 (пикселей).
На скрине ниже видно около десяти кусков. И я без понятия, где их границы )
Kos94okДата: Вторник, 05 Мая 2015, 12:52 | Сообщение # 30 | Тема: [2D] Taiga Survival [Survival / RPG]
почетный гость
Сейчас нет на сайте
Ordan,
Цитата Kos94ok ()
Видимо, никого ничего не интересует опять. Хорошо. Тогда никаких вам ламповых скринов.

Все, шанс пропущен )

На самом деле, по техническим причинам я не мог работать последний месяц, так что прогресса пока никакого. Больше апдейтов в ближайшем будущем...

Добавлено (05 мая 2015, 12:52)
---------------------------------------------
Я все еще жив, похоже.

Да, последние пару месяцев я был в инактиве, но теперь, наконец, вернулся к работе.
И сразу же добавлю, что прогресс по движку есть. Генерация, загрузка и сохранение мира спланированы, реализованы и протестированы как для одиночной, так и для сетевой игры. Это дает возможность работать с достаточно большими (в теории неограниченными) картами, повышает среднюю частоту кадров (меньше объектов в памяти -> лучше производительность) и позволяет игрокам одновременно находиться в разных углах карты без необходимости загружать её всю. Словом, все достаточно хорошо по этой части )
Кстати, различные настройки генератора позволяют рисовать как большие и открытые локации, так и относительно коридорные. Мир собирается из предварительно созданных кусков, которые могут быть сгенерированы автоматически или сделаны вручную.


Сообщение отредактировал Kos94ok - Вторник, 05 Мая 2015, 12:54
Kos94okДата: Среда, 18 Февраля 2015, 23:03 | Сообщение # 31 | Тема: Нужна помощь с SFML!!!
почетный гость
Сейчас нет на сайте
jone157, Я сказал, что нам нужен код проекта, а не код одной функции. Мало ли где у тебя там ошибка. Вообще было бы идеально, если бы ты скинул архив с полным проектом.
А т.к. фпс проседает и у твоего друга, то проблема именно в коде. Собсно, терпеливо жду код.
...
Все еще жду.
Kos94okДата: Среда, 18 Февраля 2015, 22:45 | Сообщение # 32 | Тема: Нужна помощь с SFML!!!
почетный гость
Сейчас нет на сайте
jone157, Работаю с SFML уже почти год, никаких проблем с фпс и отрисовкой не замечал (если речь не идет о тексте, он медленный, да, но не настолько). Кидай код проекта, разберемся. Не надо ругать библиотеку за то, в чем она не виновата.
Kos94okДата: Среда, 18 Февраля 2015, 19:53 | Сообщение # 33 | Тема: [2D] - Colored Physics
почетный гость
Сейчас нет на сайте
Цитата mobipak
дайте советов для того, чтобы игра стала лучше (в визуальном плане)

Первое - если у тебя есть какой-то стиль, то придерживайся его. Шрифты на первом и втором скринах совсем не карандашом нарисованы.
Второе - не визуальное. Если игра не доступна, то зачем писать, что в ней 10 уровней? Или в финальной версии будет 10 уровней и ни одним уровнем больше?
Третье - когда ты создаешь тему для игры, у которой нет названия, это такой легкий намек на то, что ты не особо много времени в неё вложил.
Четвертое - мне не очень нравится стиль, хотя против рисованного стиля в принципе ничего не имею. Выдели шар хотя бы как-то.
Kos94okДата: Среда, 18 Февраля 2015, 19:45 | Сообщение # 34 | Тема: [2D] Taiga Survival [Survival / RPG]
почетный гость
Сейчас нет на сайте
Ordan, Должен ходить, конечно, но даже если это и баг, ничем особо помочь не могу. Попробуй переключить язык, и (типичный мануал-стайл) убедись, что нажимаешь на W, A, S и D. happy

Сообщение отредактировал Kos94ok - Среда, 18 Февраля 2015, 19:48
Kos94okДата: Вторник, 17 Февраля 2015, 22:20 | Сообщение # 35 | Тема: [2D] Taiga Survival [Survival / RPG]
почетный гость
Сейчас нет на сайте
Ну ладно, я обещал подробности, значит будут подробности.

Шаг 1. Порядок рендера
В моем случае движок является истинно двухмерным. Следовательно, буфера глубины там нет. Индикатором "глубины" объекта является его координата по вертикальной оси.
Правильное расположение объектов при отрисовке является ключом к адекватным теням. Если порядок будет нарушен, объект может стоять на тени другого объекта, а не быть в его тени.
Небольшая правка кода поможет продемонстрировать нужный нам порядок.

Важный момент. Подобная сортировка должна накладываться на все объекты игрового мира, независимо от того, отбрасывают ли они тени сами.
На картинке можно было заметить, что теней там нет. Это не ошибка, это подготовка к третьему шагу.

Шаг 2. Рендер теней
Что собой представляет тень объекта сама по себе? Она является текстурой объекта, выкрашенной в черный полупрозрачный цвет, повернутая под определенным углом и вытянутая по вертикальной оси. Все именно так просто. И старая технология заканчивалась здесь. Новая же идет немного дальше.

Шаг 3. Буфер и маска
При рендере нам необходимо сделать два дупликата нашего буфера отрисовки. То есть при отрисовке юнитов мы делаем две копии - одна содержит только сами объекты, без теней, а вторая содержит "полный" вариант. И перед тем, как кто-то начал задавать вопросы о необходимости первой копии, я просто вставлю вторую картинку.

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

Шаг 4. Пост-обработка
Собственно, в этом шаге мы совершаем очень простой трюк. Обе текстуры отправляются на пост-обработку в простенький фрагментарный шейдер, задача которого - сравнить буфер и маску, а затем наложить тень на текстуру буфера. Если цвет пикселя на обеих текстурах не идентичен, значит, в этой точке лежит тень, а следовательно, нужно наложить затемнение на буфер. После чего продолжаем работу со следующим пикселем. Код шейдера выглядит достаточно просто... если убрать из него работу с освещением и прочие эффекты.
После работы шейдера смотрим на результат.

Что и требовалось получить.

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

Добавлено (17 февраля 2015, 22:20)
---------------------------------------------
Видимо, никого ничего не интересует опять. Хорошо. Тогда никаких вам ламповых скринов.

Тем не менее, кто-то заказывал обновление ссылки на v0.05. У меня, наконец, появился доступ к архиву. Ссылка прилагается.

Сообщение отредактировал Kos94ok - Пятница, 13 Февраля 2015, 17:39
Kos94okДата: Четверг, 12 Февраля 2015, 22:48 | Сообщение # 36 | Тема: [2D] Taiga Survival [Survival / RPG]
почетный гость
Сейчас нет на сайте
tduk, Разве что кто-то, у кого есть архив, зальет его. Мой ПК радостно умер пару недель назад (если точнее, умер его хард) вместе со всеми данными. Только исходники движка успел стащить. Доступ к копии архива будет только через три недели.

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

Хотя главное предназначение контекстного меню - это работа в инвентаре.

И к тому же, буквально вот сегодня реализовал алгоритм поиска пути. С ним пришлось повозиться, конечно. Начал я работать над ним еще два дня назад, пытаясь применить алгоритм А (кому интересно - Wikipedia). Однако он требует наличия сетки, которую можно анализировать. В моем случае создание сетки 256х256 нодов (чего, в принципе, будет маловато) занимало несколько секунд, а значит создавать её на лету невозможно. Хранить в памяти сетку для всей карты тоже не вариант, т.к. она занимала бы пару сотен мегабайт только в виде двухмерного логического массива. Поэтому пришлось думать над другим алгоритмом. Цель моего алгоритма - быть максимально быстрым, работать без сетки, по возможности пытаясь найти короткий путь. Хотя это не было приоритетом.
Решение получилось достаточно простое и элегантное. Чтобы найти путь из точки А в точку Б, в точке А создается некий объект, который я быстро прозвал итератором. Далее алгоритм пытается двигать этот объект в направлении точки Б по прямой. Если через определенное расстояние препятствий не найдено, данная точка записывается и движение юнита уже можно начинать. Далее алгоритм начинает работать с последней точкой, вновь пытаясь двигать её в направлении точки Б. Если на пути появится какое-либо препятствие, происходит возврат к последней удачной точке и попытка движения повторяется под измененным углом.
Такой алгоритм удовлетворяет поставленным требованиям и выдает вполне неплохой результат. Пример работы под катом.


Добавлено (12 февраля 2015, 22:48)
---------------------------------------------
Время очередного вброса информации. Если кто-то помнит старые версии, то одной из самых графических фич были тени. Мне они тоже весьма нравились. Именно поэтому поначалу они перекочевали в новую версию без изменений. Впрочем, можно вспомнить, что эти тени были совсем не идеальны. Из-за своей простоты они не могли учитывать положение других теней, а следовательно, накладывались друг на друга. И в реальной жизни они работают не так.
Решение проблемы пришло, как ни странно, достаточно давно. С появлением у меня доступа к шейдерам, появилась и иная реализация системы теней. Посложнее, съедающая больше производительности, но даже с учетом этого производительность движка выше, чем раньше. Без лишних слов, сравнение двух технологий под катом.

Бонусом, новая технология позволяет учитывать уровень освещенности, что дает возможность сделать немного более адекватные ночные тени. Но это только для особо интересующихся.
Теперь что касается деталей реализации. Если вам интересно - дайте знать, распишу все подробно. А если нет, то не вижу смысла тратить место на странице.
До связи.


Сообщение отредактировал Kos94ok - Четверг, 12 Февраля 2015, 22:52
Kos94okДата: Вторник, 03 Февраля 2015, 22:40 | Сообщение # 37 | Тема: Поиск художника-аниматора
почетный гость
Сейчас нет на сайте
Ищем художника для работы над проектом - игрой в двухмерной проекции. Общий стиль - рисованный, детализация низкая. Возможно обсудить и другие варианты. Объем работы - несколько десятков статичных объектов, пять-шесть анимированных персонажей. Расценки и примеры с вашей стороны.

Всем спасибо. Заявка закрыта.


Сообщение отредактировал Kos94ok - Среда, 04 Февраля 2015, 09:21
Kos94okДата: Вторник, 27 Января 2015, 18:48 | Сообщение # 38 | Тема: [2D] Taiga Survival [Survival / RPG]
почетный гость
Сейчас нет на сайте
beril, Спасибо, причем дважды )
Kos94okДата: Вторник, 27 Января 2015, 17:59 | Сообщение # 39 | Тема: [2D] Taiga Survival [Survival / RPG]
почетный гость
Сейчас нет на сайте
Еще одно небольшое обновление. Проект отправился на сайт indiegogo.com в поисках финансирования для перехода на... уровень выше, скажем так. Если кто-то желает поддержать проект, я просто оставлю это здесь:
Ссылка
Kos94okДата: Понедельник, 19 Января 2015, 15:59 | Сообщение # 40 | Тема: [2D] Taiga Survival [Survival / RPG]
почетный гость
Сейчас нет на сайте
Ну раз уж я сюда зашел, то можно и о новостях сообщить.

В течение последних трех недель, основной код Тайги активно перерабатывался. По сути, был переписан с нуля. Таким образом, мы имеем новый движок, который сохраняет основные черты старого, но улучшен по всем параметрам. Основные его нововведения таковы:
- Мультиплеер встроен в ядро, что гарантирует его максимальную работоспособность.
- Добавлена поддержка GLSL шейдеров. По большей части, добавляет незначительные, но приятные графические эффекты.
- Новая система освещения, основанная на вышеуказанных шейдерах. Устраняет графические артефакты, которые можно было заметить ранее. К тому же, улучшает производительность.
- Улучшенная система анимации поддерживает двух-, четырех- или восьминаправленную анимацию персонажей или объектов.
Одновременно с этим, изменяется и концепция самой игры. Например, на данный момент известно:
- Переработан интерфейс. Система инвентаря изменена и чем-то напоминает мод SkyUI (TES V: Skyrim).
- Управление персонажем перенесено на мышь. Камера отделена от персонажа и управляется отдельно.

Сейчас от игры есть лишь малая часть, т.к. в данный момент я работаю в основном над ядром игры. Больше обновлений и скриншотов в скором времени.


Сообщение отредактировал Kos94ok - Понедельник, 19 Января 2015, 16:15
Форум игроделов » Записи участника » Kos94ok [114]
  • Страница 2 из 6
  • «
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • »
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг