Создание пользовательского телеканала (со звуком)
Нам потребуется:
- S3pe
- VirtualDub
- Stubble
- FNV Generator
- Sound eXchange, Sound eXchange GUI, VP6 Converter
- Блокнот
- Видеоролик в формате .avi
- И немного терпения
Подготовка видео
В теории вы сможете транслировать по своему каналу столько роликов, сколько пожелаете. На практике мне удалось вставить в один канал пока только 2 из желаемых 7-ми. Единственное, что нужно учесть - продолжительность каждого из них не должна превышать 15-20 секунд, иначе видео будет серьезно отставать от звука.
Как уже писала выше, формат - только .avi
Мне показалось, что в эру спутникового Tv странно видеть в игре всего один детский канал, поэтому я создам еще один. Ну, а раз канал детский, то идти по нему будут мультики. На роль видео отлично подошел трейлер к "Вверх".
Шаг 1. Обрезаем видео до 15-ти (20-ти) секунд
Запустите VirtualDub и откройте свой видеоролик: Файл -> Открыть видео файл (File -> Open...).
Потягайте ползунок на серой полосе вправо - влево, и вы заметите, как в окошке ниже изменяется время.
Вырежем нужный фрагмент. Перетащите ползунок на момент, который будет началом ролика. Правка -> Установить начало выделения (Edit -> Set selection Start).
Отсчитайте 15-20 секунд от начала: Правка -> Установить конец выделения (Edit -> Set selection End).
Вы заметите, что область между черными флажками выделена.
Можно проиграть фрагмент, кликнув по первой треугольной кнопке на панели ниже.
Если результат вас устроил, сохраните выделенный кусок: Файл -> Сохранить как AVI (File -> Save as AVI).
Если не устроил, подгоните время более точно маркерами Mark in и Mark out.
Прежде чем двигаться дальше, обязательно просмотрите сохранённый файл, чтобы убедиться, что качество и звук на месте.
Шаг 2. Конвертируем видео-фрагмент.
Чтобы ролик отображался на экране телевизора верно (не куском, не вверх тормашками), изменим его размеры.
Откройте в VirtualDub обрезанный фрагмент. Перейдите в Видео -> Фильтры (Video -> Filters):
Далее: Добавить... (Add...)
В списке отыщите "resize" -> OK:
Отключите соотношение сторон (Aspect Ratio -> Disabled) и в "Новый размер" (New size) пропишите 256х256 -> OK -> OK:
Вы заметите, что размер правого окошка изменился - это окошко превью.
Шаг 3. Сжимаем ролик.
Видео -> Компрессия (Video -> Compression):
Выберите VP60 Simple Profile и нажмите "Изменить" (Configure):
Убедитесь, что в "Mode" значится One Pass - Best Quality -> OK -> OK:
Сохраняем ролик, но не закрываем его: Файл -> Сохранить как AVI (File -> Save as AVI).
Шаг 4. Сохраняем звуковую дорожку.
Чтобы рассинхронизация между видео и звуком была минимальной, уменьшим частоту звука.
Аудио -> Режим полной обработки (Audio -> Full processing mode):
Далее: Аудио -> Конверсия (Audio -> Conversion)
Выборочная частота (Sampling Rate) - 22050 Гц (Hz).
Сохраняем - Файл -> Сохранить WAV... (File -> Save WAV):
Если собираетесь использовать несколько роликов, повторите шаги 2 - 4 для каждого из них.
Подсказка: единожды проделав манипуляции с фильтрами и сжатием для одного ролика, вам останется лишь сохранить остальные - они сохранятся с теми же настройками.
Шаг 5. Из wav в dat.
Запустите GUI.exe, в Input file кнопкой Browse откройте свою звуковую дорожку в формате .wav и кликните Create:
По умолчанию программа поместит файл с расширением .dat в ту же папку, где лежит .wav.
Повторите этот шаг для всех звуковых дорожек (если используете несколько видео-роликов).
Шаг 6. Из avi в vp6.
Запустите Vp6Converter005.exe. В Input video file кнопкой Browse укажите свой ролик, сохранённый в шаге 3.
Поставьте галку в окошке Audio и укажите в Input аudio file звуковую дорожку в формате .dat.
Нажмите GO!
Повторите этот шаг для каждого из ваших роликов.
Первый этап завершен. Видео готово!
Создание телеканала
Шаг 1. Запустите s3pe и откройте GameplayData.package (папка последнего аддона\Game\Bin\Gameplay).
Найдите в списке файл TV с тегом (Tag) _XML:
Извлекаем его: Resource -> Export -> To file:
Шаг 2. И вот, перед вами файл с длиннющим именем и расширением .xml. Откройте его в Блокноте.
Скопируйте выделенный мной кусок и вставьте перед самой первой строчкой .
Сейчас мы рассмотрим этот фрагмент поближе.
Шаг 3. Итак, что все эти строчки значат:
<Channel_Name></Channel_Name> - название канала. Аккуратно впишите между своё название латинскими буквами, без пробелов и прочерков. Я назову свой канал CartoonNetwork:
<Channel_Name>CartoonNetwork</Channel_Name>
<Channel_Level></Channel_Level> - Впишите между >< Level1 - данная строчка отвечает за то, на телевизоре какого уровня будет транслироваться ваш канал. При Level1 ваш канал будет доступен на любом из телевизоров - от самых дешевых до самых дорогих.
<Video_File_Names></Video_File_Names> - сюда следует вписать имена видео-файлов, которые транслируются на данном канале.
Мои ролики называются Up1.vp6 и Up2.vp6, поэтому пишу в эту строчку: Up1, Up2 (.vp6 добавлять не нужно).
<Video_File_Names_BW></Video_File_Names_BW> Данная строка отвечает за чёрно-белое видео. Мы его не создавали, поэтому удаляем эту строчку из своего кода.
<Associated_Traits></Associated_Traits> - данная строчка показывает, симы с какими чертами станут поклонниками данного канала. Пролистайте список с каналами и вы заметите, что поклонниками спортивного канала (SportsStation) являются симы с чертами характера "Athletic", "Daredevil", "PartyAnimal" (Атлет, Сорвиголова, Душа компании), кулинарный канал (SimCooking) смотрят - CouchPotato, NaturalCook (Лежебока, Прирождённый кулинар) - и.т.д. Если желаете, чтобы ваш канал нравился каким-то симам больше, каким-то меньше - внесите в эту строчку название черты (на англ.), если нет - поставьте прочерк ("-").
<Effect_On_Skill></Effect_On_Skill> - даёт навык (название навыка вписать между >< на англ. языке: Cooking, Gardening, Fishing)
<Sync_Event_Name></Sync_Event_Name> - события, связанные с просмотром данного канала. Ставим прочерк.
<Buff_Prereq></Buff_Prereq>
<Target_Buff></Target_Buff>
Вторая строчка показывает мудлет, который получат зрители. Какие именно зрители (обладатели каких черт) - указываем в первой строчке.
К примеру, фильм ужасов дарит зрителям мудлет "напуган" и после просмотра канала его получают "Neurotic", "Coward", "OverEmotional" (Невротик, Трус, Впечатлительный)
<Buff_Prereq>Neurotic, Coward, OverEmotional</Buff_Prereq>
<Target_Buff>Scared</Target_Buff>
Если не хотите привязывать мудлет, ставим по прочерку в каждой из этих строк.
Разбираем далее:
<IsRomanticChannel>0</IsRomanticChannel> - является ли канал романтическим. Если нет - оставьте ноль, если да - исправьте на единицу.
<IsWorkOutChannel>0</IsWorkOutChannel> - является ли канал спортивным (смогут ли симы тренироваться при его просмотре): "0" - нет, "1" - да.
<IsHorrorChannel>1</IsHorrorChannel> - является ли данный канал каналом фильмов ужасов: "0" - нет, "1" - да.
<IsKidsChannel>0</IsKidsChannel> - является ли канал детским: "0" - нет, "1" - да.
<TeachesRecepies>0</TeachesRecepies> - можно ли с помощью данного канала изучать новые рецепты: "0" - нет, "1" - да.
У меня получился следующий код (комментарии добавлены только для урока, в файле их нет):
<TVChannel>
<Channel_Name>CartoonNetwork</Channel_Name> CartoonNetwork - название моего канала
<Channel_Level>Level1</Channel_Level> - хочу, чтобы мой канал был доступен на любом из телевизоров
<Video_File_Names>Up1, Up2</Video_File_Names> Up1, Up2 - названия моих видеороликов
<Associated_Traits>-</Associated_Traits> - хочу, чтобы данный канал нравился всем симам в одинаковой степени
<Effect_On_Skill>Cooking</Effect_On_Skill> - хочу, чтобы во время просмотра прокачивался навык кулинарии
<Sync_Event_Name>-</Sync_Event_Name> - не хочу никаких событий, связанных с просмотром данного канала
<Buff_Prereq>-</Buff_Prereq>
<Target_Buff>-</Target_Buff> - не хочу никаких мудлетов от просмотра
<IsWorkOutChannel>1</IsWorkOutChannel> - за просмотром данного канала можно заниматься тренировкой
<IsKidsChannel>1</IsKidsChannel> - хочу, чтобы этот канал нравился детям
<TeachesRecepies>0</TeachesRecepies> - не хочу, чтобы во время просмотра передач изучались новые рецепты
</TVChannel>
Сохраняем файл под тем же именем: Файл -> Сохранить.
Собираем всё в package
Я не хочу, чтобы мой канал заменил один из стандартных, поэтому нужно сгенерировать для него индивидуальное значение "Instance".
Запускаем FNV-Generator, вписываем в строчку "Input text" название своего видео-ролика и нажимаем "Generate":
Возвращаемся в S3pe и создаём новый package: File -> New. Импортируем свой видеоролик (.vp6): Resource -> Import -> From file.
В выпавшем окошке (Resource Details) заполняем строчки:
- Type - _VID 0xB1CC1AF6
- Group - оставляем, как есть
- Instance - копируем после "0х" то, что получилось в FNV-Generator в строчке FNV64:
Импортируем свой XML: Resource -> Import -> From file. Тем же самым образом заполняем Resource details:
- Type: _XML 0x0333406C
- Group: 0x00000000
- Instance: то, что написано
Когда и канал, и все ролики импортированы, сохраняем package: File -> Save
Внимание: для каждого видео требуется сгенерировать в FNV-Generator своё значение Instance.
Шаг 5. К сожалению, если оставить всё, как есть, игра в меню телевизора превратит ваш канал в нечитаемую кракозяблю. Чтобы этого не произошло, запускаем Stubble.
Обратите внимание на язык (Language). По умолчанию стоит English. Если ваша игра на русском, смените его на Russian.
Слева вы увидите дерево ресурсов.
Нажмите на плюсик рядом с Gameplay:
A затем на плюсик рядом с Excel, и, наконец, на плюсик рядом с TV:
Кликните по TV Channel и перейдите в колонку Key и впишите в последнюю (пустую) строчку название своего канала (то, что прописали в Блокноте). А в соседнюю колонку String впишите то название, которое появится при клике на телевизор.
Кликните на звёздочку рядом с последней строчкой и вы увидите красный плюсик рядом с названием своего канала:
Сохраните файл (File -> Save) со следующими настройками:
Ну, вот и всё. Положите оба файла package в папку Mods\Packages и, если решите распространять свой канал, убедитесь, что запаковали оба файла вместе.
Проверяем в игре.
Ну, что ж, детишки при деле - канал появился и видео проигрывает:
Скачать Cartoon Network можно здесь - 2.9 Mb.
В файле 7 видеофрагментов, мне удалось поймать только 2. Не оставляю надежды, что все 7 заработают.