| Автор | Сообщение | 
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 |  |  
 |  
 	  | Герр Смертоносец пишет: | 	 		  | Нормальный принудительный оффсет "СПРТ А 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 -
   |  | 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 | 
  | 
 
 
 |  
  |  |