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

Doom Rate: 1.8

Posts quality: +725
Ссылка на пост №3981 Отправлено: 17.06.19 17:28:35
JSO x пишет:
В помещение с бронёй в секретке дверь односторонняя
Зыс ван.
То что она односторонняя я в курсе, но сути это менять не должно (ну по логике вещей) - с "открывабельной" стороны дверь-то монстрами всё равно не открывается. :\
Алярмим монстров=>клипаемся на другую сторону двери=>наблюдаем... мобы будут просто толпиться у двери но открыть её не смогут. В чём нюанс, как можно обойти?

JSO x пишет:
Ещё условие (насчёт обычных не уверен, но для ключевых -- обязательно): дверь должна быть тоньше то ли восьми, то ли шестнадцати маппикселей.
А как это можно оценить\проверить не будучи маппером?

JSO x пишет:
С помощью Decorate -- никак.
Эва как, ну ок. Тогда вопрос снимается.
1 8 1
N00b2015
- Master Sergeant -
Next rank: = Master Sergeant = after 16 points
444

Doom Rate: 2.21

Posts quality: +144
Ссылка на пост №3982 Отправлено: 18.06.19 00:06:33
JSO x пишет:
Ещё условие (насчёт обычных не уверен, но для ключевых -- обязательно): дверь должна быть тоньше то ли восьми, то ли шестнадцати маппикселей

Это баг, который точно был в ванили (вики), но насчёт его присутствия в gzdoom я бы не был так уверен :-)
На ДВ когда-то задавали вопрос про классику: "Какие двери могут открывать монстры?", так вот, там из нажимаемых special'ов только special 1 (то есть, самое обычное открытие/закрытие двери).
Void Weaver
Посмотри код gzdoom в месте p_spec.cpp, функция P_TestActivateLine (строчки от 302 до 363). Там разбор случая монстра, активирующего линию, на которую не повесили флаг "monsters can activate". Мне кажется, судя по коду, там монстры будут открывать только тип 12, DoorRaise (+линии, преобразованные к нему через xlat), а дверь на MAP01 приведётся точно к другому типу (она же "одноразовая"). Поэтому, скорее всего, придется править исходники...
---
Edit. И тут, изучая логику P_TestActivateLine, я понял, что не придётся.
actor SuperImp: DoomImp replaces DoomImp {
  +MISSILE
}

Грязный хак, который я от тебя же и услышал, здесь действительно сработает! А вот костыли пиши к этому сам, имп получился хрупкий :-)
Тестить так:
kill zombieman; iddqd; noclip
Первый имп в игре действительно открывает дверь.

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

Doom Rate: 1.8

Posts quality: +725
Ссылка на пост №3983 Отправлено: 18.06.19 02:28:56
В сорцах почти нифига не понял но, ОМГ, это то что мне нужно, такие монстры юзают почти всё! Грэйт Сэнкс. ^_^
Странно как я раньше этого не замечал...

N00b2015 пишет:
Грязный хак, который я от тебя же и услышал, здесь действительно сработает! А вот костыли пиши к этому сам, имп получился хрупкий :-)
Да, есть такое. Импы дохнут имея хп больше 0 поскольку при получении урона на них начинает действовать кинетика урона, которая в свою очередь толкает монстра, а при столкновении со стеной последний дохнет с оставшимися хп, ибо MISSILE.
Изи лечится добавлением +DONTTHRUST. :)
ИЛИ же комплексным хаком через добавление всех BOUNCE-флагов, Bounce-стэйта с остановкой внешнего ускорения и джампами в соответствующие стэйты - те, из которых произошёл переход в Баунс стэйт.

Энивэй надо ещё потестить, не исключены внезапные смерти при иных обстоятельствах...

ЭДИТ:
Вот что действительно непонятно так это почему кинетика урона не гасится естественным движением актора... о_0
1 8 1
JSO x
- Sergeant Major -
Next rank: = Sergeant Major = after 34 points
566

Doom Rate: 2.4

Posts quality: +214
Ссылка на пост №3984 Отправлено: 18.06.19 11:01:33
Void Weaver пишет:
Вот что действительно непонятно так это почему кинетика урона не гасится естественным движением актора... о_0

Как раз на это я могу ответить. Здесь, скорее, нужно использовать не понятие кинетической энергии, а понятие силы (у акторов есть атрибут "Mass"). Акторы могут изменять свою скорость, но не ускорение -- оно задаётся либо внешними силами (отбрасыванием хитсканов/проджектайлов), либо ThrustThing и им подобными, но последний вариант всё-таки не может считаться полноправно подчинённым актору: это не самый обычный тип движения для Doom.
Другой тип -- летающие монстры, например, какодемоны. У них, насколько я понимаю, ускорение мгновенно переходит в модификатор к их собственной скорости, который не сбрасывается до нового внешнего воздействия.

Void Weaver пишет:
Энивэй надо ещё потестить, не исключены внезапные смерти при иных обстоятельствах...

При прижимании монстра закрывающейся дверью, например.

N00b2015 пишет:
Грязный хак, который я от тебя же и услышал, здесь действительно сработает! А вот костыли пиши к этому сам, имп получился хрупкий :-)

О, ужас. Бедный Decorate...

Рейтинг сообщения: +1, отметил(и): Void Weaver
1 5
ZZYZX
- Commissar -
Next rank: = Commissar = after 132 pointsМодератор форума
5208

Doom Rate: 1.73

Posts quality: +1466
Ссылка на пост №3985 Отправлено: 18.06.19 12:32:19
Void Weaver пишет:
Вот что действительно непонятно так это почему кинетика урона не гасится естественным движением актора... о_0

Потому что естественное движение актора это тупо микротелепортации. И они никак не связаны с физическими параметрами. Добро пожаловать в говнокод кармака.
Именно поэтому какодемоны на открытых картах имеют свойство улетать в далёкие дали. Они не умеют тормозить velx/vely/velz, пока оно само не сбросится или пока какос во что-то не вдуплится с разбегу.

Поэтому я своим летающим монстрам всегда прописываю что во время A_Chase одновременно происходит сбрасывание velx/vely/velz на некоторое значение.

Рейтинг сообщения: +3, отметил(и): VladGuardian, Mud, Void Weaver
2 2 1
N00b2015
- Master Sergeant -
Next rank: = Master Sergeant = after 16 points
444

Doom Rate: 2.21

Posts quality: +144
Ссылка на пост №3986 Отправлено: 18.06.19 13:11:35
Я попробовал этот MISSILE впихнуть так (zscript):
class SuperDoomImp: DoomImp replaces DoomImp {
  states {
  See:
    TROO AABBCCDD 3 {
      bMISSILE = true;
      A_Chase();
      bMISSILE = false;
    }
    Loop;
  }
}

И, как ни странно, сработало! Имп открывает двери, не улетает от каждого выстрела, не дёргается и выглядит здоровым
А потом перевёл на decorate, и почему-то работать перестало (вернее, иногда двери он всё же открывает, но редко):
actor SuperDoomImp: DoomImp replaces DoomImp {
  states {
  See:
    TROO AABBCCDD 3 {
      A_ChangeFlag("MISSILE", 1);
      A_Chase;
      A_ChangeFlag("MISSILE", 0);
    }
    Loop
  }
}

Есть подозрение, что в A_ChangeFlag (в частности, ModActorFlag) включена защита от дурака, но я не могу её обнаружить, видимо, она сама от меня хорошо защищена.

Ой, нет, и то, и другое работает через раз. Впрочем, так и положено хакам.

edit: Совсем забыл, что наследовать нельзя. :diatel: Если создать нового актора, всё работает нормально и через decorate.
Код:
Скрытый текст:

actor SuperDoomImp replaces DoomImp {
    Health 60
    Radius 20
    Height 56
    Mass 100
    Speed 8
    PainChance 200
    Monster
    +FLOORCLIP
    SeeSound "imp/sight"
    PainSound "imp/pain"
    DeathSound "imp/death"
    ActiveSound "imp/active"
    HitObituary "$OB_IMPHIT"
    Obituary "$OB_IMP"
  states {
  Spawn:
    TROO AB 10 A_Look
    Loop
  See:
    TROO AABBCCDD 3 {
      A_ChangeFlag("MISSILE", 1);
      A_Chase;
      A_ChangeFlag("MISSILE", 0);
    }
    Loop
  Melee:
  Missile:
    TROO EF 8 A_FaceTarget
    TROO G 6 A_TroopAttack
    Goto See
  Pain:
    TROO H 2
    TROO H 2 A_Pain
    Goto See
  Death:
    TROO I 8
    TROO J 8 A_Scream
    TROO K 6
    TROO L 6 A_NoBlocking
    TROO M -1
    Stop
  XDeath:
    TROO N 5
    TROO O 5 A_XScream
    TROO P 5
    TROO Q 5 A_NoBlocking
    TROO RST 5
    TROO U -1
    Stop
  Raise:
    TROO ML 8
    TROO KJI 6
    Goto See
  }
}


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

Doom Rate: 1.8

Posts quality: +725
Ссылка на пост №3987 Отправлено: 18.06.19 14:06:57
ZZYZX пишет:
Потому что естественное движение актора это тупо микротелепортации. И они никак не связаны с физическими параметрами. Добро пожаловать в говнокод кармака.
Именно поэтому какодемоны на открытых картах имеют свойство улетать в далёкие дали. Они не умеют тормозить velx/vely/velz, пока оно само не сбросится или пока какос во что-то не вдуплится с разбегу.
Про микротеле суть А_Чейса я в курсе (но всё время забываю); но тогда почему НЕ-како\соулы сами вполне себе спокойно тормозят без необходимости вмазаться во что-то ещё?

JSO x пишет:
Void Weaver пишет:
Энивэй надо ещё потестить, не исключены внезапные смерти при иных обстоятельствах...

При прижимании монстра закрывающейся дверью, например.
На удивление даже перед простым MISSILE-мобом двери галантно отъезжают вместо размазывания в кашу.
А вот что действительно гробит таких мобов так это свободное "падение" при наличии +DROPOFF\JUMPDOWN, и никакой DONTTHRUST тут уже не спасает. Походу таки придётся пилить БАУНС-хак или ограничивать миссиль-моба текущей плоскостью. ((

N00b2015
Да, такой вариант тоже работает но абсолютно ненадёжен: при высоком уроне или трасте, И\ИЛИ нахождении на очень близком расстоянии от плоскостей мапы или соседних акторов такой монстр может тупо не успеть отключить миссиль-флаг. Причём если против столкновения с актороми поможет RIPPER, то против стен этот флаг уже не спасёт.
Бтв, ещё можно записывать A_ChangeFlag("MISSILE",random(0,1)), но разумеется такой вариант менее надёжен чем цикличное переключение.
1 8 1
ZZYZX
- Commissar -
Next rank: = Commissar = after 132 pointsМодератор форума
5208

Doom Rate: 1.73

Posts quality: +1466
Ссылка на пост №3988 Отправлено: 18.06.19 14:29:49
Void Weaver пишет:
но тогда почему НЕ-како\соулы сами вполне себе спокойно тормозят без необходимости вмазаться во что-то ещё?

Соулы это вообще ракеты, и они не тормозят. Они резко меняют направление. А вот если в них выстрелить то они будут дрейфовать в указанном направлении пока на что-нибудь не наткнутся или не начнут атаку.
А вот те же пейны имеют такое же поведение как и у каков.
2 2 1
Void Weaver
- Captain -
Next rank: = Captain = after 38 points
2302

Doom Rate: 1.8

Posts quality: +725
Ссылка на пост №3989 Отправлено: 18.06.19 14:37:43
ZZYZX пишет:
Соулы это вообще ракеты
С хера ли? В коде соулов вроде нет никаких намёков на их миссиль-природу, да и вообще там из примечательного разве что определение самой _СкуллАттак:
Скрытый текст:

void A_SkullAttack(double skullspeed = DEFSKULLSPEED)
	{
		if (target == null) return;

		if (skullspeed <= 0) skullspeed = DEFSKULLSPEED;

		bSkullfly = true;
		A_PlaySound(AttackSound, CHAN_VOICE);
		A_FaceTarget();
		VelFromAngle(skullspeed);
		Vel.Z = (target.pos.Z + target.Height/2 - pos.Z) / DistanceBySpeed(target, skullspeed);
	}


И вообще вопрос был совершенно другой: почему одни мобы могут и сами погасить ДМГТРАСТ (эту самую "кинетику"), тогда как другим для этого необходимо во что-то влететь.

ЭДИТ1:
С дилетантской точки зрения складывается впечатление что неспособность ванильных мобов противостоять дмгтрасту как-то связана с наличием у них ФЛОАТ и\или НОГРАВИТИ.
ЭДИТ1.1:
ДА, так и есть! ЕЯПП, то соприкосновение с полом считается за "столкновение" и автоматически гасит кинетику дмгтраста, тогда как летуны не соприкасаются ни с чем и соотв. не могут погасить импульс без внешнего вмешательства.

ЭДИТ2:
Добавление FLOORHUGGER позволяет не убиваться монстр-миссилям аппол и свободно спрыгивать с отвесов, правда в Спаун стэйт надо ещё добавить принудительное гашение ускорения: TROO A 0 NoDelay A_Stop

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

Ну вот как-то так:
Actor SuperImp replaces DoomImp
{
 +DROPOFF //issue
 +JUMPDOWN //issue
 +MISSILE //key
 +FLOORHUGGER //key
 +DONTTHRUST //key
  +RIPPER //key vs impact with actors 
  +BLOODLESSIMPACT
  +THRUSPECIES //key vs stuck
  MaxDropoffHeight 100
  Health 600
    Radius 20
    Height 56
    Mass 100
    Speed 8
    PainChance 200
    Monster
    +FLOORCLIP
    SeeSound "imp/sight"
    PainSound "imp/pain"
    DeathSound "imp/death"
    ActiveSound "imp/active"
    HitObituary "$OB_IMPHIT"
    Obituary "$OB_IMP"
	
	states {
  Spawn:
    TROO A 0 NoDelay A_Stop
Остальной код ванильный.
1 8 1
ZZYZX
- Commissar -
Next rank: = Commissar = after 132 pointsМодератор форума
5208

Doom Rate: 1.73

Posts quality: +1466
Ссылка на пост №3990 Отправлено: 18.06.19 15:36:31
Void Weaver пишет:
С хера ли? В коде соулов вроде нет никаких намёков на их миссиль-природу, да и вообще там из примечательного разве что определение самой _СкуллАттак:

Вот и я про это. Соул это единственный монстр, использующий для своего движения velx/y/z. Так же как и у ракет velx/y/z.
Как раз при помощи VelFromAngle и Vel.z.
2 2 1
N00b2015
- Master Sergeant -
Next rank: = Master Sergeant = after 16 points
444

Doom Rate: 2.21

Posts quality: +144
Ссылка на пост №3991 Отправлено: 18.06.19 15:47:54
Void Weaver
Void Weaver пишет:
такой вариант тоже работает но абсолютно ненадёжен: при высоком уроне или трасте, И\ИЛИ нахождении на очень близком расстоянии от плоскостей мапы или соседних акторов такой монстр может тупо не успеть отключить миссиль-флаг.

Пруфы в студию, как говорится!
У меня всё прекрасно работает: и если из BFG жахнуть по импу на выступе (предварительно подняв ему здоровье), и если он в другого импа попадёт. Даже если в стенке импа заспавнить, сам он не сдохнет.
Я же включаю флаг, микро-телепортирую импа, затем выключаю, и это всё на протяжении одного тика. Столкновениям с акторами и стенами обрабатываться тупо некогда.

Лостсоулы не совсем снаряды, но функционально флаги MISSILE и SKULLFLY схожи.

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

Doom Rate: 1.8

Posts quality: +725
Ссылка на пост №3992 Отправлено: 18.06.19 17:42:47
ZZYZX
Ты очень некорректно выразился. ) Тем более что SKULLFLY это временный флаг, а не постоянный атрибут движения актора.

N00b2015
Да, дичайше извиняюсь, - всё работает ИДЕАЛЬНО! Надо было сразу проверять а не теоретизировать.
Ещё раз спасибо.
1 8 1
Страница 200 из 200Перейти наверх Пред.  1, 2, 3 ... 198, 199, 200
   Список разделов - Местечко мапперов и моддеров - Тема для новичков. Вопросы по маппингу/моддингу - любые!