.::Russian Blood Community Forum::. »Blood: The Game We Playing In » Blood TC for Duke3D » Главная
Страниц (45): первая страница « 34 35 36 37 38 39 40 41 42 [43] 44 45 »
409. flanker - 01 Апреля, 2015 - 21:37:06
>при рокетджампе игрок постоянно пролетает сквозь стены
т.е. нужен простой алгоритм нахождения пересечения двух отрезков: траектории игрока и стен сектора?

>но нуля не получается, получается какое то эпичное постоянно число
очевидно, это число и следует взять за ноль, нет?

410. [M210®] - 01 Апреля, 2015 - 22:25:00
Цитата:
т.е. нужен простой алгоритм нахождения пересечения двух отрезков: траектории игрока и стен сектора?

Да, это может пригодится, но с плоскими спрайтами сложнее, у них есть только центральная координата и абстрактный размер, не привязанный к краям спрайта...собственно, эти края нужно как то находить...

Цитата:
очевидно, это число и следует взять за ноль, нет?

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

411. flanker - 02 Апреля, 2015 - 16:13:22
Цитата:
Да, это может пригодится, но с плоскими спрайтами сложнее, у них есть только центральная координата и абстрактный размер, не привязанный к краям спрайта...собственно, эти края нужно как то находить...


размер спрайта задается размерностью самой картинки + свойствами спрайта: repeatX, repeatY

высота спрайта= высота в пикселях (умножить на) repeatY (умножить на) 4;
ширина спрайта= ширина в пикселях (умножить на) repeatX (делить на) 8;



412. qqzzxxcc - 02 Апреля, 2015 - 19:09:48
Привет, поигрался в BloodCM всё очень круто, правда несколько вопросов, возможно глупых (играю без HRP).
1) ХоМы если смотришь на зеркало (или дыры в стенах от взрыов) находясь в другом секторе это нормально?
2) У меня не играла музыка на E1M3?
3) Понимаю что вкусовщина, но как сделать цвета-яркость-контраст как в оригиналедосбоксе? Если яркость я кое-как накрутил, то с контрастом и цветом (а с ним тем более) есть проблемы например досбокс любит уводить красные вилы и землю в слегка фиолетовый уводить, eduke же любит грязнокрасный.
4) С polymer (этот вообще любит блумить на пустом месте)polymost нет смысла играть как я понял? Воксели не поддерживаются, а с моделями нито.

(Отредактировано автором: 02 Апреля, 2015 - 19:13:40)

413. [M210®] - 03 Апреля, 2015 - 10:37:30
Цитата:
высота спрайта= высота в пикселях (умножить на) repeatY (умножить на) 4;

Ну так а высоту в пикселях откуда брать? Если из ART файлов, то это не вариант, не по-людски городить статический массив с информацией о пикселях для чуть ли не 10000 картинок + не будет тогда работать с "любительскими" спрайтами

Цитата:
ХоМы если смотришь на зеркало

не совсем понял, о чем ты?

Цитата:
2) У меня не играла музыка на E1M3?

А в оригинале ее в нет на этом уровне

Цитата:
Понимаю что вкусовщина, но как сделать цвета-яркость-контраст как в оригиналедосбоксе? Если яркость я кое-как накрутил, то с контрастом и цветом (а с ним тем более) есть проблемы например досбокс любит уводить красные вилы и землю в слегка фиолетовый уводить, eduke же любит грязнокрасный.

Это к разрабам eduke32 Улыбка Но скорее всего никак.
Цитата:
(этот вообще любит блумить на пустом месте)

В корне ТСа надо удалить dll-файлы, тогда блума не будет

414. flanker - 03 Апреля, 2015 - 13:24:59
>Ну так а высоту в пикселях откуда брать?
ну, я например, в конверторе подгружаю такую табличку
http://pastebin.com/raw.php?i=1GFB1Hb2

всего 4860 строк, но многие многие пиксы из анимации, и их можно удалить. например, найти повторяющиеся друг за другом строки, удалить повторы оставив только заголовочные. строки до 5120 тоже можно удалить, через эти спрайты прыгать не потребуется.

415. [M210®] - 03 Апреля, 2015 - 20:00:53

flanker, это все равно фигня получается, не правильно так делать)
есть возможность использовать hitscan, но это "дорогостоящая" операция, и я пока не совсем уверен, что она там к месту

416. qqzzxxcc - 03 Апреля, 2015 - 23:57:59
Цитата:
не совсем понял, о чем ты?

HoM - Hall of Mirrors
http://i.imgur.com/kshx18H.png
http://i.imgur.com/EE3DtM5.png
http://i.imgur.com/LJKY4MX.png
И с АИ культистов беда когда они на мелких ящиках или еще чем-то стоят, начинают нервничать и дергаться.
Калеба в зеркалах не видно (в работающих).

(Отредактировано автором: 03 Апреля, 2015 - 23:58:33)

417. [M210®] - 04 Апреля, 2015 - 22:02:34
qqzzxxcc
AI я немного подправил, в следующем релизе такого не должно быть.

а на счет бликов от зеркал, это ошибки рендера - нормально))) Но в новых билдах уже вроде чтото исправили

418. Nebula - 08 Апреля, 2015 - 10:29:29
Приветствую почитателей крови.
Уважаемые, подскажите - где взять последний билд кашей модификации?
Все, что удалось найти - это 06.2013, я так понимаю версия полутора-годовалой свежести?
А судя по этой ветке форума - обсуждаете вы что-то поновее ))

Очень уважаю ваш труд и рад, что кто-то этим занимается.

419. flanker - 08 Апреля, 2015 - 12:02:40
>где взять последний билд вашей
Nebula, нигде (: там сейчас все упирается в карты, а мапперов нет (
если [M210®] соберется то, возможно, выложит те карты что успели сделать, если нет, то будем надеяться, что конвертер карт, который я делаю, к лету начнет выдавать что-нибудь играбельнное, и тогда карт будет завались)

420. [M210®] - 09 Апреля, 2015 - 20:00:36
Цитата:
Все, что удалось найти - это 06.2013,

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

421. Nebula - 12 Апреля, 2015 - 18:48:07
Жаль, что пока так
Может нужна посильная помощь? В чем именно загвоздка?
Программированием занимаюсь лет 15 как - возможно помогу продвинуться дальше..

422. flanker - 13 Апреля, 2015 - 00:06:19
Nebula, помощь конечно нужна, но многое зависит и от того, на чем вы программируете, и в чем желаете помочь. Если хотите дорабатывать игровую логику то вам к [M210®], если интересует конвертер карт, то вам ко мне.
Если заинтересуетесь конвертером, то он написан на C++11, его актуальная версия сейчас здесь: http://github.com/flank1er/blud2e/tree/master/blud2e но сейчас помощь мне нужна не в программировании, а в разработке алгоритмов. Что бы вы не тратили время на изучение кодовой базы, я могу выдавать абстрагированные задачки, для неспешного решения. ну например, иногда требуется преобразовать спрайт в внутренний сектор. Итого: плоскость 2D, спрайт заданный как отрезок с центральной точкой (х,у), углом относительно относительно оси абсцисс и длиной. нужно преобразовать в прямоугольник с минимальной шириной =32. Создаваемые прямоугольники не должны пересекаться. наглядный пример:



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


(Отредактировано автором: 13 Апреля, 2015 - 00:25:17)

423. [M210®] - 13 Апреля, 2015 - 12:24:05
flanker
Распиши мне все актуальные проблемы, стоящие перед тобой.
Я конечно, возможно, помог бы и с алгоритмом построения прямоугольных секторов из спрайтов, но тут есть решение по-проще уже с помощью отлаженной системы самого TCа...
а именно с помощью mover'а
Мувер (спрайт №15), ему присваивается уникальный owner, в zvel нужно указать бит соответствующий типу перемещения и такой же owner присваивается спрайтам, через xvel подается сигнал на "пуск" и оно все "крутится" бесконечно долго)

Также можно поворачивать эти спрайты на определенный угол и в определенное время по сигналу

Я сделаю карту пример и скину ее сюда, попробуй реализовать это так.
Дюковскими эффекторами уже можно вообще не пользоваться, т.к. в ТСе есть свои более удобные вещи.
Nebula, твой опыт несомненно может пригодиться, но задачи становятся все более сложными...а так, нужно сделать рокетджамп и наверное, улучшать ИИ врагам.


(Добавление)
http://rghost.ru/74x6Syyfh

Вот пример, но видимо, такой пример не подойдет, т.к. во время вращения через эти спрайты можно бесприпятственно пройти, да и колбасит их у центра...но может пригодится.

424. flanker - 13 Апреля, 2015 - 18:46:07
> http://rghost.ru/74x6Syyfh
у меня они что -то не крутятся, наверно или скрипты старые или двиг, но вполне допускаю что это все можно заставить работать.

> такой пример не подойдет
при всех проблемах, это лучше, чем делать через замену спрайтов сектором, т.к. в HRP версии спрайты всегда можно поменять на модели, стены же моделями не заменишь. пока же мне проще снять блокировку со спрайтов в таком секторе, что бы можно было пройти.

>Распиши мне все актуальные проблемы, стоящие перед тобой
ну, так как преобразовать спрайты в сектора больше не требуется, то остается две проблемы: совмещение TROR секторов, и слайд сектора(не путать со слайд дверями) т.е. преобразование пустой петли во внутренний сектор. Штуки муторные, но решаемые.

Сейчас я делаю каналы и тут интересная ботаника. Управление каналами вынесено в независимый функциональный класс, который ведет учет выданных каналов и назначает новые. Раньше было довольно по простецки. Если запрашивался канал, то проверялось, не выдан ли он, и если он был занят, выдавался новый. Это приводило к тому, что потом требовалось выстраивать заново цепочки: сенсоры - контроллеры(такие спрайты в комнате триггеров) - активаторы. НО в оригинальной карте они уже выстроены, и я пытаюсь сохранить оригинальные номера каналов без повторного перестроения.
еще мне надо алгоритм принадлежности точки произвольному многоугольнику. Что бы перестало выдавать при загрузки карты, что спрайт фактически находится в другом секторе. простой алгоритм нашел в книге "Полигональные модели" автор Боресков.

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

Сейчас самая позитивная новость: удалось реализовать запись карты в шифрованный формат Blood. т.е. я прочитал карту, поменял ревизию(используется как ключ для шифрования), и сохранил в новый файл. мапедит проглотил, не пикнул. Еще сделал чтение из zip архива, теперь вместо кучки con - файлов, один архив. Фукционала конвертеру это понятно не добавляет, но все же прогресс)


425. [M210®] - 14 Апреля, 2015 - 12:55:24
Цитата:
у меня они что -то не крутятся, наверно или скрипты старые или двиг, но вполне допускаю что это все можно заставить работать.

Да, тот скрипт я вчера написал, скину на почту последнее.
Цитата:
совмещение TROR секторов, и слайд сектора

TROR не представляю, как его можно программно совместить, в 4м эпизоде я задолбался в ручную совмещать их таким образом, чтобы не сильно нарушить геометрию... Тут нужен настоящий ИИ для этого...например водяные сектора хорошо совмещаются без последствий, и там, где мапперы пытались сохранить геометрию, типа как на e1m1 (хотя там тоже пришлось искажать, но не заметно) а в лесу, в 4м эпизоде, мапперы вообще не заботились о геометрии, разные высоты, разные переходы и приходится мудрить.

Со слайд-секторами, вроде, должно быть попроще

426. flanker - 14 Апреля, 2015 - 21:05:19
>TROR не представляю,
сейчас, когда программа находит ROR сектор, она рекурсивно составляет список стыкуемых секторов для каждой половинки. Если полученные монжества пересекаются,
они признаются не решаемыми и конвертер на такие случаи ругается, и идет дальше. Моя идея для решения таких случаев такая:
- находятся уникальные кратчайшие пути по этому множеству из одной половины ROR в другую. часто из одного места в другое можно попасть разными путями. Алгоритм Дейкстры можно использовать или подобный.
-в этих путях находятся прямоугольные сектора. если таких не найдется, то нарезать из имеющихся, не проблема.
- далее ищется вариант, при котором смещение двух стен приведет к наименьшему изменению площади сектора. лучше конечно сектор со ступенькой, но можно и наклон рассчитать.
- после, в найденных секторах, одни пары стен едут в одну сторону, другая в другую. вместе со своими половинками.
- проверить чтобы ни один сектор не наехал на другой.

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

>еще мне надо алгоритм принадлежности точки произвольному многоугольнику.
уже сделано)


427. flanker - 15 Апреля, 2015 - 19:27:10
[M210®], как будет время посмотри карту.
https://yadi.sk/d/gXaTPD6Wg2DTZ

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

> Дюковскими эффекторами уже можно вообще не пользоваться, т.к. в ТСе есть свои более удобные вещи.
нужно взорвать сектор SE13 каналу через "push триггер". Как?

со светом не понял. нахожу выключатель, ставлю факелы в нужные сектора, но не работает свет... чего не хватает?
читал, не помогло(
Цитата:
Свет - это тайл факел, номер 32. включается как и все остальное, через xvel.
LE zvel = 0, обычный свет как в дюке, можно включить а можно выключить. при этом на карте изначально (в редакторе) нужно делать темное помещение и ставить в него факел.
Также с факелом можно связать GPSPEED, которому тоже нужно поставить xvel такой же как у факела....лотаг в GPS будет скоростью включения света, хайтаг - скорость выключения, zvel там же - это время за которое будет изменение этой самой скорости включения/выключения.

LE zvel = 1 - рендомный, моргающий свет ( у него есть свои опции, синхронизация, но о ней скажу позднее)
LE zvel = 2 - пульсирующий свет, интенсивность меняется по синусу, лотаг - скорость изменения пульсации.
zvel = 3 - пока не используется из-за низкой производительности, точечный свет
zvel = 4 - свет - свечка, как например на e1m1 в начале - меняет видимость сектора в небольших пределах.
Надо присвоить хайтаг сектору, и в факел записать точно такой же лотаг, чтобы он изменял свойства именно этого сектора
если yvel > 0, сектор будет изменять видимость сектора до значения yvel, чем больше, тем меньше видимость. если owner = 1, то вместе с видимостью будет менять shade сектора (как у рендомного света)
zvel = 5 - свет - цепочка...xvel его включает, по истечению времени lotag свет выключается а по yvel передает 1...передает ее в след такой же свет, получается змейка. hitag - скорость затухания выключенного света, чем больше хайтаг, тем длиннее хвост "змейки".

пока все, если что вспомню потом, допишу, или задавай вопросы Улыбка


Про свет забыл указать, ownerом можно задать то, что ты хочешь осветить:
1 - освещение пола
2 - освещения потолка
4 - освещение стен

если захочешь осветить пол и потолок, надо писать owner = 3, если стен и пол - 5, если все вместе то 7, но 7 можно не писать...в момент загрузки карты при owner = -1 записывается 7 в спрайт и он освещает все


(Отредактировано автором: 15 Апреля, 2015 - 19:49:34)

428. [M210®] - 19 Апреля, 2015 - 17:24:07
Цитата:
- у меня они только один раз открываются, как сделать многократное открывание?

Просто не ставь по-умолчанию owner = 0, все овнеры не равные -1, расцениваются как однократное действие...на 1-1 в данном случае, owner = 0 стоит у кнопки zvel = 7, поменяй owner = -1 и все будет работать многократно.
Цитата:
чего не хватает?

Может xvel на факеле?

[P.S.]
Нашел у себя в коде причину: owner = 0 опять же...
Код:

Owner = le_syncid, sync frequency from other sprite which id has written


Таким образом ты даешь факелу информацию о синхронизации с ID факелом, который прописан в owner, а т.к. у тебя там стоит 0, то факел пытается синхронизироваться с нулевым спрайтом, и т.к. не находит там информации о том, как ему моргать - не моргает Улыбка

Сделал карту пример с вертикальными дверями по каналу, и там же свет по каналу, свет включается при открытии двери.

Цитата:
нужно взорвать сектор SE13 каналу через "push триггер". Как?

Используй для этих целей SE69/70 (смотря в какую сторону нужно "открывать" сектор)
в extra нужно поставить 3, (бит 1 + бит 2 - выключение расчета плавного движения - ускорения и замедления) и поставит скорость в районе 20000-30000 единиц на mover_point...я ставлю на hitag, lotag остается равным 0, чтобы сектору не захотелось закрыться снова, т.е. хайтаг - скорость открытия сектора, лотаг - скорость закрытия сектора...это можно использовать и для других дверей.
Еще заметь, на триггер поставил owner = 1 - тоже для предотвращения вторичного срабатывания, что приведет к "закрытию" сектора

https://yadi.sk/d/AY06WDDAg6Kr2

Вот карта с примерами

(Отредактировано автором: 19 Апреля, 2015 - 17:27:11)

429. flanker - 20 Апреля, 2015 - 19:48:06
как задать время для вращающихся дверей SE64? какие значения нужно записать в MOVER, например, для 1-й секунды, для двух?

>не ставь по-умолчанию owner = 0,
помогло, спасибо.

>нужно взорвать сектор SE13 каналу через "push триггер". Как?
>Используй для этих целей SE69/70
а звук взрыва? какой soundID ставить, не подскажешь?

>вернуть обратно слайд двери
кстати, сделано.

>TROR

cделал ror для первой карты. алгоритм пока полуавтоматический: задаешь группу секторов для сдвига, программа сама их сдвигает, автоматом нарезает дополнительные стены для соответствия геометрии, после чего все сшивается воедино. получается как-то так:


впоследствии, надеюсь, придумаю что-нибудь получше)

430. [M210®] - 21 Апреля, 2015 - 08:37:21
Цитата:
как задать время для вращающихся дверей SE64? какие значения нужно записать в MOVER, например, для 1-й секунды, для двух?

не совсем понял вопроса но вот карта пример с вращающимся сектором.

https://yadi.sk/d/m5qVmLHRg8G9J

Ставишь сектор и задаешь ему уникальный хайтаг...ставишь куда-нибудь SE64 - это будет центр вращения сектора, не обязательно должна находится внутри него...на SE64 ставишь хайтаг, равный хайтагу сектора для связи. Далее ставишь mover_point, на хайтаг порядковый номер движения, лотаг - скорость вращения...zvel на поинта - это направление вращения, 0 - по часовой стрелке, 1 - против часовой стрелке. Меняешь угол направления поинта до желаемого, сектор будет поворачиваться на угол, равный разнице между углом SE64 и поинтом

На карте два поинта и 2 порядковых номера, сначала выполнится движение до угла с порядковым номером 1, при повторном нажатии на кнопку выполнится движение со скоростью 2 на порядковом номере 2...при еще одном нажатии на кнопку, сектор встанет в свое первоначальное положение, но со скоростью равной скоростью последнего действия.
Цитата:
а звук взрыва? какой soundID ставить, не подскажешь?

Ну картостроительством обычно занимался empy, ему лучше знать)) А вообще, в мапстере32 можно нажать на F2 и прослушать все звуки...на работе у меня нет колонок, но судя по названию, подойдет что-то типа 410, ExplodCM

Цитата:
cделал ror для первой карты.

Ну уже неплохо))) От себя могу добавить, что когда я совмещал TROR сектора, я пытался искажать сектора-туннели, и оставлять нетронутыми сектора, у которых полностью общая стена с сектором TROR....т.е. в программу выводить диалог, типа, а не желаете исказить вот этот сектор? А сектор выбирать по такому принципу: Брать размер стены TROR и сравнивать с размером стены прилегающего сектора и по процентному соотношению выбирать наименьший - это скорее всего будет тоннель, который можно будет безболезненно исказить....только вот придется определять наибольшую стену TROR, а ее любят резать на кусочки. Видимо, придется делать проверку соседних стен, если у них угол между двумя точками такой же как у проверяемой, тогда это продолжение этой стены, а если угол отличается больше, чем на 25-30 градусов, значит это уже другая стена сектора


Powered by ExBB 1.9.1
Original Style v1.5a2 created by Daemon.XP