ВНИМАНИЕ! Наша конференция посвящена космической тематике и компьютерным играм. Политические вопросы и происходящие в мире события в данный момент на нашем сайте не обсуждаются!
|
» L.I.M.A. strace_ | страница 5 |
|
|
|
Канал Игры Мечты: «L.I.M.A. strace_» |
|
|
Jerry Rezet 581 EGP
Рейтинг канала: 5(113) Репутация: 86 Сообщения: 3365 Откуда: Санкт-Петербург. Зарегистрирован: 01.04.2005 |
|
Не очень. Блог где? На сайте? Замах - это норм для ТехноМага. Учитывая то, что наворотили в FFED3D - тут не сильно сложнее будет. По крайней мере не надо играть в придаток к дизассемблеру . А с нынешней инди-моделью финансирования - можно полузабагованную версию выпустить "на поиграть" жаждущим-страждущим, попутно собирая с толпы предзаказы. А т.к. оно уже год как пилиццо, значит вроде прогресс есть, даже если и долгострой. Я бы, кстати, как только - вполне захотел бы закупить этот "Бэтлкруизер" чуть выше среднего по игровой индустрии. А там, глядишь, и ещё кто подтянется. Но это уже чисто мои хотелки, к процессу и реализации имеют весьма малое отношение, мягко говоря!
ТехноМаг : |
PS: С прорисовкой проблем как бэ нет. Проблема именно с генерацией.
|
P.P.S.: А каковы примерные минимальные системные требования для возможного релиза?
_________________ - Вы не представляете, как вам повезло, что я здесь. Вы об этом еще пожалеете. [c] |
|
|
ТехноМаг 360 EGP
Рейтинг канала: 2(19) Репутация: 93 Сообщения: 2510 Откуда: Кронштадт Зарегистрирован: 09.04.2007 |
|
Jerry Rezet : |
А каковы примерные минимальные системные требования для возможного релиза?
|
НУ ели ничего не поменяется, то чуть ниже рекомендованных для
UE. 2Га Видеопамяти; DirectX11, Около 4Га Оперы. По процу пока не скажу.
Jerry Rezet : |
не надо играть в придаток к дизассемблеру
|
Тут с людьми играть приходится. Сейчас игру делают 2.5 человека, приэтом как и когда придется.
добавлено спустя 7 минут:
Jerry Rezet : |
оно уже год как пилиццо
|
Открою мааленькую тайну. Оно пилится с лета 2012 (помнишь, когда Дримз от D3D отвалился?) Ну как пилится. Концепции, лор, и прочее. А делать мы ее начали да, примерно год назад.
_________________ (Л)"Алекс, я живу уже почти 200 лет. но как видишь, выгляжу я всего на 20. И это не единственное отличие меня от людей."
Последний раз редактировалось: ТехноМаг (08:48 07-02-2016), всего редактировалось 1 раз |
|
|
Sh.Tac. 151 EGP
Рейтинг канала: 5(108) Репутация: 14 Сообщения: 1426
Зарегистрирован: 27.07.2005 |
|
Jerry Rezet : |
Блог где? На сайте? Замах - это норм для ТехноМага.
|
блог здесь, эта тема
замах это всегда плохо, разработчик желает получать т.н. hard fun от преодоления сложностей и пропускает тот момент когда у него развивается типичный feature creep
но как заставить себя сделать проект попроще, пока не знаю, думаю это должна быть типичная рутина, предсказуемая и хорошо масштабируемая
как у моделлеров, тогда сделав какую-то хреновинку за неделю, начинаешь видеть горизонт тупо умножив эту неделю на примерное количество всего барахла
_________________ This is what you get ...
(c) Radiohead |
|
|
ТехноМаг 360 EGP
Рейтинг канала: 2(19) Репутация: 93 Сообщения: 2510 Откуда: Кронштадт Зарегистрирован: 09.04.2007 |
|
В общем и целом я уже в соседних каналах отписывался по ситуации в жизни. Поэтому тут особо жизни нет и ближайшее время не предвидится.
Из последнего хочу сообщить следующее:
Готовится сборка генератора 1.4, совмещающая L0,L1 и доработанную L2 генерацию (расшифровку L# смотреть выше).
Также в скором времени появится сюжетный тизер (много НО в слове скоро).
Ушли от Unreal Engine 4 в пользу кастомного билда, ибо много пришлось переписывать, в угоду безшовности и производительности.
В планах внедрить Vulkan API (пока читаю спецификацию) (PS: пока OpenGL4 наше все, но в будущем пригодится.)
В общем-то все.
Из приятного. Скоро в наших рядах появится пополнение. Жена тов. Безела (дизайнер) вот-вот родит
_________________ (Л)"Алекс, я живу уже почти 200 лет. но как видишь, выгляжу я всего на 20. И это не единственное отличие меня от людей."
Последний раз редактировалось: ТехноМаг (23:12 11-05-2016), всего редактировалось 3 раз(а) |
|
|
ТехноМаг 360 EGP
Рейтинг канала: 2(19) Репутация: 93 Сообщения: 2510 Откуда: Кронштадт Зарегистрирован: 09.04.2007 |
|
Придумал как добавить в генератор Кеплеровы орбитальные элементы, что означает, что L2 генератора будет выглядеть более реалистично.
В команде появился второй программист - дал ему задание как раз опробовать это вставить.
На сервере proxima-team.ru в ближайшую неделю/две (как руки дойдут) заведу гитлаб, откуда можно будет стягивать публичные билды.
Скринов пока естественно нет
_________________ (Л)"Алекс, я живу уже почти 200 лет. но как видишь, выгляжу я всего на 20. И это не единственное отличие меня от людей."
Последний раз редактировалось: ТехноМаг (15:35 14-06-2016), всего редактировалось 1 раз |
|
|
ТехноМаг 360 EGP
Рейтинг канала: 2(19) Репутация: 93 Сообщения: 2510 Откуда: Кронштадт Зарегистрирован: 09.04.2007 |
|
Добрый день, друзья. Давно не было никаких новостей, ибо не о чем было рассказывать. Проект двигается, хотя и очень медленно. Да и сейчас особо порадовать нечем. Нужно еще много чего сделать, прежде чем можно будет что-то показать.
Сейчас мы сосредоточились на сетевой части. Если сравнивать, то в итоге сетевая игра будет похожа по механикам на Freelancer. В дистрибутиве игры будет приложен отдельный исполняемый файл для запуска Dedicated Server, к которому смогут подключится Ваши друзья и играть в Вашей Вселенной. Мы постараемся сделать так, чтобы все игровые Вселенные отличались от сервера к серверу. Это будет возможно благодаря новому генератору L1 версии 2.0, позволяющему более плотно заполнить галактику контентом, хотя и пришлось в итоге пожертвовать ее размерами. Но, как показывает практика, лучше меньше, но интереснее, чем больше, но пусто.
С наилучшими пожеланиями, Delta-Proxima Team.
добавлено спустя 7 минут:
А ну и да, мы вернулись к UE4, ибо они сделали то, чего нам сильно не хватало, и из-за чего хотели уйти в кастом. Поэтому дело пойдет не в пример быстрее (только SQLite для сохранения mp прогресса привернуть, по сути).
_________________ (Л)"Алекс, я живу уже почти 200 лет. но как видишь, выгляжу я всего на 20. И это не единственное отличие меня от людей."
Последний раз редактировалось: ТехноМаг (12:48 19-12-2016), всего редактировалось 1 раз |
|
|
ТехноМаг 360 EGP
Рейтинг канала: 2(19) Репутация: 93 Сообщения: 2510 Откуда: Кронштадт Зарегистрирован: 09.04.2007 |
|
Мммм. пока ковырял исходники, понял что имплементация SQLite уже есть в движке. Только драйвер собрать. Отличненько. Получается, что мне осталось только переписать систему save/load, дабы отправить данные из объекта SaveGame вместо встроенного формата сохранений в sql, и добавить загрузку по выборке PlayerUID.
Сразу поясню: Данная вещь планируется исключительно для сохранения сетевой игры. В сингле будет использоваться стандартная система.
Делаю это потому, что в этой системе есть ряд ограничений, не позволяющий сохранять/загружать данные о игроках отдельно, но только целиком. При этом полностью перезаписывая файл сохранения. Т.е. мы получаем проблему потери данных игроков, если те в момент сохранения не были подключены к серверу.
Код: |
// Then save the object state, replacing object refs and names with strings
FObjectAndNameAsStringProxyArchive Ar(MemoryWriter, false);
SaveGameObject->Serialize(Ar);
// Stuff that data into the save system with the desired file name
return SaveSystem->SaveGame(false, *SlotName, UserIndex, ObjectBytes); |
Ну и данный подход даст возможность администрировать сервер через сторонние утилиты.
добавлено спустя 24 минуты:
ADD: Также на время пришлось убрать имплементацию внешних скриптов из ранних билдов, т.к. в движке за эти два года много чего поменялось. Потом верну, но они будут использоваться только для пользовательских модификаций.
_________________ (Л)"Алекс, я живу уже почти 200 лет. но как видишь, выгляжу я всего на 20. И это не единственное отличие меня от людей."
Последний раз редактировалось: ТехноМаг (12:23 21-12-2016), всего редактировалось 2 раз(а) |
|
|
ТехноМаг 360 EGP
Рейтинг канала: 2(19) Репутация: 93 Сообщения: 2510 Откуда: Кронштадт Зарегистрирован: 09.04.2007 |
|
Впрочем... Похоже перепелю оригинальную систему сохранения полностью, ибо она какая-то трешовая, и по ходу не доделанная...
_________________ (Л)"Алекс, я живу уже почти 200 лет. но как видишь, выгляжу я всего на 20. И это не единственное отличие меня от людей." |
|
|
Sh.Tac. 151 EGP
Рейтинг канала: 5(108) Репутация: 14 Сообщения: 1426
Зарегистрирован: 27.07.2005 |
|
ТехноМаг : |
Сейчас мы сосредоточились на сетевой части
|
уешька тут не помощник к сожалению
там искаропки тока Character синхронизирован, всякое ездящее/летающее может разойтись, особенно после коллизии (с астероидом там)
_________________ This is what you get ...
(c) Radiohead |
|
|
ТехноМаг 360 EGP
Рейтинг канала: 2(19) Репутация: 93 Сообщения: 2510 Откуда: Кронштадт Зарегистрирован: 09.04.2007 |
|
Sh.Tac. : |
там искаропки тока Character синхронизирован
|
уточню, что не просто Character, а Character из темплейтов.
Ну дык, название метода "Репликация" должна говорить сама за себя. Реплика идет в одностороннем порядке Сервер -> Клиент.
Чтобы данные обратно засылать нужно писать функции хуки, которая будет засылать аргументы на сервер и там уже выполнятся. Проходили - знаем.
Меня щас больше волнует другое. Систему сохранения процесса я-то переписал (починил флаг SaveGame на классах, вот только теперь для счастья нужно еще сериализацию перепиливать, дабы UPROPERTY в строку приходило (желательно в виде SQL запроса), а не в бинарном виде.
Кстати вопрос к знающим. UnetUniqID это действительно уникальный id клиента, или он уникален только в рамках сессии?
_________________ (Л)"Алекс, я живу уже почти 200 лет. но как видишь, выгляжу я всего на 20. И это не единственное отличие меня от людей." |
|
|
ТехноМаг 360 EGP
Рейтинг канала: 2(19) Репутация: 93 Сообщения: 2510 Откуда: Кронштадт Зарегистрирован: 09.04.2007 |
|
Собственно как теперь работает SaveSystem.
При вызове Save/Load мы должны предоставить три параметра.
1) PlayerController
2) SaveGameOption
3) SaveGameObject (необязателен).
SaveGameOption это структура, с параметрами:
1) ENUM SaveFormat (задел на будущее: Binary/SQLite/MySql)
2) FString SaveSlot (Как и в оригинале выбирает имя файла для сохранения ну или имя базы данных для SQL)
3) int 32 UserIndex (легаси код с оригинала)
4) bool bSavePlayerController
5) bool bSavePlayerState
6) bool bSavePlayerPawn
6.1) bSavePlayerPawnTransform
4-6 параметры определяют, нужно ли сохранять UProperty сабжей (дабы SaveObject не перегружать).
6.1 Опциональный флаг, который принудительно сейвит позицию, ротацию, и масштаб APlayerPawn (при условии, что сам APlayerPawn будет сохранен, и он приаттачен к Контроллеру).
Если выставить в TRUE, то при вызове Save/Load будет получен экземпляр класса из контроллера; выбраны все UProperty с флагом SaveGame и сериализованны (интересный нюанс, что в выборку прилетает также bCanDamaged, который не имеет сабжевого флага).
Если передан SaveObject объект, то он сериализуется полностью (как и в оригинале)
ADD: Хотя серьезно думаю перепилить SaveObject и добавить условие, что если UProperty является UObjectProperty, то сериализуем рекурсивно свойства этого объекта опять таки по флагу SaveGame. Тогда можно будет сохранять дополнительные классы, и не плодить ноды Set/Get, как это предложено в оригинале. Правдо остается вопрос с надобностью рекреации этих самых классов. Поэтому пока думаю.
_________________ (Л)"Алекс, я живу уже почти 200 лет. но как видишь, выгляжу я всего на 20. И это не единственное отличие меня от людей."
Последний раз редактировалось: ТехноМаг (23:17 24-12-2016), всего редактировалось 4 раз(а) |
|
|
БулерМэн 420 EGP
Рейтинг канала: 2(21) Репутация: 68 Сообщения: 1580 Откуда: Гороховец Зарегистрирован: 07.02.2006 |
|
ТехноМаг : |
Данная вещь планируется исключительно для сохранения сетевой игры.
|
То есть, у тебя игра всю динамику обрабатывает в памяти, а при выходе/уничтожении пользователя в игре - записывается его текущее состояние?
|
|
|
ТехноМаг 360 EGP
Рейтинг канала: 2(19) Репутация: 93 Сообщения: 2510 Откуда: Кронштадт Зарегистрирован: 09.04.2007 |
|
БулерМэн : |
при выходе/уничтожении пользователя в игре - записывается его текущее состояние?
|
Зачем?
1) Игра сейвит игрока при первом входе на сервер
2) По таймеру (скажем раз в 5 минут
3) При определенных евентах. Смерть, работа с инентарем и/или магазинами, и.тд.
4) При выходе с сервера
5) При отключении сервера.
БулерМэн : |
То есть, у тебя игра всю динамику обрабатывает в памяти
|
Я что-то тебя не понял. А где еще динамику обрабатывать? На бумажке?
UPD: Эта самое, посмотри как сервер Freelance работает, я с него копиисту делаю.
UPD2: Ну а в сингле стандартно: Чекпоинт/Кнопка Save
_________________ (Л)"Алекс, я живу уже почти 200 лет. но как видишь, выгляжу я всего на 20. И это не единственное отличие меня от людей."
Последний раз редактировалось: ТехноМаг (13:58 25-12-2016), всего редактировалось 3 раз(а) |
|
|
БулерМэн 420 EGP
Рейтинг канала: 2(21) Репутация: 68 Сообщения: 1580 Откуда: Гороховец Зарегистрирован: 07.02.2006 |
|
ТехноМаг : |
БулерМэн :
при выходе/уничтожении пользователя в игре - записывается его текущее состояние?
Зачем?
|
Как зачем? У тебя игра по принципу билета в один конец? То есть респавна не подразумевается?
Если игрок играл играл, накопил кучу инвентаря, НО он играет не за человека, а за что-то другое, корабль с ИИ, за робота, за куклу, за "облако волшебного пара" - то в этом случае намного приятнее продолжать игру с того места где потерял "здоровье", но только N-раз.
Я бы понял, если у тебя в игре каждый игрок - это отожествление с живым человеком, и если его превратили в фарш то будь здоров, играй с начала. Видимо этот принцип у тебя?
Сейвы по ходу игры - как раз намекают на сброс всех достигнутых результатов в случае проигрыша один раз. Как это сделано в той же Xtension: сейвы есть, а "жизней" нет
|
|
|
ТехноМаг 360 EGP
Рейтинг канала: 2(19) Репутация: 93 Сообщения: 2510 Откуда: Кронштадт Зарегистрирован: 09.04.2007 |
|
Буллер. Еще раз. Геймплей по сети будет напоминать фрилансер. А значит после смерти игрока респавн таки будет, но со штрафами.
_________________ (Л)"Алекс, я живу уже почти 200 лет. но как видишь, выгляжу я всего на 20. И это не единственное отличие меня от людей." |
|
|
ТехноМаг 360 EGP
Рейтинг канала: 2(19) Репутация: 93 Сообщения: 2510 Откуда: Кронштадт Зарегистрирован: 09.04.2007 |
|
В общем протестировали работу новой SaveSystem - работает.
SQL пока делать не будем - за ненадобностью. Вместо этого временно привяжем каждого отдельного игрока к персональному слоту.
Теперь можно начать сетапить тестовый игровой мир. Он будет состоять из одной единственной звездной системы с одной единственной планетой, на орбите которой мы будем делать пиу-пиу.
Этот тест убьет сразу несколько зайцев.
1) Мы сможем проверить как работают орбитальные механики (ибо все крутится)
2) Мы сможем проверить как работает новый хак со смещением Ориджина Мира индивидуально для клиента (ибо старый хак с несколькими UWorld больше не пашет).
3) Мы сможем проверить синхронизацию клиент/сервер
4) Мы сможем проверить пиу-пиу
ADD:
Собственно начинаем первый шаг с ответа на вопрос:
А как собственно "стримить" инстанции системы в мир.
В UE4 есть три возможных решения:
1) Стриминг через Волюм (как часть WorldComposer). Не подходит, ибо сами волюмы нужно ставить в весьма ограниченной сетке координат (но запомним этот способ, он может пригодится позднее).
2) Стриминг через ноду LoadLevel Instance. Эта нода, созданная тов. Rama хороша тем, что можно один и тот-же саб. уровень грузить N кол-во раз. Тоже не подходит, ибо при вызове в мультиплеере вызывает Дисконект пользователей (Бага?)
3) Стриминг из списка SubLevels. Единственный способ, который работает из коробки, но есть ряд НО.
НО 1). Стриминг происходит в пользовательской системе координат. Т.е. нужно перед подгрузкой пересчитать координаты таким образом, чтобы серверные координаты совпадали с клиентскими (хранить в PayerState ? Да, наверно, ибо тогда можно будет отслеживать позиции игроков без танцев с бубном)
Но 2). Стриминг производить исключительно на клиенте, ибо в случае стрима на сервере, произойдет репликация сабуровня и в итоге будет мясо из планет.
Но 3). Необходимо убедится, что стримовый сабуровень уже не загружен где-то еще.
Да и вообще, нужно постоянно следить за тем, чтобы на карте был только один SubLevel. Будь то уровень звездной системы (со своим пересчетом ориджина) или уровень планеты (с ним отдельная история).
По концепции уровень планеты эта небольшая процедурная локация, где можно побегать и поделать некоторые вещи (ресы пособирать, обломки посканировать). Перемещение происходит на своих двоих и здесь роется большая проблема при игре по сети. А именно - правило UE4 - один сервер == одна карта.
Собственно решения этой проблемы у меня пока нет (вернее есть несколько, но пока неизвестно, какое из них лучше, а какое вообще рабочее), поэтому и планет в ближайшем будущем не предвидится (в сетевой части по крайней мере).
ADD 2:
Собственно на данном этапе мы получаем следующее решение:
Мир представлен пустой картой с одним SubLevel.
К SubLevel подключен скрипт, который:
1) Проверяет координаты спавна левела. Сравнивает их с координатами в базе сидов. Забирает Сид, который ответственен за звездную систему в данных координатах (+ Радиус).
2) Спавнит актеров, суть которых являются звезды, планеты, астероидные поля, станции и прочее (а главное маркеры, по которым будет производится перерасчет ориджина, пока игрок находится внутри этой системы).
Т.е. чтобы сменить систему нам нужно выгрузить этот SubLevel, изменить его координаты и заново загрузить (при этом на старом месте, если позволяет сетка, показать статичную звездочку, дабы сохранить целостность визуализации).
_________________ (Л)"Алекс, я живу уже почти 200 лет. но как видишь, выгляжу я всего на 20. И это не единственное отличие меня от людей."
Последний раз редактировалось: ТехноМаг (23:17 26-12-2016), всего редактировалось 5 раз(а) |
|
|
БулерМэн 420 EGP
Рейтинг канала: 2(21) Репутация: 68 Сообщения: 1580 Откуда: Гороховец Зарегистрирован: 07.02.2006 |
|
ТехноМаг : |
сможем проверить как работает новый хак со смещением Ориджина Мира индивидуально для клиента
|
Хм. Не совсем понятно, что ты имеешь в виду под смещением ориджина, но у меня в одной из игр и в самописном навигаторе - используется следующий принцип:
1. Сам игрок не двигается по экрану.
2. Экран и другие объекты двигаются относительно игрока.
3. Существует невидимый объект, которым управляет игрок, при этом все смещения данного объекта- заставляют двигаться вместе с ним все остальные объекты. При это самостоятельное движение объектов это не отменяет.
4. Вуаля - мы получаем статичное изображение игрока по центру экрана и "двигаемся в пространстве", хотя на самом деле - двигаются все объекты.
Видимо ты тоже самое имеешь в виду?
|
|
|
ТехноМаг 360 EGP
Рейтинг канала: 2(19) Репутация: 93 Сообщения: 2510 Откуда: Кронштадт Зарегистрирован: 09.04.2007 |
|
БулерМэн : |
Не совсем понятно, что ты имеешь в виду под смещением ориджина
|
Конкретно сейчас - ничего конкретного, ибо я точно не уверен, как это будет влиять на репликацию и синхронизацию координат пользователей (и физику...).
_________________ (Л)"Алекс, я живу уже почти 200 лет. но как видишь, выгляжу я всего на 20. И это не единственное отличие меня от людей." |
|
|
ТехноМаг 360 EGP
Рейтинг канала: 2(19) Репутация: 93 Сообщения: 2510 Откуда: Кронштадт Зарегистрирован: 09.04.2007 |
|
Тестируем куски нового алгоритма генерации.
Тип - сферическая Галлактика (или ядро спиральной)
Пока что генерирую так. Но это сырой алгоритм. Надо еще допиливать.
Код: |
int32 Size = Random.RandHelper(MaxGalaxySize);
float Density = FMath::Max<float>(0, Random.FRandRange(_densityDeviation, _densityMean));
int32 countMax = FMath::Floor(FMath::Max<float>(0, FMath::Pow(Size, 3) * Density) + 0.5f);
TArray <FGalaxyStar> Stars;
if (countMax > 0)
{
int32 Count = Random.RandHelper(countMax);
for (int32 i = 0; i < Count; i++)
{
int32 radius = Random.RandHelper(Size);
double theta = 2 * PI * Random.FRandRange(0.f, 1.f);
double phi = FMath::Acos(1 - 2 * Random.FRandRange(0.f, 1.f));
FGalaxyStar Star;
Star.Position = FVector(
sin(phi) * cos(theta) * radius,
sin(phi) * sin(theta) * radius,
cos(phi) * radius
);
Stars.Add(Star);
}
}
return Stars;
|
_________________ (Л)"Алекс, я живу уже почти 200 лет. но как видишь, выгляжу я всего на 20. И это не единственное отличие меня от людей." |
|
|
ТехноМаг 360 EGP
Рейтинг канала: 2(19) Репутация: 93 Сообщения: 2510 Откуда: Кронштадт Зарегистрирован: 09.04.2007 |
|
ADD: Но старый баг остался. Если объектов больше определенного кол-ва, то происходит memory leak; все намертво зависает и уходит в своп. Значит придется ограничивать максимальное-кол во звезд. Ну да ладно - тут их 1500 уже + столько же на каждый рукав - за глаза, как говорится. А плотность будем имитировать через скайбокс (чем ближе к центру тем меньше альфа) и через туман (кстати нужно его тоже попробовать на сиды запилить)
добавлено спустя 3 минуты:
Собственно задача на сегодня / завтра. Добить алгоритм сферы. Переложить его на потоки (дабы не просидало). И поколдовать над материалом скайбокса.
_________________ (Л)"Алекс, я живу уже почти 200 лет. но как видишь, выгляжу я всего на 20. И это не единственное отличие меня от людей."
Последний раз редактировалось: ТехноМаг (21:06 29-12-2016), всего редактировалось 1 раз |
|
|
|
|
|
Канал Игры Мечты: «L.I.M.A. strace_» |
|
К списку каналов | Наверх страницы |
Цитата не в тему: Если меня и увидят, то только вживую на встречах. Но на встречи я идти не собираюсь. (MeLeK)
|
» L.I.M.A. strace_ | страница 5 |
|