Void Weaver В ACS дробные значения хранятся в int-ах. Плавающей точки нет, используется фиксированная арифметика. 1.0 = 2^16 = 65536. Если хочешь возвращать дробь, передавай ее как int, но обрабатывай как fixed. Почитать про это можно на wiki.
В ACS дробные значения хранятся в int-ах. Плавающей точки нет, используется фиксированная арифметика. 1.0 = 2^16 = 65536. Если хочешь возвращать дробь, передавай ее как int, но обрабатывай как fixed.
Оке...
Сам скрипт
Script "LostSoulRenderAlpha" (void)
{
int myCoolInteger = GetCVar("transsouls");
int myCoolFixedPointValue = myCoolInteger << 16;
SetResultValue(myCoolFixedPointValue);
}
Соул актор
Actor Soul1 : LostSoul
{
RenderStyle Translucent
Alpha 0.75
}
Кастоминвентори "затемнитель"
Actor FaderIn : CustomInventory
{
+INVENTORY.ALWAYSPICKUP
Inventory.MaxAmount 0
States
{
Pickup:
TNT1 A 0 A_JumpIf(CheckClass("Soul1",AAPTR_DEFAULT)==1,2)
TNT1 A 0 A_FadeTo(0.00,0.0120,0)
Stop
TNT1 A 0 A_FadeTo(0.00,(ACS_NamedExecuteWithResult("LostSoulRenderAlpha")>>16)/84,0) //Не работает - альфа не меняется
//TNT1 A 0 A_FadeTo(0.00,0.0090,0) //С этой строкой сдвиг альфы идёт плавно - альфа снижается каждый раз на шаг при получении итема
Stop
}
}
Кастоминвентори "проявитель"
Actor FaderOut : FaderIn
{
States
{
Pickup:
TNT1 A 0 A_JumpIf(CheckClass("Soul1",AAPTR_DEFAULT)==1,2)
TNT1 A 0 A_FadeTo(1.00,0.0120,0)
Stop
TNT1 A 0 A_FadeTo((ACS_NamedExecuteWithResult("LostSoulRenderAlpha")>>16),(ACS_NamedExecuteWithResult("LostSoulRenderAlpha")>>16)/84,0) //Не работает - альфа не меняется
//TNT1 A 0 A_FadeTo(0.75,0.0090,0) //С этой строкой сдвиг альфы идёт плавно - альфа повышается каждый раз на шаг при получении итема
Stop
}
}
Void Weaver Я впихнул отладочный вывод в скрипты и декорейт. По всей видимости, проблема в getcvar: он мне сначала вернул -2^30 (причём тогда скрипт правильно разделил на 65536 ), потом после перезапуска 0. Заменил на getusercvar --- опять ноль.
Кажется, это ограничение было зашито ещё в zdoom. Через zscript его, скорее всего, можно обойти.
Не, зскрипт мне пока рано.
Выходит что гет(юзер)ЦВар багнутые или как? И что за ограничение такое, это получается что цвар не достать кроме как зскриптом?
Doomgay1999 Если ты имеешь в виду "запустить программу и сконвертировать карту", то через командную строку.
Пример команды на zdoom.org.
Void Weaver Они не багнутые. Это сделано специально. Доступ к клиентским цварам приводит к десинхронизации в мультиплеере.
А вообще, по-моему, в zscript-овом коде переменная transsouls не используется (все вхождения только в рендерере), поэтому получить к ней доступ не удастся.
Так ли нужно использовать именно эту переменную?
Anto96WS Тоже про этот вариант подумал, но решил спросить, вдруг кто-то предложит вариант получше. Тем более, что это всё касается только пола с потолком.
Тоже про этот вариант подумал, но решил спросить, вдруг кто-то предложит вариант получше. Тем более, что это всё касается только пола с потолком.
Касаемо чека текстур стен, да и вообще универсального механизма, похоже что зскриптовая LineTrace подходит тебе идеально.
Вот кстати шаблон скрипта по чеку текстур ЕЯПП.
Добавлено спустя 23 часа 46 минут 1 секунду:
Господа, объясните плиз синтаксис записи джампов из анонимных функций. Читал вику но нифига не понял. ((
Когда и где надо ставить return, null, ещё какую-нибудь хрень, для чего нужна A_State?
Вот например есть такой "осторожный" имп:
Скрытый текст:
Actor DImpA : DoomImp
{
+AVOIDMELEE
{
See:
TROO A 0 A_JumpIfCloser(Radius+256,"Avoid")
TROO A 2 A_Chase
TROO A 0 A_JumpIfCloser(Radius+256,"Avoid")
TROO A 2 A_Chase
TROO B 0 A_JumpIfCloser(Radius+256,"Avoid")
TROO B 2 A_Chase
TROO B 0 A_JumpIfCloser(Radius+256,"Avoid")
TROO B 2 A_Chase
TROO C 0 A_JumpIfCloser(Radius+256,"Avoid")
TROO C 2 A_Chase
TROO C 0 A_JumpIfCloser(Radius+256,"Avoid")
TROO C 2 A_Chase
TROO D 0 A_JumpIfCloser(Radius+256,"Avoid")
TROO D 2 A_Chase
TROO D 0 A_JumpIfCloser(Radius+256,"Avoid")
TROO D 2 A_Chase
Loop
Melee:
Missile:
TROO EF 8 A_FaceTarget
TROO G 6 A_TroopAttack
goto See
Avoid:
TROO A 0 A_JumpIf(GetDistance(1)>Radius+272,"Missile")
TROO A 0 A_FaceTarget
TROO A 2 A_Wander(CHF_NODIRECTIONTURN) //A_Chase(0,"Missile",CHF_NODIRECTIONTURN)
TROO A 0 A_JumpIf(GetDistance(1)>Radius+272,"Missile")
TROO A 0 A_FaceTarget
TROO A 2 A_Wander(CHF_NODIRECTIONTURN) //A_Chase(0,"Missile",CHF_NODIRECTIONTURN)
TROO B 0 A_JumpIf(GetDistance(1)>Radius+272,"Missile")
TROO B 0 A_FaceTarget
TROO B 2 A_Wander(CHF_NODIRECTIONTURN) //A_Chase(0,"Missile",CHF_NODIRECTIONTURN)
TROO B 0 A_JumpIf(GetDistance(1)>Radius+272,"Missile")
TROO B 0 A_FaceTarget
TROO B 2 A_Wander(CHF_NODIRECTIONTURN) //A_Chase(0,"Missile",CHF_NODIRECTIONTURN)
TROO C 0 A_JumpIf(GetDistance(1)>Radius+272,"Missile")
TROO C 0 A_FaceTarget
TROO C 2 A_Wander(CHF_NODIRECTIONTURN) //A_Chase(0,"Missile",CHF_NODIRECTIONTURN)
TROO C 0 A_JumpIf(GetDistance(1)>Radius+272,"Missile")
TROO C 0 A_FaceTarget
TROO C 2 A_Wander(CHF_NODIRECTIONTURN) //A_Chase(0,"Missile",CHF_NODIRECTIONTURN)
TROO D 0 A_JumpIf(GetDistance(1)>Radius+272,"Missile")
TROO D 0 A_FaceTarget
TROO D 2 A_Wander(CHF_NODIRECTIONTURN) //A_Chase(0,"Missile",CHF_NODIRECTIONTURN)
TROO D 0 A_JumpIf(GetDistance(1)>Radius+272,"Missile")
TROO D 0 A_FaceTarget
TROO D 2 A_Wander(CHF_NODIRECTIONTURN) //A_Chase(0,"Missile",CHF_NODIRECTIONTURN)
Loop
}
}
так всё работает
но стоит "упаковать" строки в анон ф-цию и джампы не выполняются: