Самодельный 3D движок с открытыми исходниками

Форум для пользователей и разработчиков игрового мира Виртбург http://virtburg.com

Moderator: Shaos

Post Reply
User avatar
Shaos
Admin
Posts: 23629
Joined: 09 Jan 2003 06:22
Location: Silicon Valley
Contact:

Re: Самодельный 3D движок Virtburg

Post by Shaos »

Shaos wrote:Размещение двери внутри коридорчика длиной 2, а лучше 3 кубика, спрячет дверь из области видимости, когда игрок не стоит точно напротив неё т.к. плоский спрайт всегда повёрнут лицом к игроку и со стороны будет видно, что дверь вывернута, что выглядит неестественно...

P.S. Сделал видео как это может выглядеть (под спойлером):

 video


Двери можно сделать открывающимися не только по триггеру - висящему на стене выключателю или шаганию в клетку перед дверью, но и по пробелу (как в думе) - или такой способ неестественен? Может лучше пробел отдать под прыжок?...

P.S. Дети просят поддержать W, A, S и D наряду со стрелками для движений - как в майнкрафте или роблоксе по умолчанию...
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 23629
Joined: 09 Jan 2003 06:22
Location: Silicon Valley
Contact:

Re: Самодельный 3D движок Virtburg

Post by Shaos »

Shaos wrote:20 апреля 2011 года я оказывается думовского imp-а прикрутил чисто напоглядеть :)

Вот их 100 штук:

Image
Оказывается есть старый проект Freedoom, который много-много лет (c 2001 года) собирал фришные ресурсы для подмены думовской графики (а также звуков и музыки):

https://freedoom.github.io/screenshots.html

Можно для демонстрации возможностей моего движка оттуда что-то подтянуть ;)

Например:
Attachments

freedoom.png
freedoom.png (300.55 KiB) Viewed 10699 times

Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Lavr
Supreme God
Posts: 16608
Joined: 21 Oct 2009 15:08
Location: Россия

Re: Самодельный 3D движок Virtburg

Post by Lavr »

Shaos wrote:Можно для демонстрации возможностей моего движка оттуда что-то подтянуть ;)
Это смотря итоговая цель у тебя какая? А то я всё это читаю, но не задаю вопрос, который мы привыкли здесь не задавать. :wink:
Если всё это just for fun - это одна ситуация, а если цель какая-то иная, то и расклад, соответственно, иной.
В том плане - что надо подтянуть, или, может, не надо...
iLavr
User avatar
Shaos
Admin
Posts: 23629
Joined: 09 Jan 2003 06:22
Location: Silicon Valley
Contact:

Re: Самодельный 3D движок Virtburg

Post by Shaos »

Lavr wrote:
Shaos wrote:Можно для демонстрации возможностей моего движка оттуда что-то подтянуть ;)
Это смотря итоговая цель у тебя какая? А то я всё это читаю, но не задаю вопрос, который мы привыкли здесь не задавать. :wink:
Если всё это just for fun - это одна ситуация, а если цель какая-то иная, то и расклад, соответственно, иной.
В том плане - что надо подтянуть, или, может, не надо...
Первопередняя цель заопенсорсить движок причесав:
Shaos wrote:У меня пока задача выкатить движок как есть для локального использования - в виде одного файла virtburg.c и затем уже добавлять возможность онлайнового общения и дописывать новые фичи. На данный момент практически всё что нужно слеплено в один файл размером 3700 строк (специфические для винды 2000 строк сюда не включены - там работа с DirectX и обработка ответов сервера). Ещё надо избавиться от нескольких C++ классов, заменив их на структуры и функции работы с ними (всё равно чаще всего у меня эти классы имели только по одному объекту). Остающиеся снаружи GIF-декодер и класс виртуального диска (используется для чтения слепленных вместе стандартных текстур) также будут убраны до того, как я опубликую исходники...
А далее:
  • выкатить простую игру-стрелялку, показывающую все возможности движка (с ресурсами из Freedoom например);
  • восстановить Виртбург (3D-бродилка с онлайн чатом) с добавлением встроенных игр (головоломки, квесты, стрелялки и т.д.);
  • таки сделать опенсорцную игру про кубообразных роботов задуманную в 2011 :mrgreen:
В процессе достижения последней и предпоследней целей подразумевается добавление в движок виртуальной машины роботов RW1 aka RobbyVM.

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

virtburg-glitch.png
virtburg-glitch.png (615.36 KiB) Viewed 10669 times

P.S. Параллельная цель - вовлечь своих дочек в GameDev - в основном младшую (10), которая уже сама что-то умеет кодить в Scratch. А старшая (15) хоть и играет в подобные игры, но сама учиться программировать отказывается (несмотря на успехи в математике - пару лет назад входила в лучшие 2% учеников по всем штатам и даже грамоту получила за успехи в учёбе за подписью президента трумпа).
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 23629
Joined: 09 Jan 2003 06:22
Location: Silicon Valley
Contact:

Re: Самодельный 3D движок Virtburg

Post by Shaos »

Порассуждаем над возможными расширениями для объявления объектов (плоских спрайтов), которые сейчас задаются так: oHEXID X Y Z H filename где HEXID это цифровой идентификатор объекта в шестнадцатиричном виде, X и Y - координаты объекта на плоскости (с десятичной точкой), Z - высота объекта над полом (обычно 0, но может быть любым числом с десятичной точкой), H - вертикальный размер объекта (может быть с десятичной точкой) ну и filename - это имя файла (раньше можно было использовать как .txr файлы, так и файлы .gif - сейчас я хочу оставить только .txr). Например: o0099 7.5 9.5 0.1 1 door10
1) так как идентификатор более нигде не используется (на него никто не ссылается и т.д.) его можно опустить, скажем писать o! что будет означать инкремент последнего ID (задание количества объектов через objects можно сделать необязательным - в этом случае объекты будут аллоцироваться автоматически);
2) можно будет давать объектам имена - в таком случае объект будет задаваться как o!NAME и указанное уникальное имя будет видимым над объектом в игре (однако если имя начинается с _ то такое имя будет невидимым) - по такому имени (наряду с ID) можно будет совершать над объектом некие операции через терминал или скрипт;
3) анимированные объекты (плоские спрайты) можно будет задавать путём перечисления имён более чем одного файла через запятую:
o! 7.5 9.5 0.1 1 door10,door11,door12
за которыми может идти частота чередования кадров в секунду (по умолчанию пусть будет 1 смена кадра в секунду) - максимум 18.2 (если указать больше, то оно уменьшится до 18.2), минимум 0 (в этом случае переключением кадров будут заниматься сторонние скрипты);
4) более сложные объекты, которые с разных сторон выглядят по разному (как персонажи в думе), могут отстреливаться, порождать другие объекты (например ракеты) и т.д. надо будет задавать через скрипты, например:
o! 7.5 10.5 0 -1 script
причём четвёртое число, ранее задававшее вертикальный размер объекта, будет теперь отрицательным и его значение должно интерпретироваться как уровень сложности, с которого данный персонаж появляется в данном месте (т.е. -1 будет означать видимость с первого уровня сложности), если логика сделана прямо в программе на языке Си, то имя должно начинаться с символа ^ и ещё одним возможным необязательным параметром после имени может быть числовой идентификатор триггера, который активирует данный объект (даже наверное можно поддержать более чем один триггер для одного и того же объекта или вообще сделать произвольные параметры, передающиеся в код объекта как есть);
5) должна появится возможность задания текстур, картинок для спрайтов и скриптов (в виде байткода роботов) прямо в тексте 3dm-файла (в форматах C, XPM и JSON);
6) надо будет добавить директиву fade, с помощью которой можно будет задавать затемнение (или высветление скажем для имитации тумана) объектов в зависимости от расстояния от игрока: fade COLOR DISTANCE где COLOR это индекс цвета в игровой палитре куда плавно уходят все цвета на расстоянии DISTANCE, например:
fade C0 16
что будет означать, что через 16 клеток все цвета у объектов, стен, полов и потолков будут выглядеть как чёрные (см. для примера скриншоты из 1997 чуть ниже);
7) возможно потребуется директива include (я пока не сильно уверен в её необходимости) и наверное макросы (у которых имена будут начинаться например с символа $).

Image Image
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 23629
Joined: 09 Jan 2003 06:22
Location: Silicon Valley
Contact:

Re: Самодельный 3D движок Virtburg

Post by Shaos »

Shaos wrote:7) возможно потребуется директива include (я пока не сильно уверен в её необходимости) и наверное макросы (у которых имена будут начинаться например с символа $).
Можно наряду с include поддержать условную интерпретацию 3dm-файла - скажем добавить директивы препроцессора, которые начинались бы с %

Code: Select all

%include filename
%define name something
%if name=something
... 
%elseif name=somethingelse
...
%else
...
%endif
и по ходу пьесы макросы можно использовать в виде $name (чтобы легко можно было их выделить в тексте при парсинге).

Кроме того переменные можно разрешить задавать извне, как параметры урла - например http://virtburg.com/50_50/room.3dm?level=10&floor=green

Ну и разрешить файлы внутри 3dm-файла тоже через тот же препроцессор заводить:

Code: Select all

%file filename
....
%endfile
Но это конечно всё сильно потом - сначала надо заопенсорсить с теми фичами, что есть...
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 23629
Joined: 09 Jan 2003 06:22
Location: Silicon Valley
Contact:

Re: Самодельный 3D движок Virtburg

Post by Shaos »

Shaos wrote:
AlexanderZh wrote:А это будет по мотивам "соцсетей"? Может получится весьма интересно.
А что значит "по мотивам соцсетей"? Виртбург был 3D онлайн-чатом - там можно было ходить и общаться путём печатания текста (через сервер)
Нашёл видео, которое я сделал в январе 2003 (почти 18 лет назад ещё будучи в Екатеринбурге) из 1200 скриншотов от клиента Виртбурга в процессе блуждания по виртуальному городу - там даже видно гуляющих персонажей и сообщения ;)

 VIDEO2003

P.S. Вот нашёл прекрасную референс-картинку Берлина для имитации в будущем киберпанковском Виртбурге :oidea:

NightFogCity.jpg
NightFogCity.jpg (145.77 KiB) Viewed 10566 times

P.P.S. Яркости серого цвета на небе такие (на оригинальной фотке ещё и цветные отблески есть, но в моей палитре 256 цветов сильно муторно будет это повторять):

NightFogCityGrays.jpg
NightFogCityGrays.jpg (20.5 KiB) Viewed 10564 times

Перевод серого в цвета моей игровой палитры из серого диапазона (C0...FF):

Code: Select all

#000000 -> C0
#101010 -> C4
#202020 -> C8
#303030 -> CC
#404040 -> D0
#505050 -> D4
#606060 -> D8
#707070 -> DC
#808080 -> E0
#909090 -> E4
#A0A0A0 -> E8
#B0B0B0 -> EC
#C0C0C0 -> F0
#D0D0D0 -> F4
#E0E0E0 -> F8
#F0F0F0 -> FC
(это только 16 цветов из 64 для демонстрации - промежуточные цвета получаются по аналогии - 0xC0+Y/4)

Соответственно цвета неба должны идти от #404040 (D0) до примерно #7С7С7С (DF), а здания вдалеке должны быть темнее чем #404040 (D0) чтобы оставаться видимыми...
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 23629
Joined: 09 Jan 2003 06:22
Location: Silicon Valley
Contact:

Re: Самодельный 3D движок Virtburg

Post by Shaos »

Кстати в обновлённом движке можно попробовать неевклидовые трюки вот из этих видеороликов :)


https://youtu.be/kEB11PQ9Eo8


https://youtu.be/W2xVJhcfkRY
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 23629
Joined: 09 Jan 2003 06:22
Location: Silicon Valley
Contact:

Re:

Post by Shaos »

Shaos wrote:
Shaos wrote:Посидел я в гимпе (линуксовый клон фотошопа) и сваял прототип интерфейса:

Image

Вобщем суть в том, что игрок играет за робота андроида и отстреливает других злобных танко-роботов...
Так будут какие-то замечания, предложения? В основном по нижней панели - что туда можно отображать? С верхней панелью всё понятно - в левой части будет типа терминал - для подачи внутренних команд и печати ответов, а в правой - лог радиопереговоров роботов, находящихся на этом уровне. По нижней панели - слева экран карты местности, справа - экран видеосвязи, в который например может выводится то, что снимается камерой на ракете, а также туда можно подключать вид сзади, слева или справа. В середине голова робота-андроида - возможно отображающая степень разбитости (как в думе). Слева - проценты энергии и вертикальный прогрессбар (здоровье=энергия). Понятие ARMOR я применять не буду. Справа вертикальный прогрессбар показывает кол-во основого оружия роботов - ракет. Ещё у робота есть пистолеты (как на картинке) - количество патронов планирую не ограничивать либо ограничивать каким-то большим числом типа 999. Также планируются гранаты (потом). Справа мелко хочу писать кол-во каждого из оружий. Ещё можно отображать часы - показывающие сколько часов-минут-секунд прошло с момента начала игры и с момента входа в уровень. Ещё предложения есть?
Снова попробовал примерить пистолеты из 2011 года:

rw3d-new-concept.gif
rw3d-new-concept.gif (147.7 KiB) Viewed 10490 times

Наверное поверх 3D рендерера в произвольном разрешении (с коррекцией соотношения сторон для широкого экрана) будет плоская поверхность 640x480 (как в старом клиенте Виртбурга) для показа окна чата, пистолетов, энергии, количества патронов, карты, консоль - которая всегда будет растягиваться под нативное разрешение экрана - например для реального разрешения 640x480 (с соотношением сторон 4:3) левый край и правый край откусятся:

rw3d-new-concept.jpg
rw3d-new-concept.jpg (178 KiB) Viewed 10490 times

соответственно всё информативное надо сохранять в этом прямоугольнике...

P.S. Имя "Robot Warfare 3D" по видимому надо бросить ибо пару-тройку лет назад вышла игра для телефонов с подобным названием:


https://youtu.be/yY8IpxKLLNE

Судя по текстурам домиков подумалось, что это российская игра - посмотрел и точно :mrgreen:
Azur Games is an international mobile game developer and publisher. Founded in 2017 with and headquartered in Larnaca (Cyprus), today its offices can be found in Russia, Belarus and UAE.
Интересно, а её авторы знакомы с моей игрой "Robot Warfare 1" (1998,2000) и видели ли мои эксперименты 2002 года (я помниться засылал эти демки в какую-то игроделательную рассылку тогда) из которых могла бы вырасти своя "Robot Warfare 3D", если бы я это дело не забросил?

Image Image


P.P.S. Нашёл в архивах картинки покрупнее от 10 августа 2002 года - это более ранний OpenGL тест ещё без панорамы:

3d1.png
3d1.png (468.64 KiB) Viewed 10373 times

3d2.png
3d2.png (239.21 KiB) Viewed 10373 times

3d3.png
3d3.png (242.33 KiB) Viewed 10373 times


P.P.P.S. Я модель этого робота в 2000 году сделал в 3D-редкаторе для Quake который назывался WINQOOLE (там очень понятные текстовые форматы 3D-моделей, которые я потом сконвертировал в свои программы) - вот как демоуровень с этими же роботами выглядит из кваки:

qrobots.jpg
qrobots.jpg (182.69 KiB) Viewed 10324 times

Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 23629
Joined: 09 Jan 2003 06:22
Location: Silicon Valley
Contact:

Re: Самодельный 3D движок Virtburg

Post by Shaos »

Shaos wrote:Остающиеся снаружи GIF-декодер и класс виртуального диска (используется для чтения слепленных вместе стандартных текстур) также будут убраны до того, как я опубликую исходники...
Всё - выкинул поддержку виртуального диска VDS (мой собственный формат склеенных вместе файлов, выдуманный в 1996 году) и чужой GIF-декодер (точнее перенёс декодер во внешнюю утилиту для конвертирования GIF в TXR: https://gitlab.com/shaos/virtburg/-/blob/master/tools/gif2txr.c, сконвертировав все GIF-ы что оставались в TXR-ы) - пока движок всё также получается чуть больше 3700 строк. Теперь надо панорамы с GIF на JPG перевести (потребуется задействовать jpeglib для этого - причём он уже есть в линухе), попутно переделав фотканье экрана по кнопке F2 с TGA тоже на JPG (может быть JPG-текстуры тоже поддержать наряду с TXR?), а также прибить последнюю пару C++ классов и выложить наконец virtburg.c

P.S. Хотя наверное фотканье экрана надо сдвинуть в более старшие функциональные клавиши, например F5, а клавишу F2 использовать для сохранения состояния игры и F3 соответственно для загрузки сохранённого (как в думе). Я в 2011 году планировал сохранять бинарный блоб состояния движка, куда бы сбрасывались все внутренние структуры как есть (типа сериализация) - после этого этот блоб мог бы грузиться и играться даже без остальных файлов! Другой момент, что если уровень игры закончился, то надо будет откуда-то подгружать следующий уровень - тогда снова будут нужны исходные файлы карт и текстуры для следующего уровня. Возможно надо предусмотреть сериализацию неиспользванных файлов тоже - тогда игра может жить в блобе (и распространяться как движок+блоб), а изначальный набор исходых карт и текстур может быть лишь "исходниками" которые никуда не отдаются после такой "компиляции" (сериализации в блоб). Сериализацию можно прогонять через zlib, чтобы уменьшить размер файла. Расширение можно скажем сделать .vbb (Virtburg BloB) :mrgreen:

P.P.S. Попутно проверил работу движка в полном HD-разрешении 1920x1080 - выдает 30 с небольшим FPS на моём AMD64 компе. Наверное надо принять это разрешение как максимально возможное - тогда максимальный горизонтальный размер панорамы будет 1920*8=15360 пикселов (8 потому что горизонтальный угол обзора у меня сейчас установлен в 45 градусов, соответственно все 360 это 8 раз по столько). Если панорама меньше, то она будет растягиваться линейной интерполяцией прежде чем будет преобразована в мою игровую палитру. Высота панорамы не должна превышать тройной высоты экрана (выше просто не удасться задрать голову в текущей версии движка) или максимум 1080*3=3240 пикселов. Если панорама ниже по высоте, то верхняя и нижняя строчки просто будут копироваться выше и ниже доступной картинки, причём середина панорамы всегда будет считаться линией горизонта.

P.P.P.S. Вот нашёл на старых дисках оригинал панорамы сгенерированной мною в какой-то ландшафтной программе 20 лет назад, который впоследствии после ручной подгонки под мою игровую палитру превратился в задний фон Виртбурга (ниже уменьшенная картинка с оригинальных 2880 до 1000 пикселов по горизонтали):
Attachments

oldback1000.jpg
oldback1000.jpg (34.63 KiB) Viewed 10353 times

Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 23629
Joined: 09 Jan 2003 06:22
Location: Silicon Valley
Contact:

Re: Самодельный 3D движок Virtburg

Post by Shaos »

Чото забросил я это дело 2.5 года назад так и не допилив сырцы и не выложив под MIT-лицензией - надо найти время допилить и таки выложить...
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 23629
Joined: 09 Jan 2003 06:22
Location: Silicon Valley
Contact:

Re: Re:

Post by Shaos »

Shaos wrote:Я модель этого робота в 2000 году сделал в 3D-редкаторе для Quake который назывался WINQOOLE (там очень понятные текстовые форматы 3D-моделей, которые я потом сконвертировал в свои программы) - вот как демоуровень с этими же роботами выглядит из кваки:

Image
А вообще было бы кому-то интересно, если бы я выложил BSP-файлы этих карт для первой кваки?

quake_006.png
quake_006.png (392.32 KiB) Viewed 5016 times

Там были вполне играбельные уровени (правда без выхода), сделанные в декабре 1997:

quake_004.png
quake_004.png (86.85 KiB) Viewed 5016 times

Основа была сделана с помощью программы, превращающей чёрно-белый BMP-файл в карту:

quake_003.png
quake_003.png (109.8 KiB) Viewed 5016 times

И далее уже в редакторе для уровней кваки я добавлял всякие штуки типа лестницы на крышу:

quake_001.png
quake_001.png (103.74 KiB) Viewed 5016 times



И по этой лестнице можно было взобраться и походить по тёмной крыше после того как убил всех врагов :)

quake_002.png
quake_002.png (41.91 KiB) Viewed 5016 times

И я даже сделал модель лестничной клетки с квартирой моей бывшей жены (точнее её родителей) и ещё двумя квартирами рядом - все с монстрами (файл создан 2 января 1998 года) :lol:

quake_005.png
quake_005.png (67.21 KiB) Viewed 5016 times

Надо чтоли видео прохождения квартирного уровня выложить :lol:
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 23629
Joined: 09 Jan 2003 06:22
Location: Silicon Valley
Contact:

Re: Самодельный 3D движок Virtburg

Post by Shaos »

Выложил видео неполного прохождения квартирного уровня (меня там в конце всё-таки убили соседи бывшей) :no:


https://www.youtube.com/watch?v=EmiE4VHr92w

P.S. Вот все мои карты для первого квейка: http://shaos.net/files/MYQUAKE.ZIP (404K)
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 23629
Joined: 09 Jan 2003 06:22
Location: Silicon Valley
Contact:

Re: Самодельный 3D движок Virtburg

Post by Shaos »

Shaos wrote:Теперь надо панорамы с GIF на JPG перевести (потребуется задействовать jpeglib для этого - причём он уже есть в линухе), попутно переделав фотканье экрана по кнопке F2 с TGA тоже на JPG (может быть JPG-текстуры тоже поддержать наряду с TXR?), а также прибить последнюю пару C++ классов и выложить наконец virtburg.c
...
Попутно проверил работу движка в полном HD-разрешении 1920x1080 - выдает 30 с небольшим FPS на моём AMD64 компе. Наверное надо принять это разрешение как максимально возможное - тогда максимальный горизонтальный размер панорамы будет 1920*8=15360 пикселов (8 потому что горизонтальный угол обзора у меня сейчас установлен в 45 градусов, соответственно все 360 это 8 раз по столько). Если панорама меньше, то она будет растягиваться линейной интерполяцией прежде чем будет преобразована в мою игровую палитру. Высота панорамы не должна превышать тройной высоты экрана (выше просто не удасться задрать голову в текущей версии движка) или максимум 1080*3=3240 пикселов. Если панорама ниже по высоте, то верхняя и нижняя строчки просто будут копироваться выше и ниже доступной картинки, причём середина панорамы всегда будет считаться линией горизонта.
Ну что - через 4 года возвращаюсь к недопиленному движку :)

Первым делом надо поддержать JPG-панораму - причём при загрузке её надо будет переводить в игровую 256-цветную палитру, делая аппроксимацию цветов с точностью до пикселов экрана. Заодно можно поддержать сдвиг линии горизонта, если она вдруг была не точно по середине высоты панорамы.

А уже далее буду выкидывать остатки C++ которые заключаются в 3 классах внутри (shSprite, shObject и ObjLib) - их надо заменить на структуры (ObjLib это динамический массив объектов shObject, которые могут ссылаться на разные либо один и тот же спрайт shSprite) - и 2 классах снаружи (Text и Line предназначенных для построения односвязных списков текстовых строк) - они используются для представления ссылок для перескоков и кеширования спрайтов - это я заменю статическими массивами.

P.S. При переписывании класса shObject на голимый си можно сразу добавить поддержку анимированных спрайтов и спрайтов которые с разных сторон выглядят по разному (как в DOOM). Пока в моём движке спрайт всегда повёрнут "лицом" к наблюдателю, причём один и тот же shSprite может использоваться во многих shObject-ах:

Image



P.P.S. Либо логику анимаций спрайтов и поворачивания объекта разными сторонами к игроку можно оставить на будущую скриптовую часть, как описано чуть выше.

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

Code: Select all

o0001 6.2 5.7 0 1.3 swin_2x3:5
что может означать, что мы берём TXR-файл swin_2x3.txr и предполагаем, что там сетка 2х3 из которой мы берём 5-ую по счёту картинку (если считать слева-направо-сверху-вниз начиная с нуля), а если там анимация 2 Гц, то так:

Code: Select all

o0001 6.2 5.7 0 1.3 swin_2x3:5,swin_2x3:4
(т.е. 2 картинки через запятую дают анимацию 2 Гц, а 3 картинки - 3 Гц и т.д. что даёт цикл анимации всегда ровно в 1 секунду).

P.P.P.P.S. Наверное должна быть возможность запустить/остановить анимацию из скрипта либо по триггеру...
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 23629
Joined: 09 Jan 2003 06:22
Location: Silicon Valley
Contact:

Re: Самодельный 3D движок Virtburg

Post by Shaos »

Как в старые-добрые времена делаю отдельный раздел для Виртбурга (как подраздел форума "Программное обеспечение") :roll:

viewforum.php?f=119

 старый-добрый скриншот
Image

P.S. А может ещё и форум Crypto воссоздать? ;)
Я тут за главного - если что шлите мыло на me собака shaos точка net
Post Reply