Мне необходимо заменить KON на HREN через переменную, но как правильно вставить переменную в закавыченный текст?? Естественно я заглянул сюда попытался прилепить #define , int"", но что-то не так делаю, не могу понять
7. Что такое и зачем нужны "special1 and special2 fields"? Или обычно в моддинге эти свойства (параметры?) также не задействуются?
8. Спрошу ещё раз. Что такое [identifier]? В каких случая целесообразно применение оного?
identifier is optional. Calls to a random function with an identifier do not interfere with the RNG for calls with a different identifier, which can be used to make the outcome of some events unaffected by others.
9. Что значит "binary mask" в структуре random2, как это считается?
Можно ли записать If\Else-условие внутрь For-цикла в анон-функции?Можно, главное - обязательно закрывать циклы снаружи через "Return state("");", даже если оные циклы выполнились БЕЗ джампа по условию If\Else. "Краями" функции всё равно считается If\Else.
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).
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.
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]. Совершенно не понятно как высчитываются эти значения.
Void Weaver 7. Ну, arg0...arg5 имеют своё применение (ими удобно пользоваться мапперам). И не рестриктед, а депрекэйтед.
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 выдаст всевозможные разности чисел из этого множества.
Вообще эта возможность для модификаций малополезна.
В принципе на этом можно было бы закончить но я же дотошный.
Ещё раз. Открываем определение Эттина и обнаруживаем в этой строке ETTN G 8 A_CustomMeleeAttack(random[EttinAttack](1, 8)*2) нечто именованное "EttinAttack" в качастве identifier.
Что это, где оно определено и как с этим работать?
Касаемо моей витиеватой сентенции, - забей. Я проверил то что подразумевал и понял что оно работает не так как я предполагал, что запутало меня ещё больше. Однако наличие двух разных табличных выборок (P_Random и M_Random) по-прежнему не проясняет сути работы идентифайра. :|
9.
random2(9) может принимать значения из множества {0, 1, 8, 9} - {0, 1, 8, 9} = {-9, -8, -7, -1, 0, 1, 7, 8, 9}, причём вероятности их выпадения будут разные (в табличке 4 на 4 есть 4 нуля и только одна девятка).
9. Дошло (23 = 16 + 8 + 1 = 1*2^5 + 1*2^3 + 1*2^0), спс за терпение и разъяснения! ^_^
8. Так. Я правильно понимаю что вместо [EttinAttack] можно записать [EttinBored] или [MoonFromGreenCheese], и это "обособит" все random'ы с данным идентификатором под рандомизацию отдельно выделенным PRNG?
Привет всем. Требуется помощь не шарящему в ACS скриптах.
Можно ли как-то сделать МОНСТРУ на карте проверку, чтобы сработал скрипт только в том случае, если именно ОН а не другой монстр пересёк линию? Например через TID тег или как-то так.
Пожалуйста напишите скрипт если такое возможно, проверки такого типа не представляю как делаются если делаются вообще.
SSV_Victoryan Попробуй через Активатор ТИД Условие запуска скрипта в редакторе - обычное "monsters cross line", в самом скрипте пишешь проверку на тид активатора (нужному мобу в редакторе выставить тид), если да, то скрипт выполняется.
SSV_Victoryan Кстати, спасибо за сам вопрос - он навел на мысль, как заставить определенных мобов провоцировать определенные действия (можно сымитировать, например, что моб, завидев игрока и начав к нему двигаться, выключил при этом свет или вызвал подмогу). Может, еще пригодится.
Хотя в нашем с Биг Мемкой проекте скорее встанет вопрос о проверке входа-выхода в водную среду для нелетающих мобов. Может быть, с этой командой его можно будет проще решить.
Doomgay1999 У дума формат музыки MIDI, поэтому аккуратно сконвертировать может только человек или нейросеть наверное. Потому если тебе нужен конкретно Q2 в стиль дум - поищи здесь.
ЗАДАЧА:
У каждого оружия свой "тэг". Сейчас в статичном варианте все это выглядит так:
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 в другой??