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

Doom Rate: 1.82

Posts quality: +598
Ссылка на пост №4061 Отправлено: 05.07.19 19:13:29
Скрытый текст:

N00b2015 пишет:
Void Weaver
7. Просто int-ы, использующиеся (в акторах Heretic и Hexen) для различных целей в зависимости от актора. Такой же вопрос на форуме zdoom.
8. В ванильном Doom в качестве ГПСЧ использовалась фиксированная таблица, по которой последовательно бегал индекс и выбирал число. Были две функции, P_Random и M_Random, в которых было два разных индекса; первая --- для физики и того, что должно синхронизироваться на всех машинах (длительность состояний проджектайлов, например), а вторая --- для менее важных декоративных эффектов.
Теперь gzdoom использует вихрь Мерсенна вместо статической таблицы. identifier позволяет создать несколько различных дополнительных генераторов, если это для чего-то нужно.
Применение остаётся фактически таким же, что и в 1993.
9. Там приведён пример. Пусть аргумент функции 53, то есть, вызываем random2(53). 53 в десятичной = (00110101) в двоичной (нулями слева добил, поскольку random2 отсекает лишнее и работает только с 8 битами). (00110101) --- это маска. random2 два раза битовыми операциями обнуляет некоторые из единиц и получает два значения, а после этого вычитает их:

mask | (00110101)
int1 | (00000101) (выкинули две единицы, на 3 и 4 местах)

mask | (00110101)
int2 | (00110001) (выкинули единицу на 6 месте)


int1 = 5, int2 = 49; random2 вернёт 5 - 49 = -44 (не 212!)
Поэтому её рекомендуют вызывать с аргументом, на единицу меньше степени двойки (у такого числа все единицы расположены подряд до правого конца). Значение mask по умолчанию равно 255 = 2^8 - 1 = (11111111).

7. Ясно, значит очередные архаичные рестриктед варки наряду с Аргс.
8. Ого... Означает ли это что все ванильные рандом одного диапазона (все random(0, 256) или все random(41, 154)) вызванные в один момент времени из разных источников (скриптов, объектов) будут использовать один и тот же шаблон рандомизации и в результате выдавать одинаковые для всех значения? Тогда как указание A_Explode(random[identifier](64,128), 128) позволит как-то "обособить" выполнение random[identifier](64,128) от синхронного выполнения других random(64,128) вызванных в это же время, выдавая в результате иные значения? И кстати как и где правильно определять оный identifier?
Вот например что значат и где прописаны EttinAttack и DropMace?
9.
N00b2015 пишет:
random2 два раза битовыми операциями обнуляет некоторые из единиц и получает два значения, а после этого вычитает их:
Вот до этого момента всё было понятно, поскольку вика чётко говорит что в общем виде диапазон будет random(0, mask) - random(0, mask).
Для random2(9) это будет random(0, 9) - random(0, 9), что в итоге выдаёт [0, 1, 8, 9] - [0, 1, 8, 9], т. е. 9 какой-то особой двоичной магией раскладывается до 1 и 8.
для random2(53) это будет random(0, 53) - random(0, 53), что в итоге выдаст [0, ?, ?, 53] - [0, ?, ?, 53]. Совершенно не понятно как высчитываются эти значения.
1 8 1
N00b2015
- Master Sergeant -
Next rank: = Master Sergeant = after 46 points
414

Doom Rate: 2.24

Posts quality: +129
Ссылка на пост №4062 Отправлено: 05.07.19 23:20:52
Void Weaver
7. Ну, arg0...arg5 имеют своё применение (ими удобно пользоваться мапперам). И не рестриктед, а депрекэйтед. :o
8. Не понял вопрос, но диапазон тут ни при чём. Это разделение на P_Random и M_Random, как я говорил, главным образом использовалось для отсутствия десинхронизации демок. Определять отдельно его нигде не нужно. Вообще эта возможность для модификаций малополезна.
9. На вики написана фигня. Не полная; верно всё, кроме предложения "It is roughly equivalent to...".
Я подробно написал, как можно понимать работу кода random2, в посте выше (приведу этот код):
int Random2(int mask)
	{
		int t = GenRand32() & mask & 255;
		return t - (GenRand32() & mask & 255);
}


---

random2(9) может принимать значения из множества {0, 1, 8, 9} - {0, 1, 8, 9} = {-9, -8, -7, -1, 0, 1, 7, 8, 9}, причём вероятности их выпадения будут разные (в табличке 4 на 4 есть 4 нуля и только одна девятка).
В квадратных скобках для random2(53) будет 16 значений (так как в его двоичной записи 4 единицы: 53 = 32 + 16 + 4 + 1): {0, 1, 4, 5, 16, 17, 20, 21, 32, 33, 36, 37, 48, 49, 52, 53}, и random2 выдаст всевозможные разности чисел из этого множества.
1 1
Void Weaver
= 1st Lieutenant =
Next rank: - Captain - after 122 points
1968

Doom Rate: 1.82

Posts quality: +598
Ссылка на пост №4063 Отправлено: 06.07.19 03:18:38
Ну да, скорее депрекейтэд. JSO x уже просветил.

8.

Вообще эта возможность для модификаций малополезна.
В принципе на этом можно было бы закончить но я же дотошный. :)
Ещё раз. Открываем определение Эттина и обнаруживаем в этой строке ETTN G 8 A_CustomMeleeAttack(random[EttinAttack](1, 8)*2) нечто именованное "EttinAttack" в качастве identifier.
Что это, где оно определено и как с этим работать?

Касаемо моей витиеватой сентенции, - забей. Я проверил то что подразумевал и понял что оно работает не так как я предполагал, что запутало меня ещё больше. Однако наличие двух разных табличных выборок (P_Random и M_Random) по-прежнему не проясняет сути работы идентифайра. :|
9.
Void Weaver пишет:
random2(9) может принимать значения из множества {0, 1, 8, 9} - {0, 1, 8, 9} = {-9, -8, -7, -1, 0, 1, 7, 8, 9}, причём вероятности их выпадения будут разные (в табличке 4 на 4 есть 4 нуля и только одна девятка).
Ну это-то очевидно:
===========
0 -1 -8 -9
-1 0 7 8
8 7 0 -1
9 8 1 0
===========
Общий шанс выпадения для каждого значения:
-9 - 1
-8 - 1
-1 - 3
0 - 4
1 - 1
7 - 2
8 - 3
9 - 1
===========
Я просто не понимаю принципа разложения 53 = 32 + 16 + 4 + 1. Да и код к сожалению мне совершенно не понятен.
1 8 1
N00b2015
- Master Sergeant -
Next rank: = Master Sergeant = after 46 points
414

Doom Rate: 2.24

Posts quality: +129
Ссылка на пост №4064 Отправлено: 06.07.19 13:33:08
8.
Определять отдельно его нигде не нужно.

9. В табличке много знаков забыл. Должно быть
 0 -1 -8 -9
 1  0 -7 -8
 8  7  0 -1
 9  8  1  0

Позиционная система счисления, Двоичная система счисления. 53 = 32 + 16 + 4 + 1 = 1 * 2^5 + 1 * 2^4 + 1 * 2^2 + 1 * 2^0 => в двоичной системе 53 записывается как 110101.

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

Doom Rate: 1.82

Posts quality: +598
Ссылка на пост №4065 Отправлено: 06.07.19 16:14:16
9. Дошло (23 = 16 + 8 + 1 = 1*2^5 + 1*2^3 + 1*2^0), спс за терпение и разъяснения! ^_^

8. Так. Я правильно понимаю что вместо [EttinAttack] можно записать [EttinBored] или [MoonFromGreenCheese], и это "обособит" все random'ы с данным идентификатором под рандомизацию отдельно выделенным PRNG?
1 8 1
N00b2015
- Master Sergeant -
Next rank: = Master Sergeant = after 46 points
414

Doom Rate: 2.24

Posts quality: +129
Ссылка на пост №4066 Отправлено: 06.07.19 16:32:09
23 != 16 + 8 + 1. 16 + 8 + 1 == 25.

16 != 2^5. 16 == 2^4.

8. Да, именно так.

Рейтинг сообщения: +1, отметил(и): Void Weaver
1 1
SSV_Victoryan
UAC Sergeant Major
Next rank: UAC Sergeant Major after 37 points
723

Doom Rate: 2.22

Posts quality: +201
Ссылка на пост №4067 Отправлено: 07.07.19 13:37:22
Привет всем. Требуется помощь не шарящему в ACS скриптах.
Можно ли как-то сделать МОНСТРУ на карте проверку, чтобы сработал скрипт только в том случае, если именно ОН а не другой монстр пересёк линию? Например через TID тег или как-то так.
Пожалуйста напишите скрипт если такое возможно, проверки такого типа не представляю как делаются если делаются вообще.
2
Shadowman
- UAC Commissar -
Next rank: = UAC Commissar = after 341 points
5959

Doom Rate: 2.27

Posts quality: +391
Ссылка на пост №4068 Отправлено: 07.07.19 13:45:51
SSV_Victoryan
Попробуй через Активатор ТИД
Условие запуска скрипта в редакторе - обычное "monsters cross line", в самом скрипте пишешь проверку на тид активатора (нужному мобу в редакторе выставить тид), если да, то скрипт выполняется.

Рейтинг сообщения: +2, отметил(и): SSV_Victoryan, Void Weaver
1 7 2
SSV_Victoryan
UAC Sergeant Major
Next rank: UAC Sergeant Major after 37 points
723

Doom Rate: 2.22

Posts quality: +201
Ссылка на пост №4069 Отправлено: 07.07.19 14:10:39
Shadowman пишет:
Попробуй через Активатор ТИД

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

script 12 (void)
{  if (ActivatorTID () == 39) { Thing_Destroy(39, 0, 0); }
}


Немного тупляжа, проб и заработало! При много благодарен :pc:

Рейтинг сообщения: +1, отметил(и): Shadowman
2
Shadowman
- UAC Commissar -
Next rank: = UAC Commissar = after 341 points
5959

Doom Rate: 2.27

Posts quality: +391
Ссылка на пост №4070 Отправлено: 07.07.19 21:23:01
SSV_Victoryan
Кстати, спасибо за сам вопрос - он навел на мысль, как заставить определенных мобов провоцировать определенные действия (можно сымитировать, например, что моб, завидев игрока и начав к нему двигаться, выключил при этом свет или вызвал подмогу). Может, еще пригодится.
Хотя в нашем с Биг Мемкой проекте скорее встанет вопрос о проверке входа-выхода в водную среду для нелетающих мобов. Может быть, с этой командой его можно будет проще решить.

Рейтинг сообщения: +1, отметил(и): SSV_Victoryan
1 7 2
Doomgay1999
- UAC Gunner -
Next rank: = UAC Gunner = after 14 points
46

Doom Rate: 2

Ссылка на пост №4071 Отправлено: 09.07.19 01:26:12
А есть такой редактор чтобы превратить оригинальную музыку например Quake 2 в стиль DOOM?
Zeberpal_98
= Sergeant Major =
Next rank: UAC Sergeant Major after 17 points
663

Doom Rate: 1.89

Posts quality: +76
Ссылка на пост №4072 Отправлено: 09.07.19 12:33:42
Doomgay1999
У дума формат музыки MIDI, поэтому аккуратно сконвертировать может только человек или нейросеть наверное. Потому если тебе нужен конкретно Q2 в стиль дум - поищи здесь.

:help: ЗАДАЧА:



У каждого оружия свой "тэг". Сейчас в статичном варианте все это выглядит так:
KLETKA01 = 3;  //где 3 - номер для ССГ
KLETKA02 = 7;  //где 7 - номер для БФГ   
KLETKA03 = 4;  //где 4 - номер для Пулемета
KLETKA04 = 5;  //где 5 - номер для Ракетницы
KLETKA05 = 6;  //где 6 - номер для Плазмы


Желанный результат: при действии определенного скрипта, оружие меняется ячейками слева-направо.
Как я хотел сделать изначально, исходя из моих способностей:
if (KLETKA01 == 3)
{ KLETKA02 = 3;}
else if (KLETKA01 == 4)
{ KLETKA02 = 4;}

//и так далее

Я может быть так и поступил, но в моем моде туева куча орудий, и честно говоря хочется понять, как правильно делать. Нашел такую штуку как SWITCH/CASE
ход моих мыслей: скажем KLETKA01 = x; а KLETKA02 = Y     в то же время X = 3, а Y = 7

Значит я... и как же блин этот свитч/кэйс поможет мне вставить один int в другой??


ПОМОГИТЕ!
пожалуйста
1
N00b2015
- Master Sergeant -
Next rank: = Master Sergeant = after 46 points
414

Doom Rate: 2.24

Posts quality: +129
Ссылка на пост №4073 Отправлено: 09.07.19 15:52:10
Zeberpal_98
Если я правильно тебя понял, советую использовать массив вместо 5 переменных:
int cells[5] = {3, 7, 4, 5, 6};

script "ShiftCellsRight" (void) {
  int temp = cells[4];
  for (int i = 4; i > 0; --i) {
    cells[i] = cells[i - 1];
  }
  cells[0] = temp;
}

Переменным можно присваивать значение не только константы, но и другой переменной. ACS это позволяет.

Рейтинг сообщения: +2, отметил(и): Zeberpal_98, Void Weaver
1 1
Zeberpal_98
= Sergeant Major =
Next rank: UAC Sergeant Major after 17 points
663

Doom Rate: 1.89

Posts quality: +76
Ссылка на пост №4074 Отправлено: 09.07.19 18:16:20
N00b2015
СПАСИБО!

не только константы, но и другой переменной


То есть "массивы" допускают сделать так?
P.S я пока не могу проверить, а смогу возможно только на следующий день

int AAA = 3;
int BBB = 7;
int CCC = 4; // и т.д

int cells[5] = {AAA, BBB, CCC, DDD, EEE};


Чтобы можно было любое оружие и не только думовское впихивать в клетки?
1
Void Weaver
= 1st Lieutenant =
Next rank: - Captain - after 122 points
1968

Doom Rate: 1.82

Posts quality: +598
Ссылка на пост №4075 Отправлено: 09.07.19 20:04:47
Разумеется.

var int user_cellReplacer;

int cells[5] = {AAA, BBB, CCC, DDD, EEE};

int cells[3] = user_cellReplacer; //Индекс на месте CCC возьмёт значение от cellReplacer переменной.

EDIT:
Fixed.

Рейтинг сообщения: +2, отметил(и): Zeberpal_98, VladGuardian
1 8 1
Doomgay1999
- UAC Gunner -
Next rank: = UAC Gunner = after 14 points
46

Doom Rate: 2

Ссылка на пост №4076 Отправлено: 10.07.19 08:18:13
Есть какой-то редактор чтобы от зеркалить музыку для DOOM?
N00b2015
- Master Sergeant -
Next rank: = Master Sergeant = after 46 points
414

Doom Rate: 2.24

Posts quality: +129
Ссылка на пост №4077 Отправлено: 10.07.19 11:03:25
Zeberpal_98
Мне кажется, ты меня не понял :o
Zeberpal_98 пишет:
int AAA = 3; int BBB = 7;

Так не скомпилируется, поскольку в списке-инициализаторе можно указывать только константы. Зачем тебе эти посредники? Если тебе потребуется обращаться к элементам массива, можно использовать такую нотацию, как у меня в скрипте:
//заменить слот 1 на пистолет
cells[0] = 2;

//проверить, есть ли в слотах плазмаган
bool hasPlasma = false;
for (int j = 0; j < 5; ++j) {
  if (cells[j] == 6) {
    hasPlasma = true;
  }
}

//...


Это значительно удобнее синтаксически, чем куча переменных, в названиях которых легко сделать опечатку.

Void Weaver
То, что ты написал, более похоже на DECORATE, чем на ACS. В ACS "var" не используется, префикс "user_" не требуется (кстати, и в ZSCRIPT тоже), в третьей строке int не нужен.

Doomgay1999
Audacity, по-моему, раньше по теме советовали, попробуй там в меню выбрать "Effect" -> "Reverse".

Рейтинг сообщения: +2, отметил(и): Zeberpal_98, Void Weaver
1 1
YURA_111
- Sergeant Major -
Next rank: = Sergeant Major = after 26 points
574

Doom Rate: 2

Posts quality: +90
Ссылка на пост №4078 Отправлено: 10.07.19 13:32:50
Doomgay1999 пишет:
Есть какой-то редактор чтобы от зеркалить музыку для DOOM?


GoldWave
Void Weaver
= 1st Lieutenant =
Next rank: - Captain - after 122 points
1968

Doom Rate: 1.82

Posts quality: +598
Ссылка на пост №4079 Отправлено: 10.07.19 14:31:31
N00b2015 пишет:
В ACS "var" не используется, префикс "user_" не требуется (кстати, и в ZSCRIPT тоже)
Спс, буду знать.
N00b2015 пишет:
в третьей строке int не нужен.
Соррян, скопипастил автоматом.
1 8 1
FoxPlays
- Lance Corporal -
Next rank: = Lance Corporal = after 20 points
140

Doom Rate: 1.94

Posts quality: +56
Ссылка на пост №4080 Отправлено: 10.07.19 15:34:07
Появилась парочка вопросов :o

1. Как отключить для всех карт в ваде (при помощи acs, декорейта или зскрипта) покачивание камеры?
Пытался на acs делать при начале каждой карты (пытался и через ENTER и потом через OPEN) смену цвара игрока - movebob на 0, не помогло :(

2. Как сделать тёмный дым (rgb: r = 0, g = 0, b = 0) на всех секторах и чтобы он был виден? Т.к. через Sector_SetFade(0, 0, 0, 0) не получается.

+3. Как сделать чтобы дамаг у оружия зависел от расстояния к врагу? (чем ближе, тем мощнее) (хитскан)
Страница 204 из 207Перейти наверх Пред.  1, 2, 3 ... 203, 204, 205, 206, 207  След.
   Список разделов - Местечко мапперов и моддеров - Тема для новичков. Вопросы по маппингу/моддингу - любые!