Изменение cutscene
Yelmi: каждая сцена состоит из трех файлов:
1. bcesa4w.ifp – файл анимаций;
2. bcesa4w.cut – я бы назвал его файлом «ini», то есть файл в котором находится информация о персонажах, текстах и т.п.
3. bcesa4w.dat - ??? Что за параметры я не знаю. Быть может это связано с расположением камеры, актеров и т.д. впрочем для косметического изменения он нам не понадобится.
Анимацию мы трогать не будем, а рассмотрим содержание файла bcesa4w.cut.
info
offset -544.632996 -184.792999 77.403000
end
model
1, csplay, csplay
1, cswoozie, cswoozie
1, SOFYBU, SOFYBU
1, csbcard, csbcard
1, csmoneysing, csmoneysing
1, csbravura, csbravura
1, CsZR350b, CsZR350b
end
text
5300,1450,BCE4w12
7462,1977,BCE4w00
10076,3547,BCE4w01
14229,2620,BCE4w02
18950,2808,BCE4w03
22451,3390,BCE4w04
25852,4526,BCE4w05
30214,1713,BCE4w06
32091,1603,BCE4w07
35127,4555,BCE4w08
40616,1668,BCE4w09
43229,1115,BCE4w10
46824,3484,BCE4w11
end
uncompress
end
motion
range off
quick off
csplay_x:root,1
cswoozie_x:root,1
SOFYBU:Root,1
csbcard:dummybcard,0
csmoneysing:Dummy01,0
csbravura:bravura,0
CsZR350:zr350,0
end
блок:
info
offset -544.632996 -184.792999 77.403000
end
это координаты XYZ сцены.
Блок:
model
1, DFF, TXD
. . . . . . .
end
В этом блоке находится перечень всех моделей сцены (что за число 1 я не знаю)
Блок:
text
5300,1450,BCE4w12
. . . . . . .
end
BCE4w12 - текстовое сопровождение ролика
5300,1450 – не уверен, но похоже это связано с временем показа текста .
Блок:
motion
range off
quick off
csplay_x:root,1
cswoozie_x:root,1
SOFYBU:Root,1
. . . . .
end
здесь описывается применяемая анимация для каждого актера, предмета, авто сцены.
Кстати в сцене можно подгружать персонажи не только из cutscene.img (csplay, csplay), но и из gta3.img (SOFYBU, SOFYBU).
Для редактирования bcesa4w.cut блокнотом пользоваться не советую, поскольку игра отказывается принимать такую редакцию. А так как других редакторов нет, по крайней мере мне они не известны, то приходится прибегнуть к помощи Hex-редактора .
Открываем bcesa4w.cut в Hex-редакторе.
Заменим в блоке model
1, cswoozie, cswoozie на 1, csclaude, csclaude
1, SOFYBU, SOFYBU на 1, BFYPRO, BFYPRO
также в блоке motion
заменим
cswoozie_x:root,1 на csclaude_x:root,1
SOFYBU:Root,1 на BFYPRO:Root,1
Открываем bcesa4w.ifp в Hex-редакторе.
Ищем cswoozie и меняем на csclaude, а так же SOFYBU на BFYPRO.
Есть одно но - количество букв в названиях моделей должно совпадать иначе работать не будет.
Сохраняем оба файла, не стоит их переименовывать, поскольку добавить новую сцену не получится.
Открываем cuts.img находим bcesa4w.ifp и заменяем (не удаляем) его на тот что мы правили. Тоже проделываем и с bcesa4w.cut.
Теперь напишем скрипт для запуска сцены:
004F: create_thread @CUTSCEN
:CUTSCEN
03A4: name_thread 'CUTSCEN'
0001: wait 0 ms
00D6: if
00E1: key_pressed 0 10
004D: jump_if_false @CUTSCEN
054C: use_GXT_table 'BCESAR4'
0395: clear_area 1 at -526.7778 -189.0571 76.9917 range 100.0
03EF: player $PLAYER_CHAR make_safe
03AF: set_streaming 0
02E4: load_cutscene_data 'BCESA4W'
:CUTSCEN_87
00D6: if
86B9: not cutscene_data_loaded
004D: jump_if_false @CUTSCEN_111
0001: wait 0 ms
0002: jump @CUTSCEN_87
:CUTSCEN_111
02E7: start_cutscene
016A: fade 1 1000 ms
:CUTSCEN_120
00D6: if
82E9: not cutscene_reached_end
004D: jump_if_false @CUTSCEN_144
0001: wait 0 ms
0002: jump @CUTSCEN_120
Компилируем и запускаем игру. Нажимаем клавишу "Беседа - нет" и наблюдаем сцену.
Что же касается .dat то число перед каждым блоком равно количествеу записей в этом блоке
38 //38 записей в этом блоке
1) 0.000000f 6.027082 -5.599979 0.796569
. . .
38) 80.000000f 0.805986 -5.666580 1.917611
0.000000f , X , Y, Z, X , Y, Z, X , Y, Z,
X , Y, Z - скорее всего это офсет
X , Y, Z – первая тройка это направление камеры( куда смотрит камера)
При изменении только первых X , Y, Z наблюдал результат этих правок.
0.000000f - время работы камеры ( быть может между ключевыми кадрами)
каждый блок имеет одинаковый перечень показателей времени
12, // блок 1
0.000000f,51.774010,51.774010,51.774010,
. . . . . . . . .
25.666000f,51.774010,51.774010,51.774010,
;
12, // блок 2
0.000000f,0.000000,0.000000,0.000000,
. . . . . . .
25.666000f,0.000000,0.000000,0.000000,
;
13, // блок 3
0.000000f,-0.581568,-4.710864,0.120556,-0.581568,-4.710864,0.120556,-0.581568,-4.710864,0.120556,
. . . . .
25.666000f,4.131416,1.196047,0.440165,4.131416,1.196047,0.440165,4.131416,1.196047,0.440165,
;
13, // блок 3
0.000000f,2.180020,-1.595175,0.742780,2.180020,-1.595175,0.742780,2.180020,-1.595175,0.742780,
В блоках 3 и 4 могут быть небольшие изменения, то есть в блоках 1 и 2 объявлены
1.000000f……………….
2.000000f……………….
то в 3 и 4 блоках между ними могут быть к примеру
1.000000f……………….
1.444000f……………….
1.888000f……………….
2.000000f……………….
для того чтобы увеличить длительность самой сцены нужно в каждом блоке изменить в последней строке время, например:
Было
25.666000f, ……………………….
Меняем на
30.666000f, ……………………….
Ну а если есть желание при этом наблюдать перемещение камеры, то в четвертом блоке добавим одну строку.
Пример:
До
14, // общее количество строк в блоке
0.000000f,2.180020,-1.595175,0.742780,2.180020,-1.595175,0.742780,2.180020,-1.595175,0.742780,
. . . . .
25.666000f,2.735780,-2.429843,2.160247,2.735780,-2.429843,2.160247,2.735780,-2.429843,2.160247,
30.666000f,2.735780,-1.429843,1.160247,2.735780,-1.429843,1.160247,2.735780,-1.429843,1.160247,
;
после
15, //увеличиваем количество строк
0.000000f,2.180020,-1.595175,0.742780,2.180020,-1.595175,0.742780,2.180020,-1.595175,0.742780,
. . . . . .
25.666000f,2.735780,-2.429843,2.160247,2.735780,-2.429843,2.160247,2.735780,-2.429843,2.160247,
26.686000f,2.735780,-1.929843,2.160247,2.735780,-1.929843,2.160247,2.735780,-1.929843,2.160247,
30.666000f,2.735780,-1.429843,1.160247,2.735780,-1.429843,1.160247,2.735780,-1.429843,1.160247,
;
Запускаем и видим плавное перемещение камеры и актеров сцены застывших на последнем движении анимации.