Должен. Я только что проверил.
Если не нужно -- добавляешь к каждому "XDeath: <оригинальные стейты>", на последнем вместо "-1" -- положительное число. И "Wait" в конце.
Разве должен? Ну значит у меня не будет =D проверил сработало.
По поводу воскрешения обоих видов зомбей. Я тестил на 2й карте а там стояли оригинальные зомби, поскольку ты не прописал в декоре замену старых на новых простых зомбей, дописал в коде реплейс и теперь кАрч оживляет только кЗомби.
Гляжу пока я тестил ты опять что-то собрался в коде менять?
Гляжу пока я тестил ты опять что-то собрался в коде менять?
Да нет, это так, косметические улучшения. Но на всякий случай можно дописать.
SSV_Victoryan:
А это для палитры спрайтов нужно? (в коде увидел)
Нет, просто трансляция (замена) части палитры. Пригождается, если понадобились перекрашенные спрайты, как здесь, например -- нужно же как-то "кошмарных" от обыкновенных отличать?
Единственное, где не перекрашивает -- на спрайтах оружия от первого лица.
Нет, просто трансляция (замена) части палитры. Пригождается, если нужны перекрашенные спрайты тех же монстров, как здесь, например -- нужно же как-то "кошмарных" от обыкновенных отличать?
Прописал бы эти две строки в монстрах и всё:
renderstyle subtract
Alpha 0.7
Эта штука перекрашивает спрайты монстра под стиль кошмарного спектра из соневского дума, но на мой взгляд немного кривовато. Лучше всего спрайты в ручную обработать в граф редакторе и загрузить в вад.
Если изменишь код то пиши, на данный момент для теста я немного поменял твой, но как ты сказал в "косметических целях":
Скрытый текст:
Actor HOTDZombie : Zombieman replaces Zombieman //6553
{ States
{
Death:
POSS H 5
POSS I 5 A_Scream
POSS J 0 A_DropItem( "Clip" )
POSS J 0 A_UnsetShootable
POSS J 5 A_UnsetSolid
POSS K 5
Death.Wait:
POSS L 1
POSS L 0 A_CheckProximity( "Death.HelpMe", "Archvile", 64 )
Loop
Death.HelpMe:
POSS L 1 CanRaise A_CheckProximity( "Death.Wait", "NmArchvile", 64 )
POSS L 0 CanRaise A_CheckProximity( "Death.HelpMe", "Archvile", 64 )
Goto Death.Wait
XDeath:
POSS M 5
POSS N 5 A_XScream
POSS O 5 A_NoBlocking
POSS PQRST 5
POSS U -1
Wait
}
}
Actor NmZombie : Zombieman 6554
{ renderstyle subtract
Alpha 0.7
States
{
Death:
POSS H 5
POSS I 5 A_Scream
POSS J 0 A_DropItem( "Clip" )
POSS J 0 A_UnsetShootable
POSS J 5 A_UnsetSolid
POSS K 5
Death.Wait:
POSS L 1
POSS L 0 A_CheckProximity( "Death.HelpMe", "NmArchvile", 64 )
Loop
Death.HelpMe:
POSS L 1 CanRaise A_CheckProximity( "Death.Wait", "Archvile", 64 )
POSS L 0 CanRaise A_CheckProximity( "Death.HelpMe", "NmArchvile", 64 )
Goto Death.Wait
XDeath:
POSS M 5
POSS N 5 A_XScream
POSS O 5 A_NoBlocking
POSS PQRST 5
POSS U -1
Wait
}
}
Здесь ошибка вылезать будет -- арч смотрит на "-1" и думает, что монстра можно воскресить. Там любое положительное число нужно -- хоть 643012, чтобы арчвайл считал данный стейт невоскрешаемым.
SSV_Victoryan:
там где 64 это дальность воскрешения?
Примерная дальность воскрешения, на глаз прикинул, если честно.
32 или 128, ясно, отпадают, то есть 64 -- самое подходящее из степеней двойки.
Здесь ошибка вылезать будет -- арч смотрит на "-1" и думает, что монстра можно воскресить. Там любое положительное число нужно -- хоть 643012, чтобы арчвайл считал данный стейт невоскрешаемым.
Кстати я и не заметил что не доглядел твой вариант:
XDeath:
POSS M 5
POSS N 5 A_XScream
POSS O 5 A_NoBlocking
POSS PQRST 5
POSS U 900
Wait
Тем не менее тест пройдён, арч не воскресил разорванного и гоза фигу не показала. Тогда не знаю но переправлю на 900.
Однако все jump'ы делаются непосредственно после того, как они будут выполнены.
Здесь не понял. Ты имеешь в виду, что сначала пройдет 1 тик с CanRaise а потом сделается джамп?
JSO x:
Нет, просто трансляция (замена) части палитры. Пригождается, если понадобились перекрашенные спрайты, как здесь, например -- нужно же как-то "кошмарных" от обыкновенных отличать?
Единственное, где не перекрашивает -- на спрайтах оружия от первого лица.
мне кажется RenderStyle Stencil / StencilColor Black проще сделать для таких тестов (ну или какой-нибудь другой рендерстайл)
JSO x:
32 или 128, ясно, отпадают, то есть 64 -- самое подходящее из степеней двойки.
а почему дальность воскрешения арча обязательно должна быть степенью двойки?
Serious_MOod У тебя не хватает ещё двух линий в секторе, который должен быть сверху. В твоём случае можно просто скопировать линии из первого сектора во второй. Главное, расположить их относительно линий верхнего сектора также как они расположены в нижнем. Всё, что нужно сделать дальше, это поменять у линий в верхнем секторе значение параметра Misc на противоположное (с 1 на 0 и наоборот).
Здесь не понял. Ты имеешь в виду, что сначала пройдет 1 тик с CanRaise а потом сделается джамп?
Нет. Сначала проверится jump, если да, то перейдёт по указателю, если нет, то проиграется анимация по количеству тиков.
══════════════════
theleo_ua:
мне кажется RenderStyle Stencil / StencilColor Black проще сделать для таких тестов (ну или какой-нибудь другой рендерстайл)
JSO x:
Спасибо, не знал.
══════════════════
theleo_ua:
а почему дальность воскрешения арча обязательно должна быть степенью двойки?
Любят программисты "квадратные" числа -- степени двойки. По себе знаю.
Из этого вывод, что арч воскрешает либо на 32, либо на 64, либо на 128. На правду похож лишь 64.
Но это моё мнение, я не изучал этот вопрос. Могу ошибаться.
а почему дальность воскрешения арча обязательно должна быть степенью двойки?
JSO x:
Любят программисты "квадратные" числа -- степени двойки. По себе знаю.
Не только в этом дело.
32, 64 (или любая степень двойки) легко представимы как правильная доля от 256, а вот 100 - нет. ))
Именно поэтому мы и любим такие числа.
Проблема по поводу отражения спрайта трупа у монстров, после того как их убили, и за тем воскресили.
(это нужно чтобы гора трупов одного и того же монстра не смотрелась уж сильно одинаково)
Декорейт(вырезка одного из монстров):
Скрытый текст:
Actor HOTDZombieMan : ZombieMan Replaces ZombieMan
{ DropItem "DropPistol" 256
States
{ Death:
POSS H 5 A_SetScale(ScaleX * RandomPick(-1.0, 1.0), ScaleY)
POSS I 5 A_Scream
POSS J 0 A_UnsetShootable
POSS J 5 A_UnsetSolid
POSS K 5
Death.Wait:
POSS L 1
POSS L 0 A_CheckProximity( "Death.HelpMe", "HOTDArchvile", 64 )
Loop
XDeath:
POSS M 5
POSS N 5 A_XScream
POSS O 5 A_NoBlocking
POSS PQRST 5
POSS U 900
Wait
Raise:
POSS KJIH 5
goto See
Crush:
POL5 A -1 A_PlaySound ("Misc/Gibbed")
stop
}
}
Строка "POSS H 5 A_SetScale(ScaleX * RandomPick(-1.0, 1.0), ScaleY)" отвечает за случайное отражение спрайта(по горизонтали).
С монстрами у которых нет стейта воскрешения всё нормально, но с этим стейтом после воскрешения иногда монстры начинают ходить лунной походкой из-за сработавшего отражателя в Death стейте(выглядит забавно-стрёмно))).
Вопрос. Можно ли как то в стейте Raise прописать обнуление/отмену или как то так, отражения спрайта(если отражение сработало), если монстр воскрешён?
Эээ, погоди ка. Если перевести на бытовой язык то это строка означает буквально следующее: пренудительное отражение спрайта в стартовое положение?
Если я прав, то я балбес, что не догадался сам.
Посмотрел на дум вики и там написано A_SetScale (float scaleX [, float scaleY [, int pointer [, bool usezero ]]])
а другие параметры в строке разве не нужно указывать? ScaleY например.
SSV_Victoryan В квадратных скобочках обычно указывают необязательные параметры. К примеру, в этой функции первый параметр обязателен, а остальные --- нет.
A_SetScale(1.0) означает "принудительно сменить растяжение по x-координате спрайта на стандартное". Если нужно ещё и по y, то A_SetScale(1.0, 1.0).
Не совсем так. В данном случае, если указан только первый параметр, или "scaleY" = "0", то растяжение идёт на обе оси, не только на X; иначе, если оба атрибута указаны, используется именно они.
Как вариант -- можно принудительно задать использование растяжения "0" на "scaleY" через последний параметр "useZero".
Как заставить двигаться объект по стрелке с неизменяемой скоростью(без торможения и ускорения) постоянно до креста на скрине?
Писал: ThrustThing(192, 128, 0, 55); из этого понял только угол, ускорение(мне нужна постоянная скорость), третий параметр вообще не понял, ну и тег.
Пробовал сначала Thing_Move но это оказался по своей сути персональный телепорт.
script "test" enter
{
int obj_TID = 6; //объект который надо двигать ему даем таг 6
int Point_TID = 7; //Точка куда надо дойти, ей даем таг 7
while (distance(obj_TID, POINT_TID) > 32) //Проверяем дистанцию от объекта до точки, если объект около точки.
{
SetActorVelocity (obj_TID, 10.0, GetActorY(obj_TID), GetActorZ(obj_TID), FALSE, FALSE);//Объект двигается со скоростью 10.0 по X+ координате. Если надо в обратную, то над -10.0.. Если надо по Y, пишем вместо GetActorY, скорость..
//Объект будет двигаться куда напишешь, но только в 1 сторону постоянно +) т.е. от старта до финиша.
Delay(1);
}
}
function int distance (int tid1, int tid2)
{
int x, y, d;
x = GetActorX(tid1) - GetActorX(tid2) >> 16;
y = GetActorY(tid1) - GetActorY(tid2) >> 16;
d = sqrt( x*x + y*y );
return d;
}
Еще можно так вот сделать
Script "Test2" ENTER
{
int obj_TID = 6; //объект который надо двигать ему даем таг 6
int Point_TID = 7; //Точка куда надо дойти, ей даем таг 7
function int distance (int tid1, int tid2)
{
int x, y, d;
x = GetActorX(tid1) - GetActorX(tid2) >> 16;
y = GetActorY(tid1) - GetActorY(tid2) >> 16;
d = sqrt( x*x + y*y );
return d;
}
Последний скрипт будет тащить объект пока тот не дойдет до точки.
Когда я делал летающего робота-игрока, я юзал такую конструкцию:
Скрытый текст:
Я с мобилки, поэтому опишу суть
while (true)
{
ThrustThing
Delay (1)
Thing_Stop
}
Оно выглядит сломано (потому что после остановки дилея нет. А еще потому что вроде в другом порядке это не работает), но так это в принципе вроде работает
SSV_Victoryan Первый параметр - угол, который можно понять по данной таблице
Второй параметр - количество юнитов, которое проходит предмет за один тик, одна секунда - 35 тиков.
Третий, собственно выставляется 1, если второй параметр больше 30, ну а последний уже идентификатор того предмета.
И в твоём случае можно просто рассчитать, сколько тиков нужно и ввести их через delay() и какую скорость указать, чтобы предмет пролетел нужное расстояние, и тогда его остановить через Thing_Stop.