Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Функция ADDin была встроена в BScriptView для автоматической вставки объектов и скриптов в существующие файлы scene2.bin. В этом случае можно пересылать не весь scene2.bin целиком (который иногда может быть очень большим (из-за расположенных там лайтмэпов - прим. перев.), а файл BSV, который вставляет только изменения, проделанные вами над оригинальным scene2.bin. BSV также может включать в себя дополнительную информацию и данные для изменения существующих файлов и добавления моделей (models), текстур (maps) и таблиц (tables) в специально отведённые для этого папки.
Первая часть этого урока посвящена тому, как внести изменения файла scene2.bin в файл BSV.
Часть первая
Что нам потребуется?
- Вы должны иметь при себе BScriptView и знать то, что в нём есть функция ADDin (кнопочка такая в меню - прим. перев.);
- Уметь работать с шестнадцатеричным редактором и разбираться
в шестнадцатеричной (далее - hex) системе счисления.
Что мы имеем?
У нас есть изменённый scene2.bin и мы хотим вставить свои изменения в оригинальный scene2.bin. Для того, чтобы дать вам точное понимание того, как работает файл BSV, мы пока не будем использовать уже созданный scene2.bin, а создадим новый с использованием BScriptView.
Запустите BScriptView, выберите миссию, например "freeridenoc" и откройте scene2.bin. Для примера мы хотим вставить в миссию нового человека с именем "brainy" и бочку "brainybarrel". Выберите пункт меню "Вставить"->"Человек" ("Insert"->"Human"), наберите имя brainy и нажмите "Вставить" ("Insert"). Выберите пункт меню "Вставить"->"Вещь" ("Insert"->"Thing"), наберите имя brainybarrel и нажмите "Вставить" ("Insert"). Этими нехитрыми манипуляциями мы вставили в scene2.bin человека и бочку. Данный, уже изменённый, файл нам понадобится позже.
Создание файла BSV.
Теперь мы создадим файл BSV, который будет автоматически добавлять человека и бочку из BSV в оригинальный scene2.bin. Файл назовём "brainy.BSV".
Создадим в hex-редакторе новый чистый файл и добавим туда следующее:
1. Название ADDin`a - 20 байт, например Brainy Test (оставшиеся незаполненные символы забиваются пробелами - прим. перев):
42 72 61 69 6e 79 20 54 65 73 74 20 20 20 20 20 20 20 20 20
2. Название папки с миссией - 20 байт, в нашем примере это freeridenoc (правило с пробелами сохраняется - прим. перев.):
66 72 65 65 72 69 64 65 6e 6f 63 20 20 20 20 20 20 20 20 20
3. Метки-заполнители - 234 байта, все 234 байта - нули:
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
4. Тест на изменения scene2.bin - 20 байт - это тестовая строка для проверки, изменён ли уже scene2.bin файлом BSV. Строка должна быть уникальной. Будем использовать brainy, так как этого нет в исходном scene2.bin, но будет в изменённом:
62 72 61 69 6e 79 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5. Теперь мы возьмём данные из изменённого scene2.bin, который мы создали в разделе "Что мы имеем?". Запустите hex-редактор, откройте в нём этот файл и найдите в файле brainy. Вы найдёте две секции. Первая секция описывает модель, вторая (в конце файла) - скрипт. Итак, начнём с первой секции:
Первая секция всегда начинается с 10 40, далее следуют 4 байта 97 00 00 00 (тип long или dword - прим перев.), описывающих количество байт в секции - это необходимо для описания модели. За секцией brainy вы найдёте секцию brainybarrel, начинающуюся также с 10 40, однако имеющую длину 9d 00 00 00.
Позже обе секции будут скопированы в файл BSV, но сначала мы должны добавить в файл BSV общую длину. Мы должны посчитать общую длину из секций brainy и brainybarrel, для этого мы суммируем две длины:
97 00 00 00 + 9d 00 00 00 = 34 01 00 00
Более лёгким путём (кому как - прим. перев.) вычисления общей длины будет являться копирование этих двух секторов в новый чистый файл и выяснения его длины в байтах.
Теперь положим в наш файл brainy.BSV вычисленное нами количество байт:
NbSCBin1 (так мы просто обозначаем эту вставку - прим. перев.) (тип long) (количество всех байт в секции номер один)
34 01 00 00
6. Задайте поиск по brainy снова и вы найдёте вторую секцию.
Вторая секция всегда начинается с 21 AE, далее - длина (также 4 байта) 86 00 00 00. Сразу после этой секцией вы найдёте секцию brainybarrel, также начинающуюся с 21 AE и имеющую длину 48 00 00 00. Снова сложим эти длины:
86 00 00 00 + 48 00 00 00 = CE 00 00 00
или создадим с помощью hex-редактора новый файл, скопируем туда эти две секции и выясним общее количество байт этого файла.
Также вставим высчитанное количество байт в файл brainy.BSV:
NbSCBin2 (тип long) (количество всех байт в секции номер два)
CE 00 00 00
7. Теперь скопируем первые секции данных brainy и brainybarrel в файл brainy.BSV, помните, что первая секция всегда начинается с 10 40. Найдём brainy. Перед секцией brainy вы найдёте секцию brainybarrel, начинающуюся также с 10 40. Выберите обе секции и скопируйте их в наш файл brainy.BSV после NbSCBin2. Это должно выглядеть примерно так:
10 40 97 00 00 00 11 40 0a 00 00 00 09 00 00 00 10 00 0d 00 00 00 62 72 61 69 6e 79 00 20 00 12 00 00 00 21 98 dd c4 00 00 a0 c0 00 00 f0 41 22 00 16 00 00 00 fd 2f 0d 25 00 00 00 00 00 00 80 3f 00 30 8d 24 2d 00 12 00 00 00 00 00 80 3f 00 00 80 3f 00 00 80 3f 2c 00 12 00 00 00 82 ca dd c4 5b 3f b3 c0 bd 59 8a 40 20 40 1b 00 00 00 10 00 15 00 00 00 50 72 69 6d 61 72 79 20 73 65 63 74 6f 72 00 12 20 13 00 00 00 45 6e 65 6d 79 31 32 4b 2e 69 33 64 00
10 40 9d 00 00 00 11 40 0a 00 00 00 09 00 00 00 10 00 13 00 00 00 62 72 61 69 6e 79 62 61 72 72 65 6c 00 20 00 12 00 00 00 2c 5a 8c 42 ea 95 e9 40 44 49 e6 42 22 00 16 00 00 00 22 d5 31 3f 00 00 00 00 a7 26 38 3f 00 30 8d 24 2d 00 12 00 00 00 c8 3b 6c 3e c8 3b 6c 3e c8 3b 6c 3e 2c 00 12 00 00 00 82 ca dd c4 5b 3f b3 c0 bd 59 8a 40 20 40 1b 00 00 00 10 00 15 00 00 00 50 72 69 6d 61 72 79 20 73 65 63 74 6f 72 00 12 20 13 00 00 00 78 62 61 72 65 6c 20 32 2e 69 33 64 00
8. Вставим данные вторых секций в файл brainy.BSV, помните, что вторая секция всегда начинается с 21 AE. Найдём brainy снова. Перед секцией brainy вы найдёте секцию brainybarrel. Выберите обе секции и скопируйте их в brainy.BSV. Это должно выглядеть примерно так:
21 ae 86 00 00 00 23 ae 0d 00 00 00 62 72 61 69 6e 79 00 22 ae 0a 00 00 00 1b 00 00 00 24 ae 69 00 00 00 06 10 00 00 00 11 00 00 00 33 33 33 3f 00 00 c8 42 00 00 a0 41 00 00 a0 41 00 00 a0 41 00 00 a0 41 33 33 33 3f 00 00 80 3f 00 00 00 3f cc cc 4c 3f 00 00 80 3f 00 00 80 3f 00 00 80 3f cb cc 4c 3f 00 00 a0 42 00 00 00 3f 01 01 00 00 00 00 10 00 00 00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f
21 ae 48 00 00 00 23 ae 13 00 00 00 62 72 61 69 6e 79 62 61 72 72 65 6c 00 22 ae 0a 00 00 00 23 00 00 00 24 ae 25 00 00 00 02 01 00 00 80 3f 00 00 80 3f 00 00 a0 42 00 00 00 3f 0a d7 23 3c 03 00 00 00 01 ff ff ff ff
9. Файл BSV заканчивается метками-заполнителями - 24 байта - эти байты понадобятся нам в третьей части данного урока, в первой части они должны быть 00:
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Вот вы и создали свой первый ADDin-файл. Можете испробовать его на оригинальном scene2.bin, используя BScriptView.
Весь файл brainy.BSV должен выглядеть примерно так:
42 72 61 69 6e 79 20 54 65 73 74 20 20 20 20 20 20 20 20 20
66 72 65 65 72 69 64 65 6e 6f 63 20 20 20 20 20 20 20 20 20
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
62 72 61 69 6e 79 20 20 20 20 20 20 20 20 20 20 20 20 20 20
34 01 00 00
ce 00 00 00
10 40 97 00 00 00 11 40 0a 00 00 00 09 00 00 00 10 00 0d 00 00 00 62 72 61 69 6e 79 00 20 00 12 00 00 00 21 98 dd c4 00 00 a0 c0 00 00 f0 41 22 00 16 00 00 00 fd 2f 0d 25 00 00 00 00 00 00 80 3f 00 30 8d 24 2d 00 12 00 00 00 00 00 80 3f 00 00 80 3f 00 00 80 3f 2c 00 12 00 00 00 82 ca dd c4 5b 3f b3 c0 bd 59 8a 40 20 40 1b 00 00 00 10 00 15 00 00 00 50 72 69 6d 61 72 79 20 73 65 63 74 6f 72 00 12 20 13 00 00 00 45 6e 65 6d 79 31 32 4b 2e 69 33 64 00
10 40 9d 00 00 00 11 40 0a 00 00 00 09 00 00 00 10 00 13 00 00 00 62 72 61 69 6e 79 62 61 72 72 65 6c 00 20 00 12 00 00 00 2c 5a 8c 42 ea 95 e9 40 44 49 e6 42 22 00 16 00 00 00 22 d5 31 3f 00 00 00 00 a7 26 38 3f 00 30 8d 24 2d 00 12 00 00 00 c8 3b 6c 3e c8 3b 6c 3e c8 3b 6c 3e 2c 00 12 00 00 00 82 ca dd c4 5b 3f b3 c0 bd 59 8a 40 20 40 1b 00 00 00 10 00 15 00 00 00 50 72 69 6d 61 72 79 20 73 65 63 74 6f 72 00 12 20 13 00 00 00 78 62 61 72 65 6c 20 32 2e 69 33 64 00
21 ae 86 00 00 00 23 ae 0d 00 00 00 62 72 61 69 6e 79 00 22 ae 0a 00 00 00 1b 00 00 00 24 ae 69 00 00 00 06 10 00 00 00 11 00 00 00 33 33 33 3f 00 00 c8 42 00 00 a0 41 00 00 a0 41 00 00 a0 41 00 00 a0 41 33 33 33 3f 00 00 80 3f 00 00 00 3f cc cc 4c 3f 00 00 80 3f 00 00 80 3f 00 00 80 3f cb cc 4c 3f 00 00 a0 42 00 00 00 3f 01 01 00 00 00 00 10 00 00 00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f
21 ae 48 00 00 00 23 ae 13 00 00 00 62 72 61 69 6e 79 62 61 72 72 65 6c 00 22 ae 0a 00 00 00 23 00 00 00 24 ae 25 00 00 00 02 01 00 00 80 3f 00 00 80 3f 00 00 a0 42 00 00 00 3f 0a d7 23 3c 03 00 00 00 01 ff ff ff ff
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00