Сайт Doom Power
 ПоискПоиск ВходВход
Маппинг в Doom 3 Пред.  1, 2, 3, 4, 5, 6, 7, 8, 9  След.
   Список разделов - Doom 3 - Маппинг в Doom 3
АвторСообщение
Archi
Lieutenant Colonel
Next rank: Lieutenant Colonel after 23 points
2187

Doom Rate: 1.68
Сообщение Отправлено: 20.06.09 14:35:35

Стоп, это что за файл?!
1 1
c4tnt
= Corporal =
Next rank: - Lance Corporal - after 28 points
182

Doom Rate: 1.92
Сообщение Отправлено: 20.06.09 16:10:01

Нужно открывать файл materials\decals.mtr и искать в нём тот фрагмент, который указал Archi

Файл находится обычно в нулевом паке.
Dragon
= 1st Lieutenant =
Next rank: - 2nd Lieutenant - after 94 points
1346

Doom Rate: 1.49
Сообщение Отправлено: 20.06.09 17:42:37

Как делать двери, лифты и другие подобные вещи?
Bruiser
= Corporal =
Next rank: - Lance Corporal - after 34 points
176

Doom Rate: 2.00
Сообщение Отправлено: 20.06.09 18:06:55

Dragon, вот тебе сюда http://www.d3-mapping.by.ru/
Dragon
= 1st Lieutenant =
Next rank: - 2nd Lieutenant - after 94 points
1346

Doom Rate: 1.49
Сообщение Отправлено: 20.06.09 18:53:19

Bruiser
Спасибо! Очень полезный ресурс. Ещё раз спасибо.
c4tnt
= Corporal =
Next rank: - Lance Corporal - after 28 points
182

Doom Rate: 1.92
Сообщение Отправлено: 20.06.09 21:46:58

Только там ошибки и неточности бывают иногда. Surprised
Bruiser
= Corporal =
Next rank: - Lance Corporal - after 34 points
176

Doom Rate: 2.00
Сообщение Отправлено: 21.06.09 08:22:05

c4tnt, ты вроде говорил что у тебя есть скрипт для рандомного спауна. Плиз, залей его куда-нибудь и скажи в какую директорию его помещать.
c4tnt
= Corporal =
Next rank: - Lance Corporal - after 28 points
182

Doom Rate: 1.92
Сообщение Отправлено: 21.06.09 20:09:10

В общем текст скрипта:

void randomspawn(entity where)
{
string SpawnKey;
string OvKey;
float Overall;
float t;

Overall = where.getFloatKey("_overall");

if (Overall <=0)
{
Overall = 0;
SpawnKey = where.getNextKey( "spawn_", "" );
while (SpawnKey != "")
{
OvKey = "chance"+sys.strSkip(SpawnKey, 5 );
t = where.getFloatKey(OvKey);
if (t==0)
{
Overall++;
}else{
Overall+=t;
}
SpawnKey = where.getNextKey( "spawn_", SpawnKey );
}
where.setKey("_overall",Overall);
}

Overall = sys.random(Overall);

SpawnKey = where.getNextKey( "spawn_", "" );
while (SpawnKey != "")
{
OvKey = "chance"+sys.strSkip(SpawnKey, 5 );
t = where.getFloatKey(OvKey);
if (t==0)
{
Overall--;
}else{
Overall-=t;
}
if (Overall <= 0)
{
OvKey = where.getKey(SpawnKey);

sys.setSpawnArg("origin",where.getWorldOrigin());
sys.setSpawnArg("angle",where.getAngles());

SpawnKey = where.getNextKey( "target", "" );
while (SpawnKey != "")
{
sys.setSpawnArg(SpawnKey,where.getKey(SpawnKey));
sys.print(SpawnKey+":"+where.getKey(SpawnKey)+"\n");
SpawnKey = where.getNextKey( "target", SpawnKey );
}

sys.spawn(OvKey);

sys.print("spawning\n");
sys.waitFrame();
break;
}
SpawnKey = where.getNextKey( "spawn_", SpawnKey );
}

}


Всё запихивается в файл с таким же названием, как у карты и расширением script. Файл должен быть рядом с картой.
Используется так:
на карте нужно создать какой-нибудь неосязаемый объект, например func_static с текстурой nodraw. На тип объекта ограничений нет, можно даже сделать мувер и двигать точку появления монстров по карте. Главное - чтобы он был неосязаемым. Монстры будут появляться в том месте, где находится объект.
В свойствах объекта нужно создать ключи вида
"spawn_1" "monster_demon_imp"
"spawn_2" "monster_demon_trite"
ну и так далее

Если нужно неравномерное появление монстров - можно дополнительно создать такие ключи:
"chance_1" "5"
"chance_2" "10"
Соответственно имп будет появляться 5 раз из 15, а трайт - 10 раз из 15
Если ключ не указан - он считается равным единице.

После этого нужно просто вызвать функцию void randomspawn(entity where) с указанием этого объекта.
Пример вызова:
void testspawn()
{
randomspawn($func_static_1);
}
Соответственно, у меня такой точкой высадки был func_static_1
У созданного монстра будет такой же угол поворота, как у спавнера, и кроме того, монстру передаются все таргеты от спавнера.

Для создания монстра нужно создать триггер на карте и вписать в него ключ "call" "testspawn".

Если нужно создать случайного монстра в одной из случайных точек - код вызова randomspawn будет примерно таким:

void testspawn()
{
float x;
x = sys.random(4);
if (x <= 1)
{
randomspawn($имя_первой_точки);
return;
}
if (x <= 2)
{
randomspawn($имя_второй_точки);
return;
}
if (x <= 3)
{
randomspawn($имя_третьей_точки);
return;
}
randomspawn($имя_четвёртой_точки);
}
В каждой из точек можно указать собственный комплект монстров.
Azamael
= Sergeant =
Next rank: - Master Sergeant - after 59 points
441

Doom Rate: 1.60
Сообщение Отправлено: 22.06.09 15:04:02

Как оптимизировать карту? (вот спомощю нодрав и виспорталов и всего осталного, а то не пойму как оно работает) - этот вопрос для меня очень важен, так как карта выросла (да и детализация значительно больше шести брашей на комнату Smile ), а машина у меня слабая - в результате на настройках по минимуму больше 10-15 фпс нету. (а в боях и того меньше)
Поетому прошу помощи в оптимизации Smile
2
Archi
Lieutenant Colonel
Next rank: Lieutenant Colonel after 23 points
2187

Doom Rate: 1.68
Сообщение Отправлено: 22.06.09 15:26:14

Прочитай внимательно статьи о виспорталах.
http://c4tnt.ucoz.ru/publ/5-1-0-14
Именно благодаря им и оптимизируется карта.
1 1
Bruiser
= Corporal =
Next rank: - Lance Corporal - after 34 points
176

Doom Rate: 2.00
Сообщение Отправлено: 22.06.09 19:04:22

c4tnt, карта не запускается, в консоли написано Error: file maps\test2.script line 65: " is not a name Sad
c4tnt
= Corporal =
Next rank: - Lance Corporal - after 28 points
182

Doom Rate: 1.92
Сообщение Отправлено: 22.06.09 19:32:20

Попробуй взять из файла, может форум что-то меняет.
http://c4tnt.ucoz.ru/testarea/spawne.zip
Bruiser
= Corporal =
Next rank: - Lance Corporal - after 34 points
176

Doom Rate: 2.00
Сообщение Отправлено: 22.06.09 20:20:31

c4tnt, ошибка вроде исчезла, но монстры не спаунятся. Я создал func_static, покрыл текстурой nodraw, в свойствах написал spawn_1 monster_demon_imp, spawn_2 monster_demon_mancubus, spawn_3 monster_demon_hellknight, потом поставил на карту бфг, в свойствах бфг прописал target func_static_1. Может нужно писать после monster пробел или ввести ещё какие-то параметры?
c4tnt
= Corporal =
Next rank: - Lance Corporal - after 28 points
182

Doom Rate: 1.92
Сообщение Отправлено: 22.06.09 20:29:31

Нужно добавить триггер_релэй с параметрами "call" "название_функции". И его триггерить.
И в скрипте должна быть функция вида

void имя_функции()
{
randomspawn($в_какой_точке);
}

Можешь попробовать testspawn из файла. К сожалению обход этой необходимости (то есть просто спавнер, который можно затриггерить) усложняет всё во много раз.

и ещё из финальной версии можно и нужно убрать все строки sys.print
Bruiser
= Corporal =
Next rank: - Lance Corporal - after 34 points
176

Doom Rate: 2.00
Сообщение Отправлено: 23.06.09 06:17:57

c4tnt, спасибо! Все работает! Только можно сделать, чтобы монстры бесконечно появлялись и чтобы они телепортировались?
c4tnt
= Corporal =
Next rank: - Lance Corporal - after 28 points
182

Doom Rate: 1.92
Сообщение Отправлено: 23.06.09 12:48:34

Впиши в спавнер таргет на тот триггер, который запускает процесс (лучше на триггер_релэй), ключ "teleport" "1" и ключ "trig" "1"
Скрипт придётся слегка обновить. ( http://c4tnt.ucoz.ru/testarea/spawne.zip )
Bruiser
= Corporal =
Next rank: - Lance Corporal - after 34 points
176

Doom Rate: 2.00
Сообщение Отправлено: 23.06.09 18:17:08

c4tnt, огромное спасибо! У меня возникло ещё 3 вопроса: 1. Как увеличить время между телепортациями? В триггере релай пробовал wait прописать больше, но ничего не изменилось. 2. В какую папку или может нужно в пак класть звуки, чтобы редактор видел их? 3. Как сделать, чтобы звук играл на весь уровень?
Dragon
= 1st Lieutenant =
Next rank: - 2nd Lieutenant - after 94 points
1346

Doom Rate: 1.49
Сообщение Отправлено: 23.06.09 18:19:25

А что бы новый пда работал надо его в пк4 сунуть?
Archi
Lieutenant Colonel
Next rank: Lieutenant Colonel after 23 points
2187

Doom Rate: 1.68
Сообщение Отправлено: 23.06.09 18:30:57

нет
его надо засунуть в папку newpdas которую надо создать в папке base.
1 1
Dragon
= 1st Lieutenant =
Next rank: - 2nd Lieutenant - after 94 points
1346

Doom Rate: 1.49
Сообщение Отправлено: 23.06.09 18:36:18

Archi
ага. А если этоту карту с пда нужно передать кому то?
c4tnt
= Corporal =
Next rank: - Lance Corporal - after 28 points
182

Doom Rate: 1.92
Сообщение Отправлено: 23.06.09 18:48:28

Bruiser

1. Не wait а delay. wait - минимальное время между срабатываниями триггера, при wait = 1 триггер после срабатывания не реагирует на события примерно секунду. А delay - это задержка срабатывания триггера.
2. Звуки в папку sound, но для того, чтобы звук был в редакторе, нужно написать для него "шейдер" (не знаю, как правильно это назвать). В общем посмотри файлики .sndshd в папке со звуками.
3. Собственно, в шейдер звука вписать:

название звука {
looping - звук зациклен
global - на весь уровень
unclamped - без затухания

sound/... - файл звука
}

По поводу запаковки в пак - если всё лежит в папках в doom3\base\ и работает - нужно просто запаковать всё, относящееся к карте, в архив. Новые папки лучше не создавать - в некоторых версиях дума есть глюк, с такими паками мод может не запуститься.
Archi
Lieutenant Colonel
Next rank: Lieutenant Colonel after 23 points
2187

Doom Rate: 1.68
Сообщение Отправлено: 23.06.09 19:04:03

Dragon
добавь такой ключ.
"pda_name" "beta_map2_lab"
взял из своего проекта. beta_map2_lab - название пда. вот так оно выглядит в файле pda beta_map2_lab {.
1 1
Bruiser
= Corporal =
Next rank: - Lance Corporal - after 34 points
176

Doom Rate: 2.00
Сообщение Отправлено: 23.06.09 19:52:18

c4tnt, для проверки я скачал с сайта файл test.wav(to win the game you must kill me, john Romero). Создал для него "шейдер". В редакторе он видится, но не воспроизводится, в игре тоже.
c4tnt
= Corporal =
Next rank: - Lance Corporal - after 28 points
182

Doom Rate: 1.92
Сообщение Отправлено: 23.06.09 20:07:36

Значит либо файл не подходит, либо в шейдере ошибка - смотри консоль
Archi
Lieutenant Colonel
Next rank: Lieutenant Colonel after 23 points
2187

Doom Rate: 1.68
Сообщение Отправлено: 23.06.09 20:27:15

Bruiser
возможно ошибка находится в ваве. Кстати он их и без шейдеров видит Wink
1 1
Bruiser
= Corporal =
Next rank: - Lance Corporal - after 34 points
176

Doom Rate: 2.00
Сообщение Отправлено: 24.06.09 09:35:16

Archi, я в консоли посмотрел и было написано, что частота не подходит. Сейчас изменил и все нормально Very Happy . У меня вопрос: можно ли сделать, чтобы после определённого действия все монстры на карте подохли? Только чтобы они не просто исчезли, а именно подохли с эффектом исчезания тел.
c4tnt
= Corporal =
Next rank: - Lance Corporal - after 28 points
182

Doom Rate: 1.92
Сообщение Отправлено: 24.06.09 09:44:26

Ну в принципе можно... Surprised
Archi
Lieutenant Colonel
Next rank: Lieutenant Colonel after 23 points
2187

Doom Rate: 1.68
Сообщение Отправлено: 24.06.09 09:54:04

Ставь на карту func_damage и от него таргеты к монстрам. Вот такой код.
def_damage
damage_triggerhurt_1000
1 1
Bruiser
= Corporal =
Next rank: - Lance Corporal - after 34 points
176

Doom Rate: 2.00
Сообщение Отправлено: 24.06.09 11:36:45

Archi :
от него таргеты к монстрам

А если например монстры спаунятся пока кибер жив, а потом как завалишь его все оставшиеся монстры должны сдохнуть Smile , то как в этом случае сделать?
Archi
Lieutenant Colonel
Next rank: Lieutenant Colonel after 23 points
2187

Doom Rate: 1.68
Сообщение Отправлено: 24.06.09 13:22:13

Надо ввести переменную в скрипт, например
if(i = 1){монстры спанятся}
elseif(i = 0){уничтожение скрипта}

А когда кибер умрет поменять переменную на 0. И используя func_damage убить уже спавненных.
1 1
Страница 4 из 9Перейти наверх Пред.  1, 2, 3, 4, 5, 6, 7, 8, 9  След.
   Список разделов - Doom 3 - Маппинг в Doom 3