Автор | Сообщение |
YURA_111 UAC Sergeant Major
 | 768 |
 Doom Rate: 1.98 Posts quality: +136 |
Отправлено: 06.09.19 22:36:02 | | | MelaDoZer пишет: | Может, возможно заменить одного конкретного актёра на другого, как в первом вопросе? Того же сержанта с индексом 101 на импа, например. |
Может RandomSpawner? ( https://zdoom.org/wiki/Classes:RandomSpawner )
Правда в этом случае заменяются все монстры этого класса на уровне и в игре. | |
|
| |
MelaDoZer Recruit
 | 14 |
Doom Rate: 2 Posts quality: +13 |
Отправлено: 07.09.19 03:41:37 | | |
Увы, не могу как раз так сделать, не такая цель Но спасибо!
Просто пытаюсь, как в пример, заменить одного конкретного сержанта на E1M1 (индекс 90) на пулемётчика, как было в Playstation Doom на сложности Ultra-Violence. Заспаунить монстра легко, как и повернуть его и присвоить флаги, а вот как удалять определённый thing c карты ZScript'ом мне пока непонятно По идее, если бы я знал как удалить монстра, то я бы смог написать функцию для эдакой замены (и получился бы ответ на мой второй вопрос, хех).
В ACS лезть не хочется, а то придётся как-то код разрывать. Есть у меня ACS-библиотека, которая на OPEN удаляет thing'и с тегами, но я вообще хотел про неё забыть и не использовать больше Должен быть какой-то способ... | |
|
| |
ZZYZX - UAC Commissar -
 |  | 6284 |
 Doom Rate: 1.65 Posts quality: +1633 |
Отправлено: 07.09.19 03:52:39 | | | Destroy() от объекта, чтобы удалить.
Только я не уверен, как найти актора именно по индексу из карты, а не по тэгу. И сохраняется ли эта информация вообще при загрузке. Известно что именно для акторов дум херит довольно много информации, в том числе UDMF-свойства от акторов, например (именно поэтому нельзя получить "comment" у актора, даже если он был — "не реализовано"). Индекс, вероятно, не сохраняется тоже, во всяком случае я его не нашёл.
Есть код в LevelCompatibility, но этот код вызывается не в любое время, а между загрузками карты. И да, там есть доступ к индексу тхинга. Только нормальному человеку это использовать невозможно никак, это встроенный файл в гздуме.
Предлагаю искать монстра по X/Y и типу. |
|
|
2 |
2 |
1 |
 |
|
| |
MelaDoZer Recruit
 | 14 |
Doom Rate: 2 Posts quality: +13 |
Отправлено: 07.09.19 06:05:20 | | | ZZYZX пишет: | олько я не уверен, как найти актора именно по индексу из карты, а не по тэгу. И сохраняется ли эта информация вообще при загрузке. Известно что именно для акторов дум херит довольно много информации, в том числе UDMF-свойства от акторов, например (именно поэтому нельзя получить "comment" у актора, даже если он был — "не реализовано"). Индекс, вероятно, не сохраняется тоже, во всяком случае я его не нашёл.
Есть код в LevelCompatibility, но этот код вызывается не в любое время, а между загрузками карты. И да, там есть доступ к индексу тхинга. Только нормальному человеку это использовать невозможно никак, это встроенный файл в гздуме. |
Да, я как-то давно читал, что LevelCompatibility недоступен для наследования (вроде так, поправьте если что, я могу неправильно термины применять ).
Однако, у меня получилось. Вычитал на форуме ZDoom'а, что его можно юзать. Я не заметил как это изменили в GZDoom, выходит. Вот пример (да и вдруг кому нужно будет):
Это убирает Bloody mess 1 напротив старта. Как на скрине:
Однако, теперь какие-то проблемы со спауном монстров в этом коде и GZDoom просто крашится, по ошибкам пусто (просто уровень загружается, да и всё). Ну это не так уж и страшно, с этим можно ещё разобраться (думаю это из-за самой функции Apply, тут уж придётся поделить).
Спасибо большое, я бы даже не копал в направлении LevelCompatibility, если бы не напомнили Думал, что нужно ждать обновления гоззы.
Впрочем, надо ещё разобраться с архитектурой, насколько её можно изменять  |
|
|
| |
Толик Recruit
 | 18 |
Doom Rate: 1.64 Posts quality: +9 |
Отправлено: 09.09.19 22:13:39 | | | ZZYZX пишет: | Известно что именно для акторов дум херит довольно много информации, в том числе UDMF-свойства от акторов, например (именно поэтому нельзя получить "comment" у актора, даже если он был — "не реализовано"). Индекс, вероятно, не сохраняется тоже, во всяком случае я его не нашёл. |
Откуда инфа?
MelaDoZer пишет: | Вычитал на форуме ZDoom'а, что его можно юзать |
Можно чексумму получить и просто так с помощью levellocals.getchecksum() и потом в worldloded/worldthingspawned/etc ивенте поменять монстра если его координаты, тип и чексума карты совпадают с заданными. | |
|
| |
Void Weaver = Captain =
 | 2496 |
 Doom Rate: 1.82 Posts quality: +808 |
Отправлено: 10.09.19 07:25:36 | | | Имеется актор с набором спрайтов
СПРТ АБВГДЕ 1
и этим спрайтам в редакторе выставлен определённый оффсет (как для монстра).
Также имеется другой актор с тем же набором спрайтов
СПРТ АБВГДЕ 1
но для этого актора нужен совершенно иной оффсет (как для снаряда).
Вопрос: можно ли в пределах одного вада иметь одинаковый набор спрайтов с разными оффсетами, и если да то как это сделать?
Конечно можно тупо переименовать второй набор спрайтов, но их довольно много + будет дубликат ресурсов, и поэтому такой вариант только если не найдётся других решений. | |
|
1 |
9 |
1 |
 |
|
| |
Герр Смертоносец - Warrant Officer -
 | 1059 |
 Doom Rate: 1.36 Posts quality: +924 |
Отправлено: 10.09.19 16:18:07 | | | Void Weaver пишет: | Вопрос: можно ли в пределах одного вада иметь одинаковый набор спрайтов с разными оффсетами, и если да то как это сделать? |
Нормальный принудительный оффсет "СПРТ А 1 Offset(x, y)" работает только для HUD-пушек. С какого лешего эту фичу не стали распространять на все спрайты - сие тайна великая есть.
Теоретически единственный обходной путь (и только по вертикали) - шаманить с A_SetFloatBobPhase, благо что амплитуду можно задать произвольно. Второй обходной путь - это делать актора невидимым и спавнить самоварпящихся призраков с NOINTERACTION-флагов, но это уже совсем троллейбус из хлеба.
Что характерно - а вот для моделей такой путь есть! Ибо всё прописывается в MODELDEF, и можно на одну модель запилить сколько угодно комбинацией. Впрочем, я много раз говорил, что Z-порты являются одной большой насмешкой над универсальностью.  |
|
|
5 |
 |
|
| |
ZZYZX - UAC Commissar -
 |  | 6284 |
 Doom Rate: 1.65 Posts quality: +1633 |
Отправлено: 10.09.19 17:11:05 | | | Толик
Из исходников гздума, очевидно, не сам придумал | |
|
2 |
2 |
1 |
 |
|
| |
Void Weaver = Captain =
 | 2496 |
 Doom Rate: 1.82 Posts quality: +808 |
Отправлено: 10.09.19 17:48:46 | | | Герр Смертоносец пишет: | Нормальный принудительный оффсет "СПРТ А 1 Offset(x, y)" работает только для HUD-пушек. С какого лешего эту фичу не стали распространять на все спрайты - сие тайна великая есть. | Мне куда более "доставило" что помимо кейворда есть ещё и A_WeaponOffset и A_OverlayOffset, которые разумеется не пашут на акторах кроме волын и кинвентори.
Герр Смертоносец пишет: | Второй обходной путь - это делать актора невидимым и спавнить самоварпящихся призраков с NOINTERACTION-флагов, но это уже совсем троллейбус из хлеба. | Ну ты, блин, кулибин! В общем-то мне как раз и нужно смещение по вертикали, пожалуй закинусь хлебцем.
EDIT:
Работает идеально!  | |
|
1 |
9 |
1 |
 |
|
| |
Толик Recruit
 | 18 |
Doom Rate: 1.64 Posts quality: +9 |
Отправлено: 10.09.19 22:24:59 | | | ZZYZX пишет: | Из исходников гздума |
Ссылочку.
Неужели граф парсер для удмфа написать не в состоянии? | |
|
| |
ZZYZX - UAC Commissar -
 |  | 6284 |
 Doom Rate: 1.65 Posts quality: +1633 |
|
2 |
2 |
1 |
 |
|
| |
Толик Recruit
 | 18 |
Doom Rate: 1.64 Posts quality: +9 |
Отправлено: 11.09.19 21:25:04 | | | Мне было просто интересно глянуть на реализацию.
И да, это действительно наследие ренди. Граф его не трогает потому что работает. | |
|
| |
Void Weaver = Captain =
 | 2496 |
 Doom Rate: 1.82 Posts quality: +808 |
Отправлено: 11.09.19 22:35:13 | | | Можно ли задать спрайту такое вращение?
 | |
|
1 |
9 |
1 |
 |
|
| |
ZZYZX - UAC Commissar -
 |  | 6284 |
 Doom Rate: 1.65 Posts quality: +1633 |
Отправлено: 12.09.19 00:28:10 | | | Можно, но придётся добавлять +WALLSPRITE / +FLATSPRITE / +FLOORSPRITE (или как там их) и вертеть спрайт руками в любую сторону ) | |
|
2 |
2 |
1 |
 |
|
| |
Void Weaver = Captain =
 | 2496 |
 Doom Rate: 1.82 Posts quality: +808 |
Отправлено: 12.09.19 08:38:25 | | | WALLSPRITE и FLATSPRITE не совместимы друг с другом, а насчёт "вертеть руками" хотелось бы подробней. Потому что на зфоруме один чел посоветовал что-то не менее расплывчатое:
Если что то речь идёт о кастомных спрайтах снаряда, которые я хотел бы заставить вращаться в полёте в стиле KnightAxe еретиковских Кнайтов.
Мб. как-то через SpriteAngle?
---
1. Как записать чтобы что-то происходило только когда некая переменная кратна 10? Так: If(user_var%10==0)?
2. Как записать 256-маску шанса по проценту от текущих хп?
Т. е. нужно что-то типа A_JumpIf([если Health=100% то шанс 0, если Health=50% то 128, если Health=1% то 256],"state") | |
|
1 |
9 |
1 |
 |
|
| |
JSO x - 2nd Lieutenant -
 | 1366 |
 Doom Rate: 2.29 Posts quality: +744 |
Отправлено: 12.09.19 09:27:29 | | | 1) Да, так. И на "user_var == 0" действие тоже будет выполняться.
2) На Decorate -- "A_JumpIf( 256 - health / GetSpawnHealth() * 256, "state" )". На ZScript -- то же самое, но лучше с использованием переменной "StartHealth". |
|
|
2 |
8 |
1 |
 |
|
| |
Void Weaver = Captain =
 | 2496 |
 Doom Rate: 1.82 Posts quality: +808 |
Отправлено: 12.09.19 10:33:52 | | | 2) То что надо! Я правильно понимаю что прямая пропорция будет "A_Jump( health / GetSpawnHealth() * 256, "state" )",
а отсчёт с половины хп будет "A_Jump(256 - health / GetSpawnHealth()/2 * 256, "state" )" или "-256" просчитается не корректно и для маски с 50% надо писать предварительное условие типа:
If(Health<GetSpawnHealth/2)
{
Return A_Jump(256-Health/GetSpawnHealth/2*256,"state");
}
Else
{
Return state("");
} | |
|
1 |
9 |
1 |
 |
|
| |
ZZYZX - UAC Commissar -
 |  | 6284 |
 Doom Rate: 1.65 Posts quality: +1633 |
Отправлено: 12.09.19 14:39:02 | | | Void Weaver пишет: | WALLSPRITE и FLATSPRITE не совместимы друг с другом, а насчёт "вертеть руками" хотелось бы подробней. Потому что на зфоруме один чел посоветовал что-то не менее расплывчатое: |
Тебе посоветовали пытаться добиться эффекта вращения спрайта вокруг своей оси используя X/YScale
А вообще какая картинка, такой и ответ. Я нифига не понял в какую сторону последний кадр должен крутиться. | |
|
2 |
2 |
1 |
 |
|
| |
VladGuardian - UAC Commissar -
 | 5875 |
 Doom Rate: 1.31 Posts quality: +2137 |
Отправлено: 12.09.19 14:52:05 | | | Void Weaver пишет: | Можно ли задать спрайту такое вращение? |
Опыт трёхмерных афинных преобразований говорит нам, что вращение объекта вокруг произвольного вектора (ex,ey,ez),
представимо в виде комбинации двух вращений вокруг осей OX + OY (или вокруг OX + OZ, неважно)
В приложении к этим вашим декорейтам / зскриптам - не знаю, так как я несколько отстал от жизни.
Немного оффтоп:
Когда-то давно (около 15-20 лет назад) я для себя написал функцию вращения точки вокруг оси (Q1, Q2) на угол angle.
Она реально работает, хотя скорее всего, с точки зрения скорости выполнения она не столь эффективна, как прямые преобразования матрицы движения...
|
Рейтинг сообщения: +1, отметил(и): Mostcus |
|
4 |
15 |
23 |
 |
|
| |
Void Weaver = Captain =
 | 2496 |
 Doom Rate: 1.82 Posts quality: +808 |
Отправлено: 12.09.19 15:10:52 | | | ZZYZX пишет: | Тебе посоветовали пытаться добиться эффекта вращения спрайта вокруг своей оси используя X/YScale  | Ну я приблизительно так и понял, но абсолютно не понимаю как это реализовать, поскольку столь же не въезжаю как это должно помочь.
ZZYZX пишет: | А вообще какая картинка, такой и ответ. Я нифига не понял в какую сторону последний кадр должен крутиться. | Ну как сумел, хотя дорисовка третьей оси могла бы наверное сделать пикчу более информативной.
Попробую "на пальцах".
Представь спрайт монстра (но в моём случае снаряда), например импа, обращённого к игроку "лицом". Ну а теперь надо придать такое вращение чтобы поворот совершался в центре спрайта (пузе), так чтобы в следующем кадре "ноги" импа оторвались от земли а "голова" наоборот наклонилась к земле в сторону зрителя.
И ещё один.
Помните старый советский настольный футбол с футболистами на осях? Ну вот такое вращение мне и нужно. В нормальной геометрии это вроде как вращение вокруг Х?
VladGuardian
Еяпп, то проблема как раз в том что гозза (по крайней мере декор) тупо не предоставляет возможности вращения по второй оси. Либо я об этом не в курсе, что и пытаюсь выяснить. | |
|
1 |
9 |
1 |
 |
|
| |