Попробовал, вроде есть прозрачность, но всё равно это не то. Всё будет не то, пока Гозза не будет понимать прозрачность текстур, как Doomsday. Например этот блик на свфере. Если делать прозрачность средствами Decorate, то прозрачность действует и на этот светлый спот, но мне не нужно, чтобы его задевало. Это возможно только при прозрачнсти текстуры - текстура не видима, а спот белый. Ну да ладно, пользуемся тем что есть, не страшно. Возможно это и можно сделать, но - радость от восприятия эфекта, пропрорционально длинне кода, не стоит этих мучений.
Если учесть что ты сидел на гоззе которая не знает что такое callACS, для тебя откроется новый мир, когда пересядешь за гоззу 3.2+.
Как минимум почти нормальный свет на 3д моделях увидишь.
Насколько я знаю, CallACS можно вызывать только как функцию, а написать что-то типа
POSS A 1 CallACS(блаблабла)
нельзя
theleo_ua Вот именно. Гозза 3.1.0а - сразу ругается на не существующий параметр и не запускает порт. Как мне халявно удалось его заменить и запусить, не понимаю.) Я же в ACS не шарю.
Да, кстати. Надо будет ещё смотреть что там с другими сферами, кроме Soul Sphere, что-то они не хотят вертеться по вертикали. Это касается Меги, Блур, Инверабилити сфер. Наверно опять что-то изменили в порте и код надо править.
она тогда должна разрешать и callACS либо не запускаться вовсе т.к. так писать не правильно, потому что ACS_NamedExecuteWithResult возвращает значение в никуда и правильно было бы использовать: ACS_NamedExecute("FaceAngleAndPitchToPlayer", 0, 6); т.к. в стейте ничто не использует возвращаемое значение.
theleo_ua Честно сказать что-то мы сглупили, так как уже не раз сталкивались с этим. Спавн ещё одного итема на той же модели уже было, например спавн пламени на свечи. Бывает такое, что уже проходил, а потом забываешь и опять по новой всё копаешь, изучаешь. Правда тут делается на не известном доселе Idle.
alekv:
Тут скорее всего баг
Возможно так и есть. Надо попробовать запустить мод на последней Гозе. Я так понял, что код лучше составлять из более стабильных терминов, (долгоиграющих) которые практически не менялись со старых версий порта. Этим можно обезопасить себя от частых ошибок в консоли.
Я так понял, что код лучше составлять из более стабильных терминов, (долгоиграющих) которые практически не менялись со старых версий порта. Этим можно обезопасить себя от частых ошибок в консоли.
Надо просто следить за обновлениями и быть в курсе, что бы не отставать.
alekv Да, тут нарисовалась ещё одна поблема... Когда подходишь, и берёшь Soul Sphere, сама сфера изчезает, а мородочка - нет. Она остаётся и продолжает увеличиваться-уменьшаться.
У меня есть такое предположение, что Актор Soul Sphere_face, это не родной актёр из Doom, поэтому его исчезание не предусмотрено.
она тогда должна разрешать и callACS либо не запускаться вовсе т.к. так писать не правильно, потому что ACS_NamedExecuteWithResult возвращает значение в никуда и правильно было бы использовать: ACS_NamedExecute("FaceAngleAndPitchToPlayer", 0, 6); т.к. в стейте ничто не использует возвращаемое значение.
Не хватало еще чтобы запретили мне юзать 4-параметровый ACS без лишнего (для меня) параметра "карта"
Смотри внимательно:
ACS_NamedExecute
bool ACS_NamedExecute (string script, int map, int s_arg1, int s_arg2, int s_arg3)
ACS_NamedExecute (string script, int map, int s_arg1, int s_arg2, int s_arg3)
int ACS_NamedExecuteWithResult (string script, int s_arg1, int s_arg2, int s_arg3, int s_arg4)
Видишь, что через RESULT у нас есть возможность целые 4 параметра передавать?
А теперь представь, что я пишу ACS_NamedExecute(блаблабла, 1), подразумевая, что 1 это параметр, а внезапно окажется что 1 это карта. Или пишу ACS_NamedExecuteWithResult(блаблабла, 0, 1), подразумевая что ноль это карта, а потом окажется что ноль это первый параметр. А самое главное, страдает читабельность кода, когда придется внимательно смотреть, первый параметр это карта или аргумент.
Итого:
1) Лишний геморрой "париться, какой execute писать"
2) Лишний геморрой "страдает читабельность"
3) Только 3 аргумента в execute (когда 4 аргумента в result)
Внимание вопрос: какого черта парить себе мозг этим вопросом вместо того чтобы просто всегда юзать result и не париться? Разумеется я имею в виду кроме случаев, когда важна карта для исполнения скрипта (у меня просто таких случаев не возникает)
Именно по этой причине я привык всегда юзать именно RESULT версию, чтобы не парить каждый раз себе мозг, почему оно не хочет работать (а внутри скрипта всегда в начале пишу setresultvalue(0) и не парюсь).
Не хватало еще чтобы запретили мне юзать 4-параметровый ACS без лишнего (для меня) параметра "карта"
Не помню что бы требовалось более 3 аргументов, ну да ладно.
Помню когда требовалось шт 6-7-999 и более, но тут уж acs хреноваст.
theleo_ua:
Внимание вопрос: какого черта парить себе мозг этим вопросом вместо того чтобы просто всегда юзать result и не париться?
Потому что однажды баг пофиксят и тебя не спросят хочешь того или нет, если это баг вообще т.к. я точно не знаю.
aivar242:
Да, тут нарисовалась ещё одна поблема... Когда подходишь, и берёшь Soul Sphere, сама сфера изчезает, а мородочка - нет. Она остаётся и продолжает увеличиваться-уменьшаться.
У меня есть такое предположение, что Актор Soul Sphere_face, это не родной актёр из Doom, поэтому его исчезание не предусмотрено.
Наверное 1 актер обычная вещь которую можно подобрать и она благополучно исчезает, а 2-ой актер нет и он не пропадает.
Могу предложить наверное самый простой и быстрый вариант:
Скрытый текст:
Actor Soulsphere_Sphere : Soulsphere replaces Soulsphere
{
Renderstyle Translucent
alpha 0.5
+BRIGHT
States
{
Spawn:
SOUL A 0
SOUL A 1 A_SpawnItemEx("Soulsphere_Face", 0, 0, 0, 0,0,0, angle, SXF_NOCHECKPOSITION)
Idle:
SOUL ABCDCB 6 ACS_NamedExecute("FaceAngleAndPitchToPlayer", 0, 6)
loop
}
}
Actor Soulsphere_Face : CustomInventory
{
+BRIGHT
States
{
Spawn:
SOUL ABCDCB 6 ACS_NamedExecute("FaceAngleAndPitchToPlayer", 0, 6)
loop
PickUp:
TNT1 A 0 A_Log("")
Stop
}
}
тести, смотри..
собс-но по сути 2 вещи которые в одних и тех же координатах, поднимаются одновременно.
A_LOG нужна что бы сработал стейт pickup.
Внимание вопрос: какого черта парить себе мозг этим вопросом вместо того чтобы просто всегда юзать result и не париться?
Посмотрел твои коды по сфере, много страниц назад, там ты так же использовал result.
Так. По поводу сфер. Только что проверил работу этой строки "SOUL ABCDCB 6 ACS_NamedExecuteWithResult("FaceAngleAndPitchToPlayer", 6)", изменяя етот последний параметр. Было 6, поставил 36 - стало плавней работать. Не знаю, есть ли смысл 36 оставлять, может такое колличество тиков, дополнительно грузит движок?
theleo_ua Проверил отклик сфер на перепад высот. Хм. Вроде опять заработали... Понял, что с версией порта 3.0, когда внедрили флаг USEACTORPITCH, вместо INHERITACTORPITCH, в твоём коде так же работал флаг INHERITACTORROLL. Сейчас проверил, он не нужен больше, без него всё прекрасно работает, по вертикали и горизонтали.
Не знаешь, какой командом можно летать по уровню и сквозь стены, типа как в DoomBuilder?
Кто в курсе, почему Квоттинг стал с какушатами, в виде обратного слэша?
Добавлено спустя 24 минуты 47 секунд:
alekv:
тести, смотри..
Потестил, посмотрел, - всё как и было, только сфера к тому же, перестала следить за игроком.
А, понял, пропало слежение, потому что я добавил нули, к в коде у alekv - выше, что и стало блокировкой вращения. Убрал их - завертелись. Тут причина скорее в этом - ACS_NamedExecute - у alekv, и - ACS_NamedExecuteWithResult - у меня. Тем не менее, мордочка всё так же не подбирается. Опыт был, со свечьми и факелами, но в том-то и дело, что там ничего не подбиралось и является декором.
alekv Попробую прописать с функцией ACS_NamedExecute, как у тебя, без Result.
Добавлено спустя 23 минуты 5 секунд:
Да, работает. Вроде скрипт был другой, ты наверно внёс изменения какие-то? Кстати есть ошибка - SOUL ABCDCB A 6 ACS_NamedExecute("FaceAngleAndPitchToPlayer", 0, 6) - фрейм А перед 6 - лишний. Тем более консоль видит эту ошибку и не запускает порт. Убрал - пошло.
В общем... Работает да, всё подбирается, но - повороты сферы происходят рывками. Когда наблюдаешь на неё снизу и быстро ходишь вправо-влево, то Мордочка не успевает за самой сферой, запаздывает, выпадая из круга.
Короче нафиг я думаю возиться с этим. Слишком всё сложно и не удобно. Тем более это не решает главную задачу - чтобы порт видел полу прозрачные текстуры. Например вот сейчас, текстра с бликом на сфере, видится портом как чёрный квадрат, следовательно - делая ей прозрачность, мы просто делаем эту текстуру, прозрачно-чёрной, а надо - чтобы она была вообще прозрачной, но пятно блика, так и оставалось не прозрачным - вот в чём дело. Это возможно сделать в Doomsday, но не в GZDoom.
Я как-то убрал в этой текстуре с бликом чёрный цвет, который Doomsday понимает как прозрачный и сделал полностью прозрачную текстуру, оставив этот градиентный блик на текстуре. Запустил порт GZDoom и самый прикол в том, что Гоза поняла прозрачность, но блик этот показала - без градиента. То есть просто белое, овальное пятно, с чётким краем, на сфере. Почти подходит, но без градиента нельзя, так как это выглядело, как буд-то голубь каканул на сферу.)
Надо брать Графа за грудки и требовать понимания портом, полупрозрачности текстур.
И после фикса можно будет делать так:
POSS A 1 CallACS(блаблабла, 1, 2, 3, 4)
alekv:
и тебя не спросят хочешь того или нет, если это баг вообще т.к. я точно не знаю.
То как ты это понимаешь - скорее всего это не баг (баг разве что в том, что через CallACS нельзя)
Если они это сломают и меня не спросят - я как минимум сделаю им репорт (и при случае suggestion), намекая на то, что 4 параметра теперь нельзя, все зависит от того, как они это обоснуют и какие цели они будут преследовать
Но я не думаю, что разработчики гоззы настолько невнимательные, что не видят, что в одном месте там 3 аргумента, а в другом 4
Кстати, еще инфа с вики про отличия:
ACS_(Named)ExecuteWithResult has one small difference aside returning a value. They execute immediately once called, while the other types will usually wait a tic before acting.
alekv:
A_LOG нужна что бы сработал стейт pickup.
именно a_log, т.е. просто TNT1 A 0 или TNT1 A 1 не катит?
aivar242:
Посмотрел твои коды по сфере, много страниц назад, там ты так же использовал result.
потому что нет смысла усложнять себе жизнь по причине, что кто-то считает более легкий вариант багом:)
aivar242:
Так. По поводу сфер. Только что проверил работу этой строки "SOUL ABCDCB 6 ACS_NamedExecuteWithResult("FaceAngleAndPitchToPlayer", 6)", изменяя етот последний параметр. Было 6, поставил 36 - стало плавней работать. Не знаю, есть ли смысл 36 оставлять, может такое колличество тиков, дополнительно грузит движок?
Скрытый текст:
Нет, в 36 никакого смысла нет. Если у тебя замена 6 на 36 дала какой-то результат - значит либо ты мог ошибочно воспринять то, чего не было, либо ты что-то поменял в коде, и сломал мою изначальную задумку
SOUL A 6
SOUL B 6
SOUL C 6
SOUL D 6
SOUL C 6
SOUL B 6
соответственно строка
SOUL ABCDCB 6 ACS_NamedExecuteWithResult("FaceAngleAndPitchToPlayer", 6)
подразумевает следующее:
SOUL A 6 ACS_NamedExecuteWithResult("FaceAngleAndPitchToPlayer", 6)
SOUL B 6 ACS_NamedExecuteWithResult("FaceAngleAndPitchToPlayer", 6)
SOUL C 6 ACS_NamedExecuteWithResult("FaceAngleAndPitchToPlayer", 6)
SOUL D 6 ACS_NamedExecuteWithResult("FaceAngleAndPitchToPlayer", 6)
SOUL C 6 ACS_NamedExecuteWithResult("FaceAngleAndPitchToPlayer", 6)
SOUL B 6 ACS_NamedExecuteWithResult("FaceAngleAndPitchToPlayer", 6)
теперь ты поменял 6 на 36:
SOUL ABCDCB 6 ACS_NamedExecuteWithResult("FaceAngleAndPitchToPlayer", 36)
что подразумевает следующее:
SOUL A 6 ACS_NamedExecuteWithResult("FaceAngleAndPitchToPlayer", 36)
SOUL B 6 ACS_NamedExecuteWithResult("FaceAngleAndPitchToPlayer", 36)
SOUL C 6 ACS_NamedExecuteWithResult("FaceAngleAndPitchToPlayer", 36)
SOUL D 6 ACS_NamedExecuteWithResult("FaceAngleAndPitchToPlayer", 36)
SOUL C 6 ACS_NamedExecuteWithResult("FaceAngleAndPitchToPlayer", 36)
SOUL B 6 ACS_NamedExecuteWithResult("FaceAngleAndPitchToPlayer", 36)
получается, что теперь у тебя работать будет так:
сначала отрабатывает строка SOUL A 6, каждый тик которой выполняется ACS скрипт
А теперь начинает работать строка SOUL B 6, которая заново запускает ACS, но внимание - старый ACS еще не закончил работу, так как у него стоит 36, тобишь скрипту сказано работать 36 тиков, а не 6
по итогу на стадии SOUL B 6 у тебя будет два скрипта работать одновременно, на стадии SOUL C 6 уже 3 скрипта работать одновременно и т д
И в этом, во-первых, нет никаого смысла, так как если ты в течении одного тика хоть 666 раз выполнишь скрипт, плавности это не прибавит, так как тик в здуме и гздуме неделим
По итогу у тебя в лучшем случае перерасход работы процессора зря, а в худшем - поймаешь глюки некорректной работы либо текущего скрипта либо других, которые внезапно не захотят запускаться по причине лимита одновременных скриптов (я не помню, какой там лимит, то ли на одновременную работу одного и того же скрипта, то ли разных, но точно помню что у меня были с этим проблемы (даже в те времена, когда еще без RESULT юзал) )
Поэтому настоятельно рекомендую вернуть назад на 6, и ставить строго то значение, которое стоит перед скриптом, тобишь если у тебя
SOUL ABCDCB 6
шесть тиков после SOUL ABCDCB, то и в скрипте пиши шесть тиков
ACS_NamedExecuteWithResult("FaceAngleAndPitchToPlayer", 6)
и не тиком больше
aivar242:
Не знаешь, какой командом можно летать по уровню и сквозь стены, типа как в DoomBuilder?
fly
либо give artifly
aivar242:
Кто в курсе, почему Квоттинг стал с какушатами, в виде обратного слэша?
Слишком долго набираешь текст, и форум затирает сессию, в результате чего ломается сообщение. Чтобы такого не было, перед отправкой сообщения всегда делай ctrl+A ctrl+C, и если форум ругнется на устаревшую сессию и попросит отправить сообщение повторно, то жмешь CTRL+V и отправляешь, тогда все символы будут как надо
aivar242:
Потестил, посмотрел, - всё как и было, только сфера к тому же, перестала следить за игроком.
А, понял, пропало слежение, потому что я добавил нули, к в коде у alekv - выше, что и стало блокировкой вращения. Убрал их - завертелись. Тут причина скорее в этом - ACS_NamedExecute - у alekv, и - ACS_NamedExecuteWithResult - у меня.
Скрытый текст:
Я ж не просто так говорил алекв выше, к чему приводят такие вещи. Поэтому я и юзаю RESULT, уже много раз обжегся когда не понимал, почему скрипт работает неверно
Теперь aivar242: у тебя случилось следующее:
сфера перестала вращаться не по причине, что 6 вместо 36, а по причине что alekv захотел убрать result там, где его убирать не надо, в результате чего получилась ошибка в коде
Но ты ошибочно подумал, что проблема в "6 36", и поменял 6 на 36, после чего ошибочно увидел результат, которого на самом деле не было. И этим изменением ты только усугубил проблемы, загрузив движок и добавив глючности в скрипты
На будущее, будь внимательнее плз
aivar242:
В общем... Работает да, всё подбирается, но - повороты сферы происходят рывками. Когда наблюдаешь на неё снизу и быстро ходишь вправо-влево, то Мордочка не успевает за самой сферой, запаздывает, выпадая из круга.
код обоих акторов в студию (как декорейт так и моделдеф)
theleo_ua По поводу работы 6 на 36 тиков понял, вернул как было.
Всё таки конечно "размоделивание" на один ламп - это конечно хорошо. Но точно мне нужно, в идеале можно сделать только полупрозрачностью, я имею ввиду все сферы. Они местами полупрозрачны, или вообще не прозрачны. Это лучше всего делать текстурой.
Код Soul Sphere. Сфера полностью пикапится, но "при взгляде снизу на неё, она сильно подтормаживает в движениях":
Decorate:
Скрытый текст:
Actor Soulsphere_Sphere : Soulsphere replaces Soulsphere
{
Renderstyle Translucent
alpha 0.4
+BRIGHT //Cпорная нужность этого флага.(проверить) Если он не применён, то скорей всего он всегда так и так работает.
States
{
Spawn:
SOUL A 0
SOUL A 1 A_SpawnItemEx("Soulsphere_Face", 0, 0, 0, 0,0,0, angle, SXF_NOCHECKPOSITION)
Idle:
SOUL ABCDCB 6 ACS_NamedExecute("FaceAngleAndPitchToPlayer", 0, 6)
Loop
}
}
Actor Soulsphere_Face : CustomInventory
{
+BRIGHT //Cпорная нужность этого флага.(проверить) Если он не применён, то скорей всего он всегда так и так работает.
States
{
Spawn:
MUS1 ABCDCB 6 ACS_NamedExecute("FaceAngleAndPitchToPlayer", 0, 6)
Loop
PickUp:
TNT1 A 0 A_Log("")
Stop
}
}
Modeldef:
Скрытый текст:
Model Soulsphere_Sphere
{
Path "MD\Soulsphere"
Model 0 "SoulSphere.md3"
Model 1 "SoulSphere.md3"
Skin 0 "Back.png"
Skin 1 "Shine.png"
Scale 1.55 1.55 1.55
zoffset 27.5
USEACTORPITCH
FrameIndex SOUL A 0 5
FrameIndex SOUL A 1 0
}
Model Soulsphere_Sphere
{
Path "MD\Soulsphere"
Model 0 "SoulSphere.md3"
Model 1 "SoulSphere.md3"
Skin 0 "Back.png"
Skin 1 "Shine.png"
Scale 1.55 1.55 1.55
zoffset 27.5
USEACTORPITCH
FrameIndex SOUL B 0 5
FrameIndex SOUL B 1 0
}
Model Soulsphere_Sphere
{
Path "MD\Soulsphere"
Model 0 "SoulSphere.md3"
Model 1 "SoulSphere.md3"
Skin 0 "Back.png"
Skin 1 "Shine.png"
Scale 1.55 1.55 1.55
zoffset 27.5
USEACTORPITCH
FrameIndex SOUL C 0 5
FrameIndex SOUL C 1 0
}
Model Soulsphere_Sphere
{
Path "MD\Soulsphere"
Model 0 "SoulSphere.md3"
Model 1 "SoulSphere.md3"
Skin 0 "Back.png"
Skin 1 "Shine.png"
Scale 1.55 1.55 1.55
zoffset 27.5
USEACTORPITCH
FrameIndex SOUL D 0 5
FrameIndex SOUL D 1 0
}
//-------------------------------------
Model Soulsphere_Face
{
Path "MD\Soulsphere"
Model 0 "SoulSphere.md3"
Skin 0 "0soul.png"
Scale 1.55 1.55 1.55
zoffset 27.5
USEACTORPITCH
FrameIndex MUS1 A 0 1
}
Model Soulsphere_Face
{
Path "MD\Soulsphere"
Model 0 "SoulSphere.md3"
Skin 0 "1soul.png"
Scale 1.55 1.55 1.55
zoffset 27.5
USEACTORPITCH
FrameIndex MUS1 B 0 3
}
Model Soulsphere_Face
{
Path "MD\Soulsphere"
Model 0 "SoulSphere.md3"
Skin 0 "2soul.png"
Scale 1.55 1.55 1.55
zoffset 27.5
USEACTORPITCH
FrameIndex MUS1 C 0 4
}
Model Soulsphere_Face
{
Path "MD\Soulsphere"
Model 0 "SoulSphere.md3"
Skin 0 "2soul.png"
Scale 1.55 1.55 1.55
Actor Soulsphere_Sphere : Soulsphere replaces Soulsphere
{
Renderstyle Translucent
alpha 0.4
+BRIGHT //Cпорная нужность этого флага.(проверить) Если он не применён, то скорей всего он всегда так и так работает.
States
{
Spawn:
SOUL A 0
SOUL A 1 A_SpawnItemEx("Soulsphere_Face", 0, 0, 0, 0,0,0, angle, SXF_NOCHECKPOSITION)
Idle:
SOUL ABCDCB 6 ACS_NamedExecuteWithResult("FaceAngleAndPitchToPlayer", 6)
Loop
}
}
Actor Soulsphere_Face : CustomInventory
{
+BRIGHT //Cпорная нужность этого флага.(проверить) Если он не применён, то скорей всего он всегда так и так работает.
States
{
Spawn:
MUS1 ABCDCB 6 ACS_NamedExecuteWithResult("FaceAngleAndPitchToPlayer", 6)
Loop
PickUp:
TNT1 A 0 A_Log("")
Stop
}
}
И если проблема останется, то выложи видео, демонстрирующее проблему, на ютуб (важно: видео выкладывай с МОИМ кодом, а не с твоим предыдущим)
theleo_ua Да, всё в порядке, работает как надо. Лайчёнок. Дело было в этом Result, скорей всего. По поводу рваной интерполяции, что видно на видео, ради эксперимента, попробуй добавить число 15, вместо 6 и уже будет видна плавность движений. Если ставить число выше, скажем 25, или 36, плавность добавится, но уже не особо ощутимо. Плавность - это конечно хорошо, не мне главное, это лёгкость, незагруженность движка. Так что 6-ки вполне + правильная работа тиков.
Для меня, там явно видна разница. Во 2-ом тесте, Поставил 36 для контраста. В 3-ем тесте, поставил параметры: Soul Sphere - 6 ; Blur Sphere - 10 ; Invulnerability Sphere - 20 ; Mega Sphere - 36:
Код с непрозрачностью, применил только на Soul сфере. Остальные пока не трогал. Со скоростью передвижения сфер, более менее понятно, вполне устраивает с 6-кой, пока.