Автор | Сообщение |
N00b Chief Petty Officer
 | 922 |
Doom Rate: 2.15 Posts quality: +384 |
Отправлено: 02.10.19 22:33:37 | | | Я делал недавно для тов. Liaslia костыльный бинокль, там можно посмотреть.
Вот последняя версия.
Суть: в начале уровня выдаю игроку вещь, которая контролирует нажатия кнопки по GetPlayerInput и вызывает оверлей. Из него можно менять fov (но только для оружия, находящегося на экране в данный момент; fov для оружия независим). Если не хочется менять существующий код оружия, то это сойдёт. Если имелось в виду, что оружие может быть вообще не выбрано, то работать, скорее всего, не будет (поскольку psprite-ов не будет).
Конечно же, это сделано на zscript.
Edit: Void Weaver успел отредактировать пост раньше. |
|
|
| |
Void Weaver = Captain =
 | 2496 |
 Doom Rate: 1.82 Posts quality: +808 |
Отправлено: 02.10.19 23:01:05 | | |
N00b2015 пишет: | Если имелось в виду, что оружие может быть вообще не выбрано, то работать, скорее всего, не будет (поскольку psprite-ов не будет). | Кстати эту проблему давно хотел решить Apeirogon (на здум-форуме) ака Толик (на нашем форуме).
---
Рабочая версия моего предыдущего поста (по команде zoom): |
|
|
1 |
9 |
1 |
 |
|
| |
Zeberpal_98 Chief Petty Officer
 | 947 |
 Doom Rate: 2.14 Posts quality: +267 |
Отправлено: 02.10.19 23:09:11 | | | Void Weaver и N00b2015
Спасибо за традиционно развернутые ответы, думаю я поступлю примерно так:
Actor YesChangeFOV: custom inventory
<...>
States
{
Select:
TNT1 A 0 A_Overlay(2,"FOVHandler")
SelectL:
SPRT A 1 A_Raise
Loop
FOVHandler:
TNT1 A 1
TNT1 A 1
{
If(CheckInventory("YesChangeFOV")
{
A_ZoomFactor(0.5); //правда, вот время транзишина видимо менять нельзя
Return state("");
}
else if(!CheckInventory("YesChangeFOV")
{
A_ZoomFactor(1.0);
Return state("");
}
}
Loop
<...>
}
Void Weaver Скажи, selectL - опечатка? Асмысле нельзя ли A_Raise в один стейт с Оверлэй ставить, и в таком случае как ты переходишь в SelectL?
И Return state(""); зачем он здесь? |
|
|
1 |
3 |
 |
|
| |
Void Weaver = Captain =
 | 2496 |
 Doom Rate: 1.82 Posts quality: +808 |
Отправлено: 02.10.19 23:18:06 | | | 1. Время транзишина можно настроить и на деко\ацс, но код будет массивнее в виду того что "зум" надо будет делать плавным с переменной в A_ZoomFactor.
2. SelectL c Loop - это НЕ опечатка, а замена Select с Goto Select+1. Просто я предпочитаю обосабливать подциклы добавлением буквы "L(oop)" к названию "основного" стэйта. В принципе можно вызывать A_Overlay и прямо в цикле, но лучше перестраховаться.
3. О каком бы Return state(""); не шла речь но это как правило необходимый парсер завершения анон-функции на деко, буквально означает "продолжи выполнение текущего стэйта". Более детально это объяснял алекв в архиве этой темы. Без неё код выдаст ошибку.
4. В твоём варианте отсутствует проверка на конкретную клавишу и механизм выдачи\изъятия зум-токена.
5. CheckInventory НЕ для декора. Именно поэтому надо использовать CountInv.
6. Ещё раз. A_ZoomFactor работает ТОЛЬКО для оружия но никак НЕ для CustomInventory! Иначе всё было бы гораздо проще и не понадобилось бы привинчивать зум-оверлэй к каждому оружию. Тупанул-с. ) |
|
|
1 |
9 |
1 |
 |
|
| |
Zeberpal_98 Chief Petty Officer
 | 947 |
 Doom Rate: 2.14 Posts quality: +267 |
Отправлено: 02.10.19 23:43:56 | | | Void Weaver
не не, я понял, что для оружия, это просто дамми айтем для FOVhandlera, этакая замена проверки по клавише. Я просто хочу, чтобы вся эта котовасия срабатывала, когда Игрок получает дамми айтем, и ..десрабатывает, когда он его, следовательно, лишается. Спасибо про CountInv, я был не в курсе. | |
|
1 |
3 |
 |
|
| |
FoxPlays = Sergeant Major =
 | 644 |
 Doom Rate: 2.14 Posts quality: +370 |
Отправлено: 14.10.19 17:46:04 | | | Вопрос: Есть ли какая нибудь возможность выровнять по сторонам текст в ACS? В HudMessage они выравниваются по центру, но как сделать чтобы их точка шла не с центра, а например - слева?
Знаю, что такая функция есть в SBARINFO, но есть ли в ACS?
 | |
|
| |
ZZYZX - UAC Commissar -
 |  | 6284 |
 Doom Rate: 1.65 Posts quality: +1633 |
Отправлено: 14.10.19 18:36:27 | | | Вроде бы только с SetHudSize
Но это неточно |
|
|
2 |
2 |
1 |
 |
|
| |
VladGuardian - UAC Commissar -
 | 5875 |
 Doom Rate: 1.31 Posts quality: +2135 |
Отправлено: 14.10.19 19:01:12 | | | FoxPlays
С помощью HudMessage точно нельзя, я просмотрел параметры, там и намёка нет на "justification" (выравнивание)
Так что прислушайся к совету ZZYZX. (SetHudSize / Coordinate Behavior) |
|
|
4 |
15 |
23 |
 |
|
| |
FoxPlays = Sergeant Major =
 | 644 |
 Doom Rate: 2.14 Posts quality: +370 |
Отправлено: 15.10.19 12:25:16 | | | Спасибо, ZZYZX и VladGuardian. Так работает  | |
|
| |
Hutt - Sergeant Major -
 | 562 |
 Doom Rate: 1.3 Posts quality: +151 |
Отправлено: 16.10.19 16:43:37 | | | Как сделать цветной динамик лайт? | |
|
| |
alekv - Colonel -
 |  | 4170 |
 Doom Rate: 1.87 Posts quality: +949 |
Отправлено: 16.10.19 18:10:16 | | | FoxPlays пишет: | Вопрос: Есть ли какая нибудь возможность выровнять по сторонам текст в ACS? В HudMessage они выравниваются по центру, но как сделать чтобы их точка шла не с центра, а например - слева?
Знаю, что такая функция есть в SBARINFO, но есть ли в ACS? |
VladGuardian пишет: | С помощью HudMessage точно нельзя, я просмотрел параметры, там и намёка нет на "justification" (выравнивание)
Так что прислушайся к совету ZZYZX. (SetHudSize / Coordinate Behavior) |
Ну у меня в hudmessage(.... 300.1, 200.1); работало выравнивание по левую сторону. | |
|
1 |
3 |
1 |
 |
|
| |
JSO x - 2nd Lieutenant -
 | 1366 |
 Doom Rate: 2.29 Posts quality: +744 |
Отправлено: 16.10.19 20:25:18 | | | Hutt пишет: | Как сделать цветной динамик лайт? |
Типы динамического освещения на GZDoom-engine. Если нужно, чтобы они были на карте -- то создаёшь, например, PointLight, и указываешь ему в аргументы Args[ 0 ] == Red intensity, Args[ 1 ] == Green intensity, Args[ 2 ] == Blue intensity, Args[ 3 ] == Global intensity. Первые три аргумента одинаковы у всех типов, четвёртый и возможный пятый разнятся.
Для создания своих, "быстродоступных" из-под Decorate/ZScript точек динамического света, нужно в lump'е "GLDEFS" создать шаблон твоего динамического света. Затем -- связать свой шаблон с объектом.
Примеры есть по ссылкам. |
|
|
2 |
8 |
1 |
 |
|
| |
Void Weaver = Captain =
 | 2496 |
 Doom Rate: 1.82 Posts quality: +808 |
Отправлено: 17.10.19 18:57:43 | | | И кстати начиная с 4.2 ввели офигенную функцию A_AttachLight, которая позволяет оперировать параметрами динлайта непосредственно из вызывающего объекта. | |
|
1 |
9 |
1 |
 |
|
| |
Zeberpal_98 Chief Petty Officer
 | 947 |
 Doom Rate: 2.14 Posts quality: +267 |
Отправлено: 20.10.19 17:39:49 | | | Возможно ли в Zdoom вызывать terrain splash, только когда Игрок прыгает с определенной высоты, а не когда заходит в сектор? Например, хочу, чтобы брызги/звуки воды не издавались, когда игрок входит в террайн-текстуру (h суши = h воды), а при прыжке бомбочкой - да. Посмотрел вики, такой опции кажется нет, но мало ли я чего-то не знаю. | |
|
1 |
3 |
 |
|
| |
Void Weaver = Captain =
 | 2496 |
 Doom Rate: 1.82 Posts quality: +808 |
Отправлено: 20.10.19 18:04:35 | | | По удачному стечению обстоятельств буквально сегодня делал кое-что близкое твоему вопросу.
Для начала ставим игроку флаг DONTSPLASH, а затем создаём ему оверлэй чекающий высоту игрока относительно поверхности через проверку его VelZ. Т. е. пишем в оверлэе условие If(VelZ<0){} Что означает "если VelZ отрицательная значит игрок падает" и далее оверлэй ЛИБО отключает флаг DONTSPLASH, либо спаунит под игроком снаряды которые и вызовут сплэш по приземлениюводнению.
ACTOR CrusherGuy : DoomPlayer
{
+DONTSPLASH
States
{
Spawn:
PLAY A 1 NoDelay A_Overlay(3,"SplasherOverlay",1)
Loop
SplasherOverlay:
TNT1 A 1
{
If(VelZ<0){A_SpawnItemEx("SplasherBall",0,0,-5,0,0,-5);Return state("");}
Else{Return state("");}
}
Loop
}
}
ACTOR SplasherBall
{
Height 4
Radius 4
Projectile
Damage (0)
States
{
Spawn:
BAL1 AA 1
Death:
TNT1 A 0
Stop
}
} |
|
|
1 |
9 |
1 |
 |
|
| |
Zeberpal_98 Chief Petty Officer
 | 947 |
 Doom Rate: 2.14 Posts quality: +267 |
Отправлено: 20.10.19 19:07:49 | | | Void Weaver
Ухухух, как хитро ты придумал, спасибо за солюшн
к этому методу и думгая надо подготовить) | |
|
1 |
3 |
 |
|
| |
Zeberpal_98 Chief Petty Officer
 | 947 |
 Doom Rate: 2.14 Posts quality: +267 |
Отправлено: 31.10.19 16:30:43 | | | Можно ли в здуме каким-то образом вот такую "личную" информацию перегнать в стринг?
str STR_IsInStage = GetChar((GetAmmoCapacity("StageStatus")), 0); //перегнать инфу, касающуюся боеприпасов
str StageIMG = StrParam( s:"ICONST", s: STR_IsInStage );
Я так понял в стринг можно пихать только переменные не так ли?
Например, в STR_IsInStage мне возвращается ни с того ни с сего CVARная информация всякая. |
|
|
1 |
3 |
 |
|
| |
Void Weaver = Captain =
 | 2496 |
 Doom Rate: 1.82 Posts quality: +808 |
Отправлено: 31.10.19 17:04:16 | | | Если ты хочешь вывести значение максимума боеприпаса то разве не проще выводить значение не стрингом а тупо интом? | |
|
1 |
9 |
1 |
 |
|
| |
Zeberpal_98 Chief Petty Officer
 | 947 |
 Doom Rate: 2.14 Posts quality: +267 |
Отправлено: 31.10.19 17:28:45 | | | Void Weaver
В данном случае не могу - онлайн мод. Много параметров, которые у каждого игрока разные. Безусловно у меня есть много способов решить проблему, но желание обойтись 3 строчками кода меня не покидает.
str StageIMG = StrParam( s:"ICONST", c:(GetChar(GetAmmoCapacity("StageStatus"), 0)));
{
HudMessageOnActor((GetAmmoCapacity("AreaStatus") + GetAmmoCapacity("StageStatus") + GetAmmoCapacity ("PersonaLuck")), stagerange, StageIMG,"",644);
недавно подумал, что моя ошибка в неправильной букве: но и decimal number и character возвращают дичь. | |
|
1 |
3 |
 |
|
| |
Void Weaver = Captain =
 | 2496 |
 Doom Rate: 1.82 Posts quality: +808 |
Отправлено: 31.10.19 20:27:58 | | | Zeberpal_98 пишет: | В данном случае не могу - онлайн мод. | И как это ограничивает тип вывода данных?
Т. е. ты собираешься выводить ряд статов в виде разновидностей аммо? Если так то делаешь вообще неправильно ибо в таком случае нужно юзать CheckInventory, а не GetAmmoCapacity.
Что такое HudMessageOnActor? | |
|
1 |
9 |
1 |
 |
|
| |