Welcome to U.A.C. [O.S.A.]
login / register 
Status: Guest
Архивы форума | iddqd.ru
Wolf 3D
ПравилаПравила ПоискПоиск
18+
Тема для новичков. Вопросы по маппингу/моддингу - любые! Пред.  1, 2, 3 ... 163, 164, 165 ... 198, 199, 200  След.
   Список разделов - Флуд и устаревшие темы - Тема для новичков. Вопросы по маппингу/моддингу - любые!Ответить
АвторСообщение
Void Weaver
= Captain =
Next rank: - Major - after 144 points
2496

Doom Rate: 1.82

Posts quality: +808
Ссылка на пост №3261 Отправлено: 02.06.18 21:05:16
Anto96WS:
Void Weaver:
Оному нужно "приклеить" полупрозрачный оверлэй-эффект

Когда-то задавался таким же вопросом, да и сейчас тоже. Про A_Overlay не знал. сегодня помучаю эту функцию и посмотрю что выйдет.
Void Weaver:
Отпишись если чо выйдет, а я тогда попробую через Варп.
Anto96WS, если ещё вопрос актуален то эффекты прекрасно приклеиваются Варпом, причём как на оружие, так и на монстров:

Для монстров:
Скрытый текст:

Actor A
{
Monster

States
{

See: //Стандартный "See" - вызывается только раз для спауна эффекта
TNT1 A 0 A_SpawnItemEx("B", 0, 0, 0, 0, 0, 0, 0, SXF_SETMASTER) //Спауним наш Чилдрен-эффект
SeeTrue: //Эрзац-"See" - вызываем во всех остальных случаях и стэйтах
MPIL ABCDEFGH 3 A_Chase
Loop

Missile:
Goto SeeTrue 

Melee:
Goto SeeTrue 

Pain:
Goto SeeTrue

Death: 
//Здесь ещё можно поставить А_РемувЧилдрен
Stop
}
}
=====
Actor B
//RenderStyle //Опционально
//Alpha //Опционально
{	
States
{
Spawn:
MPOV ABCDEFGHIJKLMNO 1 bright A_Warp(AAPTR_MASTER, 0, 0, 0, 0, WARPF_NOCHECKPOSITION | WARPF_COPYINTERPOLATION)
Loop
}
}

Хотя можно вызывать и временный эффект - тогда уже из других стэйтов.
Для оружия конструкция более вариативна:
Скрытый текст:

Select: //Анимация включается при выборе оружия.
TRCH ABCDEFG 1 A_Raise 
TNT1 A 0 A_SpawnItemEx ("B", 0, 0, 0, 0, 0, 0, 0, SXF_SETMASTER, 0)
Loop

Deselect:
TRCH ABCDEFG 1 A_Lower 
TNT1 A 0 A_RemoveChildren(True, RMVF_EVERYTHING,"B")Loop //Анимация выключается при смене оружия.
}


==============

Герр Смертоносец:
Вот это слабое место. Здесь надо тестить, работает ли оно без указания акторкласса. Если не работает - значит всех потенциально сжираемых монстров надо делать наследием условного актора "NewMonster", искать именно его, а в флаги прописать CPXF_ANCESTOR.
Вотжиговнакусок, акторкласс необходим. (( Костыль конечно хороший но писец какой массивный, вряд ли кто-то захочет перепиливать весь бестиарий ради добавления одного монстра.
Есть ещё какие соображения?

Герр Смертоносец:
В простейшем случае делаем A_FaceMaster и одновременно толкаем его в задницу отрицательным A_Recoil с очень малым значением. (Через каждые N секунд даём ему побродить с A_Wander рандомное число тактов на случай, если где-то застрянет.) Одновременно делаем проверки A_JumpIfMasterCloser на малый радиус, с него переход на CorpseRemove.
Про ФэйсМастера я забыл, то что надо! Жаль блин нет ЧейсМастера. Да и с обособлением РемувМастера затупил-с. Вот только Вандер меня напрягает - если карты не лягут, то будет хаотично бродить до посинения.

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

Ещё вот соблазнительно выглядит A_JumpIfHealthLower (1,"SeeCorpseChase",AAPTR_???), но вот не знаю как и с чем её можно увязать. Сама же она не позволяет изменить указатель, да и в радиусе не чекает.

Добавлено спустя 14 минут 58 секунд:

Или может лучше попробовать поиск трупов через A_GiveRadius, A_JumpIfInventory и кастомитемы раздающие подобравшему флаг CORPSE?
1 9 1
Герр Смертоносец
- Warrant Officer -
Next rank: = Warrant Officer = after 97 points
1043

Doom Rate: 1.38

Posts quality: +854
Ссылка на пост №3262 Отправлено: 03.06.18 03:02:04
Void Weaver:
Костыль конечно хороший но писец какой массивный, вряд ли кто-то захочет перепиливать весь бестиарий ради добавления одного монстра.

А тебе вообще это для чего надо? Если для своего вадника, то нет проблем прописать бестиарий в одну строчку по типу "ACTOR Doomimp : Newmonster replaces Doomimp".
Или у тебя задача в совместимости с любым бестиарием и подключаемым модом вообще?

Void Weaver:
Есть ещё какие соображения?

Из хорошего - никаких. По сути ты приказываешь актору проверить "любую херню" поблизости. Декорейт понятие "любой херни" не понимает, для него это равносильно поголовной проверке вообще всех акторов, имеющихся на карте. Это было бы ресурсоёмко и вообще хреново.

Есть муторный путь делать "радар" по A_CheckLOF, который будет вращаться на 360 градусов, захватывая абсолютно любой объект. Это должен быть громоздкий циклический скрипт, в котором проверяется линия, сразу же проверяется объект на ней, и если объекта нет либо объект не является трупом - скрипт делает шаг на 1 градус. И дебажить эту хрень придётся долго.
5
Void Weaver
= Captain =
Next rank: - Major - after 144 points
2496

Doom Rate: 1.82

Posts quality: +808
Ссылка на пост №3263 Отправлено: 03.06.18 05:09:23
Герр Смертоносец:
Или у тебя задача в совместимости с любым бестиарием и подключаемым модом вообще?
Зыс. Всё для людей.
Скрытый текст:

Не знаю, видел ты или нет но я тут недавно выкладывал монстров, склёпанных благодаря советам уютненького РДЦ; тебя вот в кредитсы записал. ^_^ А так-то началось с проекта, для возжелавших странного, по экспорту монстро-спрайтов из Дьябло серии в вид удобоваримый для моддинга ид-игорь. В перерывах стал попутно покуривать декор и всё заверте... Тем более так сошлись звёзды что один чел практически сразу же нашёл применение этим ресурсам в своём рпг-моде.

Герр Смертоносец:
Есть муторный путь делать "радар" по A_CheckLOF, который будет вращаться на 360 градусов, захватывая абсолютно любой объект. Это должен быть громоздкий циклический скрипт
Скрипт... ну тупой я для скриптинга. По крайней мере на данный момент. В скрипте-то вроде особых проблем быть не должно, они же более гибкие; как там Anto96WS писал... (ClassifyActor(target) & ACTOR_DEAD) в радиусе then SetActivator to Master?

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

Герр Смертоносец:
По сути ты приказываешь актору проверить "любую херню" поблизости. Декорейт понятие "любой херни" не понимает, для него это равносильно поголовной проверке вообще всех акторов, имеющихся на карте.
Ну не "любую" а вполне конкретную - чек в радиусе флагов ISMONSTER|-SOLID|SHOOTABLE с последующим присвоением мастера ближайшему\первому найденному и джамп ту самвэ. Разве это так много? Вообще эта самая чекПрокс была бы идеальна без обязательной привязки к акторклассу. В конце-то концов есть же радиусные ф-ции работающие "только" на флагах, та же чекЛОФ. Вот кстати ей например зеркально не хватает трупофлага, который есть у чекПрокс. Писец... близко локоток, а не укусишь.
1 9 1
YURA_111
UAC Sergeant Major
Next rank: Chief Petty Officer after 82 points
768

Doom Rate: 1.98

Posts quality: +136
Ссылка на пост №3264 Отправлено: 03.06.18 16:05:41
Void Weaver

А функцию A_CheckFlag (с проверкой флага "Corpse") не пробовал с поинтером типа AAPTR_GET_LINETARGET ( https://zdoom.org/wiki/Actor_pointer ) - может что-то удастся выудить полезного...

P.S. правда она с недавних пор депрекейтыд (но рабюотает) и есть некий симилар у Zscript, но это дебри...
Void Weaver
= Captain =
Next rank: - Major - after 144 points
2496

Doom Rate: 1.82

Posts quality: +808
Ссылка на пост №3265 Отправлено: 03.06.18 20:18:08
YURA_111, ого! Занятное сочетание, возьму на заметку. Но к сожалению в нём куча недостатков для моей ситуации:
а) не в радиусе;
б) только первая цель по линии обзора, т. е. если кто-то будет заслонять перед ним труп, то чек обломится.
в) не переназначает указатель, что означает что актор не будет атаковать агрессора, если тот вдруг окажется в радиусе атаки во время следования актора к трупу:
Скрытый текст:

CorpseSearch:
TNT1 A 0 A_CheckFlag ("CORPSE", "CorpseChase", AAPTR_LINETARGET)
Goto SeeMelee

CorpseChase:
MPIL A 0 A_FaceMaster
MPIL ABCDEFGH 1 A_Recoil(-2)
TNT1 A 0 A_JumpIfMasterCloser (10,"CorpseRemove",False)
Loop

CorpseRemove:
MPIL ABCDEFGH 1 A_Remove (AAPTR_MASTER)
TNT1 A 0 A_ChangeFlag ("NOPAIN", 1)
Goto SeeFull

Но может я просто чего не догоняю?..
Хотя...
JSO x:
Вообще ещё думал над таким способом проверки "а кто меня воскрешает":
1) Арч всё время создаёт актор, который проверяет трупы вокруг;
2) Когда находит, "таргетится" на него (устанавливает свой AAPTR_TARGET);
3) Через A_TransferPointer передаёт арчу свой target-указатель как на tracer'а (например).

После этого через указатели вполне легко можно проверить, что за зверь мой воскрешатель и кого он поднимает.
А как тут вообще актор арча проводит поиск трупа, тоже по чекПрокс? Или как-то иначе?
1 9 1
Void Weaver
= Captain =
Next rank: - Major - after 144 points
2496

Doom Rate: 1.82

Posts quality: +808
Ссылка на пост №3266 Отправлено: 05.06.18 06:50:20
1. Если монстру дать A_GiveInventory ("Timer", 1) такую шнягу:
Actor Timer : inventory
{
    States
  {
  Spawn:
TNT1 A 1050
    Stop
   }
}
то я правильно понимаю что она будет существовать в монстре и чекаться A_JumpIfInventory ("Timer", 1, "стэйт") ровно 30 секунд?
=======
2. Есть ли разница в производительности и\или надёжности между:
TNT1 A 0 A_CheckProximity ("SeeCorpseChase", "actorclass1", 1024, 1, CPXF_DEADONLY|CPXF_SETMASTER|CPXF_CLOSEST)
TNT1 A 0 A_CheckProximity ("SeeCorpseChase", "actorclass2", 1024, 1, CPXF_DEADONLY|CPXF_SETMASTER|CPXF_CLOSEST)
TNT1 A 0 A_CheckProximity ("SeeCorpseChase", "actorclass3", 1024, 1, CPXF_DEADONLY|CPXF_SETMASTER|CPXF_CLOSEST)
И
TNT1 A 0 
{
A_CheckProximity ("SeeCorpseChase", "actorclass1", 1024, 1, CPXF_DEADONLY|CPXF_SETMASTER|CPXF_CLOSEST);
A_CheckProximity ("SeeCorpseChase", "actorclass2", 1024, 1, CPXF_DEADONLY|CPXF_SETMASTER|CPXF_CLOSEST);
A_CheckProximity ("SeeCorpseChase", "actorclass3", 1024, 1, CPXF_DEADONLY|CPXF_SETMASTER|CPXF_CLOSEST);
}
И как идёт проверка во втором случае? Все строки одновременно или в порядке очереди строк?
=======
3. Может что-нибудь сломаться если два или более актора собираются "съесть" (A_Remove) одного и того же _МАСТЕРА, но:
а) один успел раньше?
б) начали "есть" одновременно (если такое физически возможно)?
Как можно обойти негативные последствия (если таковые имеются\могут произойти) нацеливания на одного и того же _МАСТЕРА? Или даже вообще запретить одновременное нацеливание?
1 9 1
Герр Смертоносец
- Warrant Officer -
Next rank: = Warrant Officer = after 97 points
1043

Doom Rate: 1.38

Posts quality: +854
Ссылка на пост №3267 Отправлено: 05.06.18 17:24:10
Попробую развить тему с альтернативными способами трупоискания.

1. Трупоед периодически срёт в пространство невидимыми, проходимыми, неучитывающимися в количестве монстров миньонами. (Их количество надо ограничивать и периодически переспаунивать.)
2. Миньоны тупо бегают вокруг с Vile_Chase, не агрятся на игрока.
3. Попав на стейт "Heal" миньон захватывает воскрешаемый труп в поинтер через A_CheckBlock либо A_CheckLOF и далее застревает в неком подвешенном состоянии.
4. Далее слабое место схемы: нам нужно, чтобы труп остался лежать трупом, а не восстал. Но воскрешение жёстко прописано на уровне движка, предотвратить его невозможно. Поэтому нужно сразу же в момент восставания мгновенно убить воскрешаемого ещё раз. По идее мог бы помочь SetActorState(0,"Death"), но он заново начнёт анимацию смерти. Её можно было бы сделать невидимой через SetActorProperty(0,APROP_RenderStyle,STYLE_None), но тогда на какое-то время труп исчезнет из видимости вообще. На ум пока не приходит ни один метод, позволяющий заставить живого сразу же перейти в состояние лежачего. Возможно, он есть.
5. Когда трупоед хочет жрат - он через застрявших в подвешенном состянии миньонов выбирает любой заранее ими помеченный труп.
5
Void Weaver
= Captain =
Next rank: - Major - after 144 points
2496

Doom Rate: 1.82

Posts quality: +808
Ссылка на пост №3268 Отправлено: 05.06.18 19:56:30
Так-то я временно переключился на напейсание других монстриков, дабы не терять время в тщетных раздумьях, а трупоеду решил поставить "заглушку" в виде тупо перечисления чеков всех ванильных монстр-акторклассов ид-игорь. Так что на данный момент я бы предпочёл получить ответы на хотя бы часть из вопросов поставленных выше (особенно на первый), тем более что я склонен терять не закреплённые соображения. :)

Герр Смертоносец
Что касается твоего наброска, я вижу в нём кучу белых пятен (может всего-лишь из-за моего невежества?):
Скрытый текст:

1-2. Казалось бы тут всё просто и понятно - клепаем высокоскоростных ТНТ1 мобов с +LOOKALLAROUND +NOBLOCKMONST +THRUACTORS(?) -SOLID +NEVERTARGET и ВайлЧейсом. Ок. Но как определить лимит на количество иили частоту спауна ТНТшников? Учти, трупоед - это не босс а рядовой моб и десяток таких с персональными "армиями" вероятно могут некисло так заслоудаунить игру.
3-4.
Герр Смертоносец:
3. Попав на стейт "Heal" миньон захватывает воскрешаемый труп в поинтер через A_CheckBlock либо A_CheckLOF и далее застревает в неком подвешенном состоянии.
Герр Смертоносец:
4. Далее слабое место схемы: нам нужно, чтобы труп остался лежать трупом, а не восстал. Но воскрешение жёстко прописано на уровне движка, предотвратить его невозможно. Поэтому нужно сразу же в момент восставания мгновенно убить воскрешаемого ещё раз.
Либо я тебя не понял вообще, либо ты переборщил с действиями, но я вижу это приблизительно так: наткнувшись ВайлЧесом на труп наш ТНТшник тупо останавливается и прыгает в "Хил", и тут, я полагаю, необходимо "перехватить" инициативу у инструкции кода. Допустим мы принудительно "расширяем" "Хил" стэйт следующим образом:
Heal: //указатель же для запуска стэйта просто _TARGET, да? Тогда:
TNT1 A 0 A_RearrangePointers (Сразу же "выбиваем" поинтер с _TARGET на _MASTER) //Не знаю что тут писать, поскольку нуб в указателях.
TNT1 A 0 A_TransferPointer (Тут же "пересылаем" нового текущего МАСТЕРА (хилимый труп) старому (трупоеду))//Аналогично - не знаю что тут писать, поскольку нуб в указателях. Либо же получается что у ТНТшника появляется одновременно 2 МАСТЕРА (вот кстати тут актуален мой 3 вопрос из предыдущего поста)
TNT1 A 0 A_KillMaster ("damagetype", KILS_EXFILTER, "класс трупоеда") //Тут "упокоиваем" всех МАСТЕРов (трупов, начавших воскресать) кроме нашего трупоеда
TNT1 A 0 Jump (Death) или просто Stop //Киляем отработанного ТНТшника
Если же сначала выполняется воскрешение, а затем уже остальные кастом-функции стэйта, то весь набросок кода накрывается тазом.
5. А вот тут я вообще не понял - таки как трупоед выбирает мастер-трупа? Рандомно? А если ему тоже "переслали" одновременно 2 и более "МАСТЕР-трупа" (снова мой 3-ий вопрос выше ;) ), пузо-то не "лопнет" часом? И опять таки в идеале нужно целиться на ближайший от трупоеда труп, но при столь рандомном поиске есть шанс выбрать "по указке" труп, лежащий где-нибудь в ебенях, одновременно пропустив лежащий рядом.

Если где сморозил ересь - просьба сильно не пинать, я только начал изучать декор.

Добавлено спустя 57 минут 40 секунд:

Void Weaver:
Если же сначала выполняется воскрешение, а затем уже остальные кастом-функции стэйта, то весь набросок кода накрывается тазом.
О! Ща прикинул что тогда можно попробовать помучить труп уже после "хила", типа:
ВайлЧейс=>
Heal: //Поднял труп
Goto AfterHeal

AfterHeal:
TNT1 A 0 A_KillTarget //Тут же кладём ожившего
TNT1 A 0 A_RearrangePointers () //Из предыдущего варианта
TNT1 A 0 A_TransferPointer () //---/---
TNT1 A 0 Jump (256, Death) или просто Stop //---/---
Бтв, в обоих случаях идёт левая анимация поднятиякилла, что опять таки возможно будет нагружать игру, да и просто выглядеть нелепо, собс-но то, о чём ты сразу заявил.

Добавлено спустя 27 минут 29 секунд:
=========
Наводящий вопрос... а реально ли записать проходящий сквозь любые акторы кроме трупов снаряд +SEEKERMISSILE +HITMASTER и нацеленный исключительно на трупы? А кидать его через СпаунИтемЕх (ТРАНСФЕРПОИНТЕРС) например.

Добавлено спустя 1 час 5 минут 52 секунды:
=========
А что если...
Скрытый текст:

Actor CEater

See:
TNT1 A 0 GiveInventory ("CorpseMark", 1) //На старте выдаём уникальный токен.

SeeHungry: //Не может стрелять, нужен труп
TNT1 A 0 A_JumpIfTargetInsideMeleeRange ("SeeMelee") //Настырному чистит рыло
EATR ABCDEFGH 1 A_Chase ("CorpseSearch")
SeeMelee:
EATR ABCDEFGH 1 A_Chase ("Melee")
Loop 

Melee:
Goto SeeHungry

CorpseSeek: //Ищем ПРЕТЕНДЕНТА на труп
TNT1 A 0 CheckLOF (на дистанции 1024, в радиусе 360 градусов, чекаем всех ДРУЗЕЙ|НЕДРУГОВ|НЕВРАЖДЕБНЫХ|СМОТРИМСКВОЗЬВСЕХ, "Джамп CorpseCheck")
Goto SeeHungry

CorpseCheck: //Проверяем достоин ли ПРЕТЕНДЕНТ носить гордое звание трупа :D
TNT1 A 0 CheckFlag ("CORPSE", "CorpseMarking", AAPTR_TARGET)
Goto CorpseSeek

CorpseMarking: //Да, это ОН!
TNT1 A 0 TakeInventory  ("CorpseMark", 1) //Отрываем от сердца самое ценное...
TNT1 A 0 GiveInventory ("CorpseMark", 1, AAPTR_TARGET) //... и отдаём ему заслуженную награду! ^_^
TNT1 A 0 JumpIfInventory ("CorpseMark", 1, "CorpseChase", AAPTR_TARGET)//Ищем нашего кумира в толпе <3

CorpseChase:
??? ////...вот только как до него добраться (заставить идти к ИТЕМУ)?
TNT1 A 0 A_JumpIfTargetInsideMeleeRange ("CorpseRemove") //Бросаемся в объятья...
Loop

CorpseRemove: 
EATR ABCDEFGH 1 A_Remove (AAPTR_TARGET)//... и ОМ-НОМ-НОМ...
TNT1 A 0 GiveInventory ("CorpseMark", 1) //... оставляя на память медальку. :(
TNT1 A 0 A_ChangeFlag ("NOPAIN", 1)
Goto SeeFull

SeeFull:
EATR ABCDEFGH 1 A_Chase ("Missile")
Loop

Missile:
EATR ABCDEFGH 1 A_CustomMissile()
TNT1 A 0 A_ChangeFlag ("NOPAIN", 0)
Goto SeeHungry

Вот только я подозреваю что после нацеливания на труп, любой агрессор может навсегда сбить его с маркированной цели и токен будет безвозвратно утерян. Или там какой-нибудь игнор всего вокруг прописать? И вообще, есть шанс на взлёт?
1 9 1
Герр Смертоносец
- Warrant Officer -
Next rank: = Warrant Officer = after 97 points
1043

Doom Rate: 1.38

Posts quality: +854
Ссылка на пост №3269 Отправлено: 06.06.18 00:13:18
Void Weaver:
1-2. Казалось бы тут всё просто и понятно - клепаем высокоскоростных ТНТ1 мобов с +LOOKALLAROUND +NOBLOCKMONST +THRUACTORS(?) -SOLID +NEVERTARGET и ВайлЧейсом. Ок. Но как определить лимит на количество иили частоту спауна ТНТшников? Учти, трупоед - это не босс а рядовой моб и десяток таких с персональными "армиями" вероятно могут некисло так заслоудаунить игру.

Это как раз элементарно. У монстра в инвентаре, допустим, 10 патронов, каждый раз спауня миньона он тратит 1 патрон. Каждый раз, когда миньон дохнет, он отдаёт мастеру 1 патрон. При этом надо, чтобы время от времени миньоны самоубивались, дозволяя ушедшему в другую локацию наспаунить новых.

Void Weaver:

Либо я тебя не понял вообще, либо ты переборщил с действиями, но я вижу это приблизительно так: наткнувшись ВайлЧесом на труп наш ТНТшник тупо останавливается и прыгает в "Хил", и тут, я полагаю, необходимо "перехватить" инициативу у инструкции кода. Допустим мы принудительно "расширяем" "Хил" стэйт следующим образом:

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

Upd: Есть крайне сомнительная идея запустить через зскрипт фичу, действующую на поинтер и включающую в себя A_SetTics. С некоторой вероятностью можно будет "заморозить" начавшего восставать монстра на первом кадре, визуально повторяющем труп. Подрихтовать ему флаги и.т.п, сделав технически неотличимым от трупа. Ничего не гарантирую в плане работоспособности, я в зскрепте ещё не разобрался толком.



Void Weaver:
5. А вот тут я вообще не понял - таки как трупоед выбирает мастер-трупа? Рандомно? А если ему тоже "переслали" одновременно 2 и более "МАСТЕР-трупа" (снова мой 3-ий вопрос выше ;) ), пузо-то не "лопнет" часом? И опять таки в идеале нужно целиться на ближайший от трупоеда труп, но при столь рандомном поиске есть шанс выбрать "по указке" труп, лежащий где-нибудь в ебенях, одновременно пропустив лежащий рядом.

Как вариант - команду на SeeCorpseChase выдаёт миньон через A_JumpIfMasterCloser. При этом все прочие миньоны убиваются. Таким образом, трупоед в любом случае наведётся на один из ближайших трупов, а пометки с других трупов исчезнут.


Void Weaver:
А что если...

Void Weaver:
TNT1 A 0 CheckLOF (на дистанции 1024, в радиусе 360 градусов, чекаем всех ДРУЗЕЙ|НЕДРУГОВ|НЕВРАЖДЕБНЫХ|СМОТРИМСКВОЗЬВСЕХ, "Джамп CorpseCheck")

Я про этот вариант писал раньше. Только CheckLOF не работает в радиусе. Т.е. в идеале здесь нужен цикл, в котором эта функция вызывается 360(!) раз за нулевое время. (Можно меньше, тогда вырастет шанс пропустить труп, попавший между линий проверки.) И поставить флаг CLOFF_SETTRACER, чтобы попавший в этот "вращающийся локатор" объект не конфликтовал с TARGET-поинтером.
Прописывая цикл, важно, чтобы локатор сохранял угол поворота после проверки CorpseCheck. Т.е. если он повернулся с 0 до 30 градусов и наткнулся на живого монстра - чтобы дальше он продолжил поворачиваться с 30 градусов дальше, а не начинал бы с начала.

Рейтинг сообщения: +1, отметил(и): Void Weaver
5
Void Weaver
= Captain =
Next rank: - Major - after 144 points
2496

Doom Rate: 1.82

Posts quality: +808
Ссылка на пост №3270 Отправлено: 06.06.18 02:32:19
Грамотно расписал, теперь всё понятно. Спасибо!
Но из-за "Хил" это мне не подходит.

Герр Смертоносец:
Я про этот вариант писал раньше. Только CheckLOF не работает в радиусе. Т.е. в идеале здесь нужен цикл, в котором эта функция вызывается 360(!) раз за нулевое время. (Можно меньше, тогда вырастет шанс пропустить труп, попавший между линий проверки.) И поставить флаг CLOFF_SETTRACER, чтобы попавший в этот "вращающийся локатор" объект не конфликтовал с TARGET-поинтером.
Прописывая цикл, важно, чтобы локатор сохранял угол поворота после проверки CorpseCheck. Т.е. если он повернулся с 0 до 30 градусов и наткнулся на живого монстра - чтобы дальше он продолжил поворачиваться с 30 градусов дальше, а не начинал бы с начала.
Эээ, если ты об этом:
Герр Смертоносец:
Прямых переходов через поинтер на труп вроде нету, надо либо мутить переход через A_CheckLOF,
то видимо я тогда не въехал о чём шла речь. И кстати технически же ЧекЛОФ может работать в радиусе: параметр дистанция + параметр угол. Ставим угол 360 и получаем окружность с заданным радиусом. А результат я наблюдал когда мой Дьябла периодически застревал в собственных миньонах (так и не понял в чём было дело :() во время чарджа с ЧекЛОФом; подходя к нему со спины он моментально выпрыгивал по ЧекЛОФу (на 360 градусов) из заглюченного цикла. Или мы говорим о разных "радиусах"?

А почему CLOFF_SETTRACER, а не МАСТЕР? И я так и не понял как чо писать в CorpseChase по итему.

Да, может таки кто пояснит о времени жизни инвентори итема взятого другим актором:
Void Weaver:
1. Если монстру дать A_GiveInventory ("Timer", 1) такую шнягу:
1 9 1
Герр Смертоносец
- Warrant Officer -
Next rank: = Warrant Officer = after 97 points
1043

Doom Rate: 1.38

Posts quality: +854
Ссылка на пост №3271 Отправлено: 06.06.18 05:47:50
Void Weaver:
И кстати технически же ЧекЛОФ может работать в радиусе: параметр дистанция + параметр угол. Ставим угол 360 и получаем окружность с заданным радиусом.

Angle это не ширина сектора, а смещение луча проверки на определённый угол. Сам луч остаётся тонким. 360 градусов это эквивалент нуля градусов. Я хз, что там со спины заглючило, но в широком угле он штатно работать не должен. Концептуально это аналог hitscan-механизма. Можно пульнуть несколько векторов, но нельзя сделать вектор толстым.

Void Weaver:
А почему CLOFF_SETTRACER, а не МАСТЕР?

Можно и мастер, пофиг. Лишь бы не таргет. Мне привычнее для "альтернативного таргета" юзать трасер.

Void Weaver:
И я так и не понял как чо писать в CorpseChase по итему.

По какому итему? В системе с локатором или с миньонами? Это две разные системы, лол. В системе с локатором, если CheckLOF в состоянии задетектить труп, то никаких итемов не нужно - тупо делаем A_FaceMaster (либо FaceTracer) и даём ему пендаля.

Void Weaver:
Да, может таки кто пояснит о времени жизни инвентори итема взятого другим актором:

Время жизни шняги в Spawn-стейте это время существования итема, свободно лежащего на карте. На поведение итема в инвентаре оно не влияет ровным счётом никак. В случае с игроком можно сделать итем замедленного действия, самоубирающийся из инвентаря через некоторое время, прописав стейт Pickup:
  Pickup:
    TNT1 A 1050
    TNT1 A 0 A_TakeInventory ("Шняганейм", 1)
    //TNT1 A 0 A_SpawnItemEx("BFGBall")
    stop

Что будет в случае с монстром - я хз. Закомменченная строчка для проверки. Если через 30 секунд шар появится - значит сработало.

Рейтинг сообщения: +2, отметил(и): JSO x, Void Weaver
5
Zeberpal_98
Chief Petty Officer
Next rank: Chief Petty Officer after 5 points
935

Doom Rate: 2.15

Posts quality: +254
Ссылка на пост №3272 Отправлено: 06.06.18 11:06:15
привет MоD3леры: Все нижесказанное, особенно подчеркнутое, актуально для Gzdoom?

MD3 Limits


The MD3_PATH+file name cannot be longer than 63 characters. (Textures and model names)
The group name and point name cannot be longer than 63 characters.

Maximum of 1024 animation frames
Maximum of 16 Points (Quake 3 Tags)
Maximum of 32 Groups.......................//Groups всмысле мэшы?
Maximum of 256 Textures per Group
Maximum of 8192 Triangles per Group
Maximum of 4096 Verticies per Group

P.S никто не владеет инсайдом про ZMDL, происходит ли с ним что-то?
1 3
YURA_111
UAC Sergeant Major
Next rank: Chief Petty Officer after 82 points
768

Doom Rate: 1.98

Posts quality: +136
Ссылка на пост №3273 Отправлено: 06.06.18 16:16:26
Приведено как рекомендация и возможно уже что-то изменилось, но:
https://forum.zdoom.org/viewtopic.php?f=3&t=48825

Рейтинг сообщения: +1, отметил(и): Zeberpal_98
Void Weaver
= Captain =
Next rank: - Major - after 144 points
2496

Doom Rate: 1.82

Posts quality: +808
Ссылка на пост №3274 Отправлено: 07.06.18 11:06:56
Герр Смертоносец:
Angle это не ширина сектора, а смещение луча проверки на определённый угол. Сам луч остаётся тонким. 360 градусов это эквивалент нуля градусов. Я хз, что там со спины заглючило, но в широком угле он штатно работать не должен. Концептуально это аналог hitscan-механизма. Можно пульнуть несколько векторов, но нельзя сделать вектор толстым.
Да, похоже ты прав. Может так?:
Скрытый текст:

CorpseSeek:
TNT1 A 0 A_SetUserVar("user_CLOFangle",0) //setting of uservar initial value 
CLOFInRadius:
TNT1 A 0 A_CheckLOF ("CorpseCheck", CLOFF_JUMPENEMY|CLOFF_JUMPFRIEND|CLOFF_JUMPNONHOSTILE|CLOFF_SKIPTARGET|CLOFF_BEYONDTARGET|CLOFF_ALLOWNULL|CLOFF_CHECKPARTIAL|CLOFF_SETTRACER, 1024, 0, user_CLOFangle, 0, 0, 0, AAPTR_TRACER, 0) //uservar assignment to CheckLOF angle
TNT1 A 0 A_SetUserVar("user_CLOFangle", user_CLOFangle+1) //+1 degree uservar increasement
TNT1 A 0 A_JumpIf(user_CLOFangle==360,"CLOFCircle") //360 degrees uservar check (when full circle), then jumping out of loop
Loop

CLOFCircle:
Goto SeeHungry



Герр Смертоносец:
Можно и мастер, пофиг. Лишь бы не таргет. Мне привычнее для "альтернативного таргета" юзать трасер.
А я-то думал что TRACER только для снарядов. Спасибо!

Герр Смертоносец:
Время жизни шняги в Spawn-стейте это время существования итема, свободно лежащего на карте. На поведение итема в инвентаре оно не влияет ровным счётом никак. В случае с игроком можно сделать итем замедленного действия, самоубирающийся из инвентаря через некоторое время, прописав стейт Pickup:

Note that due to this special behavior, the Use and Pickup states will ignore all frame durations and shouldn't be looped, attempts to do to so may result in the sequence being interrupted by the engine; every frame will execute within the same tic.
Облом.
1 9 1
ZZYZX
- UAC Commissar -
Next rank: = UAC Commissar = after 16 pointsМодератор форума
6284

Doom Rate: 1.65

Posts quality: +1630
Ссылка на пост №3275 Отправлено: 07.06.18 12:25:49
Про трупоискание: чуваки, пишите на зскрипте. А то сидит куча вроде бы вполне норм программистов и выдумывают костыли. Я просто в шоке с ваших альтернативных извращений.

https://github.com/jewalky/ZSDuke/blob/master/Code/dn3d/monsters/slimer.txt#L174 (остальная часть функции реализует ползание протозоида по потолкам, нам это не нужно)
A_EatCorpse:
https://github.com/jewalky/ZSDuke/blob/master/Code/dn3d/monsters/slimer.txt#L98
Оно немного своеобразно написано, но поиск трупов думаю можно вычленить.
A_EatCorpse работает в двух режимах — eatingActor=true, и eatingActor=false.
Когда eatingActor=false, происходит поиск (рандомное назначение corpseTarget, а A_MyChase в свою очередь движется в сторону трупа, если эта переменная назначена).
Когда eatingActor=false, при этом corpseTarget назначен и находится прям рядом с монстром, то eatingActor назначается в true.
Когда eatingActor=true, актор никуда не двигается (путём возвращения false из A_EatCorpse) и показывает анимацию поедания.

Если уж прям очень-очень хочется сделать именно через декор, рекомендую A_RadiusGive с флагом RGF_CORPSES, и вызывать ACS-скрипт, заставляющий монстра идти и жрать труп.

Рейтинг сообщения: +2, отметил(и): alekv, Void Weaver
2 2 1
theleo_ua
= Colonel =
Next rank: - Commissar - after 94 points
4796

Doom Rate: 1.8

Posts quality: +1032
Ссылка на пост №3276 Отправлено: 07.06.18 15:27:52
YURA_111:
Тогда попробуй обновить версию GZDOOM - помню в одних из недавних "билдах" что-то писалось о фиксах проблем связанных с дехакидом.


попробовал на свежевышедшем 3.4.0, та же проблема
3 1
DOOMFOREVER
Marine
Next rank: Marine 1st class after 2 points
28

Doom Rate: 0.97

Posts quality: +6
Ссылка на пост №3277 Отправлено: 07.06.18 15:30:46
НУЖНА помощь. Как уменьшить спрайт оружия? Есть какой то способ, если да то распишите подробно)
lafoxxx [B0S]
= 1st Lieutenant =
Next rank: - Captain - after 58 points
2032

Doom Rate: 1.38

Posts quality: +937
Ссылка на пост №3278 Отправлено: 07.06.18 15:35:01
DOOMFOREVER
Hud https://forum.zdoom.org/viewtopic.php?f=3&t=32288#p612277
World https://zdoom.org/wiki/A_SetScale

Рейтинг сообщения: +1, отметил(и): Void Weaver
2 2 4
DOOMFOREVER
Marine
Next rank: Marine 1st class after 2 points
28

Doom Rate: 0.97

Posts quality: +6
Ссылка на пост №3279 Отправлено: 07.06.18 15:42:32
lafoxxx [B0S]:
Hud https://forum.zdoom.org/viewtopic.php?f=3&t=32288#p612277

Это в декорэйте прописывать?

Скрытый текст:

sprite RPGFD0, 640, 480
{
xscale 2
yscale 2
offset -9,71 //or what you need
patch RPGFA0, 0, 0 //simply the name of the sprite
}

YURA_111
UAC Sergeant Major
Next rank: Chief Petty Officer after 82 points
768

Doom Rate: 1.98

Posts quality: +136
Ссылка на пост №3280 Отправлено: 07.06.18 16:54:37
DOOMFOREVER:
Это в декорэйте прописывать?


Это в лумп "Textures"
Страница 164 из 200Перейти наверх Пред.  1, 2, 3 ... 163, 164, 165 ... 198, 199, 200  След.
   Список разделов - Флуд и устаревшие темы - Тема для новичков. Вопросы по маппингу/моддингу - любые!