байт 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 - клетка занята двигающимся объектом (плоским спрайтом), через который нельзя пройти (но можно расстрелять); 0x20 - прозрачная клетка; 0x21 - зеркальная клетка; 0x80 - вода (аватар уходит под воду, оставляя над водой только голову - можно вылезти и можно плыть); 0x81 - болото (аватар постепенно уходит вниз - вылезти невозможно); 0x82 - кислота (аватар уходит ниже уровня жидкости и начинает постепенно терять здоровье - можно вылезти); 0x83 - лава (аватар уходит вниз и с шипением умирает).
Вот думаю как серверную часть сделать Раньше было на перле и простой базе данных ключ=значение Теперь можно тупо на PHP+MySQL переписать (чат и передача глобальных событий) А можно уйти в облако с расчётом на будущую бесконечную масштабируемость Или вообще попробовать сделать децентрализованно - типа вовсе без сервера обойтись (либо сервер будет только подтверждать что те или иные миры авторизованы быть показанными под маркой Virtburg) P.S. Обсуждение децентрализованных виртуальных миров перенес в другой топик: http://www.nedopc.org/forum/viewtopic.php?f=81&t=20142
20 апреля 2011 года я оказывается думовского imp-а прикрутил чисто напоглядеть
А тебе не кажется, что для того размаха, который ты пока лишь планируешь, у тебя графика слабовата?
Я из тех соображений, что ты про покупку гаджетов и "внутреннюю валюту" рассуждаешь...
Сам-то я и в не-онлайн игры редко играю, а в онлайн и вовсе не играю, но слышал от многих в основном офисных работников про довольно популярную онлайн игру "Бумз!"
Так там графика весьма крутая, хотя и не 3D может быть, но затея в том, что в эту игру подсевшие на неё вкладывают самые настоящие деньги, чтобы прикупить "ништяков". Нет, там можно и за очки прикупить, но это долго...
А знаю я эту игру, потому как всякие офисные бездельники еще и видео снимают про свои удачные прохождения, и выкладывают на Ютуб, а потом пристают - "посмотри ролик, как я там на Бумзах круто!"
А почему я тебе это тут рассказал, так деньги настоящие они в итоге вгоняют весьма серьёзные в эту игру, если посчитать в сумме, и самое забавное - это удерживает их в игре! Типа - "я туда столько денег вгрохала, жалко бросать!" - есть у меня такая онлайн-знакомая..
Но графика там весьма привлекательная, скажу я тебе...
_________________ iLavr
18 Oct 2020 02:55
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22730 Location: Silicon Valley
Померял с секундомером скорости - если принять, что высота (и ширина) одного куба (один этаж) составляет около 2 метров, то игрок ходит со скоростью 17 км/ч, а бегает - со скоростью 50 км/ч (стометровку с такой скоростью можно пробежать за 7.2 секунды)
Это я неправильно 10 лет назад посчитал - высота одного куба всё-таки 3 метра (или на американский манер - 10 футов), соответственно скорость хождения получается 25 км/ч, а беганья - 75 км/ч Просто уровень глаз в варианте существующем с 2011 года составляет 38 пикселов от уровня земли что в случае 3 метров переводится в 38 / 64 * 3 = 1.78м, что будет давать рост человекоподобных персонажей примерно в 1.9м что как бы примерно ок...
Померял с секундомером скорости - то игрок ходит со скоростью 17 км/ч, а бегает - со скоростью 50 км/ч (стометровку с такой скоростью можно пробежать за 7.2 секунды)
Это я неправильно 10 лет назад посчитал - скорость хождения получается 25 км/ч, а беганья - 75 км/ч ... рост человекоподобных персонажей примерно в 1.9м что как бы примерно ок...
В обоих случаях у тебя ну оооооочень шустрые "человекоподобные персонажи ростом примерно в 1.9м"... Если учесть что максимальная скорость бега "человекоподобных" обычно не превышает 45 км/ч, то 50 км/ч - это "как бы примерно ок...", но 75 км/ч - это уже супер-"человекоподобные"!
_________________ iLavr
19 Oct 2020 21:22
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22730 Location: Silicon Valley
Померял с секундомером скорости - то игрок ходит со скоростью 17 км/ч, а бегает - со скоростью 50 км/ч (стометровку с такой скоростью можно пробежать за 7.2 секунды)
Это я неправильно 10 лет назад посчитал - скорость хождения получается 25 км/ч, а беганья - 75 км/ч ... рост человекоподобных персонажей примерно в 1.9м что как бы примерно ок...
В обоих случаях у тебя ну оооооочень шустрые "человекоподобные персонажи ростом примерно в 1.9м"... Если учесть что максимальная скорость бега "человекоподобных" обычно не превышает 45 км/ч, то 50 км/ч - это "как бы примерно ок...", но 75 км/ч - это уже супер-"человекоподобные"!
Я понимаю, однако если сделать медленнее, то будет сильно тормозно
Я понимаю, однако если сделать медленнее, то будет сильно тормозно
Да я ж не призывал сделать медленнее, я просто удивился, что ты пересчитал заново... И с первого разу было понятно, что "человекоподобные персонажи" у тебя шустрЫ!
Журнал "Хакер" как-то в шутку подсчитал, что носит с собой "человекоподобный компьютерный персонаж" Гордон Фримен, так выяснилось, что он должен быть железный дровосек...
_________________ iLavr
20 Oct 2020 14:16
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22730 Location: Silicon Valley
Померял с секундомером скорости - если принять, что высота (и ширина) одного куба (один этаж) составляет около 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 км/ч.
P.S. А вообще размер одного сектора 64x64 квадрата в метрах составляет 192x192. Теоретический предел размера виртуального города (как было задумано в 2000 году) составляет 100x100 секторов или соответственно 19.2x19.2 км, что покроет к примеру большую часть города Екатеринбурга:
Attachment:
VirtEburg.gif [ 112.16 KiB | Viewed 9169 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 [ 511.38 KiB | Viewed 9168 times ]
У меня пока задача выкатить движок как есть для локального использования - в виде одного файла virtburg.c и затем уже добавлять возможность онлайнового общения и дописывать новые фичи. На данный момент практически всё что нужно слеплено в один файл размером 3700 строк (специфические для винды 2000 строк сюда не включены - там работа с DirectX и обработка ответов сервера). Ещё надо избавиться от нескольких C++ классов, заменив их на структуры и функции работы с ними (всё равно чаще всего у меня эти классы имели только по одному объекту). Остающиеся снаружи GIF-декодер и класс виртуального диска (используется для чтения слепленных вместе стандартных текстур) также будут убраны до того, как я опубликую исходники...
В существующем движке нет дверей в обычном понимании, но их можно имитировать с помощью плоских спрайтов, которые поднимаются и опускаются программно - например вот так:
Attachment:
room_door1.png [ 180.58 KiB | Viewed 9263 times ]
Размещение двери внутри коридорчика длиной 2, а лучше 3 кубика, спрячет дверь из области видимости, когда игрок не стоит точно напротив неё т.к. плоский спрайт всегда повёрнут лицом к игроку и со стороны будет видно, что дверь вывернута, что выглядит неестественно...
P.S. Сделал видео как это может выглядеть (под спойлером):
Решил снова сесть с секундомером и перемерять - от стенки до стенки сектора (62 куба или 186 метров если считать 3 метра на куб): обычным шагом персонаж проходит за 24.9 секунд, что есть 7.47 метров в секунду или 26.9 км/ч, а с нажатым шифтом - за 8.3 секунды, что есть 22.41 метров в секунду или 80.7 км/ч.
Один коэффициент у меня был изменён какое-то время назад - вернул как было раньше (все подпрыгивания, пробегания и углы рассчитаны для 55 мс или 18.2 раза в секунду типа для совместимости с досом) и перемерял: обычным шагом получилось 27.3 секунды или 24.53 км/ч, а бегом - примерно 9.2 секунды или 72.78 км/ч, ну т.е. грубо говоря 24 км/ч и 72 км/ч
P.S. Ещё померял у себя повороты - с нормальной скоростью полный поворот на 360 градусов осуществляется за 7 секунд, а с шифтом - за 3.5 секунды
P.P.S. Померял в думе - там 3 секунды на полный поворот независимо от того был нажат шифт или нет, так что я наверное тоже сделаю одинаково...
Users browsing this forum: No registered users and 6 guests
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot post attachments in this forum