В общем, ладно. Эта проблема с потреблением патронов решена. Но вернёмся к вопросу, который я задавал ранее. Товарищ Void Weaver помог мне с решением бага с 10-ти кратным поднятием. Большое ему спасибо за это. Однако, остался другой баг. Первое поднятие предмета даёт НИ-ЧЕ-ГО. Только пикапмэсседж в логе высвечивается.
nailzx128:
Возникла небольшая проблема. Вот скрипт для увеличения максимального кол-ва переносимых патронов. Он не работает корректно.
Если заспавнить мой AmmoExtender через консоль, всё работает хорошо. НО! Суть в том, что этот предмет заменяет оригинальный Backpack. На некоторых картах, при самом первом подборе предмета, ничего не происходит. А вот к примеру на седьмой карте Doom 2, этот предмет вообще поднимается максимальное кол-во раз! Итак, вопрос знатокам. Что я сделал не так?
Ниже публикую код, если это что-то даст.
Насчёт ракеты Рева ну вообще не вкурил. Смотрите, фича в том, что правая ракетная установка должна выпускать обычные снаряды, а левая — самонаводящиеся. Как это реализовать непосредственно в коде? спрайты уже готовы
MyNameIs Благодарю! А как это присвоить спрайтам правой и левой ракетницы. Я окончательно запутался, пусть и понял механизм этих двух акторов. Вот код ревенанта:
ACTOR Rev : Revenant replaces Revenant
{
Speed 12
States
{
Spawn:
REVA AB 10 A_Look
Loop
See:
SKEL AABBCCDDEEFF 2 A_Chase
Loop
Melee:
SKEL G 0 A_FaceTarget
SKEL G 6 A_SkelWhoosh
SKEL H 6 A_FaceTarget
SKEL I 6 A_SkelFist
Goto See
Missile:
SKEL J 0 Bright A_FaceTarget
SKEL J 10 Bright A_FaceTarget
SKEL K 10 A_SkelMissile
SKEL K 10 A_FaceTarget
Goto See
Pain:
SKEL L 5 A_Pain
SKEL L 5
Goto See
Death:
TNT1 A 0 A_Scream
SKEL LM 5 // 7->
SKEL N 5
SKEL O 4 A_NoBlocking
SKEL P 4
SKEL Q -1
Stop
Raise:
SKEL Q 5
SKEL PONML 5
Goto See
}
}
nailzx128 Блин, тут нет телепатов, я хз что в твоём случае значит "Первое поднятие предмета даёт НИ-ЧЕ-ГО". Не увеличивает лимит аммо? Не прибавляет аммо? Не делает ни то ни другое?
Если не прибавляет аммо, то попробуй перенести все giveinventory("---ammo",100) из скрипта в стэйт Pickup.
-------------------------
DOOMGABR:
А как это присвоить спрайтам правой и левой ракетницы.
Строку с A_SkelMissile заменяешь на две строки с A_SpawnProjectile, типа:
SKEL K 5 A_SpawnProjectile("RevenantTracerTheSeekerOne",32.0,-10) //Залп с "левой"; допустим что SKER и SKEL - твои новые спрайты
SKER A 5 A_SpawnProjectile("RevenantTracerTheNormalOne",32.0,10); //Залп с "правой"; допустим что SKER и SKEL - твои новые спрайты
В данном случае будет очерёдный выстрел с двух ракетниц сразу.
ИЛИ
Missile:
SKEL J 0 Bright A_FaceTarget
SKEL J 10 Bright A_FaceTarget
TNT1 A 0 A_Jump(128,3)
SKEL K 10 A_SpawnProjectile("RevenantTracerTheSeekerOne",32.0,-10) //Залп с "левой"; допустим что SKER и SKEL - твои новые спрайты
TNT1 A 0 A_Jump(256,2)
SKER A 10 A_SpawnProjectile("RevenantTracerTheNormalOne",32.0,10); //Залп с "правой"; допустим что SKER и SKEL - твои новые спрайты
SKEL K 10 A_FaceTarget
Goto See
В данном случае с шансом 50% будет выстрел либо с правой, либо с левой.
Блин, тут нет телепатов, я хз что в твоём случае значит "Первое поднятие предмета даёт НИ-ЧЕ-ГО". Не увеличивает лимит аммо? Не прибавляет аммо? Не делает ни то ни другое?
Чёрт, моя неконкретность когда-нибудь меня убьёт. Первый подбор не прибавляет патронов и не увеличивает их максимальное кол-во.
А в ENTER скрипте неверное условие.
>> это оператор битового сдвига. Зачем? Вероятно опечатка.
Предполагаю что из-за этого косяка все работает не так как надо.
Во́йду спс. Всё прекрасно работает.
Вопрос. Как сделать, чтобы буллетпаффы SSG разносили монстра в XDeath, в зависимости от того, сколько урона нанесли в сумме все попавшие в тушку дробинки? Как параметр есть в Smooth Doom "ssg gibs monsters", нужно такую же бойду реализовать.
Добавлено спустя 5 минут 17 секунд:
MyNameIs Не-а. Void уже полностью исчерпал мой вопрос.
Chaingunner https://zdoom.org/wiki/SNDSEQ Вот статья. А в идеале скачать это, вытащить map.wad, подгрузить pk3, который скачал, как ресурс и начинать учиться по этому ваду.
В данном ваде используются полиобъекты. Пусть он в формате Hexen, но и для UDMF подходит. Там на полиобъектах висят скрипты, в которых раскрываются экшены, которые, в свою очередь, ищешь на ZDoom Wiki и начинаешь понимать. На заметку, я по новичковости очень быстро это смог освоить, тебе, думаю будет раз плюнуть. Единственный нюанс — звук открытия=звук закрытия. SNDSEQ не имеет обратного вектора на звук закрытия двери. Но это можно обойти. В ваде Revenge Of Evil сделаны полиобъекты со звуком закрытия. Если я не поленюсь изучить — поделюсь инфой.
Добавлено спустя 1 час 22 минуты 30 секунд:
Как сделать, чтобы фрейм кровоточил обычной думовской кровью? В моем случае, хочется сделать всем фреймам XDeath анимаций интенсивный спаун обычной думовской крови.
Добавлено спустя 1 час 24 минуты 26 секунд:
Как сделать кровь, чтобы на каждое ранение хитсканом рандомно спаунился либо один спрайт, либо другой? Я хочу реализовать маловероятный спаун буллетпаффа вместо крови (типа, имитация попадания по металлу) у арахнотрона, манкубуса, мастермайнда и кибердемона.
Как сделать, чтобы буллетпаффы SSG разносили монстра в XDeath, в зависимости от того, сколько урона нанесли в сумме все попавшие в тушку дробинки?
Мэйби я чего-то не догоняю, но по-моему параметры пухи тут несколько вторичны, ибо за гибсы прежде всего отвечает GibHealth свойство; по-умолчанию в Думе оно равно для каждого актора отрицательному значению SpawnHealth. Т. е. для импа оно равно 60, для барона - 1к. Если же выставить барону GibHealth 1, то он может быть гиббнут даже пистолем, офк при наличии XDeath стэйта.
Ещё можно задавать gibfactor = <value> в gameinfo.
Если же прописать пуффу +EXTREMEDEATH, то будет всегда рвать в мясо.
DOOMGABR:
Как сделать кровь, чтобы на каждое ранение хитсканом рандомно спаунился либо один спрайт, либо другой? Я хочу реализовать маловероятный спаун буллетпаффа вместо крови (типа, имитация попадания по металлу) у арахнотрона, манкубуса, мастермайнда и кибердемона.
Та ещё задачка. Ну вот как-то так:
Скрытый текст:
Actor MyChaingun : Chaingun //Пулемётик на поиграться.
{
States
{
Fire:
CHGG A 0 A_PlaySound("weapons/chngun", CHAN_WEAPON)
CHGG A 0 A_GunFlash
CHGG A 4 A_FireBullets(5.6, 0, 1, 5, "MyPuff")
CHGG B 0 A_PlaySound("weapons/chngun", CHAN_WEAPON)
CHGG B 0 A_GunFlash("Flash2")
CHGG B 4 A_FireBullets(5.6, 0, 1, 5, "MyPuff")
CHGG B 0 A_ReFire
Goto Ready
Flash:
CHGF A 4 Bright A_Light1
Goto LightDone
Flash2:
CHGF B 4 Bright A_Light2
Goto LightDone
}
}
Actor MyPuff : BulletPuff //Это если тебе нужен пуфф от пуль, так-то можно от любого другого
{
+PUFFONACTORS //Собс-но флаг позволяющий отображать пуфф на "мясном" акторе
+HITTRACER //Флаг "маркирующий" акторы для дальнейшей проверки
States
{
Crash: //Если выстрел не в моба
PUFF A 4 Bright
PUFF BCD 4
Stop
Spawn:
Melee:
TNT1 A 1 NoDelay A_SpawnItemEx("BlankPuff",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION|SXF_TRANSFERPOINTERS) //Спауним псевдо-пуфф
Stop
}
}
Actor BlankPuff //Будет спауниться с шансом если чек на принадлежность к классу пройден
{
Height 5
Radius 4
Scale 1.4
+NOGRAVITY
States
{
Spawn:
TNT1 A 0 NoDelay A_JumpIf(CheckClass("Cyberdemon",AAPTR_TRACER,1)==0,"SpiderMastermindCheck") //Проверка на Кибердемонов
TNT1 A 0 A_Jump(256,"CyberdemonPuff")
SpiderMastermindCheck:
TNT1 A 0 A_JumpIf(CheckClass("SpiderMastermind",AAPTR_TRACER,1)==0,"FatsoCheck") //Проверка на СМастермайндов
TNT1 A 0 A_Jump(256,"SpiderMastermindPuff")
FatsoCheck:
TNT1 A 0 A_JumpIf(CheckClass("Fatso",AAPTR_TRACER,1)==0,"ArachnotronCheck") //Проверка на Манкубусов
TNT1 A 0 A_Jump(256,"FatsoPuff")
ArachnotronCheck:
TNT1 A 0 A_JumpIf(CheckClass("Arachnotron",AAPTR_TRACER,1)==0,"Death") //Проверка на Арахнотронов
TNT1 A 0 A_Jump(256,"ArachnotronPuff")
CyberdemonPuff:
TNT1 A 0 A_Jump(171,"Death") //~33% шанс на спаун пуффа вместо крови, в принципе ради зрелищности можно и выше
PUFF A 4 Bright A_Warp(AAPTR_TRACER,0,frandom(-10,10),frandom(27,77),0,WARPF_NOCHECKPOSITION|WARPF_INTERPOLATE) //Варпы под габариты Кибердемона
PUFF BCD 4 A_Warp(AAPTR_TRACER,0,frandom(-10,10),frandom(27,77),0,WARPF_NOCHECKPOSITION|WARPF_INTERPOLATE)
Goto Death
SpiderMastermindPuff:
TNT1 A 0 A_Jump(171,"Death")
PUFF A 4 Bright A_Warp(AAPTR_TRACER,0,frandom(-32,32),frandom(25,75),0,WARPF_NOCHECKPOSITION|WARPF_INTERPOLATE) //Варпы под габариты СМастермайнда
PUFF BCD 4 A_Warp(AAPTR_TRACER,0,frandom(-32,32),frandom(25,75),0,WARPF_NOCHECKPOSITION|WARPF_INTERPOLATE)
Goto Death
FatsoPuff:
TNT1 A 0 A_Jump(171,"Death")
PUFF A 4 Bright A_Warp(AAPTR_TRACER,0,frandom(-12,12),frandom(16,48),0,WARPF_NOCHECKPOSITION|WARPF_INTERPOLATE) //Варпы под габариты Манкубуса
PUFF BCD 4 A_Warp(AAPTR_TRACER,0,frandom(-12,12),frandom(16,48),0,WARPF_NOCHECKPOSITION|WARPF_INTERPOLATE)
Goto Death
ArachnotronPuff:
TNT1 A 0 A_Jump(171,"Death")
PUFF A 4 Bright A_Warp(AAPTR_TRACER,0,frandom(-16,16),frandom(16,48),0,WARPF_NOCHECKPOSITION|WARPF_INTERPOLATE) //Варпы под габариты Арахнотрона
PUFF BCD 4 A_Warp(AAPTR_TRACER,0,frandom(-16,16),frandom(16,48),0,WARPF_NOCHECKPOSITION|WARPF_INTERPOLATE)
Death:
TNT1 A 0
Stop
}
}
Если что, под Ревенанта и сам теперь сделаешь.
----------------------------
ЭДИТ:
Пофиксил в коде варп-оффсеты, теперь норм.
за гибсы прежде всего отвечает GibHealth свойство; по-умолчанию в Думе оно равно для каждого актора отрицательному значению SpawnHealth. Т. е. для импа оно равно 60, для барона - 1к. Если же выставить барону GibHealth 1, то он может быть гиббнут даже пистолем, офк при наличии XDeath стэйта.
Это срабатывает на проджектайлах. Но на хитсканах не работает :с
Добавлено спустя 17 минут 36 секунд:
зы: эммм, работает, но как то через жопу. У меня значение gibfactor = 0.1, так даже с таким значением с SSG проблематично разнести монстра на куски. А с проджектайлами проще простого.
Void Weaver Значение гибфактора мне не подходит. Не подскажешь как создать кастомный пафф для SSG, чтобы только это оружие так кромсало в мясо. А остальное осталось кромсать по прежнему. Это в Смут Думе реализовано с помощью кастомного паффа.
и подскажи плез варпы для ревенанта.
спасибо всё прекрасно работает! осталось только порешить SSG gibs monsters
Как я могу реализовать отключаемый джетпак? Типо, при нажимании клавиши Space, его можно можно было и включать и выключать? Да и вообще как реализовать полёт игрока?