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

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

Moderator: Shaos

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

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

Post by Shaos »

Shaos wrote:
  • байт ex - тип куба пока может принимать только 2 значения: 0x00 - можно пройти и 0x10 - нельзя пройти (препятствие);
  • байт hs - сколько разных текстур можно наклеить на столбик (пока не поддержано);
  • байт dd - цвет для верхушки столбика (пока используется лишь при построении карты);
  • байт hh - высота столбика в кубиках (0 - пустая клетка, 1 - один этаж и т.д.);
  • слово id - идентификатор линка если есть (можно в будущем расширить вообще для абстрактных триггеров);
  • слово t0 - задаёт идентификатор текстуры для верхушки столбика (пока используется только для комнат как текстура на потолке);
  • слово t1 - идентификатор текстуры на восточной стороне столбика (если hh>=1) или текстуры на полу (если hh==0);
  • слово t2 - идентификатор текстуры на северной стороне столбика (невидно если hh==0);
  • слово t3 - идентификатор текстуры на западной стороне столбика (невидно если hh==0);
  • слово t4 - идентификатор текстуры на южной стороне столбика (невидно если hh==0).
По аналогии с описанной выше Micro Edition можно поддержать автоматическую анимацию для пола (для кубов без столбиков где hh=0) задействовав hs, которая предполагалась быть использованной только для столбиков высотой 2 и выше (чтобы разные текстуры клеить на одну сторону) - например старший нибл hs задавал бы частоту смены кадров в герцах, а младший нибл - сколько текстур ротейтится - 2, 3 или все 4 (задействовав полный набор t1,t2,t3,t4, причём t0 всё также останется на потолке)...
Для пущей понятности dd можно переименовать в cc (column color?)

Другие возможные типы ex на будущее:
0x0N - площадка на высоте N=0...F (туда можно заходить только с такой же площадки либо с правильной стороны пандуса);
0x10 - также как и раньше обозначает обычную занятую клетку (пройти нельзя ни с какой стороны с любого уровня);
0x1N - пандус с востока и вверх на запад (N=1...F);
0x20 - клетка поднимающая вверх;
0x2N - пандус с севера и вверх на юг (N=1...F);
0x30 - клетка опускающая вниз;
0x3N - пандус с запада и вверх на восток (N=1...F);
0x40 - подбрасывающая клетка (смерть аватара при дальнейшем падении?);
0x4N - пандус с юга и вверх на север (N=1...F);
0x5N - бегущая дорожка с востока на запад (N=0...F);
0x6N - бегущая дорожка с севера на юг (N=0...F);
0x7N - бегущая дорожка с запада на восток (N=0...F);
0x8N - бегущая дорожка с юга на север (N=0...F);
0x90 - электрическая клетка (мгновенная смерть аватара?);
0x91 - вода (аватар уходит под воду, оставляя над водой только голову - можно вылезти и можно плыть);
0x92 - болото (аватар постепенно уходит вниз - вылезти невозможно);
0x93 - кислота (аватар уходит ниже уровня жидкости и начинает постепенно терять здоровье - можно вылезти);
0x94 - лава (аватар уходит вниз и с шипением умирает);
где N - высота уровня ног пользователя в самой высокой части соответствующей клетки.
Пандусы надо будет изображать полигонами в 3D - по ним можно подняться с одного уровня на другой.
Спрыгивать с верхних этажей можно с потерей здоровья (одна единица здоровья за 1 этаж?).

P.S. С другой стороны высота столбика уже задана как hh, соответственно в ex её повторять ненужно - все бегущие дорожки и пандусы могут быть возможны только на верхней поверхности столба из кубиков, соответственно типы ex можно переупорядочить вот так:
0x00 - проход разрешён с любой стороны на любом уровне;
0x01 - площадка на высоте hh;
0x02 - площадка на высоте hh через которую можно пройти только с востока или с запада;
0x03 - площадка на высоте hh через которую можно пройти только с севера или с юга;
0x04 - пандус с востока и вверх на запад (с уровня hh на уровень hh+1);
0x05 - пандус с севера и вверх на юг (с уровня hh на уровень hh+1);
0x06 - пандус с запада и вверх на восток (с уровня hh на уровень hh+1);
0x07 - пандус с юга и вверх на север (с уровня hh на уровень hh+1);
0x08 - бегущая дорожка с востока на запад (на уровне hh);
0x09 - бегущая дорожка с севера на юг (на уровне hh);
0x0A - бегущая дорожка с запада на восток (на уровне hh);
0x0B - бегущая дорожка с юга на север (на уровне hh);
0x0C - клетка поднимающая вверх (до высоты hh);
0x0D - клетка опускающая вниз (с высоты hh);
0x0E - волшебная клетка-ссылка (?);
0x0F - укорачивающая клетка (на расстояние hs);
0x10 - также как и раньше обозначает обычную занятую клетку (пройти нельзя ни с какой стороны с любого уровня);
0x11 - клетка занята статическим невысоким объектом (плоским спрайтом), через который нельзя пройти, но можно перепрыгнуть;
0x12 - клетка занята статическим объектом (плоским спрайтом), который можно забрать;
0x13 - клетка занята статическим уничтожаемым объектом (плоским спрайтом), через который нельзя пройти (но можно расстрелять);
0x14 - клетка занята двигающимся объектом (плоским спрайтом), через который нельзя пройти (но можно расстрелять);
0x80 - вода (аватар уходит под воду, оставляя над водой только голову - можно вылезти и можно плыть);
0x88 - бегущая вода с востока на запад (на уровне hh);
0x89 - бегущая вода с севера на юг (на уровне hh);
0x8A - бегущая вода с запада на восток (на уровне hh);
0x8B - бегущая вода с юга на север (на уровне hh);
0x90 - кислота (аватар уходит ниже уровня жидкости и начинает постепенно терять здоровье - можно вылезти);
0x91 - болото (аватар постепенно уходит вниз - вылезти невозможно);
0x92 - лава (аватар уходит вниз и с шипением умирает);
0xF0 - прозрачная клетка (нулевой цвет текстуры просвечивает куб насквозь);
0xF1 - зеркальная клетка (нулевой цвет текстуры отражает луч назад?).
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 23733
Joined: 09 Jan 2003 06:22
Location: Silicon Valley
Contact:

Re:

Post by Shaos »

Shaos wrote:Сделал имитацию робота, пользуясь набором спрайтов:

Если слегка приподняться, то будет видно "секрет" - робот построен из 46 узких плоских спрайтов:

room2.png
room2.png (297.09 KiB) Viewed 10648 times

Под спойлером текст 3DM-файла, который был использован для генерации видео робота 9 лет назад:

 room2.3dm

Code: Select all

map 11:11
textures 16
t0000 bricks01
t0001 bricks01 +4
t0002 bricks01 -4
t0003 @d8,2 rama02
t0004 rama01
t0005 t
t0006 t2
t0007 rama01
hall 2
start 1 1 45
back baseback.gif
default hh=0 t1=3 t0=4
border ex=10 hh=2 t1=2 t2=0 t3=1 t4=0
objects 100
o0000 5.2200 5.2200 0 0.625 t_9
o0001 5.2200 5.2825 0 0.625 t_8
o0002 5.2200 5.3450 0 0.625 t_7
o0003 5.2200 5.4075 0 0.625 t_6
o0004 5.2200 5.4700 0 0.625 t_5
o0005 5.2200 5.5325 0 0.625 t_4
o0006 5.2200 5.5950 0 0.625 t_3
o0007 5.2200 5.6575 0 0.625 t_2
o0008 5.2200 5.7200 0 0.625 t_1
o0009 5.2200 5.7825 0 0.625 t_0
o000A 5.2825 5.2200 0 0.625 t2_1
o000B 5.2825 5.7825 0 0.625 t2_8
o000C 5.3450 5.2200 0 0.625 t2_2
o000D 5.3450 5.7825 0 0.625 t2_7
o000E 5.4075 5.2200 0 0.625 t2_3
o000F 5.4075 5.7825 0 0.625 t2_6
o0010 5.4700 5.2200 0 0.625 t2_4
o0011 5.4700 5.7825 0 0.625 t2_5
o0012 5.5325 5.2200 0 0.625 t2_5
o0013 5.5325 5.7825 0 0.625 t2_4
o0014 5.5950 5.2200 0 0.625 t2_6
o0015 5.5950 5.7825 0 0.625 t2_3
o0016 5.6575 5.2200 0 0.625 t2_7
o0017 5.6575 5.7825 0 0.625 t2_2
o0018 5.7200 5.2200 0 0.625 t2_8
o0019 5.7200 5.7825 0 0.625 t2_1
o001A 5.7825 5.2200 0 0.625 t_0
o001B 5.7825 5.2825 0 0.625 t_1
o001C 5.7825 5.3450 0 0.625 t_2
o001D 5.7825 5.4075 0 0.625 t_3
o001E 5.7825 5.4700 0 0.625 t_4
o001F 5.7825 5.5325 0 0.625 t_5
o0020 5.7825 5.5950 0 0.625 t_6
o0021 5.7825 5.6575 0 0.625 t_7
o0022 5.7825 5.7200 0 0.625 t_8
o0023 5.7825 5.7825 0 0.625 t_9
o0024 5.5012 5.1887 0.36 0.0625 d
o0025 5.5012 5.8137 0.36 0.0625 d
o0026 5.5012 5.1575 0.36 0.0625 d
o0027 5.5012 5.8450 0.36 0.0625 d
o0028 5.5012 5.1262 0.36 0.0625 d
o0029 5.5012 5.8762 0.36 0.0625 d
o002A 5.5012 5.0950 0.36 0.0625 d
o002B 5.5012 5.9075 0.36 0.0625 d
o002C 5.5012 5.0637 0.36 0.0625 d
o002D 5.5012 5.9387 0.36 0.0625 d
end

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

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

Post by Shaos »

Вот думаю как серверную часть сделать
Раньше было на перле и простой базе данных ключ=значение
Теперь можно тупо на PHP+MySQL переписать (чат и передача глобальных событий)
А можно уйти в облако с расчётом на будущую бесконечную масштабируемость :roll:
Или вообще попробовать сделать децентрализованно - типа вовсе без сервера обойтись :rotate:
(либо сервер будет только подтверждать что те или иные миры авторизованы быть показанными под маркой Virtburg)
P.S. Обсуждение децентрализованных виртуальных миров перенес в другой топик:
http://www.nedopc.org/forum/viewtopic.php?f=81&t=20142
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 23733
Joined: 09 Jan 2003 06:22
Location: Silicon Valley
Contact:

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

Post by Shaos »

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

Вот их 100 штук:
Attachments

imps2011.jpg
imps2011.jpg (106.96 KiB) Viewed 10372 times

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

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

Post by Lavr »

Shaos wrote:20 апреля 2011 года я оказывается думовского imp-а прикрутил чисто напоглядеть :)
А тебе не кажется, что для того размаха, который ты пока лишь планируешь, у тебя графика слабовата?

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

Сам-то я и в не-онлайн игры редко играю, а в онлайн и вовсе не играю, но слышал от многих в основном
офисных работников про довольно популярную онлайн игру "Бумз!"

Так там графика весьма крутая, хотя и не 3D может быть, но затея в том, что в эту игру подсевшие
на неё вкладывают самые настоящие деньги, чтобы прикупить "ништяков".
Нет, там можно и за очки прикупить, но это долго...

А знаю я эту игру, потому как всякие офисные бездельники еще и видео снимают про свои удачные прохождения,
и выкладывают на Ютуб, а потом пристают - "посмотри ролик, как я там на Бумзах круто!"

А почему я тебе это тут рассказал, так деньги настоящие они в итоге вгоняют весьма серьёзные в эту
игру, если посчитать в сумме, и самое забавное - это удерживает их в игре! :roll:
Типа - "я туда столько денег вгрохала, жалко бросать!" - есть у меня такая онлайн-знакомая.. :lol:

Но графика там весьма привлекательная, скажу я тебе...
iLavr
User avatar
Shaos
Admin
Posts: 23733
Joined: 09 Jan 2003 06:22
Location: Silicon Valley
Contact:

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

Post by Shaos »

Ну у меня нету настоящих денег и софт открытый - если кому не нравится, то пусть берёт и делает свою версию с графикой получше :lol:

P.S. По поводу того с какой графикой игры нынче супер-популярны можно скажем посмотреть в сторону Among Us ;)

 AmongUsVideos

https://youtu.be/gGc3PyKItPU


https://youtu.be/76eMU6tR1g8

Игра существует для PC и для телефонов - мои детки по ней с ума сошли :rotate:

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

Re:

Post by Shaos »

Shaos wrote:Померял с секундомером скорости - если принять, что высота (и ширина) одного куба (один этаж) составляет около 2 метров, то игрок ходит со скоростью 17 км/ч, а бегает - со скоростью 50 км/ч (стометровку с такой скоростью можно пробежать за 7.2 секунды)
Это я неправильно 10 лет назад посчитал - высота одного куба всё-таки 3 метра (или на американский манер - 10 футов), соответственно скорость хождения получается 25 км/ч, а беганья - 75 км/ч
Просто уровень глаз в варианте существующем с 2011 года составляет 38 пикселов от уровня земли что в случае 3 метров переводится в 38 / 64 * 3 = 1.78м, что будет давать рост человекоподобных персонажей примерно в 1.9м что как бы примерно ок...
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Lavr
Supreme God
Posts: 16639
Joined: 21 Oct 2009 15:08
Location: Россия

Re: Re:

Post by Lavr »

Shaos wrote:
Shaos wrote:Померял с секундомером скорости - то игрок ходит со скоростью 17 км/ч, а бегает - со скоростью 50 км/ч (стометровку с такой скоростью можно пробежать за 7.2 секунды)
Это я неправильно 10 лет назад посчитал - скорость хождения получается 25 км/ч, а беганья - 75 км/ч ... рост человекоподобных персонажей примерно в 1.9м что как бы примерно ок...
В обоих случаях у тебя ну оооооочень шустрые "человекоподобные персонажи ростом примерно в 1.9м"... :lol:
Если учесть что максимальная скорость бега "человекоподобных" обычно не превышает 45 км/ч,
то 50 км/ч - это "как бы примерно ок...", но 75 км/ч - это уже супер-"человекоподобные"! :roll:
iLavr
User avatar
Shaos
Admin
Posts: 23733
Joined: 09 Jan 2003 06:22
Location: Silicon Valley
Contact:

Re: Re:

Post by Shaos »

Lavr wrote:
Shaos wrote:
Shaos wrote:Померял с секундомером скорости - то игрок ходит со скоростью 17 км/ч, а бегает - со скоростью 50 км/ч (стометровку с такой скоростью можно пробежать за 7.2 секунды)
Это я неправильно 10 лет назад посчитал - скорость хождения получается 25 км/ч, а беганья - 75 км/ч ... рост человекоподобных персонажей примерно в 1.9м что как бы примерно ок...
В обоих случаях у тебя ну оооооочень шустрые "человекоподобные персонажи ростом примерно в 1.9м"... :lol:
Если учесть что максимальная скорость бега "человекоподобных" обычно не превышает 45 км/ч,
то 50 км/ч - это "как бы примерно ок...", но 75 км/ч - это уже супер-"человекоподобные"! :roll:
Я понимаю, однако если сделать медленнее, то будет сильно тормозно :)
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Lavr
Supreme God
Posts: 16639
Joined: 21 Oct 2009 15:08
Location: Россия

Re: человекоподобный персонаж

Post by Lavr »

Shaos wrote:Я понимаю, однако если сделать медленнее, то будет сильно тормозно :)
Да я ж не призывал сделать медленнее, я просто удивился, что ты пересчитал заново... :lol:
И с первого разу было понятно, что "человекоподобные персонажи" у тебя шустрЫ! :wink:

Журнал "Хакер" как-то в шутку подсчитал, что носит с собой "человекоподобный компьютерный
персонаж" Гордон Фримен, так выяснилось, что он должен быть железный дровосек... :mrgreen:
iLavr
User avatar
Shaos
Admin
Posts: 23733
Joined: 09 Jan 2003 06:22
Location: Silicon Valley
Contact:

Re: Re:

Post by Shaos »

Shaos wrote:
Shaos wrote:Померял с секундомером скорости - если принять, что высота (и ширина) одного куба (один этаж) составляет около 2 метров, то игрок ходит со скоростью 17 км/ч, а бегает - со скоростью 50 км/ч (стометровку с такой скоростью можно пробежать за 7.2 секунды)
Это я неправильно 10 лет назад посчитал - высота одного куба всё-таки 3 метра (или на американский манер - 10 футов), соответственно скорость хождения получается 25 км/ч, а беганья - 75 км/ч
Просто уровень глаз в варианте существующем с 2011 года составляет 38 пикселов от уровня земли что в случае 3 метров переводится в 38 / 64 * 3 = 1.78м, что будет давать рост человекоподобных персонажей примерно в 1.9м что как бы примерно ок...
Решил снова сесть с секундомером и перемерять - от стенки до стенки сектора (62 куба или 186 метров если считать 3 метра на куб):
обычным шагом персонаж проходит за 24.9 секунд, что есть 7.47 метров в секунду или 26.9 км/ч,
а с нажатым шифтом - за 8.3 секунды, что есть 22.41 метров в секунду или 80.7 км/ч.
:o

P.S. А вообще размер одного сектора 64x64 квадрата в метрах составляет 192x192.
Теоретический предел размера виртуального города (как было задумано в 2000 году) составляет 100x100 секторов
или соответственно 19.2x19.2 км, что покроет к примеру большую часть города Екатеринбурга:

VirtEburg.gif
VirtEburg.gif (112.16 KiB) Viewed 10214 times

Сектора предполагалось нумеровать от 00_00 до 99_99, где первое число - координата сектора по оси X, а второе - координата сектора по оси Y.
Существующие на данный момент сектора строились вокруг центра города с координатами 50_50 в котором находится высотное здание муниципалитета.
При необходимости в-принципе можно продолжать развивать город вправо, увеличивая координату X и после 100.
Например, чтобы растянуть такой виртуальный город вдоль экватора нашей платены потребуется 208724 сектора по горизонтали.

P.P.S. В самом движке ограничения на размер одного сектора нет - разве что рендеринг луча прекращается при достижении расстояния в 100 единиц (кубиков).

P.P.P.S. На самом деле есть некий искусственный предел в 65536 кубиков по горизонтали, но это и так уже запредельно много для одного сектора (196.6км).

P.P.P.P.S. Вот как выглядит квадрат 192х192 метра (один сектор) на карте Манхеттена - туда целиком влезает 9/11 Memorial Park с двумя фонтанами на месте башен-близнецов:
Attachments

Screenshot from 2020-10-23 01-31-27.png
Screenshot from 2020-10-23 01-31-27.png (511.38 KiB) Viewed 10213 times

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

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

Post by Shaos »

У меня пока задача выкатить движок как есть для локального использования - в виде одного файла virtburg.c и затем уже добавлять возможность онлайнового общения и дописывать новые фичи. На данный момент практически всё что нужно слеплено в один файл размером 3700 строк (специфические для винды 2000 строк сюда не включены - там работа с DirectX и обработка ответов сервера). Ещё надо избавиться от нескольких C++ классов, заменив их на структуры и функции работы с ними (всё равно чаще всего у меня эти классы имели только по одному объекту). Остающиеся снаружи GIF-декодер и класс виртуального диска (используется для чтения слепленных вместе стандартных текстур) также будут убраны до того, как я опубликую исходники...
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 23733
Joined: 09 Jan 2003 06:22
Location: Silicon Valley
Contact:

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

Post by Shaos »

В существующем движке нет дверей в обычном понимании, но их можно имитировать с помощью плоских спрайтов, которые поднимаются и опускаются программно - например вот так:

room_door1.png
room_door1.png (180.58 KiB) Viewed 10308 times

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

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

 video


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

Re: Re:

Post by Shaos »

Shaos wrote: Решил снова сесть с секундомером и перемерять - от стенки до стенки сектора (62 куба или 186 метров если считать 3 метра на куб):
обычным шагом персонаж проходит за 24.9 секунд, что есть 7.47 метров в секунду или 26.9 км/ч,
а с нажатым шифтом - за 8.3 секунды, что есть 22.41 метров в секунду или 80.7 км/ч.
:o
Один коэффициент у меня был изменён какое-то время назад - вернул как было раньше (все подпрыгивания, пробегания и углы рассчитаны для 55 мс или 18.2 раза в секунду типа для совместимости с досом) и перемерял:
обычным шагом получилось 27.3 секунды или 24.53 км/ч,
а бегом - примерно 9.2 секунды или 72.78 км/ч,
ну т.е. грубо говоря 24 км/ч и 72 км/ч

P.S. Ещё померял у себя повороты - с нормальной скоростью полный поворот на 360 градусов осуществляется за 7 секунд, а с шифтом - за 3.5 секунды

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

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

Post by Shaos »

Shaos wrote:
Shaos wrote:
Shaos wrote:P.S. В 2011 году я планировал убрать 3DMap формат совсем и заменить каждый сектор роботом, который будет его описывать программно на языке Robby
в Robby (RW1) применительно для Виртбурга (platform 3) предполагалось переиспользовать команды select и set - select x y выбирала бы клетку сектора для работы, а set задавала бы номер текстуры - причём у set изначально был скрытый второй параметр (по умолчанию 0), который может указывать сторону столбика в клетке, куда мы наклеиваем текстуру (по умолчанию получается что она наклеивалась бы на потолок), а вот объявление текстур в Robby изначально не предполагалось - тут придётся изгаляться, например через команду SAY говорить команды объявления текстур при старте робота типа:

Code: Select all

SAY "\! t0004 gray02 *A0"
SAY "\! t0005 gray01 rama01"
префикс \! будет говорить интерпретатору байткода, что это системные команды, которые идут мимо лога и не выводятся на консоль - вобщем как-то так...

P.S. Я смотрю прямая работа с текстурами всё таки предполагалась - через команды PLANE, COLOR, PIXEL, FILL и TEXT (и наверное CLEAR который в RW1P2 для ZX означал PIXEL цветом фона, а сейчас наверное можно прозрачным цветом номер 0) - другой вопрос, что скажем поточечное зашумление текстуры программно из байткода виртуальной машины будет медленным - так что наверное надо оба варианта доступа к текстурам иметь...
Ещё ведь нужно уметь не только текстуры для кубиков редактировать программно, но и спрайты (которые objects) - скажем обращаясь к ним через отрицательные номера в PLANE...

P.S. Хотя скорее их не редактировать надо, а перемещать в пространстве, а также прятать и снова показывать - cкажем через Robby команду COMMAND:

Code: Select all

A=SpriteID
B=New_x // x*64 (с точностью до пиксела)
C=New_y // y*64 (с точностью до пиксела)
COMMAND @SHOW_SPRITE // показать спрайт в указанных координатах

A=SpriteID
B=New_elevation // z*64 (с точностью до пиксела)
C=New_height // h*64 (видимая высота спрайта)
COMMAND @JUMP_SPRITE // изменить высоту расположения спрайта, а также его видимый вертикальный размер

A=SpriteID
B=Ptr_Text // указатель на память с текстом
COMMAND @NAME_SPRITE // показать имя над спрайтом

A=SpriteID
COMMAND @HIDE_SPRITE // спрятать спрайт
Для начала можно взять старый движок роботов (выпущенный в 2001 с открытыми исходниками как "Robot Warfare 1 Open Game") - там нету всех этих COMMAND, PLANE, COLOR и т.д. но зато уже есть SEND и RECV (для отправки и получения одного целочисленного значения), с помощью которых можно реализовать триггеры, которые по сути те же линки:

Code: Select all

^5,6 http://shaos.ru/vburg/50_51/main.3dm
# а тут мы указали ссылку - в эту дверь можно "выйти"
# и попасть в трехмерный мир в интернете
# (напоминаю, что для того, чтобы ходить
# в интернет нужна программа 3DMap Wanderer).
# Ссылка на карте привязывается
# к координатам - в данном случае (5,6)

^5,12 start.3dm 5 1 90
# кроме того можно в мире, на который ссылаемся,
# поставить игрока в произвольные координаты (здесь - 5,1)
# и направить его под любым углом (здесь 90 градусов)
Для триггеров вместо имени файла с путём можно указать число скажем большее чем 1000, например:

Code: Select all

^5,13 1001
Это будет означать, что если пользователь попытался шагнуть в клетку с координатами 5,13 то система пошлёт широковещательное сообщение с кодом 1001 и все кто может на него реагировать - среагирует (например невидимый робот "ангел" может на это поменять местоположение спрайта двери вызвав SAY("\! o0099 7.5 9.5 0.1 1 door10") несколько раз с разным вертикальным смещением

P.S. более того - триггеры можно и прямо на сях обрабатывать - в коде игры, которая этот движок использует...
Я тут за главного - если что шлите мыло на me собака shaos точка net
Post Reply