Хакинг:Sonic Generations/SonicGLVL — различия между версиями
Red TF (обсуждение | вклад) м |
м (Замена текста — «начнет» на «начнёт») |
||
(не показано 14 промежуточных версий 5 участников) | |||
Строка 1: | Строка 1: | ||
− | После создания и запаковки уровня у | + | После создания и запаковки уровня, у вас может появиться вопрос, что же дальше? Как мне поставить пружины или ускорители? Как вставить камеры? Здесь можно узнать ответы на все эти вопросы. |
+ | |||
==Быстрый гайд== | ==Быстрый гайд== | ||
− | Многие затрудняются с камерой в | + | Многие затрудняются с камерой в SonicGLVLЮ т.к. она не похожа на ту, что есть в 3ds Max'е. Чтобы крутить камеру, зажмите колесико мышки, чтобы крутить влево/вправо/вверх/вниз – alt + колесико мышки. Чтобы приближать – ctrl + колесико мышки. |
+ | |||
==Объекты== | ==Объекты== | ||
− | Начнем с | + | Начнем с объектов в SonicGLVL. В основном, все нужные нам объекты находятся в Common. Там есть все нужное для нормального геймплея – кольца, кольца и панели для ускорения и т.д. |
− | Стоит отметить, что каждый объект нуждается в тщательной калибровке, невозможно с первого раза поставить пружину так, чтобы попасть туда, куда вам нужно. Поэтому приготовьте много валерьянки, ибо бегать между программой и игрой | + | Стоит отметить, что каждый объект нуждается в тщательной калибровке, невозможно с первого раза поставить пружину так, чтобы попасть туда, куда вам нужно. Поэтому приготовьте много валерьянки, ибо бегать между программой и игрой вам придется очень много. |
===Основные параметры=== | ===Основные параметры=== | ||
+ | |||
====IsCastShadow==== | ====IsCastShadow==== | ||
− | *Если true то | + | *Если true, то объект будет отбрасывать тень. Если false - то не будет. Стоит отметить, что некоторые объекты не могут отбрасывать тень. |
+ | |||
====Range==== | ====Range==== | ||
− | *Это свойство устанавливает расстояние отрисовки объекта. Если диапазон очень низкий, то скорее всего его не будет видно издали. Если же он наоборот высок, то его можно будет видеть за километр. | + | *Это свойство устанавливает расстояние отрисовки объекта. Если диапазон очень низкий, то скорее всего, его не будет видно издали. Если же он наоборот высок, то его можно будет видеть за километр. |
− | **Иногда приходится устанавливать очень большие значения в случае камер и изменений камер; это не только расстояние отрисовки, но и расстояние, на котором объект существует. Если объект попытается взаимодействовать с другими объектами, которые не загружены / не находятся в одной области с ним, то игра скорее всего вылетит. | + | |
+ | **Иногда приходится устанавливать очень большие значения в случае камер и изменений камер; это не только расстояние отрисовки, но и расстояние, на котором объект существует. Если объект попытается взаимодействовать с другими объектами, которые не загружены/не находятся в одной области с ним, то игра, скорее всего, вылетит. | ||
+ | |||
====SetObjectID==== | ====SetObjectID==== | ||
*Параметр ID объекта, не трогайте этот параметр без надобности. | *Параметр ID объекта, не трогайте этот параметр без надобности. | ||
+ | |||
====OutOfControl==== | ====OutOfControl==== | ||
− | *Этот параметр дает понять, как долго эффект объекта будет действовать на | + | *Этот параметр дает понять, как долго эффект объекта будет действовать на Соника. К примеру, если в JumpBoard этот коэффициент большой, то вы не сможете некоторое время управлять Соником после взаимодействия. |
+ | |||
====IsTo3D==== | ====IsTo3D==== | ||
− | *Если true то Соник вернется в 3D, если он в 2D разделе. Если false, | + | *Если true, то Соник вернется в 3D, если он в 2D разделе. Если false, Соник не будет переключаться обратно в 3D. |
Вот немного особенностей некоторых объектов: | Вот немного особенностей некоторых объектов: | ||
---- | ---- | ||
=====Ring===== | =====Ring===== | ||
*IsLightSpeedDashTarget | *IsLightSpeedDashTarget | ||
− | **Если поставить true то | + | **Если поставить true, то по этому кольцу можно будет пройти с [[Light Speed Dash]], если false, то останется обычным. |
---- | ---- | ||
=====GoalSignboard/GoalRing===== | =====GoalSignboard/GoalRing===== | ||
Строка 30: | Строка 38: | ||
=====ClassicItemBox===== | =====ClassicItemBox===== | ||
*IsRevive | *IsRevive | ||
− | **Если поставить true то объект будет восстанавливаться после того, как вы его использовали. Если false то его можно будет использовать только один раз. | + | **Если поставить true, то объект будет восстанавливаться после того, как вы его использовали. Если false, то его можно будет использовать только один раз. |
*ItemType | *ItemType | ||
**1 = 10 Колец | **1 = 10 Колец | ||
Строка 42: | Строка 50: | ||
**9 = Bubble Shield | **9 = Bubble Shield | ||
**10 = Thunder Shield | **10 = Thunder Shield | ||
− | Помните: ItemType 0 не существует, | + | Помните: ItemType 0 не существует, поэтому во избежание вылета игры, использовать его не нужно.<br> |
---- | ---- | ||
=====Springs===== | =====Springs===== | ||
Строка 48: | Строка 56: | ||
**Скорость с которой пружина толкает Соника. | **Скорость с которой пружина толкает Соника. | ||
*KeepVelocityDistance | *KeepVelocityDistance | ||
− | **Этот параметр задает, как долго Соник будет сохранять импульс до того, как на него | + | **Этот параметр задает, как долго Соник будет сохранять импульс до того, как на него начнёт действовать гравитация. |
*MotionType (Modern) | *MotionType (Modern) | ||
**0 = Обычная анимация. | **0 = Обычная анимация. | ||
Строка 61: | Строка 69: | ||
=====AdlibTrickJump===== | =====AdlibTrickJump===== | ||
*SizeType | *SizeType | ||
− | **Если 1 то это нормальный размер. Если 0, то панель будет меньше чем 1. | + | **Если 1 - то это нормальный размер. Если 0, то панель будет меньше, чем 1. |
---- | ---- | ||
=====ObjectPhysics===== | =====ObjectPhysics===== | ||
Строка 236: | Строка 244: | ||
**0 = Если активировать, то уже не выключится. | **0 = Если активировать, то уже не выключится. | ||
**1 = Если сойти с него, то он выключится. | **1 = Если сойти с него, то он выключится. | ||
− | **2 = Если один раз активировать то он деактивируется только через время заданное в "OffTimer". | + | **2 = Если один раз активировать, то он деактивируется только через время, заданное в "OffTimer". |
---- | ---- | ||
=====General Floor===== | =====General Floor===== | ||
− | *Модель каждой панели зависит от уровня в котором вы его ставите. | + | *Модель каждой панели зависит от уровня, в котором вы его ставите. |
*Amplitude | *Amplitude | ||
**Устанавливает, насколько платформа перемещается, если движение разрешено. | **Устанавливает, насколько платформа перемещается, если движение разрешено. | ||
Строка 246: | Строка 254: | ||
*MoveType | *MoveType | ||
**0 = Без движения | **0 = Без движения | ||
− | **1 = Движение вверх и вниз | + | **1 = Движение вверх и вниз |
− | **2 = Движение влево и вправо | + | **2 = Движение влево и вправо |
*FloorSize | *FloorSize | ||
− | **Нормальный размер где-то 0-3. Чем больше значение тем больше платформа будет. | + | **Нормальный размер где-то в районе 0-3. Чем больше значение, тем больше платформа будет. |
− | * | + | *FloorType |
**0 = Обычная платформа | **0 = Обычная платформа | ||
**1 = Падающая платформа | **1 = Падающая платформа | ||
**2 = Блок | **2 = Блок | ||
---- | ---- | ||
+ | |||
=====SetRigidBody===== | =====SetRigidBody===== | ||
Этот объект создает невидимую стену (или пол). | Этот объект создает невидимую стену (или пол). | ||
Строка 266: | Строка 275: | ||
=====Cannon===== | =====Cannon===== | ||
*BaseVel | *BaseVel | ||
− | **Задает высоту выстрела пушки. Если она | + | **Задает высоту выстрела пушки. Если она слишком большая, то Соник может вылетать за уровень и не попасть в точку назначения. Но если значение маленькое, то Соник не достигнет своей цели и упадет раньше. |
*DstPos | *DstPos | ||
**Позиция, где Соник приземлится. | **Позиция, где Соник приземлится. | ||
Строка 272: | Строка 281: | ||
==Коллизии== | ==Коллизии== | ||
− | Что такое коллизия | + | Что такое коллизия, вы знаете из создания уровня, там это была простая твердость. Тут у нас в руках есть куча разных включателей коллизии, от повышения гравитации до ускорения соника. |
− | Вот небольшой список того, что | + | Вот небольшой список того, что на данный момент известно: |
===Основные параметры коллизий=== | ===Основные параметры коллизий=== | ||
Строка 290: | Строка 299: | ||
*Дает импульс Сонику. | *Дает импульс Сонику. | ||
=====ImpulseSpeedOnBoost===== | =====ImpulseSpeedOnBoost===== | ||
− | *Задает силу импульса, который даст коллизия когда Соник использует буст. | + | *Задает силу импульса, который даст коллизия, когда Соник использует буст. |
=====ImpulseSpeedOnNormal===== | =====ImpulseSpeedOnNormal===== | ||
− | *Задает силу импульса, который даст коллизия когда Соник бежит без буста. | + | *Задает силу импульса, который даст коллизия, когда Соник бежит без буста. |
=====Pitch===== | =====Pitch===== | ||
*Это параметр, который задает угол запуска Соника. | *Это параметр, который задает угол запуска Соника. | ||
Строка 299: | Строка 308: | ||
---- | ---- | ||
====FallDeadCollision==== | ====FallDeadCollision==== | ||
− | *Когда Соник проходит | + | *Когда Соник проходит через эту коллизию, он умирает. |
---- | ---- | ||
====SlidingCollision==== | ====SlidingCollision==== | ||
*Коллизия заставляет Соника скользить. | *Коллизия заставляет Соника скользить. | ||
==Враги== | ==Враги== | ||
− | Враги находятся во вкладке Enemy. Там есть враги как для | + | Враги находятся во вкладке Enemy. Там есть враги как для 2D-вида, так и для 3D. Но для того, чтобы ваши враги работали, и игра не вылетала, вам в вашем моде обязательно нужна будет папка bb3 в которой будет <nowiki>#Application.ar.00</nowiki>. |
− | Невозможно поставить, к примеру, Egg Pawn'а в Green Hill Zone (далее | + | Невозможно поставить, к примеру, Egg Pawn'а в [[Green Hill Zone]] (далее GHZ), т.к. данных о нём в GHZ попросту нету. Для этого распаковываем <nowiki>#Application.ar.00</nowiki> (по известному уже нам принципу), и внутри ищем файл EnemyArchiveTree.xml а уже в нем строку: |
<spoiler> | <spoiler> | ||
Строка 325: | Строка 334: | ||
</DefAppend> | </DefAppend> | ||
</spoiler> | </spoiler> | ||
− | Если в | + | Если в GHZ вам нужен Egg Pawn, то находим строку о ssh и строку о Egg Pawn'е. |
<Archive>EnemyEPawnCommon</Archive> | <Archive>EnemyEPawnCommon</Archive> | ||
− | Далее вставляем последовательно в | + | Далее вставляем последовательно в GHZ и сохраняем, [[Хакинг:Sonic Generations/Создание уровня|перепаковываем]] и сохраняем это в наш bb3. |
+ | |||
==Камеры== | ==Камеры== | ||
А теперь мы подошли к самому трудному в нашем хакинге. Порой, чтобы сделать камеру такой, какой вы хотите, уходит уйма времени, от часа и до нескольких дней. Но это лишь настройка, а создать камеру легче простого. | А теперь мы подошли к самому трудному в нашем хакинге. Порой, чтобы сделать камеру такой, какой вы хотите, уходит уйма времени, от часа и до нескольких дней. Но это лишь настройка, а создать камеру легче простого. | ||
+ | |||
===Как заставить камеры работать=== | ===Как заставить камеры работать=== | ||
− | Создаем ChangeVolumeCamera | + | Создаем ChangeVolumeCamera - это пространство, в котором камера будет действовать. '''(ЭТО НЕ КАМЕРА)''' Необязательно чтобы камера была внутри него. Учтите, что от того, где будет начало камеры, и конец будет зависеть её эффектность. Для того, чтобы этот объект знал, к какой камере он принадлежит, вам требуется прокрутить список вниз и найти Target, где вы сможете указать свою камеру. |
− | Также на эффектность камеры влияет время входа и выхода камеры, параметр Ease_Time_Enter/Leave, трудно объяснить что это, но вы сами попробуйте сначала поставить 1, а потом 20 и все поймете. | + | Также, на эффектность камеры влияет время входа и выхода камеры, параметр Ease_Time_Enter/Leave, трудно объяснить, что это, но вы сами попробуйте сначала поставить 1, а потом 20 и все поймете. |
− | Далее, мы выбираем нужную нам камеру, | + | Далее, мы выбираем нужную нам камеру, обычно используется Parallel или Pan и иногда PanVertical камеры. |
Вот неполный список того, что они делают и как настроить: | Вот неполный список того, что они делают и как настроить: | ||
+ | |||
====Виды камер==== | ====Виды камер==== | ||
− | *objCameraParallel – Эта камера двигается параллельно | + | *objCameraParallel – Эта камера двигается параллельно Сонику в зависимости от параметров. |
− | *objCameraPan - Камера перемещается в точку, где стоит этот объект и смотрит | + | *objCameraPan - Камера перемещается в точку, где стоит этот объект и смотрит оттуда на Соника, тут важную роль играет пространство VolumeCamera. |
*objCameraPanVertical – Обычно нужна для моментов, где нужно подниматься на ступеньки или же вверх, очень интересно действует. | *objCameraPanVertical – Обычно нужна для моментов, где нужно подниматься на ступеньки или же вверх, очень интересно действует. | ||
+ | |||
====Настройки камер==== | ====Настройки камер==== | ||
---- | ---- | ||
=====objCameraParallel===== | =====objCameraParallel===== | ||
− | *Distance - дистанция от камеры к | + | *Distance - дистанция от камеры к Сонику, обычно нормальная дистанция - 10, 15. Близкая - 3 и все, что ниже. |
**Время входа и выхода лучше задавать в Volume камере. | **Время входа и выхода лучше задавать в Volume камере. | ||
− | *Fovy - | + | *Fovy - непонятно пока, что это, но когда ставишь какие-то значения, которые отличаются от 45, то камера ведет себя неистово глючно. |
*IsCollision - если ставить true, то камера НЕ будет выходит за приделы коллизии уровня. Если false, то будет. | *IsCollision - если ставить true, то камера НЕ будет выходит за приделы коллизии уровня. Если false, то будет. | ||
*IsControllable - если ставить true, то движение камеры будет зависеть от движения соника, если false то будет фиксирована. | *IsControllable - если ставить true, то движение камеры будет зависеть от движения соника, если false то будет фиксирована. | ||
*Pitch - наклон камеры по вертикали. | *Pitch - наклон камеры по вертикали. | ||
*TargetOffest_Right - сдвиг камеры влево или вправо. Ставятся отрицательные значения, чтобы сместить влево, и положительные - вправо. | *TargetOffest_Right - сдвиг камеры влево или вправо. Ставятся отрицательные значения, чтобы сместить влево, и положительные - вправо. | ||
− | *TargetOffest_Up - высота, на которой камера находится. Если в pan этот параметр задается относительно высоты, на которой | + | *TargetOffest_Up - высота, на которой камера находится. Если в pan этот параметр задается относительно высоты, на которой вы поставили объект, то тут задается параметром. Тут можно ставить и отрицательные значения. Предпочтительные значения - -0.2 или же -0.6. |
− | *TargetOffest_Vel - лучше не трогать. Если ставить значения больше 0.5 то камера при бусте | + | *TargetOffest_Vel - лучше не трогать. Если ставить значения больше 0.5, то камера при бусте Соника будет амортизировать, и отдаляться от него. Можно поставить 0, чтобы она никуда не отдалялась. Но тут уже все зависит от потребностей. |
*Yaw - наклон (или же угол) камеры по горизонтали. | *Yaw - наклон (или же угол) камеры по горизонтали. | ||
---- | ---- | ||
=====objCameraPan===== | =====objCameraPan===== | ||
− | Тут | + | Тут вся суть в том, что высота и наклон, и все-все остальное задается не вручную (это очень все облегчает), а самим расположением объекта (можете камерой SonicGLVL присмотреть себе ракурс и примерно поставить туда камеру, такой же вид будет и в игре). А все остальные настройки, как и в parallel, да и в других камерах такие же. |
---- | ---- | ||
=====objCameraPanVertical===== | =====objCameraPanVertical===== | ||
− | Настройки такие же как и в parallel, а высота и расположение зависит от | + | Настройки такие же, как и в parallel, а высота и расположение зависит от расположения в самом SonicGLVL, как и pan камера. |
---- | ---- | ||
=====CameraCollisionBoard===== | =====CameraCollisionBoard===== | ||
− | Самая сложная коллизия для использования камеры. Представлена двумя отдельными объектами(воротами), одна – вход(включение камеры), вторая – выход(выключение). Она имеет очень много плюсов, но столько же и минусов перед ChangeVolumeCamera. К примеру, переходы между камерами будут более четкими, есть возможность использовать в узких местах, можно зациклить в бесконечное использование. Минусы: если проскочить объект, то камера не будет включена или выключена. Чтобы вам было легче, | + | Самая сложная коллизия для использования камеры. Представлена двумя отдельными объектами (воротами), одна – вход( включение камеры), вторая – выход (выключение). Она имеет очень много плюсов, но столько же и минусов перед ChangeVolumeCamera. К примеру, переходы между камерами будут более четкими, есть возможность использовать в узких местах, можно зациклить в бесконечное использование. Минусы: если проскочить объект, то камера не будет включена или выключена. Чтобы вам было легче, вот примеры для использования и сами параметры (не по порядку, чтобы было понятнее): |
*BCameraID(_) – ID камеры, которая будет использоваться. Фактически тоже самое, что и Target. | *BCameraID(_) – ID камеры, которая будет использоваться. Фактически тоже самое, что и Target. | ||
*BLinkObjID(_) – ID следующей коллизии. | *BLinkObjID(_) – ID следующей коллизии. | ||
Строка 371: | Строка 384: | ||
*EaseTime: AtoB (_) – время включения камеры между коллизиями, тоже самое, что и Ease_Time_Enter/Leave. Ставить значения в первом и втором. | *EaseTime: AtoB (_) – время включения камеры между коллизиями, тоже самое, что и Ease_Time_Enter/Leave. Ставить значения в первом и втором. | ||
*BtoA(_) – включать только на третьем и более слоях. | *BtoA(_) – включать только на третьем и более слоях. | ||
− | *BCameraPriority(_) – приоритет камеры над стандартной, или, если она находится внутри | + | *BCameraPriority(_) – приоритет камеры над стандартной, или, если она находится внутри ещё одной. |
'''Примечание:''' Если камера не будет работать, лучше всего попробовать включить/отключить приоритет и ALinkSide. | '''Примечание:''' Если камера не будет работать, лучше всего попробовать включить/отключить приоритет и ALinkSide. | ||
---- | ---- | ||
Строка 377: | Строка 390: | ||
'''Обозначения:'''Пусть A – ID первой коллизия, В – ID второй, A1 – ID третьей, B1 – ID четвертой. C – ID первой камеры и т.д. | '''Обозначения:'''Пусть A – ID первой коллизия, В – ID второй, A1 – ID третьей, B1 – ID четвертой. C – ID первой камеры и т.д. | ||
1. Пустота-A-B-пустота + C<br> | 1. Пустота-A-B-пустота + C<br> | ||
− | К примеру, вам нужно использовать только одну камеру в определенном месте | + | К примеру, вам нужно использовать только одну камеру в определенном месте: |
− | Первый объект: | + | Первый объект: |
− | ACameraID(0) | + | * ACameraID(0) |
− | ALinkObjID(0) | + | * ALinkObjID(0) |
− | ALinkSide(0) | + | * ALinkSide(0) |
− | BCameraID(C) | + | * BCameraID(C) |
− | BLinkObjID(B) | + | * BLinkObjID(B) |
− | EaseTime_AtoB(ваше время) | + | * EaseTime_AtoB(ваше время) |
− | EaseTime_BtoA(0) | + | * EaseTime_BtoA(0) |
− | Второй объект: | + | Второй объект: |
− | ALinkObjID(A) | + | * ALinkObjID(A) |
− | ALinkSide(1) | + | * ALinkSide(1) |
− | BCameraID(0) | + | * BCameraID(0) |
− | BLinkObjID(0) | + | * BLinkObjID(0) |
− | EaseTime_AtoB(ваше время) | + | * EaseTime_AtoB(ваше время) |
− | EaseTime_BtoA(0) | + | * EaseTime_BtoA(0) |
Готово. | Готово. | ||
---- | ---- | ||
2. Пустота-A-B-A1-B1-пустота + С,С1,С2<br> | 2. Пустота-A-B-A1-B1-пустота + С,С1,С2<br> | ||
− | К примеру, вам нужно использовать несколько камер подряд | + | К примеру, вам нужно использовать несколько камер подряд: |
− | Первый объект: | + | Первый объект: |
− | ACameraID(0) | + | * ACameraID(0) |
− | ALinkObjID(0) | + | * ALinkObjID(0) |
− | ALinkSide(0) | + | * ALinkSide(0) |
− | BCameraID(C) | + | * BCameraID(C) |
− | BLinkObjID(B) | + | * BLinkObjID(B) |
− | EaseTime_AtoB(ваше время) | + | * EaseTime_AtoB(ваше время) |
− | EaseTime_BtoA(0) | + | * EaseTime_BtoA(0) |
− | Второй объект: | + | Второй объект: |
− | ALinkObjID(A) | + | * ALinkObjID(A) |
− | ALinkSide(1) | + | * ALinkSide(1) |
− | BCameraID(С1) | + | * BCameraID(С1) |
− | BLinkObjID(A1) | + | * BLinkObjID(A1) |
− | EaseTime_AtoB(ваше время) | + | * EaseTime_AtoB(ваше время) |
− | EaseTime_BtoA(0) | + | * EaseTime_BtoA(0) |
− | Третий объект: | + | Третий объект: |
− | ALinkObjID(В) | + | * ALinkObjID(В) |
− | ALinkSide(1) | + | * ALinkSide(1) |
− | BCameraID(С2) | + | * BCameraID(С2) |
− | BLinkObjID(В1) | + | * BLinkObjID(В1) |
− | EaseTime_AtoB(ваше время) | + | * EaseTime_AtoB(ваше время) |
− | EaseTime_BtoA(ваше время) | + | * EaseTime_BtoA(ваше время) |
− | + | Четвёртый объект: | |
− | ALinkObjID(A1) | + | * ALinkObjID(A1) |
− | ALinkSide(1) | + | * ALinkSide(1) |
− | BCameraID(0) | + | * BCameraID(0) |
− | BLinkObjID(0) | + | * BLinkObjID(0) |
− | EaseTime_AtoB(ваше время) | + | * EaseTime_AtoB(ваше время) |
− | EaseTime_BtoA(0) | + | * EaseTime_BtoA(0) |
---- | ---- | ||
3. Так же можно закрутить в круг, для этого стоит в последней коллизии указать первую. | 3. Так же можно закрутить в круг, для этого стоит в последней коллизии указать первую. | ||
Вот и все. | Вот и все. | ||
==3D и 2D== | ==3D и 2D== | ||
− | Переходы от | + | Переходы от 3D и 2D задаются двумя вещами – сплайнами и объектами серии Changers. Этот пункт написан для тех, кто уже сделал сплайны для своего уровня. (если нет, смотрите [[Хакинг Sonic Generations/Сплайны|туториал по сплайнам]]) |
− | *Переход в 2D осуществляется с помощью объекта ChangeMode_3Dto2D. Ставится он обычно так, чтобы буковки EDOM были расположены к Сонику. (т.е. входить он должен в EDOM а не в MODE). | + | *Переход в 2D осуществляется с помощью объекта ChangeMode_3Dto2D. Ставится он обычно так, чтобы буковки EDOM были расположены к Сонику. (т.е. входить он должен в EDOM а не в MODE). Также, чтобы 2D все-таки заработало, вам нужно поставить False в параметре m_IsEnableFromBack, хотя иногда это и не нужно. Ставится ВСЕГДА этот объект там, где начинаются сплайны и не где-то в другом месте. |
− | *Переход | + | *Переход обратно в 3D осуществляется с помощью либо ChangeMode_3DtoForward, либо Dash. Тут уже менять в настройках ничего не нужно. |
==Material Editor== | ==Material Editor== | ||
− | Материал Эдитор очень важная штука. Он позволяет применять шейдеры к вашим материалам.<br> | + | Материал Эдитор - очень важная штука. Он позволяет применять шейдеры к вашим материалам.<br> |
Разнообразие шейдеров дает вам огромный простор для фантазий.<br> | Разнообразие шейдеров дает вам огромный простор для фантазий.<br> | ||
Рассмотрим использование шейдеров на примере создания анимированной воды: | Рассмотрим использование шейдеров на примере создания анимированной воды: | ||
− | #Для того, чтобы добавить шейдер нужно выбрать нужный объект, к примеру, waterssh. | + | #Для того, чтобы добавить шейдер, нужно выбрать нужный объект, к примеру, waterssh. |
− | #После чего выбираем нужный нам шейдер, к примеру, | + | #После чего выбираем нужный нам шейдер, к примеру, Water_Opacity_SoftEdge (самый оптимальный для воды). |
− | #Дальше нам требуется добавить текстуры. Нажимаем Add Texture. Нам нужны текстуры dif, nrm, evn (их можно взять в уровне ssh). Для этого выбираем нужный вид и выбираем текстуру | + | #Дальше нам требуется добавить текстуры. Нажимаем Add Texture. Нам нужны текстуры dif, nrm, evn (их можно взять в уровне ssh). Для этого выбираем нужный вид и выбираем текстуру. |
− | #После чего можно отредактировать движение воды (это особенно важно для водопадов) для этого стоит ставить отрицательные или положительные значения в g_WaterParam | + | #После чего можно отредактировать движение воды (это особенно важно для водопадов), для этого стоит ставить отрицательные или положительные значения в g_WaterParam. |
− | #После чего нужно нажать Apply Changes иначе ничего не | + | #После чего нужно нажать Apply Changes, иначе ничего не сохранится. |
Список шейдеров воды:<br> | Список шейдеров воды:<br> | ||
<spoiler> | <spoiler> | ||
Строка 460: | Строка 473: | ||
В принципе, все они дают один и тот же эффект, но немного различаются. | В принципе, все они дают один и тот же эффект, но немного различаются. | ||
Более полный список шейдеров будет приведен позже. | Более полный список шейдеров будет приведен позже. | ||
+ | ==SonicGLvlSVN== | ||
+ | В чем суть, чтобы создать разрушаемые объекты вам понадобится бета-версия SonicGLVL, т.к. она имеет много разных плюшек и доработок. (а также over9000 багов) Как это сделать: | ||
+ | |||
+ | Для начала качаем [http://tortoisesvn.net TortoiseSVN], устанавливаем. После чего выбираем папку, где лежит ваш SonicGLVL и кликаем правой кнопкой мыши. Выбираем SVN Checkout. | ||
+ | |||
+ | Вводим [http://sonic-glvl.googlecode.com/svn/trunk/sonic-glvl-read-only эту ссылку] и скачиваем необходимый файл. | ||
+ | |||
+ | [[Категория:Хакинг Sonic Generations]] |
Текущая версия на 21:04, 26 мая 2014
После создания и запаковки уровня, у вас может появиться вопрос, что же дальше? Как мне поставить пружины или ускорители? Как вставить камеры? Здесь можно узнать ответы на все эти вопросы.
Содержание
Быстрый гайд
Многие затрудняются с камерой в SonicGLVLЮ т.к. она не похожа на ту, что есть в 3ds Max'е. Чтобы крутить камеру, зажмите колесико мышки, чтобы крутить влево/вправо/вверх/вниз – alt + колесико мышки. Чтобы приближать – ctrl + колесико мышки.
Объекты
Начнем с объектов в SonicGLVL. В основном, все нужные нам объекты находятся в Common. Там есть все нужное для нормального геймплея – кольца, кольца и панели для ускорения и т.д.
Стоит отметить, что каждый объект нуждается в тщательной калибровке, невозможно с первого раза поставить пружину так, чтобы попасть туда, куда вам нужно. Поэтому приготовьте много валерьянки, ибо бегать между программой и игрой вам придется очень много.
Основные параметры
IsCastShadow
- Если true, то объект будет отбрасывать тень. Если false - то не будет. Стоит отметить, что некоторые объекты не могут отбрасывать тень.
Range
- Это свойство устанавливает расстояние отрисовки объекта. Если диапазон очень низкий, то скорее всего, его не будет видно издали. Если же он наоборот высок, то его можно будет видеть за километр.
- Иногда приходится устанавливать очень большие значения в случае камер и изменений камер; это не только расстояние отрисовки, но и расстояние, на котором объект существует. Если объект попытается взаимодействовать с другими объектами, которые не загружены/не находятся в одной области с ним, то игра, скорее всего, вылетит.
SetObjectID
- Параметр ID объекта, не трогайте этот параметр без надобности.
OutOfControl
- Этот параметр дает понять, как долго эффект объекта будет действовать на Соника. К примеру, если в JumpBoard этот коэффициент большой, то вы не сможете некоторое время управлять Соником после взаимодействия.
IsTo3D
- Если true, то Соник вернется в 3D, если он в 2D разделе. Если false, Соник не будет переключаться обратно в 3D.
Вот немного особенностей некоторых объектов:
Ring
- IsLightSpeedDashTarget
- Если поставить true, то по этому кольцу можно будет пройти с Light Speed Dash, если false, то останется обычным.
GoalSignboard/GoalRing
- ResultsPosition – место, где происходит подсчет баллов. Если вы хотите повернуть камеру, то поверните сам объект.
ClassicItemBox
- IsRevive
- Если поставить true, то объект будет восстанавливаться после того, как вы его использовали. Если false, то его можно будет использовать только один раз.
- ItemType
- 1 = 10 Колец
- 2= 1-Up
- 3 = Speed Shoes
- 4 = Invincibility
- 5 = Skateboard
- 6 = Undefined
- 7 = Undefined (presumably 0)
- 8 = Fire Shield
- 9 = Bubble Shield
- 10 = Thunder Shield
Помните: ItemType 0 не существует, поэтому во избежание вылета игры, использовать его не нужно.
Springs
- FirstSpeed
- Скорость с которой пружина толкает Соника.
- KeepVelocityDistance
- Этот параметр задает, как долго Соник будет сохранять импульс до того, как на него начнёт действовать гравитация.
- MotionType (Modern)
- 0 = Обычная анимация.
- 1 = Обычная анимация.
- 2 = Соник сразу переходит в анимацию падения.
- 3 = Соник сворачивается в шар, после чего разворачивается из него.
- 4 = Трудно объяснить, что за анимация. См.скрин.
- 5 = Вылет.
- 6 = Такая же анимация как если бы соник попал в шарик.
Примечание: MotionType 7 и выше могут привести к вылету.
AdlibTrickJump
- SizeType
- Если 1 - то это нормальный размер. Если 0, то панель будет меньше, чем 1.
ObjectPhysics
- Обычно отвечает за разрушаемые объекты.
- Type
- Полный список объектов:
- bpc_obj_debrisA
- bpc_obj_debrisB
- bpc_obj_debrisC
- bpc_obj_debrisDa
- bpc_obj_debrisDb
- Bpc_obj_redcar
- Bpc_obj_taxi
- BrkDice
- BrkTip
- cmn_obj_tripplate
- cpz_obj_breakbox
- cpz_obj_breakboxtall
- cpz_obj_pipelinecapA
- cpz_obj_pushbox
- cpz_obj_roundirontower
- cpz_obj_shutter
- csc_obj_barricadeA
- csc_obj_barricadeB
- csc_obj_roadconeA
- csc_obj_roadconeB
- csc_obj_roadconeC
- csc_obj_roadconeD
- cte_obj_barricadeA
- cte_obj_bench
- cte_obj_cablecar
- cte_obj_chairA
- cte_obj_house
- cte_obj_house02
- cte_obj_hydrantA
- cte_obj_paperbox
- cte_obj_parasolA
- cte_obj_parasolB
- cte_obj_parkingmeter
- cte_obj_parkingsign
- cte_obj_post
- cte_obj_pushbox
- cte_obj_signal
- cte_obj_tableA
- cte_obj_telbox
- cte_obj_trashbox
- cte_obj_tree
- cte_obj_woodboxA
- euc_obj_barrel
- euc_obj_barrelgold
- euc_obj_boardA
- euc_obj_boardB
- euc_obj_breakirongate
- euc_obj_breakirongates
- euc_obj_chain
- euc_obj_chair01
- euc_obj_chair02
- euc_obj_fence
- euc_obj_flagA
- euc_obj_librarydoor
- euc_obj_librarydoorside
- euc_obj_lid
- euc_obj_manyflagA
- euc_obj_ObstructwindowB
- euc_obj_parasol01
- euc_obj_pole
- euc_obj_polebase
- euc_obj_potplant_benjaminJ
- euc_obj_potplant_dracaenaH
- euc_obj_potplant_green
- euc_obj_potplant_ivyH
- euc_obj_potplant_mixFF
- euc_obj_pushbox
- euc_obj_smallbarrel
- euc_obj_tableA
- euc_obj_tableB
- Floor_4bxh8
- ghz_obj_tn1_purplerock
- ghz_obj_tn1_purplerockmini
- IronBox
- IronWoodBox
- MotionTest
- pipe1
- pipe2
- pla_ks2_barricade
- pla_ks2_oildrum
- pla_ks2_plabox
- pla_ks2_safetydrum
- pla_obj_ExcavatorCutter
- pla_obj_ExcavatorDrill
- pla_obj_Redlight
- pla_obj_signarrowA
- PulleyBase
- PulleyStand
- sph_obj_barricadeA
- sph_obj_breakwindowA
- sph_obj_breakwindowB
- sph_obj_breakwindowC
- sph_obj_breakwindowD
- sph_obj_cartA
- sph_obj_chairA
- sph_obj_doorA
- sph_obj_drumA
- sph_obj_drumsetA
- sph_obj_exhaustportA
- sph_obj_glassgroundA_000
- sph_obj_glassgroundA_001
- sph_obj_guardrailA
- sph_obj_helicopter_stop
- sph_obj_hoteltableA
- sph_obj_nolightcarA
- sph_obj_nolightcarB
- sph_obj_nolightcarC
- sph_obj_nolightcarD
- sph_obj_potplantB
- sph_obj_roadcornA
- sph_obj_roadcornB
- sph_obj_roketglassA
- sph_obj_roketglassB
- sph_obj_searchlight_blue
- sph_obj_searchlight_red
- sph_obj_searchlight_ylw
- sph_obj_sofaA
- sph_obj_tableA
- sph_obj_trunk
- ssh_obj_bobsleigh_gate
- ssh_obj_breakroof01A
- ssh_obj_breakroof01B
- ssh_obj_breakroof02
- ssh_obj_broken-door
- ssh_obj_flagA
- ssh_obj_floorx
- ssh_obj_pot
- ssh_obj_pushbox
- ssh_obj_signarrow
- ssh_obj_whalehead
- ssh_obj_whalestatue
- ssz_obj_breakgroundA_02_brk_001
- ssz_obj_breakgroundA_02_brk_002
- ssz_obj_breakgroundA_02_brk_003
- ssz_obj_breakgroundA_02_brk_004
- ssz_obj_breakgroundA_02_brk_005
- ssz_obj_breakgroundA_02_brk_006
- ssz_obj_breakgroundA_02_brk_007
- ssz_obj_breakgroundA_02_brk_008
- ssz_obj_breakgroundA_02_brk_010
- ssz_obj_breakgroundA_02_brk_011
- ssz_obj_breakgroundA_02_brk_012
- ssz_obj_breakgroundA_02_brk_013
- ssz_obj_breakgroundA_02_brk_014
- ssz_obj_breakgroundA_02_brk_015
- ssz_obj_breakgroundA_02_brk_016
- ssz_obj_breakwindowA
- ssz_obj_breakwindowB
- ssz_obj_breakwindowC
- ssz_obj_breakwindowD
- ssz_obj_brkwinAnoBound
- ssz_obj_debrisA_000
- ssz_obj_fallingdebris_000
- ssz_obj_guidestick_20M
- ssz_obj_guidestick_7M
- ssz_obj_signarrow
- ThornBallDynamic
- ThornContainerSideBrk
- ThornContainerUpBrk
- ThornCylinder2M
- ThornCylinder3M
- WoodBox
Switch
- Type
- 0 = Если активировать, то уже не выключится.
- 1 = Если сойти с него, то он выключится.
- 2 = Если один раз активировать, то он деактивируется только через время, заданное в "OffTimer".
General Floor
- Модель каждой панели зависит от уровня, в котором вы его ставите.
- Amplitude
- Устанавливает, насколько платформа перемещается, если движение разрешено.
- Cycle
- Устанавливает скорость движения платформы, если движение разрешено.
- MoveType
- 0 = Без движения
- 1 = Движение вверх и вниз
- 2 = Движение влево и вправо
- FloorSize
- Нормальный размер где-то в районе 0-3. Чем больше значение, тем больше платформа будет.
- FloorType
- 0 = Обычная платформа
- 1 = Падающая платформа
- 2 = Блок
SetRigidBody
Этот объект создает невидимую стену (или пол).
- Collision_Height
- Параметр задает высоту.
- Collision_Length
- Задает параметр длинны.
- Collision_Width
- Задает параметр ширины.
Cannon
- BaseVel
- Задает высоту выстрела пушки. Если она слишком большая, то Соник может вылетать за уровень и не попасть в точку назначения. Но если значение маленькое, то Соник не достигнет своей цели и упадет раньше.
- DstPos
- Позиция, где Соник приземлится.
Коллизии
Что такое коллизия, вы знаете из создания уровня, там это была простая твердость. Тут у нас в руках есть куча разных включателей коллизии, от повышения гравитации до ускорения соника. Вот небольшой список того, что на данный момент известно:
Основные параметры коллизий
Collision_Height
- Параметр задает высоту.
Collision_Length
- Задает параметр длинны.
Collision_Width
- Задает параметр ширины.
Прочие параметры коллизий
GravityChangeCollision
- Эта коллизия изменяет гравитацию внутри.
JumpCollision
- Дает импульс Сонику.
ImpulseSpeedOnBoost
- Задает силу импульса, который даст коллизия, когда Соник использует буст.
ImpulseSpeedOnNormal
- Задает силу импульса, который даст коллизия, когда Соник бежит без буста.
Pitch
- Это параметр, который задает угол запуска Соника.
SpeedMin
- Устанавливает, насколько быстро Соник должен пройти для того, чтобы активировать действие коллизии.
FallDeadCollision
- Когда Соник проходит через эту коллизию, он умирает.
SlidingCollision
- Коллизия заставляет Соника скользить.
Враги
Враги находятся во вкладке Enemy. Там есть враги как для 2D-вида, так и для 3D. Но для того, чтобы ваши враги работали, и игра не вылетала, вам в вашем моде обязательно нужна будет папка bb3 в которой будет #Application.ar.00.
Невозможно поставить, к примеру, Egg Pawn'а в Green Hill Zone (далее GHZ), т.к. данных о нём в GHZ попросту нету. Для этого распаковываем #Application.ar.00 (по известному уже нам принципу), и внутри ищем файл EnemyArchiveTree.xml а уже в нем строку:
<DefAppend>
<Name>ghz_cmn</Name> (название уровня, расшифровка дана в первом туториале)
<Archive>EnemyCommon</Archive> (название врага)
<Archive>EnemyBeeton</Archive>
<Archive>EnemyBatabata</Archive>
<Archive>EnemyGanigani</Archive>
<Archive>EnemyMotora</Archive>
</DefAppend>
Если в GHZ вам нужен Egg Pawn, то находим строку о ssh и строку о Egg Pawn'е.
<Archive>EnemyEPawnCommon</Archive>
Далее вставляем последовательно в GHZ и сохраняем, перепаковываем и сохраняем это в наш bb3.
Камеры
А теперь мы подошли к самому трудному в нашем хакинге. Порой, чтобы сделать камеру такой, какой вы хотите, уходит уйма времени, от часа и до нескольких дней. Но это лишь настройка, а создать камеру легче простого.
Как заставить камеры работать
Создаем ChangeVolumeCamera - это пространство, в котором камера будет действовать. (ЭТО НЕ КАМЕРА) Необязательно чтобы камера была внутри него. Учтите, что от того, где будет начало камеры, и конец будет зависеть её эффектность. Для того, чтобы этот объект знал, к какой камере он принадлежит, вам требуется прокрутить список вниз и найти Target, где вы сможете указать свою камеру.
Также, на эффектность камеры влияет время входа и выхода камеры, параметр Ease_Time_Enter/Leave, трудно объяснить, что это, но вы сами попробуйте сначала поставить 1, а потом 20 и все поймете.
Далее, мы выбираем нужную нам камеру, обычно используется Parallel или Pan и иногда PanVertical камеры. Вот неполный список того, что они делают и как настроить:
Виды камер
- objCameraParallel – Эта камера двигается параллельно Сонику в зависимости от параметров.
- objCameraPan - Камера перемещается в точку, где стоит этот объект и смотрит оттуда на Соника, тут важную роль играет пространство VolumeCamera.
- objCameraPanVertical – Обычно нужна для моментов, где нужно подниматься на ступеньки или же вверх, очень интересно действует.
Настройки камер
objCameraParallel
- Distance - дистанция от камеры к Сонику, обычно нормальная дистанция - 10, 15. Близкая - 3 и все, что ниже.
- Время входа и выхода лучше задавать в Volume камере.
- Fovy - непонятно пока, что это, но когда ставишь какие-то значения, которые отличаются от 45, то камера ведет себя неистово глючно.
- IsCollision - если ставить true, то камера НЕ будет выходит за приделы коллизии уровня. Если false, то будет.
- IsControllable - если ставить true, то движение камеры будет зависеть от движения соника, если false то будет фиксирована.
- Pitch - наклон камеры по вертикали.
- TargetOffest_Right - сдвиг камеры влево или вправо. Ставятся отрицательные значения, чтобы сместить влево, и положительные - вправо.
- TargetOffest_Up - высота, на которой камера находится. Если в pan этот параметр задается относительно высоты, на которой вы поставили объект, то тут задается параметром. Тут можно ставить и отрицательные значения. Предпочтительные значения - -0.2 или же -0.6.
- TargetOffest_Vel - лучше не трогать. Если ставить значения больше 0.5, то камера при бусте Соника будет амортизировать, и отдаляться от него. Можно поставить 0, чтобы она никуда не отдалялась. Но тут уже все зависит от потребностей.
- Yaw - наклон (или же угол) камеры по горизонтали.
objCameraPan
Тут вся суть в том, что высота и наклон, и все-все остальное задается не вручную (это очень все облегчает), а самим расположением объекта (можете камерой SonicGLVL присмотреть себе ракурс и примерно поставить туда камеру, такой же вид будет и в игре). А все остальные настройки, как и в parallel, да и в других камерах такие же.
objCameraPanVertical
Настройки такие же, как и в parallel, а высота и расположение зависит от расположения в самом SonicGLVL, как и pan камера.
CameraCollisionBoard
Самая сложная коллизия для использования камеры. Представлена двумя отдельными объектами (воротами), одна – вход( включение камеры), вторая – выход (выключение). Она имеет очень много плюсов, но столько же и минусов перед ChangeVolumeCamera. К примеру, переходы между камерами будут более четкими, есть возможность использовать в узких местах, можно зациклить в бесконечное использование. Минусы: если проскочить объект, то камера не будет включена или выключена. Чтобы вам было легче, вот примеры для использования и сами параметры (не по порядку, чтобы было понятнее):
- BCameraID(_) – ID камеры, которая будет использоваться. Фактически тоже самое, что и Target.
- BLinkObjID(_) – ID следующей коллизии.
- ALinkObjID(_) – ID предыдущей коллизии (только для второй коллизии, в первой оставить 0)
- ALinkSide(_) – ставить 1 на второй коллизии, и 0 на первой.
- EaseTime: AtoB (_) – время включения камеры между коллизиями, тоже самое, что и Ease_Time_Enter/Leave. Ставить значения в первом и втором.
- BtoA(_) – включать только на третьем и более слоях.
- BCameraPriority(_) – приоритет камеры над стандартной, или, если она находится внутри ещё одной.
Примечание: Если камера не будет работать, лучше всего попробовать включить/отключить приоритет и ALinkSide.
Примеры использования
Обозначения:Пусть A – ID первой коллизия, В – ID второй, A1 – ID третьей, B1 – ID четвертой. C – ID первой камеры и т.д.
1. Пустота-A-B-пустота + C
К примеру, вам нужно использовать только одну камеру в определенном месте:
Первый объект:
- ACameraID(0)
- ALinkObjID(0)
- ALinkSide(0)
- BCameraID(C)
- BLinkObjID(B)
- EaseTime_AtoB(ваше время)
- EaseTime_BtoA(0)
Второй объект:
- ALinkObjID(A)
- ALinkSide(1)
- BCameraID(0)
- BLinkObjID(0)
- EaseTime_AtoB(ваше время)
- EaseTime_BtoA(0)
Готово.
2. Пустота-A-B-A1-B1-пустота + С,С1,С2
К примеру, вам нужно использовать несколько камер подряд:
Первый объект:
- ACameraID(0)
- ALinkObjID(0)
- ALinkSide(0)
- BCameraID(C)
- BLinkObjID(B)
- EaseTime_AtoB(ваше время)
- EaseTime_BtoA(0)
Второй объект:
- ALinkObjID(A)
- ALinkSide(1)
- BCameraID(С1)
- BLinkObjID(A1)
- EaseTime_AtoB(ваше время)
- EaseTime_BtoA(0)
Третий объект:
- ALinkObjID(В)
- ALinkSide(1)
- BCameraID(С2)
- BLinkObjID(В1)
- EaseTime_AtoB(ваше время)
- EaseTime_BtoA(ваше время)
Четвёртый объект:
- ALinkObjID(A1)
- ALinkSide(1)
- BCameraID(0)
- BLinkObjID(0)
- EaseTime_AtoB(ваше время)
- EaseTime_BtoA(0)
3. Так же можно закрутить в круг, для этого стоит в последней коллизии указать первую. Вот и все.
3D и 2D
Переходы от 3D и 2D задаются двумя вещами – сплайнами и объектами серии Changers. Этот пункт написан для тех, кто уже сделал сплайны для своего уровня. (если нет, смотрите туториал по сплайнам)
- Переход в 2D осуществляется с помощью объекта ChangeMode_3Dto2D. Ставится он обычно так, чтобы буковки EDOM были расположены к Сонику. (т.е. входить он должен в EDOM а не в MODE). Также, чтобы 2D все-таки заработало, вам нужно поставить False в параметре m_IsEnableFromBack, хотя иногда это и не нужно. Ставится ВСЕГДА этот объект там, где начинаются сплайны и не где-то в другом месте.
- Переход обратно в 3D осуществляется с помощью либо ChangeMode_3DtoForward, либо Dash. Тут уже менять в настройках ничего не нужно.
Material Editor
Материал Эдитор - очень важная штука. Он позволяет применять шейдеры к вашим материалам.
Разнообразие шейдеров дает вам огромный простор для фантазий.
Рассмотрим использование шейдеров на примере создания анимированной воды:
- Для того, чтобы добавить шейдер, нужно выбрать нужный объект, к примеру, waterssh.
- После чего выбираем нужный нам шейдер, к примеру, Water_Opacity_SoftEdge (самый оптимальный для воды).
- Дальше нам требуется добавить текстуры. Нажимаем Add Texture. Нам нужны текстуры dif, nrm, evn (их можно взять в уровне ssh). Для этого выбираем нужный вид и выбираем текстуру.
- После чего можно отредактировать движение воды (это особенно важно для водопадов), для этого стоит ставить отрицательные или положительные значения в g_WaterParam.
- После чего нужно нажать Apply Changes, иначе ничего не сохранится.
Список шейдеров воды:
- Water_Mul_SoftEdge
- Water Add
- Water_Opacity
- Water_Mul
- Water_Opacity_SoftEdge
- Water Add_SoftEdge
В принципе, все они дают один и тот же эффект, но немного различаются. Более полный список шейдеров будет приведен позже.
SonicGLvlSVN
В чем суть, чтобы создать разрушаемые объекты вам понадобится бета-версия SonicGLVL, т.к. она имеет много разных плюшек и доработок. (а также over9000 багов) Как это сделать:
Для начала качаем TortoiseSVN, устанавливаем. После чего выбираем папку, где лежит ваш SonicGLVL и кликаем правой кнопкой мыши. Выбираем SVN Checkout.
Вводим эту ссылку и скачиваем необходимый файл.