Хакинг:Sonic Generations/SonicGLVL
После создания и запаковки уровня, у вас может появиться вопрос, что же дальше? Как мне поставить пружины или ускорители? Как вставить камеры? Здесь можно узнать ответы на все эти вопросы.
Содержание
[убрать]Быстрый гайд
Многие затрудняются с камерой в 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
- Полный список объектов:
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 а уже в нем строку:
Если в 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, иначе ничего не сохранится.
Список шейдеров воды:
В принципе, все они дают один и тот же эффект, но немного различаются. Более полный список шейдеров будет приведен позже.
SonicGLvlSVN
В чем суть, чтобы создать разрушаемые объекты вам понадобится бета-версия SonicGLVL, т.к. она имеет много разных плюшек и доработок. (а также over9000 багов) Как это сделать:
Для начала качаем TortoiseSVN, устанавливаем. После чего выбираем папку, где лежит ваш SonicGLVL и кликаем правой кнопкой мыши. Выбираем SVN Checkout.
Вводим эту ссылку и скачиваем необходимый файл.