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

Doom Rate: 1.83

Posts quality: +494
Ссылка на пост №3621 Отправлено: 10.10.18 18:27:29
Кстати вместо Goto LightDone можно просто ставить Stop.
1 7 1
N00b2015
= Sergeant =
Next rank: - Master Sergeant - after 32 points
368

Doom Rate: 2.29

Posts quality: +99
Ссылка на пост №3622 Отправлено: 10.10.18 21:17:28
Снова вопрос от меня. Подобный сюжет уже обсуждался недавно в этой теме, но по какой-то причине у меня не работает ни один из предложенных советов.
В некоторый момент при определённых условиях спаунится дохлый (изначально) актор A. Я хочу, чтобы арчвайл мог воскресить актора A, но как бы я ни пытался объявить A, вылезали проблемы.
Код актора A (на зскрипте, декорейт будет аналогичен):
class A: Actor {
  default {
    Monster;
    -COUNTKILL
    DamageFactor 0.0;
    Radius 32;
    Height 20;
  }
  states {
  Spawn:
    TNT1 A 0;
    TNT1 A 0;
  Death:
    TNT1 A 0 A_UnsetShootable;
    TNT1 A 0 A_UnsetSolid;
    TNT1 A 0; //(1)
    CYBR A -1 CanRaise; //чтобы актора видно было
    stop;
  Raise:
    //а тут будет происходить то, ради чего всё и затевается (будет спауниться другой актор)
    stop;
  }
}


Приведённая версия актора не воскрешается, очевидно, потому что нет флажка +CORPSE: арчи просто пробегают мимо, не видя актора. Однако попытка поставить этот флажок с помощью A_ChangeFlag, например, в (1), приводит к полному исчезновению актора!
Как заставить арчвайла воскрешать актора A, не залезая в код арчвайла? Как безболезненно поставить флажок +CORPSE?
P. S. Если A_UnSet... заменить на A_NoBlocking, проблема, естественно, остаётся.
1 1
DOOMGABR
Chief Petty Officer
Next rank: - Warrant Officer - after 42 points
998

Doom Rate: 1.9

Posts quality: +554
Ссылка на пост №3623 Отправлено: 10.10.18 21:33:39
MyNameIs
Более менее помогло. Спс.

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

Проблема. Пытаюсь исправить неправильное поведение чейнгана, при 1 патроне. Нужно, чтобы когда осталась 1 пуля (Clip = 1) — силком отправить в стейт Ready, чтобы оттуда, при нажатии ОГОНЬ, алгоритм понял, что надо сменить оружие.
Написал так вот:
Fire:
     CHGG A 0 A_PlaySound("weapons/chngun", CHAN_WEAPON)
     CHGG A 0 A_Overlay (2, "Muzzle1")
     CHGG A 4 A_FireBullets(5.6, 0, 1, 5, "BulletPuff")
     TNT1 A 0 A_JumpIfInventory("Clip", 1, "Ready") // если в количество пуль = 1 —> отправить в стейт Ready.
     CHGG B 0 A_PlaySound("weapons/chngun", CHAN_WEAPON)
     CHGG B 0 A_Overlay (2, "Muzzle2")
     CHGG B 4 A_FireBullets(5.6, 0, 1, 5, "BulletPuff")
     CHGG B 0 A_ReFire
     Goto Ready

В игре какая-то хрень. Работает неправильно. Гозза почему-то тупо проигрывает только выстрел из первого ствола пулемёта и не переключается на выстрел второго. Что не так?

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

P.S.: починил
___
Было:
...
TNT1 A 0 A_JumpIfInventory("Clip", 1, "Ready")
...

Стало:
...
TNT1 A 0 A_JumpIfNoAmmo("Ready")
...

Рейтинг сообщения: +1, отметил(и): VladGuardian
MyNameIs
= 2nd Lieutenant =
Next rank: - 1st Lieutenant - after 148 points
1492

Doom Rate: 1.94

Posts quality: +558
Ссылка на пост №3624 Отправлено: 10.10.18 22:13:17
DOOMGABR
джампифинвентори проверяет не равенство, а есть ли "это количество этого итема" в наличии у актора
A_JumpIfInventory Clip 1, например, будет работать, если патронов больше/равно единице

поэтому оно должно выглядеть как-то так
Скрытый текст:

Fire:
     CHGG A 0 A_PlaySound("weapons/chngun", CHAN_WEAPON)
     CHGG A 0 A_Overlay (2, "Muzzle1")
     CHGG A 4 A_FireBullets(5.6, 0, 1, 5, "BulletPuff")
     TNT1 A 0 A_JumpIfInventory("Clip", 1, "Fire1")
     Goto Ready
Fire1:
     CHGG B 0 A_PlaySound("weapons/chngun", CHAN_WEAPON)
     CHGG B 0 A_Overlay (2, "Muzzle2")
     CHGG B 4 A_FireBullets(5.6, 0, 1, 5, "BulletPuff")
     CHGG B 0 A_ReFire ("Fire")
     Goto Ready

еще можно сделать это прыжком не на стейт файер1, а прыжком по цифре, но я не оч понял принципы их прыжков, поэтому им не доверяю


Рейтинг сообщения: +1, отметил(и): VladGuardian
1 1
Void Weaver
- 1st Lieutenant -
Next rank: = 1st Lieutenant = after 174 points
1666

Doom Rate: 1.83

Posts quality: +494
Ссылка на пост №3625 Отправлено: 10.10.18 22:42:03
DOOMGABR
Как вариант:
TNT1 A 0 A_JumpIf(CountInv("Clip")==1,"Ready") // если в количество пуль = 1 —> отправить в стейт Ready.
---------------------------------
N00b2015
Spawn:
TNT1 A 0
TNT1 A 0 A_UnsetShootable
TNT1 A 0 A_ChangeFlag("CORPSE",1)
CYBR A -1 CanRaise
Stop
На декоре норм пашет, проверил. Т. е. "Death" вообще не нужен.

Рейтинг сообщения: +2, отметил(и): N00b2015, DOOMGABR
1 7 1
YURA_111
- Sergeant Major -
Next rank: = Sergeant Major = after 32 points
568

Doom Rate: 2.01

Posts quality: +89
Ссылка на пост №3626 Отправлено: 11.10.18 21:52:58
N00b2015:
states {
Spawn:
TNT1 A 0;
TNT1 A 0;
Death:
TNT1 A 0 A_UnsetShootable;
TNT1 A 0 A_UnsetSolid;
TNT1 A 0; //(1)
CYBR A -1 CanRaise; //чтобы актора видно было
stop;
Raise:
//а тут будет происходить то, ради чего всё и затевается (будет спауниться другой актор)
stop;
}
}


Вся проблема в том, что простой переход из некого ("не смертельного") стейта в стейт DEATH не означает что АКТОР погибает.
Для правильности нужно именно убить актора, а значит писать так:
Spawn:
TNT1 A 0
TNT1 A 0 A_Die
Stop
А штуковина CanRaise вообще здесь не нужна.

Рейтинг сообщения: +1, отметил(и): Void Weaver
alekv
Lieutenant Colonel
Next rank: - Colonel - after 156 pointsМодератор форума
3884

Doom Rate: 1.92

Posts quality: +720
Ссылка на пост №3627 Отправлено: 11.10.18 23:41:46
YURA_111:
Для правильности нужно именно убить актора,

Просто
TNT1 A 0
Stop
убивает, A_Die не обязательно гздум сам очищает

Рейтинг сообщения: -1, отметил(и): JSO x
1 3 1
DOOMGABR
Chief Petty Officer
Next rank: - Warrant Officer - after 42 points
998

Doom Rate: 1.9

Posts quality: +554
Ссылка на пост №3628 Отправлено: 11.10.18 23:50:12
Проблема. Не воспроизводится звук щелчка дробовика (кастомный — "weapons/shotgp") у монстра. Причину вообще не понимаю. "weapons/shotgf" — звук выстрела без щелчка цевьем.
Стейт атаки шотганнера:
Missile:
    SPOS E 7 A_FaceTarget
    TNT1 A 0 A_PlaySound("weapons/shotgf", CHAN_AUTO)
    SPOS F 7 Bright A_CustomBulletAttack(22.5, 0, 3, random(1,5)*3, "BulletPuff", 0, CBAF_NORANDOM)
    SPSR A 5 A_PlaySound("weapons/shotgp", CHAN_AUTO)
    SPSR B 6
    SPSR A 5
    Goto See


SNDINFO
FistWallHit				DSPUNCH
weapons/chngun			DSCHAING
weapons/shotgf		    DSSGSHOT
weapons/shotgp		    DSSGPUMP
chainguy/attack			DSCHAING

$volume "weapons/chngun" 0.9
$volume "chainguy/attack" 0.9

spider/attack			DSMASTER
wolfss/attack			DSPISTOL


В папке "sounds" звуки точно названы корректно. Странно. Что не так?
Void Weaver
- 1st Lieutenant -
Next rank: = 1st Lieutenant = after 174 points
1666

Doom Rate: 1.83

Posts quality: +494
Ссылка на пост №3629 Отправлено: 12.10.18 02:03:16
alekv:
Просто
TNT1 A 0
Stop
убивает, A_Die не обязательно
А вот нифига. Стоп в Спауне без А_Дай просто поремувит моба без трупа.

YURA_111:
Для правильности нужно именно убить актора, а значит писать так:
Spawn:
TNT1 A 0
TNT1 A 0 A_Die
Stop
А штуковина CanRaise вообще здесь не нужна.
Прав, и на счёт CanRaise тоже - кейворд просто является альтернативным указателем для Heal кадру с -1 длительностью.

Так что варианты такой:
Spawn:
TNT1 A 0
TNT1 A 0 A_Die
Death:
CYBR A -1
Stop
либо такой:
Spawn:
TNT1 A 0
TNT1 A 0 A_UnsetShootable
TNT1 A 0 A_ChangeFlag("CORPSE",1)
CYBR A -1
Stop
Вариант Юры лучше, имхо.
---------------------------
DOOMGABR
Странно. Попробуй CHAN_AUTO заменить на CHAN_WEAPON.

Рейтинг сообщения: +2, отметил(и): JSO x, DOOMGABR
1 7 1
JSO x
- Sergeant Major -
Next rank: = Sergeant Major = after 70 points
530

Doom Rate: 2.45

Posts quality: +186
Ссылка на пост №3630 Отправлено: 12.10.18 19:22:31
Void Weaver:
Кстати вместо Goto LightDone можно просто ставить Stop.

Неверно. В Software-рендерере это создаёт непогашенную имитацию света. В OpenGL -- да, можно, там A_Light-производные просто не отображаются. Там Light( <тип> ) как имитатор выстрела используется.

DOOMGABR, у одного человека (nailzx128) крайне похожее было, точь-в-точь. Папка "Sounds", а не "Sound", должна называться. Это графика в любом читается. Звуки -- нет. Другого объяснения не вижу. Замена на "CHAN_WEAP" не должна помочь.

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

Doom Rate: 1.9

Posts quality: +554
Ссылка на пост №3631 Отправлено: 12.10.18 22:30:49
Всем конечно спасибо за ваши ответы, но произошло нечто. Я тупо ночью выключил комп и пошёл спать, а на утро всё заработало. Ошибки как таковой не было, по факту. Слейд я точно сохранял, все названия папок, декларации, имена файлов, правильные имена в коде. Всё было на своих местах. Странно :shock:
nailzx128
= Corporal =
Next rank: - Lance Corporal - after 26 points
104

Doom Rate: 1.82

Posts quality: +38
Ссылка на пост №3632 Отправлено: 13.10.18 23:03:13
Возникла небольшая проблема. Вот скрипт для увеличения максимального кол-ва переносимых патронов. Он не работает корректно.
Если заспавнить мой AmmoExtender через консоль, всё работает хорошо. НО! Суть в том, что этот предмет заменяет оригинальный Backpack. На некоторых картах, при самом первом подборе предмета, ничего не происходит. А вот к примеру на седьмой карте Doom 2, этот предмет вообще поднимается максимальное кол-во раз! Итак, вопрос знатокам. Что я сделал не так?
Ниже публикую код, если это что-то даст.

ACS скрипт
bool playerbackpack[8] = { FALSE };

script 123 (void)
{
	if (playerbackpack[PlayerNumber()])
	{
		if (GetAmmoCapacity("energyammo") < 1000)
		{
			SetAmmoCapacity("energyammo", GetAmmoCapacity("energyammo") + 100);
			giveinventory("energyammo",100);
			SetAmmoCapacity("tracerbulletsammo", GetAmmoCapacity("tracerbulletsammo") + 100);
			giveinventory("tracerbulletsammo",100);
			SetAmmoCapacity("petroleumammo", GetAmmoCapacity("petroleumammo") + 100);
			giveinventory("petroleumammo",100);
			SetAmmoCapacity("missileammo", GetAmmoCapacity("missileammo") + 100);
			giveinventory("missileammo",100);
			SetAmmoCapacity("meatballsammo", GetAmmoCapacity("meatballsammo") + 100);
			giveinventory("meatballsammo",100);
		}
	}
	else
		playerbackpack[PlayerNumber()] = TRUE;
}

script 124 ENTER
{
	if (GetAmmoCapacity("energyammo") >> 0)
		playerbackpack[PlayerNumber()] = true;
}

script 125 RESPAWN
{
	playerbackpack[PlayerNumber()] = FALSE;
}



Код предмета

actor ammoextender : custominventory replaces backpack
{
				inventory.pickupmessage 	"$ammo_ext"
				inventory.pickupsound 		"pickup" //оригинально...
				scale 						0.7
	states
	{
	spawn:
				tnt1 a 0 acs_namedexecutealways("harpplay",0,0,0) //тут проигрывается музон
				aful abcdefghijklmnop 2
	loop
	pickup:
				tnt1 a 0 acs_execute(123,0,0,0,0)
	stop
	}
}
DOOMGABR
Chief Petty Officer
Next rank: - Warrant Officer - after 42 points
998

Doom Rate: 1.9

Posts quality: +554
Ссылка на пост №3633 Отправлено: 14.10.18 00:35:47
1. Как сделать, чтобы БФГ-шар не уничтожал актор своим трейсером? В моём случае, это думовская взрывная бочка.
2. Не могу понять, где найти код который отвечает за выпускание Ревенантом обычной ракеты и самонаводящейся. На ZDoom Вики я запутался и так ничего и не понял.
Void Weaver
- 1st Lieutenant -
Next rank: = 1st Lieutenant = after 174 points
1666

Doom Rate: 1.83

Posts quality: +494
Ссылка на пост №3634 Отправлено: 14.10.18 01:59:37
nailzx128
Из того что на поверхности:
nailzx128:
if (GetAmmoCapacity("energyammo") >> 0)
когда должно быть
if (GetAmmoCapacity("energyammo") > 100)
nailzx128:
этот предмет вообще поднимается максимальное кол-во раз!
Типа берёшь 1 а эффект как от 10? Если да, то попробуй прописать в ammoextender:
+INVENTORY.ALWAYSPICKUP
Inventory.Amount 1
Inventory.MaxAmount 1
---------------------------
DOOMGABR
1. Вижу 2 варианта:
Вариант №1:
Actor MyBarrel : ExplosiveBarrel replaces ExplosiveBarrel
{
  DamageFactor "BFGSplash", 0.0 //Тупо даём бочке иммунитет к БФГ-трэйсерам
}
Плюс - не затрагивается игрок; минус - в этом случае вспышки будут по-прежнему спауниться на бочках.

Вариант №2:
Actor MyDoomguy: DoomPlayer
{
  Species "BFGTracerFriends" //Даём игроку и бочке одинаковый специес
}

Actor MyBFGExtra : BFGExtra replaces BFGExtra
{
  +MTHRUSPECIES //Даём флаг кастомному трэйсер-пуффу БФГ
}

Actor MyBarrel : ExplosiveBarrel replaces ExplosiveBarrel
{
  Species "BFGTracerFriends" //Даём игроку и бочке одинаковый специес
}
Плюс - выглядит идеально; минус - надо эдитить игрока, а также тратить уникальное свойство Species, ну и до кучи игрок становится неуязвим к БФГ-трэйсерам.
Не исключено что можно сделать какой-нибудь хитрый джамп с проверкой акторкласса чтобы игрок таки получал урон от БФГ-спрея.
---------------------------
2. По поводу ракет Рева.
DOOMGABR:
Не могу понять, где найти код который отвечает за выпускание Ревенантом обычной ракеты и самонаводящейся.
Дело в том что за оба типа снарядов отвечает ОДИН актор (RevenantTracer) и ОДНА ф-ция (A_Tracer). Штука весьма хитрожопая и работает в зависимости от совпадения таймингов вызова ф-ции и некоего глобального таймера кратного 4. Т. е. шанс и степень самонаведения строго зависят от того какое число тиков использовано при вызове A_Tracer. Это вкратце.
Имхо, с А_Трэйсер вообще не стоит связываться, ну если только не планируешь нечто мега извратное.

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

ЕЯПП, то правила следующие:
Если интервал вызова ф-ции нечётный, то наведение будет срабатывать каждый интервал×4 tics.
Например:
Скрытый текст:

Actor Tracer3 : RevenantTracer
{
  States
  {
  Spawn:
    FATB AB 3 bright A_Tracer
    loop
  }
}
Будет всегда наводящаяся, но наведение будет слабым - каждые 12 тиков.


Если интервал вызова ф-ции кратен 4, то будет срабатывать каждый интервал, но только если ракета была выстрелена в глобальный тик кратный 4.
Например:
Скрытый текст:

Actor Tracer4 : RevenantTracer
{
  States
  {
  Spawn:
    FATB AB 4 bright A_Tracer
    loop
  }
}
Будет наводящаяся если выстрел совершён в глобал-тик кратный 4, а наведение будет сильным - каждые 4 тика.


Если интервал вызова ф-ции чётный но НЕ кратен 4, то будет срабатывать каждый интервал×2 tics, но только если ракета была выстрелена в чётный глобальный тик.
Например:
Скрытый текст:

Actor RevenantTracer
{
  States
  {
  Spawn:
    FATB AB 2 bright A_Tracer
    loop
  }
}
Классика. Будет наводящаяся если выстрел совершён в чётный глобал-тик, а наведение будет сильным - каждые 4 тика.


Максимально злой вариант будет при FATB AB 1 bright A_Tracer - спаунится всегда наводящейся с максимальным наведением в 4 тика.

Рейтинг сообщения: +3, отметил(и): YURA_111, JSO x, DOOMGABR
1 7 1
YURA_111
- Sergeant Major -
Next rank: = Sergeant Major = after 32 points
568

Doom Rate: 2.01

Posts quality: +89
Ссылка на пост №3635 Отправлено: 14.10.18 09:08:32
Void Weaver:
минус - в этом случае вспышки будут по-прежнему спауниться на бочках.


можно внутри вот этого:

https://zdoom.org/wiki/Classes:BFGExtra

прописать A_checkproximity, c проверкой рядом ли бочка во время этой самой вспышки и если рядом то прыжок на TNT1 A 0. Вспышки не будет визуально...

Рейтинг сообщения: +1, отметил(и): Void Weaver
nailzx128
= Corporal =
Next rank: - Lance Corporal - after 26 points
104

Doom Rate: 1.82

Posts quality: +38
Ссылка на пост №3636 Отправлено: 14.10.18 10:35:35
Void Weaver:
nailzx128
Из того что на поверхности:
nailzx128 :
if (GetAmmoCapacity("energyammo") >> 0)
когда должно быть
if (GetAmmoCapacity("energyammo") > 100)
nailzx128 :
этот предмет вообще поднимается максимальное кол-во раз!
Типа берёшь 1 а эффект как от 10? Если да, то попробуй прописать в ammoextender:
+INVENTORY.ALWAYSPICKUP
Inventory.Amount 1
Inventory.MaxAmount 1

Спасибо! Проблема с эффектом как от 10 решена! Однако, осталась проблема с первым поднятием.
И да, ещё вопрос знатокам.Почему двигло ругается на это:
weapon.ammouse 					(random (1, 0))
?
Суть в том, что я хочу снизить потребление патронов у одной очень скорострельной пушки. Одна из идей была в установке рандомного параметра в пункте кол-ва потребления аммуниции.
YURA_111
- Sergeant Major -
Next rank: = Sergeant Major = after 32 points
568

Doom Rate: 2.01

Posts quality: +89
Ссылка на пост №3637 Отправлено: 14.10.18 13:11:29
nailzx128:
Суть в том, что я хочу снизить потребление патронов у одной очень скорострельной пушки.


МОжно вместо weapon.ammouse использовать внутри стейтов экшен A_TakeInventory. Там рандом точно сработает.

Рейтинг сообщения: +1, отметил(и): JSO x
nailzx128
= Corporal =
Next rank: - Lance Corporal - after 26 points
104

Doom Rate: 1.82

Posts quality: +38
Ссылка на пост №3638 Отправлено: 14.10.18 13:47:12
YURA_111:
МОжно вместо weapon.ammouse использовать внутри стейтов экшен A_TakeInventory. Там рандом точно сработает.

Не даром говорят, что всё гениальное - просто. Спасибо!

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

YURA_111:
МОжно вместо weapon.ammouse использовать внутри стейтов экшен A_TakeInventory. Там рандом точно сработает.

Хотя не, тут A_TakeInventory сработал откровенно...странно.
a_takeinventory("tracerbulletsammo",random(1,0));

Сжирает все патроны почти сразу. ЧЗНХ? :bitsa:
Герр Смертоносец
- Sergeant Major -
Next rank: = Sergeant Major = after 11 points
589

Doom Rate: 1.53

Posts quality: +341
Ссылка на пост №3639 Отправлено: 14.10.18 15:52:00
nailzx128:
Сжирает все патроны почти сразу. ЧЗНХ? :bitsa:

Тому що "0" означает изъять всё независимо от количества.

Вариант раз: повесить на итем флаг INVENTORY.KEEPDEPLETED.
Вариант два: пропускать изъятие одной единицы через A_Jump с нужным шансом.

Рейтинг сообщения: +2, отметил(и): JSO x, Void Weaver
2
Void Weaver
- 1st Lieutenant -
Next rank: = 1st Lieutenant = after 174 points
1666

Doom Rate: 1.83

Posts quality: +494
Ссылка на пост №3640 Отправлено: 15.10.18 00:25:01
YURA_111:
прописать A_checkproximity, c проверкой рядом ли бочка во время этой самой вспышки и если рядом то прыжок на TNT1 A 0. Вспышки не будет визуально...
Кстати да, работает как часы :
Actor MyBFGExtra : BFGExtra replaces BFGExtra
{
  States
  {
  Spawn:
    TNT1 A 0 NoDelay A_CheckProximity("Death","MyBarrel",20.0,1)
    BFE2 ABCD 8 Bright
  Death:
    TNT1 A 0
    Stop
  }
}

-----------------
nailzx128:
Суть в том, что я хочу снизить потребление патронов у одной очень скорострельной пушки. Одна из идей была в установке рандомного параметра в пункте кол-ва потребления аммуниции.
Полагаю речь идёт о Wailer, да? У тебя в коде все ф-ции каждого выстрела "упакованы" в 1 тик анонимной ф-ции, из-за этого пуха дико скорострельна. А ты не думал пойти несколько иным путём - чуток снизить скорострельность (повысив дамаг и\или ко-во пуль) вместо просто снижения потребления аммо?
1 7 1
Страница 182 из 197Перейти наверх Пред.  1, 2, 3 ... 181, 182, 183 ... 195, 196, 197  След.
   Список разделов - Местечко мапперов и моддеров - Тема для новичков. Вопросы по маппингу/моддингу - любые!