СheckInventory (blablabla); от return CheckInventory (blablabla);
alekv :
Где его заюзать? О_О
В классе BOX. Тогда его можно толкать.
Есть еще функция PushFactor (дефолтное значение 0.25) определяет скорость движения актора при толчке.
alekv :
И вопрос, кто разбирается в Hub уровнях, как они устроены кому не сложно написать в кратце(Wiki читал, но как-то не допонимаю..)? Еще интересует.. есть большая карта, она очень тормозит, если ее разбить на части и объединить в HUB lvl это поможет справится с тормозами или хоть как-то увеличить FPS?
Cluster 1
{
hub
}
Используется, чтобы шляться по уровням а-ля Хексен, тоесть появился на МАП01, прошел на МАП02 нажал какой-нибудь свитч и тебе пишут, что типа вернитесь на МАП01 открылся выход на МАП03. Ты возвращаешься на МАП03, у тебя с собой остаются предметы/ключи (у предметов есть различные флаги и проперти, чтобы например нельзя было проносить летательный повер-ап, или больше 2 аптечек).
При перемещении в Cluster 2 у тебя изымаются все ключи, даже если он тоже явл. Hub. При возвращении на карту все остается таким, как было раньше - скрипты, монстры, двери. Разве что может быть Декали пропадают, я не обращал внимания.
Используется, чтобы шляться по уровням а-ля Хексен, тоесть появился на МАП01, прошел на МАП02 нажал какой-нибудь свитч и тебе пишут, что типа вернитесь на МАП01 открылся выход на МАП03. Ты возвращаешься на МАП03, у тебя с собой остаются предметы/ключи (у предметов есть различные флаги и проперти, чтобы например нельзя было проносить летательный повер-ап, или больше 2 аптечек).
При перемещении в Cluster 2 у тебя изымаются все ключи, даже если он тоже явл. Hub. При возвращении на карту все остается таким, как было раньше - скрипты, монстры, двери. Разве что может быть Декали пропадают, я не обращал внимания.
Спасибо, ну это я и так знал, боюсь не смогу объяснить чего хочу узнать про hub =(
MasterMind :
В классе BOX. Тогда его можно толкать.
Есть еще функция PushFactor (дефолтное значение 0.25) определяет скорость движения актора при толчке.
Тот вопрос уже не актуален и флаг Pushable там и так прописан и интересовало меня не как его сделать "толкаемым"
СheckInventory (blablabla); от return CheckInventory (blablabla);
Если что, return используется в функциях, чтобы завершить ее работу и вернуть значение, указанное после return. Там может быть чо угодно, хоть переменная, хоть любое число, хоть результат работы функции и т.д.
// Lost soul teleport.
script 300 (void)
{
int x = GetActorX(0);
int y = GetActorY(0);
int z = GetActorZ(0);
int a = GetActorAngle(0);
int p = GetActorPitch(0);
int dx = FixedMul(cos(p), cos(a));
int dy = FixedMul(cos(p), sin(a));
int dz = -sin(p);
do
{
x += dx;
y += dy;
z += dz;
} while (SetActorPosition(0, x, y, z, false));
x -= dx;
y -= dy;
z -= dz;
SetActorPosition(0, x, y, z, true);
}
Как-то не совсем понятно, как он работает (мне интересно, как здесь просчитывается, что телепорт должен завершится в стене/акторе/потолке). Особенно интересует именно эта часть:
Скрытый текст:
do
{
x += dx;
y += dy;
z += dz;
} while (SetActorPosition(0, x, y, z, false));
x -= dx;
y -= dy;
z -= dz;
SetActorPosition(0, x, y, z, true);
Никогда прежде с таким не сталкивался
Добавлено спустя 57 секунд:
alekv :
там и так прописан и интересовало меня не как его сделать "толкаемым"
А что тогда интересовало?
alekv :
Спасибо, ну это я и так знал, боюсь не смогу объяснить чего хочу узнать про hub
int x = GetActorX(0);
int y = GetActorY(0);
int z = GetActorZ(0);
Сохраняем текущие координаты актора в переменнные.
int a = GetActorAngle(0);
int p = GetActorPitch(0);
int dx = FixedMul(cos(p), cos(a));
int dy = FixedMul(cos(p), sin(a));
int dz = -sin(p);
Берём горизонтальный и вертикальный углы актора и по ним находим вектор направления взгляда. У этого вектора длина 1.
do
{
x += dx;
y += dy;
z += dz;
} while (SetActorPosition(0, x, y, z, false));
Сначала прибавляем вектор направления к координатам актора, потом пытаемся передвинуть его туда, и так много раз. Цикл заканчивается тогда, когда передвинуть актор дальше уже нельзя. Поскольку у вектора маленькая длина (1 мапюнит), а актор большой (32 мапюнита в диаметре), то он не может пролететь препятствия насквозь.
x -= dx;
y -= dy;
z -= dz;
SetActorPosition(0, x, y, z, true);
Сдвигаем актор назад на один шаг, но теперь при перемещении спауним эффект телепорта, как и cказано в последнем параметре SetActorPosition.
Вопрос, ответить на который шарящим людям думаю не составит труда:
Код bloodsplash'a
States
{
Spawn:
BSPH ABC 8
BSPH D 16
Stop
Death:
BSPH D 10
Stop
}
}
Я не нахожу в ваде спрайт BSPH, откуда же он берется?
Предполагаю, что оттуда же, откуда берется и спрайт крови на стенах от попадания по монстру. Непонятно что это, пробовал изменять спрайты Blood, BloodSplash, BloodSplashBase, BloodSplatter - все безрезультатно.
Музыка в вадах запакована в формате .lmp . Как изменить расширение файла с .lmp на .mp3 так, чтобы музыка еще и играла, а не только немой плеер показывался?
Вопрос про хомы. Сделал несколько уровней для Doom 2, протестировал их на ZDoom - всё нормально. Выложил, и мне пишут, что на первом уровне хомы. Вот скриншоты от BeeWen:
А вот те же самые места уровня в моей игре на ZDoom. Вроде бы никаких глюков. На PrBoom и PrBoom plus пробовал, тоже глюков не увидел.
Так откуда же взялись хомы? Вот, собственно, сам вад (первый уровень, map01, залит на Яндекс.диск):
https://yadi.sk/d/-K2ay7jyer5rv
А миди уже понимабелен многими плеерами/редакторами, и может быть сохранен в мп3 либо напрямую либо можно сохранить через перехват звуков из звуковухи, когда проигрываешь (но сохранение в mp3 не обязательно, если твоя цель только слушать). Кроме того, slumped и slade умеют проигрывать mus-ы прямо из вада
Кстати, метод "перехват звуков из звуковухи, когда проигрываешь" работает даже на mus, просто пускаешь трек в игре через dosbox например, и параллельно пишешь звуки из звуковухи в WAV/MP3 файл звуковым редактором (или прямо через dosbox делаешь запись звука, кнопка CTRL-F6). Я таким образом писал звуковые паки для еретика и хексена: http://theleo-ua.livejournal.com/ (чем такой метод хорош, так это тем, что делает оригинальное soundblaster220 звучание, которое "было в 1995 году на саундбластерах", потому как если сохранять в миди другими способами и потом играть плеером, то звук может быть адски искажен (каким образом он может быть искажен, можешь посмотреть в семплах (good sample и bad sample) здесь: http://theleo-ua.livejournal.com/ ) )
Скачал с Doomworld'а вад Slaughterfest 2012.
На 24 мапе музыка понравилась. Залез через XWE в вад и вытащил музон. Файл с расширением .lmp. Можешь тоже скачать и поробовать преоброзовать его в mp3. Моей благодарности не будет границ.
И лучше в ЛС.
Последняя версия ПроБума видимо не дружит с незакрытыми секторами. И текстурами на всех сторонах линий. Проверь, например, в первой карте сектор 22-46, основная линия не может иметь две стороны.
Сначала прибавляем вектор направления к координатам актора, потом пытаемся передвинуть его туда, и так много раз.
В таком исполнении скрипт не очень безопасен кстати. Он может честно быть убит защитой от зацикливания, которая в гоззе срабатывает через хзсколько шагов виртуальной машины.
Я всегда копировал из GZDoom.pk3 в свой вад нужные мне элементы, будь то спрайты или код, и уже в своем архиве это изменял, только названия не трогай.
В декорейте можно сам сплеш через Replaces заменить.
Ну или так:
Actor MySplash : bloodsplash'a
{
Тогда в кавычках можно прописать свою графику сплеша с названием которое тебе нравится.
}
Я не проверял, но должно работать.
Korshun
У меня тут вопрос проявился, навеялся твоим кодом, раньше никогда не задумывался о таком
У монстра тоже есть вектор(угол обзора) который изменяется с помощью A_FaceTarget?
И если при выполнении A_Look монстр смотрит на игрока даже если он выше монстра или в какую-то другую точку?
И кто знает как в 2д играх (тот же марио и подобные) реализовано убивание монстров? Прыгает игрок на голову монстру, тот умирает, как это в коде происходит кому не сложно написать?
Я в гоззе нашел уже 4 разных способа реализации такого убийства, но блин все равно не так хорошо работают как в 2д -_-
Сначала прибавляем вектор направления к координатам актора, потом пытаемся передвинуть его туда, и так много раз. Цикл заканчивается тогда, когда передвинуть актор дальше уже нельзя. Поскольку у вектора маленькая длина (1 мапюнит), а актор большой (32 мапюнита в диаметре), то он не может пролететь препятствия насквозь.
Код фигня, кстати. По очень простой причине — в здуме есть такой раздражающий лимит, как количество байткода, выполняемого за один кадр. Чтобы это обойти, можно например написать ещё один скрипт, который будет заниматься движением моба, и который будет сам себя ACS_ExecuteAlways (не restart) через каждые 128 итераций, примерно, и так пока не закончится движение.
В общем, если этого не сделать, то при определённом расстоянии до лостсоула скрипт абсолютно внезапно скажет Runaway Script Terminated, а лостсоул окажется хрен знает где между оригинальной поцизией и игроком.