Welcome to U.A.C. [O.S.A.]
login / register
Status: Guest
Архивы форума | iddqd.ru
Wolf 3D
ПравилаПравила ПоискПоиск
18+
Скриптинг [Заказываем скрипты/Делимся скриптами] Пред.  1, 2, 3, 4, 5, 6
   Список разделов - Местечко мапперов и моддеров - Скриптинг [Заказываем скрипты/Делимся скриптами]Ответить

Будет ли эта тема полезной/жизнеспособной?
Ответ если Вы программист: [Да! Буду просматривать заказы и размещать скрипты]
25%
 25% [ 7 ]
Ответ если Вы программист: [Нет! Эта тема бред]
0%
 0% [ 0 ]
Ответ если Вы программист: [Буду иногда размещать скрипты, но заказы.. лень]
29%
 29% [ 8 ]
Ответ если Вы заказчик: [Да!]
44%
 44% [ 12 ]
Ответ если Вы заказчик: [Нет!]
0%
 0% [ 0 ]
Проголосовало думеров : 27
Всего оставлено голосов : 27
Голосование без ограничения по времени

АвторСообщение
Infernal_KoT
= Master Corporal =
Next rank: - Sergeant - after 30 points
260

Doom Rate: 2

Posts quality: +60
Ссылка на пост №101 Отправлено: 25.09.17 11:49:52
ZZYZX :
Ткни меня носом где так написано. Нужно определить что игрок открыл какую-то область и открыть её же у всех остальных.

Ну, видимо, не так выразился. Как открыть эту область у остальных игроков? Впрочем, если считать в радиусе, то как это будет на обширных локациях, или же наоборот, в очень маленьких - сквозь стены не будет просвечивать?
1 1
ZZYZX
Lieutenant Colonel
Next rank: - Colonel - after 26 pointsМодератор форума
4014

Doom Rate: 1.79

Posts quality: +744
Ссылка на пост №102 Отправлено: 25.09.17 12:28:40
Infernal_KoT :
Впрочем, если считать в радиусе, то как это будет на обширных локациях, или же наоборот, в очень маленьких - сквозь стены не будет просвечивать?

Будет, но это малая цена за саму возможность.
2 2 1
Infernal_KoT
= Master Corporal =
Next rank: - Sergeant - after 30 points
260

Doom Rate: 2

Posts quality: +60
Ссылка на пост №103 Отправлено: 25.09.17 12:38:36
ZZYZX
Хитсканом можно отследить "убитую" стену?
1 1
MyNameIs
= Warrant Officer =
Next rank: - 2nd Lieutenant - after 112 points
1178

Doom Rate: 1.98

Posts quality: +380
Ссылка на пост №104 Отправлено: 25.09.17 13:09:09
Вроде.. Можно же ацсом переключать скайбоксы? Я просто протестить сейчас не могу.
Скайбокс ведь рисует стены, можно через него

А если скайбокс через скайбокс может рисовать, тогда просто пол изменять в секторе основного, пол виден редко
1 1
Kragoth762
= Master Sergeant =
Next rank: - Sergeant Major - after 56 points
474

Doom Rate: 1.93

Posts quality: +49
Ссылка на пост №105 Отправлено: 01.10.17 01:30:42
ACS: 2D lines intersection
пересечение двух прямых...

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

что-то про 2D линии
p.s.: копируйте в билдер если трудно на блокноте читать
2 1
YURA_111
= Sergeant =
Next rank: - Master Sergeant - after 22 points
378

Doom Rate: 2.02

Posts quality: +44
Ссылка на пост №106 Отправлено: 21.10.17 09:42:08
Заказ на скрипт от: Yura111

Подробно что должен делать скрипт: Полный аналог "PowerRegeneration" (с учетом "Powerup.Strength"), только для брони.
Тип скрипта: ZScript (не ACS)

Под какой порт: GZDOOM
Герр Смертоносец
= Master Corporal =
Next rank: - Sergeant - after 29 points
261

Doom Rate: 1.49

Posts quality: +61
Ссылка на пост №107 Отправлено: 14.11.17 05:24:29
По ZScript шарит кто?

Вот есть две фичи: MonsterMove() и TryWalk(), которые заставляют монстра перемещаться строго по прямой вдоль мировой координаты X. Никаких аргументов эти функции не имеют, никакими перепробованными колдунствами не удалось заставить монстра изменить это направление. Несколько часов гугления убедили меня в том, что ни на официальном форуме, ни в вики инфы по этой теме просто нет.

Собственно, вопрос№1: каким образом заставить эти фичи работать в других направлениях?

Далее, единственная вменяемая фича, с которой можно заставить монстра двигаться в произвольном направлении - TryMove(). Но она, блэт, принципиально не открывает двери. (Зато их замечательно открывает MonsterMove).

Собственно, вопрос№2: каким образом можно заставить монстра открыть произвольную дверь в обход вшитых механизмов A_Chase?


Грубые и громоздкие решения у меня есть, но интересуют более-менее изящные. Внутри ещё теплится надежда, что Graf Zahl не настолько поехал, чтобы встраивать в релиз заведомо неработающие фичи.
ZZYZX
Lieutenant Colonel
Next rank: - Colonel - after 26 pointsМодератор форума
4014

Doom Rate: 1.79

Posts quality: +744
Ссылка на пост №108 Отправлено: 14.11.17 07:47:02
Я подозреваю что эти функции двигают монстра строго вперёд. Перёд ему менять не пробовал?
// // P_Move // Move in the current direction, // returns false if the move is blocked. // bool P_Move (AActor *actor)

DEFINE_ACTION_FUNCTION(AActor, MonsterMove) { PARAM_SELF_PROLOGUE(AActor); ACTION_RETURN_BOOL(P_Move(self)); }


Заставить монстра открыть дверь можно легко и непринуждённо — найти эту дверь при помощи того же BlockLinesIterator, проверить что она перед монстром и на вменяемой высоте, после чего заюзать дверь в ручном режиме (активировать спешиал). Только имей в виду что если на двери стоит "player presses use", то ацс может неадекватно отреагировать на открытие такой двери монстром. Хотя это в принципе возможно по идее.
2 2 1
Герр Смертоносец
= Master Corporal =
Next rank: - Sergeant - after 29 points
261

Doom Rate: 1.49

Posts quality: +61
Ссылка на пост №109 Отправлено: 14.11.17 14:34:56
ZZYZX :
Я подозреваю что эти функции двигают монстра строго вперёд. Перёд ему менять не пробовал?

Ммм, а теперь ещё раз. Что такое P_Move, где, как и чем его менять? Как он вообще задаёт перёд, являясь булевой переменной? И откуда дровишки? В вики ничего подобного нет. Какие-то глубокие внутренности движка?

ZZYZX :
Заставить монстра открыть дверь можно легко и непринуждённо — найти эту дверь при помощи того же BlockLinesIterator

А это что за зверь, это зскрипт или acs, и какими аргументами оно питается?

Возникает ощущение, что где-то есть какая-то другая более подробная документация.
ZZYZX
Lieutenant Colonel
Next rank: - Colonel - after 26 pointsМодератор форума
4014

Doom Rate: 1.79

Posts quality: +744
Ссылка на пост №110 Отправлено: 14.11.17 15:37:34
P_Move это внутренняя функция которая вызывается.
MonsterMove = P_Move
Двигает согласно комментарию в текущем направлении. Текущее — это куда морда повёрнута. Следовательно поворачивай в правильную сторону, и тогда будет не только вдоль оси X.

Герр Смертоносец :
А это что за зверь, это зскрипт или acs, и какими аргументами оно питается?

Это зскрипт.

Герр Смертоносец :
Возникает ощущение, что где-то есть какая-то другая более подробная документация.

В исходнике гздума
https://github.com/coelckers/gzdoom/blob/master/wadsrc/static/zscript/base.txt#L450

В связи с тем, что зскрипт по принципу работы практически дословно повторяет C++, то можно лазить в гздум и смотреть как там сделано. И пытаться делать так же.
Документации как таковой... не. Врать не буду. Она есть. Но у меня в голове из-за опыта с исходником гздума документация раза в 4 подробнее чем можно найти в текстовом виде.
В связи с чем я всем советую зскрипт и даже иногда на вопросы отвечаю >_>
2 2 1
Герр Смертоносец
= Master Corporal =
Next rank: - Sergeant - after 29 points
261

Doom Rate: 1.49

Posts quality: +61
Ссылка на пост №111 Отправлено: 14.11.17 16:19:55
ZZYZX :
P_Move это внутренняя функция которая вызывается.
MonsterMove = P_Move
Двигает согласно комментарию в текущем направлении. Текущее — это куда морда повёрнута. Следовательно поворачивай в правильную сторону, и тогда будет не только вдоль оси X.

Я понял, что внутри движка есть свои функции с очень продвинутым функционалом, но как оперировать ими в Zscript lump с точки зрения синтаксиса? Нужны какие-то примеры работоспособного кода. Тупо непонятно, что писать, в каком формате, и с какой стороны к этому вообще подступиться. Метод тыка не работает.
P_Move = Vec2Angle(speed,angle);

Это, например, выдаёт ошибку Unknown identifier 'P_Move'. Все прочие попытки манипулировать этим из Зскрипта тоже выдают ошибку.

Если же монстру просто повернуть морду через A_SetAngle или A_FaceTarget, то ничего не меняется - он продолжает двигаться вдоль оси Х независимо от того, как он визуально развёрнут. Либо это баг, либо разрабы забыли сделать доступный из Zscript способ изменить внутреннюю функцию, без которого внешние бесполезны. Либо я чего-то фундаментально не понимаю.

И по BlockLinesIterator вопрос.
Парсер внезапно сожрал BlockLinesIterator(self). Но попытки посмотреть логику его работы через старый добрый A_PrintBold(BlockLinesIterator(self)) выдали "Cannot convert to string". Спрашивается, что за загадочный формат переменной оно выдаёт, и куда его можно вставить, чтобы снять с него инфу о линии? И чем эту линию потом исследовать? В списке функций ничего подобного нет. Опять же, нужны какие-то примеры рабочего кода в Zscript.

Вообще это жуть и пагубность, конечно. При Рэнди такой хуйни не было. Порт, давший расцвет модостроению за счёт своей прекрасной документированности, развивается в сторону "чёрного ящика", который можно полноценно использовать только если лично перелопачивать весь исходный код.

Рейтинг сообщения: +1, отметил(и): JSO x
ZZYZX
Lieutenant Colonel
Next rank: - Colonel - after 26 pointsМодератор форума
4014

Doom Rate: 1.79

Posts quality: +744
Ссылка на пост №112 Отправлено: 14.11.17 17:03:08
ёмаё да забудь ты про P_Move. Это цитата из кода гздума была.
Вертишь актора в нужную сторону. А потом MonsterMove юзаешь.
Методом тыка зскрипт НЕ РАБОТАЕТ. Примеры читать в gzdoom.pk3 папке zscript.
BlockLinesIterator(self) это дичь. Парсер хавает потому что это динамическое преобразование типов, которое возвращает null.

Отдельно про направление. Судя по всему используется переменная actor->movedir. В нашем случае self.movedir, я так понимаю byte angle.

Герр Смертоносец :
Порт, давший расцвет модостроению за счёт своей прекрасной документированности, развивается в сторону "чёрного ящика", который можно полноценно использовать только если лично перелопачивать весь исходный код.

Я тебя умоляю, не смеши мои тапки, пяткам щекотно. По-твоему документация по ацс и декору всегда была полноценной? Зскрипт появился полгода назад.
Единственная проблема с зскриптом в том, что осваивать его методом тыка примерно то же самое, что и осваивать С++ методом тыка. Можно, но нерационально.
И таки да. Раньше многие вещи были бы невозможны вообще от слова совсем ) А сейчас всего-то нужно применить глаза и почитать код.

А ранди вообще последние несколько лет задерживал(а)(о) развитие порта, из-за чего ничего принципиально нового не появлялось, DoomScript стал байкой, а выражение "для ввода фичи она должна пройти через здум" отбивало у контрибьюторов всё желание что-то делать. Видимо, проблемы с гендерной самоидентификацией важнее ввода новых фич.

Рейтинг сообщения: +1, отметил(и): JSO x
2 2 1
Герр Смертоносец
= Master Corporal =
Next rank: - Sergeant - after 29 points
261

Doom Rate: 1.49

Posts quality: +61
Ссылка на пост №113 Отправлено: 14.11.17 17:25:49
ZZYZX :
Вертишь актора в нужную сторону. А потом MonsterMove юзаешь.

void A_testchase() { A_SetAngle(5+angle); //верчу актора в нужную сторону MonsterMove(); }

Сделал. Монстр должен ровненько ходить по кругу. А он движется по прямой, вращаясь. В чём ошибка?


ZZYZX :
По-твоему документация по ацс и декору всегда была полноценной?

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

upd:
ZZYZX :
Отдельно про направление. Судя по всему используется переменная actor->movedir. В нашем случае self.movedir, я так понимаю byte angle.

Значит "перёд" определяет всё-таки не angle. Сейчас буду с этим пробовать.

upd2: Так, прогресс! Направление действительно задаётся через self.movedir, но это явно не byte angle, не градусы и не fixed, а какой-то другой формат. Всего доступно 8 значений: (0,1,2,3,4,5,6,7), которые задают направления с шагом в 45 градусов. При попытке подставить отрицательное число или 8 и больше монстр просто стоит на месте и не двигается. При попытке задать дробное значение оно принудительно округляется. При попытке задать вектор парсер выдаёт ошибку.

void A_testchase() { A_SetAngle(angle+5); self.movedir = (8*angle/360); MonsterMove(); }

С этим кодом монстр вместо круга обходит правильный восьмиугольник, после чего почему-то встаёт намертво и вертится на месте.

Уже что-то, но по-прежнему загадочно.
ZZYZX
Lieutenant Colonel
Next rank: - Colonel - after 26 pointsМодератор форума
4014

Doom Rate: 1.79

Posts quality: +744
Ссылка на пост №114 Отправлено: 14.11.17 21:39:54
А у тебя просто англе бывает выше 360. Напиши %8 в конце.
2 2 1
Герр Смертоносец
= Master Corporal =
Next rank: - Sergeant - after 29 points
261

Doom Rate: 1.49

Posts quality: +61
Ссылка на пост №115 Отправлено: 15.11.17 04:00:48
Англ вообще по-дефолту выдаёт значения от 0 до 180, а потом резко перескакивает на -179 и дальше идёт по отрицательным числам, поэтому его в любом случае пришлось шлифануть дополнительной проверочкой. Но в итоге movedir действительно жрёт странный формат угла, в котором всего 8 значений. Возможно, это какие-то особенности работы pathfinding из оригинального doom, фиг знает.

Пока сделал громоздкое подобие A_Chase, в котором MonsterMove с выбором одного из 8 направлений задействуется исключительно при застревании. В принципе они уже более-менее ходят и открывают двери.
Страница 6 из 6Перейти наверх Пред.  1, 2, 3, 4, 5, 6
   Список разделов - Местечко мапперов и моддеров - Скриптинг [Заказываем скрипты/Делимся скриптами]