Довольно странно - для чего выкладывать код пуфа, если проблема с самой "ракетой"?
Я, если често, новичок, прям совсем "зелёный", поэтому во многих терминах ориентируюсь слабо.
Этот "пуф" вызывается при альтфаере так:
AltFire:
KNFG B 2
KNFG C 4 A_FireProjectile("KnifePuff2",0,1,0,0,FPF_NOAUTOAIM,0)
KNFG D 2
KNFG G 20
KNFG G 0 A_CheckReload
KNFG D 2
KNFG A 2 A_ReFire
goto Ready
Как я понял, это не пуф да?
А что такое пуф, если не сложно?
Но не суть
Вообщем сами спрайты правильные, их видно, они как бы заметны, но полупрозрачные.
Как это исправить?
RenderStyle type
Defines how this actor is rendered. Possible values include:
"None" - actor is invisible.
"Normal" - actor is visible and not translucent.
"Fuzzy" - like the Spectre in Doom.
"SoulTrans" - actor is translucent, to an amount determined by the transsouls CVAR.
"OptFuzzy" - actor is fuzzy or translucent, based on user preference.
"Stencil" - actor is drawn as a single color. Use StencilColor property to set the color to use.
"AddStencil" - the same as Stencil, only additive.
"Translucent" - actor is translucent.
"Add" - actor uses additive translucency.
"Subtract" - actor uses reverse-subtractive translucency.
"Shaded" - treats 8-bit indexed images as an alpha map. Index 0 = fully transparent, index 255 = fully opaque. This is how decals are drawn. Use StencilColor property to colorize the resulting sprite.
"AddShaded" - the same as Shaded, only additive.
"Shadow" - equivalent to black translucent stencil with an alpha of 0.3.
Default is Normal.
Выставляются в пропертиях (свойствах) актора или при помощи функции A_SetRenderStyle прямо в стейтах для динамического изменения "визуальности" существа ( https://zdoom.org/wiki/A_SetRenderStyle )
Я это всё понимаю, но вопрос в том, что их никак не получается сделать таргетами.
К сути:
Оружие создаёт "ракету", к которой должны передаться флаги оружия.
SFX_SETTARGET с э_файрпартиклем не работает (ни в здум вики такого нет, ни я попробовал - тоже нет)
Э гив инвентари тут тоже у меня не получилось, ибо он должен срабатывать только при наличии этого инвентари у оружия, а тут я уже не знаю как писать.
1) Что за флаги нужно передавать от оружия ракете?
2) Инвентори у оружия может быть только если оружие на полу. Иначе это будет инвентори у Игрока. Можно сделать чтобы именно в тот момент когда игрок держит это оружие был именно этот тип инвентори (если я правильно тебя понял).
1) Что за флаги нужно передавать от оружия ракете?
2) Инвентори у оружия может быть только если оружие на полу. Иначе это будет инвентори у Игрока. Можно сделать чтобы именно в тот момент когда игрок держит это оружие был именно этот тип инвентори (если я правильно тебя понял).
Токены, которые лежат в инвентори игрока влияют на внешний вид оружия, поскольку оно метательное, то выпадающее оружие, которое можно подобрать, должно выглядеть соответственно тому, которое было кинуто.
Я хотел реализовать это так, чтобы игрок во время метания оружия передавал эти токены летящему оружию во время выстрела, а оно, в State Death передавало эти токены лежащему на полу оружию.
Если я всё верно интерпретировал, то не понимаю, чего там у тебя такого плохого с указателями. Такой код, с проверкой при инициализации снаряда, в его основной петле и в передаче спаунящейся вещи --
Скрытый текст:
Actor WWeap: RocketLauncher replaces RocketLauncher {
States {
Spawn:
LAUN A 0
LAUN A 0 A_JumpIfInventory( "WWeapToken", 1, 2 )
LAUN A 0 A_SetScale( -1, 1 ) // Например, переворачиваем спрайт
LAUN A -1 // в зависимости от предмета инвентаря.
Stop
Fire:
MISG B 8 A_GunFlash
MISG B 12 A_FireProjectile( "WWeapProjectile" )
MISG B 0 A_ReFire
Goto Ready
}
}
Actor WWeapProjectile: DoomImpBall {
States {
Spawn:
BAL1 A 0 // Проверяем нужный токен у игрока...
BAL1 A 0 A_JumpIfInventory( "WWeapToken", 0, "SpawnType2", AAPTR_TARGET )
SpawnLoop1:
BAL1 AB 4 Bright
Loop
SpawnType2: // ...и, если что, выдаём его себе же.
BAL2 A 0 A_GiveInventory( "WWeapToken", 1 )
SpawnLoop2:
BAL2 AB 4 Bright
Loop
Death:
BAL1 C 0 Bright A_SpawnItemEx( "WWeap", 0, 0, 0, 0, 0, 0, 0, SXF_ISMASTER )
BAL1 C 0 A_JumpIfInventory( "WWeapToken", 0, "DeathType2" ) // Если у нас предмет есть -- ...
BAL1 CDE 6 Bright
Stop
DeathType2: // ... -- то предоставляем его же созданному оружию.
BAL2 C 0 A_GiveInventory( "WWeapToken", 1, AAPTR_MASTER )
BAL2 CDE 6 Bright
Stop
}
}
Actor WWeapToken: Inventory {
Inventory.MaxAmount 1
}
-- прекрасно работает, только что написал, проверил (комментарии внутри есть).
Токены, которые лежат в инвентори игрока влияют на внешний вид оружия, поскольку оно метательное, то выпадающее оружие, которое можно подобрать, должно выглядеть соответственно тому, которое было кинуто.
Я хотел реализовать это так, чтобы игрок во время метания оружия передавал эти токены летящему оружию во время выстрела, а оно, в State Death передавало эти токены лежащему на полу оружию.
Ещё раз, обрисуй желаемое. Какое метательное оружие, куда летит? Что и в зависимости от чего должно менять внешний вид? Есть ощущение, что задача решается абсолютно не с того места.
Конкретно любой Projectile всегда знает испустившего его актора (таргет поинтер) и может запустить ACS-скрипт от его имени. Но что-то мне подсказывает, что в данной задаче всё это избыточно.
Нож может окровавиться 2-мя способами: его "нос" от удара о монстра, у которого есть кровь, и его "бок" от удара ножом.
Соответственно к стандартному набору спрайтов есть ещё три набора, которые включаются в зависимости от наличия токенов у игрока.
Соотв, если игрок кидает нож некоторой степени окровавленности, то выпадающий нож должен быть той же степени в Death и Crash и +окровавленный нос при XDeath.
Landsberg А спрайты должны меняться у ножа отдельно в полёте или у ножа в руках игрока? У того и другого? Нож остаётся обляпанным навечно? Нож при броске выбрасывается, как оружие?
Вообще, если делать механику с прицелом на мультиплеер, то у нас отдельной жизнью живёт каждый отдельный нож и каждый отдельный игрок. В этом случае ситуацию я вижу так:
1. Игрок получает токены во время ударов.
2. При броске ножа игрок в зависимости от наличия у него токена испускает projectile типа 1, типа 2 и типа 3 (чистый нож). Все потенциально имеющиеся у него токены при этом обнуляются.
3. Projectile при попадании падает на землю, застывает и спаунит на своём месте knife_weapon через A_SpawnItemEx с SXF_ISMASTER и сразу же выдаёт ему токен через A_GiveInventory с пометкой AAPTR_MASTER. В зависимости от этого токена нож принимает тот или иной вид.
4. Projectile после смерти не исчезает, а становится невидимым и переходит в ждущий цикл "призрачного наблюдателя", где непрестанно проверяет наличие любого токена у AAPTR_MASTER через A_JumpIfInventory. Выход из этого цикла возможен только если мастер прекратит своё существование в бренном мире, т.е. если knife_weapon будет кем-то подобран.
5. Как только нож кем-то подобран - Projectile выходит из ждущего цикла, спауня на том же месте итем-токен с тем же хитбоксом, который автоматически подбирается подобравшим нож игроком.
Таким образом, передача токена от оружия к игроку привязывается к физическому процессу подбирания оружия. На карте может быть сколько угодно игроков и ножей, которыми они могут обмениваться, и путаницы при этом не будет.
Таким образом, передача токена от оружия к игроку привязывается к физическому процессу подбирания оружия. На карте может быть сколько угодно игроков и ножей, которыми они могут обмениваться, и путаницы при этом не будет.