Welcome to U.A.C. [O.S.A.]
login / register
Status: Guest
Архивы форума | iddqd.ru
Wolf 3D
ПравилаПравила ПоискПоиск
18+
Тема для новичков. Вопросы по маппингу/моддингу - любые! Пред.  1, 2, 3 ... 183, 184, 185
   Список разделов - Местечко мапперов и моддеров - Тема для новичков. Вопросы по маппингу/моддингу - любые!Ответить
АвторСообщение
Герр Смертоносец
= Master Sergeant =
Next rank: - Sergeant Major - after 13 points
517

Doom Rate: 1.54

Posts quality: +275
Ссылка на пост №3681 Отправлено: 22.10.18 17:42:39
Void Weaver :
1. Джамп всё также не совершается при количестве пуль>=(1-2)
2. При таком же количестве пуль>=(1-2) внезапно ИНОГДА возвращает деление_на_ноль-краш:
при том что замер хп производится ДО нанесения урона...

Прозреваю хитрые особенности FastProjectile, использующих что-то вроде дробных тиков: даже при наблюдаемо-одновременном прилёте эти события на самом деле не одновременные (как в релятивистской физике, лол), и возможна ситуация, при которой часть маслин уже нанесли урон, а другие ещё только начали измерять. Если первые N маслин убили монстра - у неуспевших измеренное значение здоровья становится равным нулю, и они испытывают деление на нуль.

Лечение: во-первых, между измерениями и A_DamageTracer должна быть задержка как минимум 1 тик, чтобы все успели измерить и выдать GIBSMark. (И вообще с инженерной точки зрения никогда не начинай вводить в строй такие хитрожопые конструкции без задержек - поначалу их надлежит пихать во все сомнительные места, и лишь потом потихоньку убирать.) Во-вторых, перед джампом с делением фигани аварийую проверку A_JumpIf(user_TracerHealth==0,"ReviveMissile"), ибо мало ли, вдруг однажды монстр от чего-то ещё в критический момент сдохнет.

Void Weaver :
3. Миссайли то ли не ревайвятся, то ли ревайвятся с какой-то задержкой, хотя тот же алгоритм у того анхоли болта работает на-ура.

В свете вышеперечисленного для начала давай убедимся, что снаряды в принципе попадают на ReviveMissile-стейт. (Поставь туда спаун какого-нибудь облачка, чтобы визуально убедиться, что переход происходит.) Скорее всего если пофиксить проблему с задержкой - всё заработает.
Если не заработает - на всякий случай напоминаю про вот этот момент со 173 страницы треда:
Void Weaver :
3. Возникновение статичных "декоративных" снарядов:
Ломал голову дольше всего (вероятно не допёр бы без твоего кода). Причиной являлся какой-то странный лимит стартовой скорости снаряда - при базовых значениях скорости выше 8, снаряд необратимо "умирал" на первом тике, если сталкивался с ЛЮБЫМ актором. Пофиксил понижением базового значения скорости и добавлением A_ScaleVelocity. До сих пор не понимаю с чем связана нестабильность на первом тике... 0_0



Алсо, я вижу, что у тебя отсутствует манипуляция +RIPPER-флагом и замедленное движение ракеты сквозь актора. Рекомендую для начала просто вешать на снаряд +RIPPER сразу же после попадания в ReviveMissile, и если всё будет работать правильно - потом поверх достроишь CheckBlock-систему.
1
YURA_111
= Master Sergeant =
Next rank: - Sergeant Major - after 30 points
500

Doom Rate: 2.02

Posts quality: +70
Ссылка на пост №3682 Отправлено: 22.10.18 17:52:28
Герр Смертоносец :
адр с длительностью -1 не отыграет никогда.


Конечно отыграет и останется на постоянке, просто у человека в коде ошибка (нужно было добавить NoDelay):

States
{
Spawn:
CSAW A -1 NoDelay A_SetScale(0.75, 0.75)
Stop
}

Сама же ошибка заключается в баге порта - на первый стейт спавна вешать экшен можно только как я описал выше или по типу такого:
Spawn:
CSAW A 0
CSAW A 1 A_SetScale(0.75, 0.75)
Loop

Рейтинг сообщения: +2, отметил(и): DOOMGABR, Void Weaver
DOOMGABR
Chief Petty Officer
Next rank: - Warrant Officer - after 66 points
974

Doom Rate: 1.9

Posts quality: +528
Ссылка на пост №3683 Отправлено: 22.10.18 18:09:16
Как сделать, чтобы проджектайл запускался дальше/ближе по оси Z? Я нашел только высоту и оффсеты по XY у A_FireCustomMissle
Void Weaver
Chief Petty Officer
Next rank: Chief Petty Officer after 12 points
928

Doom Rate: 2

Posts quality: +223
Ссылка на пост №3684 Отправлено: 22.10.18 18:33:12
Герр Смертоносец :
Прозреваю хитрые особенности FastProjectile, использующих что-то вроде дробных тиков
Тоже так думал, вот только обычные маслины реагируют так же.

Герр Смертоносец :
во-первых, между измерениями и A_DamageTracer должна быть задержка как минимум 1 тик, чтобы все успели измерить и выдать GIBSMark. (И вообще с инженерной точки зрения никогда не начинай вводить в строй такие хитрожопые конструкции без задержек - поначалу их надлежит пихать во все сомнительные места, и лишь потом потихоньку убирать.)
Ну да, надо взять за привычку, исходил из того что аналогичный фрагмент работал как часы без буферов. В данном случае не помог и буфер.

Герр Смертоносец :
Во-вторых, перед джампом с делением фигани аварийую проверку A_JumpIf(user_TracerHealth==0,"ReviveMissile"), ибо мало ли, вдруг однажды монстр от чего-то ещё в критический момент сдохнет.
Да, это пофиксило краши.

Герр Смертоносец :
Если не заработает - на всякий случай напоминаю про вот этот момент со 173 страницы треда:
Это был не совсем верный вывод. Дело в том что корреляция оказалась несколько сложней чем я думал - чем выше Height снаряда тем ниже должна быть стартовая скорость, иначе будут дэдстаки снарядов, а A_ScaleVelocity в этой ситуации просто костыль позволяющий не трогать Height. Хотя причины самоубийства миссайлей мне до сих пор не понятны.
В моём же случае Height предельно мал и снаряды НЕ дохнут на спауне, т. е. ситуация явно отличается.

Герр Смертоносец :
В свете вышеперечисленного для начала давай убедимся, что снаряды в принципе попадают на ReviveMissile-стейт.
Герр Смертоносец :
Алсо, я вижу, что у тебя отсутствует манипуляция +RIPPER-флагом и замедленное движение ракеты сквозь актора. Рекомендую для начала просто вешать на снаряд +RIPPER сразу же после попадания в ReviveMissile
Так ReviveMissile же и эмулирует РИППЕР, а визуализация выполнена спрайтами зомбимэна:
MissileLife:
POSS A 1 //POSS - тестовая индикация
Loop
В игре результат выглядит так:

Это и есть "мёртвые" снаряды. И да, они входят в ревайв стэйт - импы мелькают (//TROO A 1 A_ChangeFlag("RIPPER",1) ).

Обновлённый код:
Скрытый текст:

Actor GIBSMarker //: FastProjectile
{
Height 2
Radius 3
Speed 500
Mass 5
Damage 0
Projectile
+ALLOWPARTICLES
+NODAMAGETHRUST
+HITTRACER

var int user_VelX;
var int user_VelY;
var int user_VelZ;
var int user_TracerHealth;
var int user_Stepsize;

States
{


Spawn:
TNT1 A 0 NoDelay A_SetUserVar("user_VelX",VelX)
TNT1 A 0 A_SetUserVar("user_VelY",VelY)
TNT1 A 0 A_SetUserVar("user_VelZ",VelZ)
Goto MissileLife

ReviveMissile:
TNT1 A 0 A_RearrangePointers(AAPTR_DEFAULT,AAPTR_DEFAULT,AAPTR_NULL)
TNT1 A 0 A_ChangeVelocity(user_VelX,user_VelY,user_VelZ,CVF_REPLACE)
TNT1 A 0 A_ChangeFlag("MISSILE",1) //Missile "revive"
//TROO A 1 A_ChangeFlag("RIPPER",1)

MissileLife:
POSS A 1 //A_ChangeFlag("MISSILE",1)//POSS - тестовая индикация
Loop

Death:
TNT1 A 0 A_JumpIf(IsPointerEqual(AAPTR_TRACER,AAPTR_NULL)==1,"BlankDeath")

TNT1 A 0 A_GiveInventory("GIBSMark",1,AAPTR_TRACER)

GetTracerHealth:
TNT1 A 0 A_SetUserVar("user_TracerHealth",1000000)
TNT1 A 0 A_SetUserVar("user_Stepsize",100000)
TNT1 A 0 A_JumpIfHealthLower(user_TracerHealth,1,AAPTR_TRACER)
Goto GetTracerHealth+4
TNT1 A 0 A_SetUserVar("user_TracerHealth",user_TracerHealth-user_Stepsize)
Goto GetTracerHealth+2
TNT1 A 0 A_JumpIf(user_Stepsize==1,3)
TNT1 A 0 A_SetUserVar("user_TracerHealth",user_TracerHealth+user_Stepsize)
TNT1 A 0 A_SetUserVar("user_Stepsize",user_Stepsize/10)
Goto GetTracerHealth+2
TNT1 A 0 A_SetUserVar("user_TracerHealth",user_TracerHealth)

TNT1 A 1 //Буфер

TNT1 A 0 A_JumpIf(CountInv("GIBSMark",AAPTR_TRACER)>=8,"VGOVNO")
TNT1 A 0 A_DamageTracer(random(1,3)*5,"None")
Goto BloodDeath

VGOVNO:
TNT1 A 0 A_PlaySound("DoomHit", CHAN_WEAPON) //For notice
TNT1 A 0 A_DamageTracer(random(1,3)*5,"Extreme")

BloodDeath:
TNT1 A 0 A_JumpIf(user_TracerHealth==0,"ReviveMissile")
TNT1 A 0 A_Jump(256,1,2,3)
BLUD CBA 8 A_JumpIf(random(1,200/user_TracerHealth)>1,"ReviveMissile")
TNT1 A 0
Stop

BlankDeath:
TNT1 A 0 A_SetRenderStyle(0.5,STYLE_Translucent)
PUFF A 4 Bright
PUFF BCD 4
Stop
}
}

5 1
Герр Смертоносец
= Master Sergeant =
Next rank: - Sergeant Major - after 13 points
517

Doom Rate: 1.54

Posts quality: +275
Ссылка на пост №3685 Отправлено: 22.10.18 23:45:50
Void Weaver :
Так ReviveMissile же и эмулирует РИППЕР

Видишь ли, чем дольше я на это смотрю - тем больше мне кажется, что такое эмулирование не вполне корректно.
Чисто теоретически это не должно было работать. Ибо оживший снаряд обязан удариться в актора повторно и долбиться в него до тех пор, пока актор не сдохнет и не станет прозрачным. Подлинная натура данного изложения - дриллер, и этот дриллер проявляется при добавлении задержки.
Однако, это почему-то работает. Вероятно, здесь работает некий "позитивный баг" движка - обработчик столкновений снарядов не успевает зафиксировать столкновение, пока оживившийся снаряд не отлетит на достаточное расстояние.

Вероятно, этим объясняются и малопонятные баги, связанные с высотой снаряда.

Энивей, ездить на "позитивных багах" плохо. Должен быть чётко формализованный (и однозначно работающий при задержках) механизм, который отвечает на вопросы: почему единожды столкнувшись снаряд больше не сталкивается с конкретным актором, путешествуя сквозь него, и в какой именно точке этот туннелирующий режим заканчивается. Пять алгоритмов подлинного риппинга я дал выше.
1
YURA_111
= Master Sergeant =
Next rank: - Sergeant Major - after 30 points
500

Doom Rate: 2.02

Posts quality: +70
Ссылка на пост №3686 Отправлено: 23.10.18 09:01:45
DOOMGABR :
Как сделать, чтобы проджектайл запускался дальше/ближе по оси Z? Я нашел только высоту и оффсеты по XY у A_FireCustomMissle


Во-первых старайся не использовать A_FireCustomMissle т.к. функция уже депрекейтыд (используй https://zdoom.org/wiki/A_FireProjectile )
Что же касается дальше/ближе то попробуй A_SpawnItemEx (внимательно изучи флаги внутри этой функции)
DOOMGABR
Chief Petty Officer
Next rank: - Warrant Officer - after 66 points
974

Doom Rate: 1.9

Posts quality: +528
Ссылка на пост №3687 Отправлено: 23.10.18 13:36:37
YURA_111 :
старайся не использовать A_FireCustomMissle

Знаю. Спасибо рудиментарному задротуму за это. Свой мод решил адаптировать под него чтобы был мультиплеер.
Вопрос: как назначить кастету другой звук удара при ударе о какого-либо моба?

Добавлено спустя 1 час 38 минут 59 секунд:

Помогите плз сделать код умного остывания плазмы по принципу: 1) Выпущено 25-99 плазмы => остывание 8 тиков. 2) Выпущено 100-199 плазмы => остывание 18 тиков. 3) Выпущено 200-300 плазмы => остывание 28 тиков.

Мой нерабочий набросок
Ready: PLSG A 1 A_WeaponReady PLSG A 1 A_TakeInventory("HotHot", 15) Loop Fire: TNT1 A 0 A_GunFlash("Flash1") TNT1 A 0 A_JumpIf(CountInv("HotHot")==300,"Cooldown3") PLSG A 3 A_FirePlasma TNT1 A 0 A_GunFlash("Flash2") TNT1 A 0 A_GiveInventory("HotHot", 1) PLSG B 3 A_ReFire Goto Ready Cooldown3: PLSG C 4 PLSG D 20 A_TakeInventory("HotHot", 300) PLSG C 4 Goto Ready ACTOR HotHot : CustomInventory { Inventory.Amount 1 Inventory.MaxAmount 300 -COUNTITEM States { Spawn: TNT1 A 0 Loop } }


Добавлено спустя 1 час 5 минут 31 секунду:

Мне таки удалось в Fixed Doom вернуть совместимость с Задротумом. Но тут дилемма — этот отсталый порт не понимает параметров A_CustomPunch дальше параметров паффа. Как быть?
Void Weaver
Chief Petty Officer
Next rank: Chief Petty Officer after 12 points
928

Doom Rate: 2

Posts quality: +223
Ссылка на пост №3688 Отправлено: 23.10.18 17:42:14
DOOMGABR :
Вопрос: как назначить кастету другой звук удара при ударе о какого-либо моба?
???
PUNG C 3 A_CustomPunch(20 * random(1, 10), TRUE, 0, "FistPuff", 64, 0, 0, "ArmorBonus", "skeleton/melee") //"skeleton/melee" - вот же он...

DOOMGABR :
Как быть?
1. Послать Зандронум в пешее эротическое.
2. Клепать кастом пуфф с новыми звуками. Курить табличку по звукам на странице вики про пуффы. Аналогично твоему "FistPuff".
3. Забить на A_CustomPunch и его параметры в угоду Задрота.

Бтв, возможно сегодня выложу код гиббящего ССГ...
5 1
DOOMGABR
Chief Petty Officer
Next rank: - Warrant Officer - after 66 points
974

Doom Rate: 1.9

Posts quality: +528
Ссылка на пост №3689 Отправлено: 23.10.18 17:53:08
Void Weaver :
вот же он...

Я хотел чтобы по крепышам игрок бил другим звуком. DSPUNCH ванильным

Добавлено спустя 1 минуту 22 секунды:

Void Weaver :
Бтв, возможно сегодня выложу код гиббящего ССГ

Оч жду. Я кстате убрал паффы по металлу, т.к. они как то криво спаунятся. несмотря на то, что ты дал мне варпы рева, они некорректно отображаются
Герр Смертоносец
= Master Sergeant =
Next rank: - Sergeant Major - after 13 points
517

Doom Rate: 1.54

Posts quality: +275
Ссылка на пост №3690 Отправлено: 23.10.18 19:24:17
DOOMGABR :
Помогите плз сделать код умного остывания плазмы по принципу: 1) Выпущено 25-99 плазмы => остывание 8 тиков. 2) Выпущено 100-199 плазмы => остывание 18 тиков. 3) Выпущено 200-300 плазмы => остывание 28 тиков.

После PLSG B 3 A_ReFire пихаешь несколько джамперов (по возрастанию) на нужные стейты остывания. Если гашетка не зажата - действие автоматически перейдёт туда.

Вообще по-хорошему следовало бы реализовать что-то типа механики кулемётов из олдовой батлы: когда медленное остывание происходит только в Ready, и есть дополнительная задержка оверхейта (не устраняющая нагрев), до которой можно доводить, а можно не доводить. Опционально - какая-нибудь шкала нагрева или постепенное покраснение самого оружия.
1
Zeberpal_98
= Sergeant Major =
Next rank: UAC Sergeant Major after 61 points
619

Doom Rate: 1.89

Posts quality: +73
Ссылка на пост №3691 Отправлено: 23.10.18 20:18:47
Давно хотел спросить, такая ситуация в GZDB. Есть у меня на карте Линии, Сектора и Айтемы с тэгами. Если вы работаете в GZDB, наверняка заметили, что он дает новый тэг по глобальному принципу, то есть если для линий взято скажем 17 тэгов, а для секторов 133, то когда даешь новой линии новый тэг - это будет тэг 134, но смотря но то что, конкретно у линий последним тэгом был 17. Фуф, надеюсь вы поняли.

Можно отключить этот глобальный принцип? рушит мне всю тэговую кхем...аккуратность. Я побегал по настройкам, вроде нет такой опции
1
DOOMGABR
Chief Petty Officer
Next rank: - Warrant Officer - after 66 points
974

Doom Rate: 1.9

Posts quality: +528
Ссылка на пост №3692 Отправлено: 23.10.18 20:46:25
Герр Смертоносец
без кода я один черт ниче не понял :)

Добавлено спустя 3 часа 33 минуты 6 секунд:

Вопрос: как назначить игроку спрайты в зависимости от оружия, которое он несёт? Соответствующий мод я уже скачал, осталось только реализовать в коде
Void Weaver
Chief Petty Officer
Next rank: Chief Petty Officer after 12 points
928

Doom Rate: 2

Posts quality: +223
Ссылка на пост №3693 Отправлено: 24.10.18 00:58:46
DOOMGABR :
Я хотел чтобы по крепышам игрок бил другим звуком. DSPUNCH ванильным
Тогда делай кастом панч c CheckClass.

DOOMGABR :
Я кстате убрал паффы по металлу, т.к. они как то криво спаунятся. несмотря на то, что ты дал мне варпы рева, они некорректно отображаются
Все или только Рева? И что именно не так?

Герр Смертоносец :
Void Weaver :
Логично. Вот только при нулевом уроне пули вообще НЕ спаунятся.

*Здесь должна быть длинная матерная тирада в адрес всех, кто добавляет костыли в изначально-кастрированном виде.*
Короче, на этом предлагаю похоронить сложные конструкции на пуффах.
Во-первых, матерную тираду, пусть и не столь длинную, можно адресовать мне, ибо ПРИ НУЛЕВОМ УРОНЕ ПУЛИ таки СПАУНЯТСЯ. :diatel:

Во-вторых, да простит меня Герр Смертоносец, поскольку не получилось толком реализовать ни одного перспективного предложения, пришлось вернуться к пуффам. Поэтому ружжо вышло сильно зависимым от конкретного бестиария, на универсальную конструкцию не тянет, да, пичалька.

DOOMGABR
Ну и в-третьих, в ближайшей перспективе я вряд ли смогу предложить что-либо лучше. Офк концепт занятный но, поскольку функциональности не несёт, ебаться с имитацией хитскана за ради фан-эффекта я не готов, извиняй, бро.

Вот собс-но SSG, рвущий "фклочья" в зависимости от дистанции и виртуального ко-ва пуль. Топорно, но в целом зрелищно.
Скрытый текст:

Actor GSSG : SuperShotgun
{
States
{
Fire:
SHT2 A 3
SHT2 A 0 A_FireBullets (11.2, 7.1, 20, 0, "GIBSPuff",FBF_USEAMMO) //УРОН ЗАДАЁТСЯ НЕ ЗДЕСЬ!
SHT2 A 0 A_PlaySound ("weapons/sshotf", CHAN_WEAPON)
SHT2 A 7 A_GunFlash
SHT2 B 7
SHT2 C 7 A_CheckReload
SHT2 D 7 A_OpenShotgun2
SHT2 E 7
SHT2 F 7 A_LoadShotgun2
SHT2 G 6
SHT2 H 6 A_CloseShotgun2
SHT2 A 5 A_ReFire
Goto Ready
}
}

Actor GIBSPuff : BulletPuff //Собс-но пуфф
{
+PUFFONACTORS //Позволяет спаунить пуффы на акторы
/*Пришлось взять этот указатель для активации чекера дистанции,
поскольку у ТРЭЙСЕРА нет обратного
указателя для инвентори ф-ции, какой есть у МАСТЕРА (ЧИЛДРЕН)*/
+HITMASTER
//+HITTRACER
States
{
Crash: //Если выстрел не в моба
PUFF A 4 Bright
PUFF BCD 4
Stop
XDeath: //Именно этот ё!@#ый стэйт позволяет нормально спаунить пуффы на кровоточащие акторы при условии наличия +PUFFONACTORS
//Melee:
Spawn: //НЕ УДАЛЯТЬ СТЭЙТ!
TNT1 A 0 NoDelay A_GiveInventory("GIBSMark",1,AAPTR_MASTER) //Пуле-маркер
TNT1 A 0 A_GiveInventory("DistanceChecker",1,AAPTR_MASTER) //Даёт монстру чекер дистанции между монстром и его целью (игроком)

TNT1 A 0 A_JumpIf(CountInv("DistanceCounter")<=192,"VGOVNO") //Ближе 192 гарантированно рвёт в клочья. ВАРНИНГ!!! ЕСЛИ монстр не имеет цели то срабатывает ВСЕГДА!

TNT1 A 0 A_JumpIf(CheckClass("ZombieMan",AAPTR_MASTER,1)==0,2)
TNT1 A 0 A_JumpIf(CountInv("GIBSMark",AAPTR_MASTER)>=3,"VGOVNO") //Произвольное число, выбранное исходя из соотношения ко-ва пуль гипотетически способного убить актор, к хп оного
Goto CommonShot
TNT1 A 0 A_JumpIf(CheckClass("ShotgunGuy",AAPTR_MASTER,1)==0,2)
TNT1 A 0 A_JumpIf(CountInv("GIBSMark",AAPTR_MASTER)>=4,"VGOVNO")
Goto CommonShot
TNT1 A 0 A_JumpIf(CheckClass("WolfensteinSS",AAPTR_MASTER,1)==0,2)
TNT1 A 0 A_JumpIf(CountInv("GIBSMark",AAPTR_MASTER)>=6,"VGOVNO")
Goto CommonShot
TNT1 A 0 A_JumpIf(CheckClass("DoomImp",AAPTR_MASTER,1)==0,2)
TNT1 A 0 A_JumpIf(CountInv("GIBSMark",AAPTR_MASTER)>=7,"VGOVNO")
Goto CommonShot
TNT1 A 0 A_JumpIf(CheckClass("ChaingunGuy",AAPTR_MASTER,1)==0,2)
TNT1 A 0 A_JumpIf(CountInv("GIBSMark",AAPTR_MASTER)>=8,"VGOVNO")
Goto CommonShot
TNT1 A 0 A_JumpIf(CheckClass("LostSoul",AAPTR_MASTER,1)==0,2) //100хп, если прописать XDeath
TNT1 A 0 A_JumpIf(CountInv("GIBSMark",AAPTR_MASTER)>=8,"VGOVNO")
Goto CommonShot
TNT1 A 0 A_JumpIf(CheckClass("Demon",AAPTR_MASTER,1)==0,1) //150, если прописать XDeath
TNT1 A 0 A_JumpIf(CountInv("GIBSMark",AAPTR_MASTER)>=9,"VGOVNO") //Общее значение для всех остальных

CommonShot:
TNT1 A 0 A_DamageMaster(random(1,3)*5,"None") //Урон задаётся здесь
Goto BlankDeath

VGOVNO:
//TNT1 A 0 A_PlaySound("skull/melee",CHAN_AUTO) //Фан-аудиопруф джампа
//TNT1 A 0 A_PlaySound("player/male/fist",CHAN_AUTO)
//TNT1 A 0 A_PlaySound("vile/active",CHAN_AUTO)
TNT1 A 0 A_PlaySound("vile/start",CHAN_AUTO)
TNT1 A 0 A_PlaySound("vile/firestrt",CHAN_AUTO)
TNT1 A 0 A_PlaySound("vile/firecrkl",CHAN_AUTO)
TNT1 A 0 A_PlaySound("vile/stop",CHAN_AUTO)
//TNT1 A 0 A_PlaySound("vile/pain",CHAN_AUTO)
TNT1 A 0 A_DamageMaster(random(1,3)*5,"Extreme") //Урон задаётся здесь

BlankDeath:
TNT1 A 0 A_TakeInventory("DistanceCounter",0)
//TNT1 A 0 A_TakeInventory("GIBSMark",0,0,AAPTR_MASTER) //Так и не понял влияет ли эта строка на перемалывание или нет...
Stop
}
}

Actor DistanceChecker : CustomInventory //Чекер-дистанции
{
Inventory.MaxAmount 0
+INVENTORY.ALWAYSPICKUP
States
{
Pickup:
TNT1 A 0 A_GiveToChildren("DistanceCounter",GetDistance(1,AAPTR_TARGET)) //Возвращает ЧИЛДРЕНУ (нашему пуффу) ко-во токенов равное дистанции между мобом и его целью (игроком)
Stop
}
}

Actor DistanceCounter : Inventory //Токен-итемы дистанции
{
Inventory.MaxAmount 0x7FFFFFFF
}

Actor GIBSMark : Inventory //Токен-итемы ко-ва пуль
{
Inventory.Amount 1
Inventory.MaxAmount 20
}

Как-то так:


Добавлено спустя 5 часов 59 минут 11 секунд:

DOOMGABR :
как назначить игроку спрайты в зависимости от оружия, которое он несёт?
Т. е. в зависимости от того которое выбрано в данный момент? Весной Анто интересовался чем-то похожим. Полагаю что принцип схожий:

1. Делаем игроку кастомные стэйты-аналоги (Сии, Миссиль, Пэйн, Дэс...) по количеству желаемых наборов волын. Ну типа "SeePistol", "MissilePistol".../"SeeBFG", "MissileBFG".../... и т. д.
2. Каждое оружие модифицируется таким образом чтобы Select давал 1 уникальный токен (например A_GiveInventory("BFGToken",1)), а Deselect отбирал его, и так для каждого желаемого оружия.
3. В дефолтном "See" и\или "Spawn" игрока ставим чеки на все токены:
Spawn:
PLAY A 1 NoDelay A_JumpIfInventory("BFGToken",1,"SpawnBFG")
PLAY A 0 A_JumpIfInventory("ShotgunToken",1,"SpawnShotgun")
PLAY A 0 A_JumpIfInventory("PistolToken",1,"SpawnPistol")
<...>
Loop

SpawnBFG:
PLA1 A 1 NoDelay A_JumpIfInventory("ShotgunToken",1,"SpawnShotgun")
PLA1 A 0 A_JumpIfInventory("PistolToken",1,"SpawnPistol")
<...>
Loop

SpawnPistol:
PLA1 A 1 NoDelay A_JumpIfInventory("ShotgunToken",1,"SpawnShotgun")
PLA2 A 0 A_JumpIfInventory("BFGToken",1,"SpawnBFG")
<...>
Loop

Ну как-то так.

Рейтинг сообщения: +1, отметил(и): DOOMGABR
5 1
Страница 185 из 185Перейти наверх Пред.  1, 2, 3 ... 183, 184, 185
   Список разделов - Местечко мапперов и моддеров - Тема для новичков. Вопросы по маппингу/моддингу - любые!