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

Doom Rate: 1.87

Posts quality: +949
Ссылка на пост №301 Отправлено: 05.11.15 20:21:44
theleo_ua:
Никаких значений после дропитем не написано, а айтем дропается почти всегда. Т.е. по умолчанию там 255 скорее всего стоит

Тогда фиг знает почему оно не дропает, мб на самом деле баг...

theleo_ua:
Мне аналогично, кстати. В том моде, который я делаю сейчас, мне пришлось переписать каждого монстра (из еретика, хексена и 10 дополнительных) + сделать еще около 100 дополнительных акторов (и это еще не предел), но результатом доволен

Вот вот, главное нормально рабочий результат =) В старом типа рпг поделке я около 500+ акторов писал из-за брони и был жутко доволен т.к. шмотки снимались\одевались, давали защ. в общем нормально работало. хД но тогда мой скил в ацс был ниже чуть, и приходилось подстраиваться под дефолтный инвентарь дума, сейчас то я бы и свой инвентарь написал и шмотки по другому делал, и 500 акторов не понадобилось.

theleo_ua:
кстати, одна из хотелок для моего мода была "увеличить урон врагам на 25%", вместо чего я уменьшил хп и броню игрока на 20% (как у игрока, так и у предметов), ибо эффект почти тот же, а реализовать проще

Не ну тут как бы особо сложного наверное нет, есть же функция SetActorProperty(); в которой можно изменять damage актора.

ZZYZX:
script "apply_armor" ENTER
{
  while (true)
  {
    int coef = CheckInventory("MyArmorCount")<<16>=0;
    coef /= 2;
    coef /= 100;
    SetActorProperty(0, APROP_DamageFactor, 1.0-coef);
    Delay(1);
  }
}

А зачем так записанно? coef /= 2;
Я еще не юзал /=, что оно значит? Это получается coef делится само на себя и равно двум?
Что-то вообще не въехал.

ZZYZX:
Так что вот, две строчки в пастебине: http://pastebin.com/CrdrRAWj

То есть SetActivatorToTarget(); тоже подходит для того что бы узнать какая цель у монстра?
1 3 1
ZZYZX
- UAC Commissar -
Next rank: = UAC Commissar = after 16 pointsМодератор форума
6284

Doom Rate: 1.65

Posts quality: +1630
Ссылка на пост №302 Отправлено: 05.11.15 21:03:13
Ну да.

alekv:
Я еще не юзал /=, что оно значит? Это получается coef делится само на себя и равно двум?

Нет, это значит что coef делится на два и результат записывается в coef. Аналогично для +=, -= и *=. А ещё &=, ~=, и ^= с |=.

Кстати, во всех рандомах МАКСИМАЛЬНОЕ ЗНАЧЕНИЕ это не 255, а 256. ВСЕГДА. ВООБЩЕ ВСЕГДА.
A_Jump, DropItem...

Писать 500 акторов это ересь. Весь декор Total Conversion'а должен умещаться в 100 акторов. Ключевое слово Total Conversion.
2 2 1
Shadowman
UAC General
Next rank: Unavailable after 0 points
8391

Doom Rate: 2.08

Posts quality: +1993
Ссылка на пост №303 Отправлено: 05.11.15 21:25:25
Мне тоже неясна эта строчка:

int coef = CheckInventory("MyArmorCount")<<16>=0;

А конкретно, что означает запись "<<16>=0";
А две последующие строки означают, что коэф делится на 2, и полученное значение делится еще на 100? То есть максимальный резист в итоге будет только 50%?
Обязательно ли делать скрипт фоновым с постоянной проверкой брони? Может, проще включать скрипт один раз - при надевании/снимании брони в инвентаре, чтобы потом игрок спокойно ходил с заданным значением дамаж-фактора?
(чисто субъективно -опасаюсь большого количества одновременно работающих ентер-скриптов да еще и висящих бесконечно. Может, зря, но единоразово выполняемые скрипты кажутся надежнее).
1 7 2
alekv
- Colonel -
Next rank: = Colonel = after 272 pointsМодератор форума
4168

Doom Rate: 1.87

Posts quality: +949
Ссылка на пост №304 Отправлено: 05.11.15 21:27:53
ZZYZX:
Нет, это значит что coef делится на два и результат записывается в coef. Аналогично для +=, -= и *=. А ещё &=, ~=, и ^= с |=.

А почему нельзя записать просто coef /2 ? Я просто так и не понял где применять эти все += -= итд.

ZZYZX:
Кстати, во всех рандомах МАКСИМАЛЬНОЕ ЗНАЧЕНИЕ это не 255, а 256. ВСЕГДА. ВООБЩЕ ВСЕГДА.
A_Jump, DropItem...

Ну это я давно знал, еще с brightness понял что макс 256, только почему так хз.

ZZYZX:
Писать 500 акторов это ересь. Весь декор Total Conversion'а должен умещаться в 100 акторов. Ключевое слово Total Conversion.

Не понял смысла, причем total conversion? У меня в старой поделке реально около 500 акторов 200 из них для брони, атаки остальные для инвентаря и шмотья разного, всего 5 сетов у каждой шмотки были еще + какие-то доп. акторы, но я тогда вообще ацс толком не знал, пользовался только if\else, а for, until, do, function для меня были как ночные кошмары, щас то конечно лучше знаю, но до хорошо мне еще далеко )

Кстати, тут назрел вопрос пр morph классы, я вот думал все как же имитировать приседания игрока, т.е. игрок нажал кнопки присесть, персонаж переходит в стейт crouch и height актора урезается в 2 раза, вот morph кажется подходит для этого, но обнаружил баг или я не знаю как это убрать, когда персонаж стоит около пола высота которого к примеру 128 и жму кнопку присесть, персонаж морфится в другого перса с уменьшеным height и сам запрыгивает на этот высокий пол.. Это баг вообще или что? морфил игрока ацс функциями..
Хотелось бы найти другой способ имитации приседания, но пока что не додумался, хотя есть вариант по нажатию кнопки присесть, делать игрока nonsolid, ставить картинки приседания, постоянно спавнить 2ого актора с +solid и с маленькой height в координатах игрока.. еще не проверял, способ геморный, но надеюсь что с морфом что-то получится..
1 3 1
Shadowman
UAC General
Next rank: Unavailable after 0 points
8391

Doom Rate: 2.08

Posts quality: +1993
Ссылка на пост №305 Отправлено: 05.11.15 21:30:18
alekv:
Хотелось бы найти другой способ имитации приседания

Не понял, а разве в гоззе по дефолту не учтено приседание игрока? Даже спрайт приседающего думера в гз архиве есть. Или тебе нужно какое-то особое приседание, тогда для чего?
1 7 2
alekv
- Colonel -
Next rank: = Colonel = after 272 pointsМодератор форума
4168

Doom Rate: 1.87

Posts quality: +949
Ссылка на пост №306 Отправлено: 05.11.15 22:00:31
Shadowman:
Обязательно ли делать скрипт фоновым с постоянной проверкой брони? Может, проще включать скрипт один раз - при надевании/снимании брони в инвентаре, чтобы потом игрок спокойно ходил с заданным значением дамаж-фактора?
(чисто субъективно -опасаюсь большого количества одновременно работающих ентер-скриптов да еще и висящих бесконечно. Может, зря, но единоразово выполняемые скрипты кажутся надежнее).

У монстра в стейте Melee и\или messile должен запускаться void скрипт который будет чекать сколько защ. у игрока и в зависимости от защ. игрока ставится монстру атака.

Script "CheckPlayerDefence" (void)
{
int Monster_TID = UniqueTID(); Thing_ChangeTID(0,Monster_TID);//запоминаем тид монстра вызвавшего скрипт
SetActivatorToTarget(0);// ставим активатора на цель
if (CheckInventory("PlayerDefence")>0)//если у цели не будет defence(что значит это не игрок чтоли..), то и атака не изменится
{
int coef = CheckInventory("PlayerDefence")<<16>=0; //можно и без инвентори итема, т.е. вместо актора PlayerDefence объявить глобальную переменную.
coef /= 2;
coef /= 100;
SetActorProperty(Monster_TID, APROP_DamageFactor, 1.0-coef);//монстр будет бить с такой вот силой, которая изменяется в зависимости от защ игрока.
}
}

вот примерно такие расчеты я имел ввиду, только вместо inventory вещи сделать глобальную переменную и тщательно высчитать баланс, что бы игрок чуствовал защиту когда одел вещь и когда снял

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

Shadowman:
Не понял, а разве в гоззе по дефолту не учтено приседание игрока? Даже спрайт приседающего думера в гз архиве есть. Или тебе нужно какое-то особое приседание, тогда для чего?

Есть в гоззе приседания, но в стейте Crouch манипуляций не сделаешь, уже не помню почему, но дефолтный crouch вообще не подходит.
Потому пришлось искать замену. Приседание в целом.. в целом ничего особого, просто игрок жмет на кнопку, перс переходит в стейт crouch с помощью функции SetActorState(); в стейте crouch анимация присевшего перса и его height должна уменьшиться в 2 раза что бы он смог пролезть где либо... просто с морфом, очень удобно сделать такую имитацию, но что игрок во время морфа сам запрыгивает на высокие полы, прям баг какой-то..
1 3 1
Shadowman
UAC General
Next rank: Unavailable after 0 points
8391

Doom Rate: 2.08

Posts quality: +1993
Ссылка на пост №307 Отправлено: 05.11.15 22:14:54
alekv:
У монстра в стейте Melee и\или messile должен запускаться void скрипт который будет чекать сколько защ. у игрока и в зависимости от защ. игрока ставится монстру атака.

Зачем?
При том способе, который предложил ZZYZX, достаточно менять игроку дамаж факторы с учетом надетой брони. И дефолтная атака монстра автоматически будет учитывать этот фактор - никаких доп. манипуляций в декорэйте не нужно.
Собсно я тоже планировал пойти по этому пути, те же резисты в примерах завязаны на дамаж факторы.

alekv:
Есть в гоззе приседания, но в стейте Crouch манипуляций не сделаешь

А какие манипуляции имеются в виду? Движение и стрельба работают как в обычном состоянии, так и в приседе.
1 7 2
alekv
- Colonel -
Next rank: = Colonel = after 272 pointsМодератор форума
4168

Doom Rate: 1.87

Posts quality: +949
Ссылка на пост №308 Отправлено: 05.11.15 22:25:01
Shadowman:
Зачем?

При том способе, который предложил ZZYZX, достаточно менять игроку дамаж факторы с учетом надетой брони. И дефолтная атака монстра автоматически будет учитывать этот фактор - никаких доп. манипуляций в декорэйте не нужно.

Да это я походу не понял хД Меня проглючило. подумал что damageFactor это сила атаки игрока... давно не возился с damagetype..
Так-то да, способ отличный.

Shadowman:
А какие манипуляции имеются в виду? Движение и стрельба работают как в обычном состоянии, так и в приседе.

Самые простые манипуляции
Crouch:
		CROU A 0 A_JumpIfInventory("Crouch",1,"Spawn")
		CROU A 1 A_JumpIfInventory("Crouch",0,"Spawn")
		Loop
	CrouchMove:
		CROU A 0 A_Recoil(-0.5)
		CROU AAAA 1 A_JumpIfInventory("Crouch",1,"Spawn")
		CROU B 0 A_Recoil(-0.5)
		CROU BBBB 1 A_JumpIfInventory("Crouch",1,"Spawn")
		CROU C 0 A_Recoil(-0.5)
		CROU CCCC 1 A_JumpIfInventory("Crouch",1,"Spawn")
		Goto Crouch

Почему не подходит дефолтное приседание с трудом пытаюсь вспомнить.. по моему для стандартного приседания нет спец. стейта т.е. можно прописать в проперти актора игрока стейты приседания Player.CrouchSprite "CROU", но мне нужен именно стейт в котором можно самому настроить кадры, запускать функции и т.д.
Потому то и нужна замена.

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

Вот еще хотел бы узнать, я как-то мучался с thrustThing.. В общем есть 2 актора с разной Z координатой Start_Point и End_Point, когда игрок касается Start_Point срабатывает скрипт и игрока должно тянуть к End_Point, вот как такое сделать? Я помню что мои мучения не дали мне нормальных результатов, может можно как-то просто это реализовать?
1 3 1
Shadowman
UAC General
Next rank: Unavailable after 0 points
8391

Doom Rate: 2.08

Posts quality: +1993
Ссылка на пост №309 Отправлено: 05.11.15 23:00:07
Посмотрел вики и мне стало неясно, где же указывать тип пресловутого дамаж фактора в скрипте?
В вике читаем:
APROP_DamageFactor 	Generic damage factor for the actor, in fixed point. It is applied before any specific DamageFactor. 

В скрипте записано:
SetActorProperty(0, APROP_DamageFactor, 1.0-coef);
А как понять, что нужно, например, уменьшить дамаг фактор только типа "Огонь"? или "нормал", а огонь оставить без изменений? Или уменьшить 3 фактора из возможных 5?
Где в скрипте указания на тип уменьшаемого дамаг фактора?
1 7 2
VladGuardian
= Commissar =
Next rank: - UAC Commissar - after 263 points
5537

Doom Rate: 1.28

Posts quality: +1934
Ссылка на пост №310 Отправлено: 05.11.15 23:11:07
Shadowman:
как понять, что нужно, например, уменьшить дамаг фактор только типа "Огонь"? или "нормал", а огонь оставить без изменений?

В другой статье указан какой-то хитрый "type":
http://zdoom.org/wiki/Actor_properties#DamageFactor
В разделе: Actor Properties/Behaviour
DamageFactor type, value
4 10 23
Shadowman
UAC General
Next rank: Unavailable after 0 points
8391

Doom Rate: 2.08

Posts quality: +1993
Ссылка на пост №311 Отправлено: 05.11.15 23:24:42
VladGuardian:
В другой статье указан какой-то хитрый "type":

Ну это же в декорэйте актора прописываешь. На каждый тип вешаешь свой коэффициент.
А мне нужно совсем другое - где в вышеупомянутом скрипте этот "тип" показывать?
1 7 2
VladGuardian
= Commissar =
Next rank: - UAC Commissar - after 263 points
5537

Doom Rate: 1.28

Posts quality: +1934
Ссылка на пост №312 Отправлено: 05.11.15 23:48:13
Shadowman:
А мне нужно совсем другое - где в вышеупомянутом скрипте этот "тип" показывать?

Могу сильно ошибаться, но судя по документации, она какбэ намекает, что возможно, множители для конкретных damage types изменять из скрипта нельзя. (?)
Только лишь общий множитель (generic factor).

Есть еще нелегальный нетрадиционный путь решения проблемы:
скачать несколько крутых крупных "фирменных" GZ-вадов и поискать строки вида "DamageFactor", "damage factor", "factor".
(если скрипты конечно, не скомпилированы и не переведены в нечитаемый вид)
Это мой путь, иногда этим пользуюсь. Вставляет порой похлеще любого нудного учебника по скриптам.
4 10 23
theleo_ua
= Colonel =
Next rank: - Commissar - after 88 points
4802

Doom Rate: 1.8

Posts quality: +1032
Ссылка на пост №313 Отправлено: 06.11.15 00:42:15
alekv:
Не ну тут как бы особо сложного наверное нет, есть же функция SetActorProperty(); в которой можно изменять damage актора.


Т.е. для каждого актора придется в spawn и raise стейтах вызывать такой скрипт? И он точно сработает на тех акторах, которые стреляют проджектайлами, a_blast-ами или "spawnitem poisonbag"-ами?

ZZYZX:
Кстати, во всех рандомах МАКСИМАЛЬНОЕ ЗНАЧЕНИЕ это не 255, а 256. ВСЕГДА. ВООБЩЕ ВСЕГДА.
A_Jump, DropItem...


кроме A_SpawnItemEx: http://zdoom.org/wiki/A_SpawnItemEx

цитата: chance: This is the chance (out of 255) that the actor has of not spawning. If this is 0 or omitted, the actor will always spawn. If it is 255, it will never spawn.

Ну или в вики ошибка
3 1
ZZYZX
- UAC Commissar -
Next rank: = UAC Commissar = after 16 pointsМодератор форума
6284

Doom Rate: 1.65

Posts quality: +1630
Ссылка на пост №314 Отправлено: 06.11.15 13:04:17
Цитата из кода ZDoom (thingdef_codeptr.cpp если что):
	if (chance > 0 && pr_spawnitemex()<chance )

Следовательно если pr_spawnitemex вернёт 255 (а он может, там 8битный рандомайзер, неограниченный, т.е. 0 до 255), будет жопа.
Причём жопа буквально случайная и совершенно неотлаживаемая.

В вики кстати уже было такое один раз.

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

Shadowman:
А как понять, что нужно, например, уменьшить дамаг фактор только типа "Огонь"? или "нормал", а огонь оставить без изменений? Или уменьшить 3 фактора из возможных 5?

Никак. Через ACS можно только общий менять. Но в общем-то оригинальный армор только "от всего сразу" и защищал.
Я думаю если поковыряться, то можно и это тоже сделать без создания кучи отдельных классов.
2 2 1
TesaQ
= Warrant Officer =
Next rank: - 2nd Lieutenant - after 141 points
1149

Doom Rate: 1.72

Posts quality: +368
Ссылка на пост №315 Отправлено: 06.11.15 14:35:14
а как создать линию, которая блокировала бы определенный тип монстров?
1
ZZYZX
- UAC Commissar -
Next rank: = UAC Commissar = after 16 pointsМодератор форума
6284

Doom Rate: 1.65

Posts quality: +1630
Ссылка на пост №316 Отправлено: 06.11.15 16:03:44
Никак.
2 2 1
alekv
- Colonel -
Next rank: = Colonel = after 272 pointsМодератор форума
4168

Doom Rate: 1.87

Posts quality: +949
Ссылка на пост №317 Отправлено: 06.11.15 18:17:38
TesaQ:
а как создать линию, которая блокировала бы определенный тип монстров?

Никак, это да, но все таки есть черезжопный вариант и не совсем блокировка, просто когда монстр попытается пройти линию, отбрасывать его назад или поворачивать монстра на 180 градусов, в общем сделать все что бы монстр не прошел линию.
theleo_ua:
Т.е. для каждого актора придется в spawn и raise стейтах вызывать такой скрипт? И он точно сработает на тех акторах, которые стреляют проджектайлами, a_blast-ами или "spawnitem poisonbag"-ами?

Честно не задумывался, просто предположил что проще все же менять атаку монстру, но т.к. damagetype видимо менять нельзя да и не только дамаге тип, тогда конечно ты нашел лучший вариант.

alekv:
Вот еще хотел бы узнать, я как-то мучался с thrustThing.. В общем есть 2 актора с разной Z координатой Start_Point и End_Point, когда игрок касается Start_Point срабатывает скрипт и игрока должно тянуть к End_Point, вот как такое сделать? Я помню что мои мучения не дали мне нормальных результатов, может можно как-то просто это реализовать?

Очень актуальный вопрос, помогите ответом =)
1 3 1
ZZYZX
- UAC Commissar -
Next rank: = UAC Commissar = after 16 pointsМодератор форума
6284

Doom Rate: 1.65

Posts quality: +1630
Ссылка на пост №318 Отправлено: 06.11.15 21:40:15
"Тянуть к End_Point" выражается как-то так:
int DiffX = GetActorX(End_Point)-GetActorX(Player);
int DiffY = GetActorY(End_Point)-GetActorY(Player);
int DiffZ = GetActorZ(End_Point)-GetActorZ(Player);
int DiffLen = VectorLength(VectorLength(DiffX, DiffY), DiffZ);
DiffX = FixedDiv(DiffX, DiffLen);
DiffY = FixedDiv(DiffY, DiffLen);
DiffZ = FixedDiv(DiffZ, DiffLen);
SetActorVelocity(Player, DiffX, DiffY, DiffZ, true, false);

Если умными словами, то в результате этого кода появляется трёхмерный нормализованный вектор, указывающий в направлении притягивающей точки.
Если нужно, чтобы тянуло сильнее, множишь DiffX/Y/Z на нужную цифру (вместо 1).
2 2 1
Kragoth762
= Master Sergeant =
Next rank: - Sergeant Major - after 56 points
474

Doom Rate: 1.93

Posts quality: +47
Ссылка на пост №319 Отправлено: 06.11.15 23:06:08
Как сделать так чтобы определенный скрипт сработал (напрмер смена текстур) когда оказываешься в сектор с определенным тегом?
И еще Слэйд конвертит в соответствии с думовской палитрой.
Как бы задать индексацию цветов (набор из 256-ти цветов) близкую к оригиналу ?

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

2 1
VladGuardian
= Commissar =
Next rank: - UAC Commissar - after 263 points
5537

Doom Rate: 1.28

Posts quality: +1934
Ссылка на пост №320 Отправлено: 07.11.15 00:12:35
ZoD:
Как сделать так чтобы определенный скрипт сработал (напрмер смена текстур) когда оказываешься в сектор с определенным тегом?

Похоже, надо положить в нужный тебе сектор особый Thing:
http://zdoom.org/wiki/Classes:SecActEnter

(т.е. в DoomBuilder-е кладешь в сектор Thing / Sector Actions / Actor enters sector)
Останется только настроить этот Thing.
4 10 23
Страница 16 из 200Перейти наверх Пред.  1, 2, 3 ... 15, 16, 17 ... 198, 199, 200  След.
   Список разделов - Флуд и устаревшие темы - Тема для новичков. Вопросы по маппингу/моддингу - любые!