| Автор | Сообщение | 
|---|
| YURA_111 UAC Sergeant Major
 
 |  |  | 768 | 
  Doom Rate: 1.98
 Posts quality: +137
 | |  Отправлено: 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 -
 
 |  |  | 1095 | 
  Doom Rate: 1.33
 Posts quality: +990
 | |  Отправлено: 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 |  |  |  |  | Мне куда более "доставило" что помимо кейворда есть ещё и A_WeaponOffset и A_OverlayOffset, которые разумеется не пашут на акторах кроме волын и кинвентори. 	  | Герр Смертоносец пишет: |  	  | Нормальный принудительный оффсет "СПРТ А 1 Offset(x, y)" работает только для HUD-пушек. С какого лешего эту фичу не стали распространять на все спрайты - сие тайна великая есть. | 
 
 
 Ну ты, блин, кулибин! В общем-то мне как раз и нужно смещение по вертикали, пожалуй закинусь хлебцем. 	  | Герр Смертоносец пишет: |  	  | Второй обходной путь - это делать актора невидимым и спавнить самоварпящихся призраков с 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 -
 
 |  |  | 1386 | 
  Doom Rate: 2.28
 Posts quality: +758
 | |  Отправлено: 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 -
 
 |  |  | 6017 | 
  Doom Rate: 1.33
 Posts quality: +2224
 | |  Отправлено: 12.09.19 14:52:05 |  |  |  |  |  	  | Void Weaver пишет: |  	  | Можно ли задать спрайту такое вращение? | 
 Опыт трёхмерных афинных преобразований говорит нам, что вращение объекта вокруг произвольного вектора (ex,ey,ez),
 представимо в виде комбинации двух вращений вокруг осей OX + OY (или вокруг OX + OZ, неважно)
 В приложении к этим вашим декорейтам / зскриптам - не знаю, так как я несколько отстал от жизни.
 
 Немного оффтоп:
 Когда-то давно (около 15-20 лет назад) я для себя написал функцию вращения точки вокруг оси (Q1, Q2) на угол angle.
 Она реально работает, хотя скорее всего, с точки зрения скорости выполнения она не столь эффективна, как прямые преобразования матрицы движения...
 
 |  | 
 Рейтинг сообщения: +1 , отметил(и): Mostcus | 
 | 
| | 
| 4 | 17 | 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 |  |  | 
 |  |