Хакинг:Sonic Generations/SonicGLVL — различия между версиями
Red TF (обсуждение | вклад) м (Новая страница: «После создания и запаковки уровня у Вас появился вопрос, что же дальше? Как мне поставить п...») |
м (Замена текста — «начнет» на «начнёт») |
||
(не показаны 34 промежуточные версии 5 участников) | |||
Строка 1: | Строка 1: | ||
− | После создания и запаковки уровня у | + | После создания и запаковки уровня, у вас может появиться вопрос, что же дальше? Как мне поставить пружины или ускорители? Как вставить камеры? Здесь можно узнать ответы на все эти вопросы. |
+ | |||
==Быстрый гайд== | ==Быстрый гайд== | ||
− | Многие затрудняются с камерой в | + | Многие затрудняются с камерой в SonicGLVLЮ т.к. она не похожа на ту, что есть в 3ds Max'е. Чтобы крутить камеру, зажмите колесико мышки, чтобы крутить влево/вправо/вверх/вниз – alt + колесико мышки. Чтобы приближать – ctrl + колесико мышки. |
− | === | + | |
+ | ==Объекты== | ||
+ | Начнем с объектов в SonicGLVL. В основном, все нужные нам объекты находятся в Common. Там есть все нужное для нормального геймплея – кольца, кольца и панели для ускорения и т.д. | ||
+ | |||
+ | Стоит отметить, что каждый объект нуждается в тщательной калибровке, невозможно с первого раза поставить пружину так, чтобы попасть туда, куда вам нужно. Поэтому приготовьте много валерьянки, ибо бегать между программой и игрой вам придется очень много. | ||
+ | |||
+ | ===Основные параметры=== | ||
+ | |||
+ | ====IsCastShadow==== | ||
+ | *Если true, то объект будет отбрасывать тень. Если false - то не будет. Стоит отметить, что некоторые объекты не могут отбрасывать тень. | ||
− | + | ====Range==== | |
+ | *Это свойство устанавливает расстояние отрисовки объекта. Если диапазон очень низкий, то скорее всего, его не будет видно издали. Если же он наоборот высок, то его можно будет видеть за километр. | ||
− | + | **Иногда приходится устанавливать очень большие значения в случае камер и изменений камер; это не только расстояние отрисовки, но и расстояние, на котором объект существует. Если объект попытается взаимодействовать с другими объектами, которые не загружены/не находятся в одной области с ним, то игра, скорее всего, вылетит. | |
− | + | ====SetObjectID==== | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
*Параметр ID объекта, не трогайте этот параметр без надобности. | *Параметр ID объекта, не трогайте этот параметр без надобности. | ||
− | + | ||
− | *Этот параметр дает понять, как долго эффект объекта будет действовать на | + | ====OutOfControl==== |
− | + | *Этот параметр дает понять, как долго эффект объекта будет действовать на Соника. К примеру, если в JumpBoard этот коэффициент большой, то вы не сможете некоторое время управлять Соником после взаимодействия. | |
− | *Если true то Соник вернется в 3D, если он в 2D разделе. Если false, | + | |
+ | ====IsTo3D==== | ||
+ | *Если true, то Соник вернется в 3D, если он в 2D разделе. Если false, Соник не будет переключаться обратно в 3D. | ||
Вот немного особенностей некоторых объектов: | Вот немного особенностей некоторых объектов: | ||
− | ====Ring==== | + | ---- |
− | + | =====Ring===== | |
− | * | + | *IsLightSpeedDashTarget |
− | =====GoalSignboard/GoalRing ===== | + | **Если поставить true, то по этому кольцу можно будет пройти с [[Light Speed Dash]], если false, то останется обычным. |
+ | ---- | ||
+ | =====GoalSignboard/GoalRing===== | ||
*ResultsPosition – место, где происходит подсчет баллов. Если вы хотите повернуть камеру, то поверните сам объект. | *ResultsPosition – место, где происходит подсчет баллов. Если вы хотите повернуть камеру, то поверните сам объект. | ||
− | ====ClassicItemBox==== | + | ---- |
− | + | =====ClassicItemBox===== | |
− | **Если поставить true то объект будет восстанавливаться после того, как вы его использовали. Если false то его можно будет использовать только один раз. | + | *IsRevive |
− | + | **Если поставить true, то объект будет восстанавливаться после того, как вы его использовали. Если false, то его можно будет использовать только один раз. | |
− | *1 = 10 Колец | + | *ItemType |
− | *2= 1-Up | + | **1 = 10 Колец |
− | *3 = Speed Shoes | + | **2= 1-Up |
− | *4 = Invincibility | + | **3 = Speed Shoes |
− | *5 = Skateboard | + | **4 = Invincibility |
− | *6 = Undefined | + | **5 = Skateboard |
− | *7 = Undefined (presumably 0) | + | **6 = Undefined |
− | *8 = Fire Shield | + | **7 = Undefined (presumably 0) |
− | *9 = Bubble Shield | + | **8 = Fire Shield |
− | *10 = Thunder Shield | + | **9 = Bubble Shield |
− | Помните: ItemType 0 не существует, | + | **10 = Thunder Shield |
− | + | Помните: ItemType 0 не существует, поэтому во избежание вылета игры, использовать его не нужно.<br> | |
− | ====Springs==== | + | ---- |
− | + | =====Springs===== | |
− | *Скорость с которой пружина толкает Соника. | + | *FirstSpeed |
− | + | **Скорость с которой пружина толкает Соника. | |
− | *Этот параметр задает, как долго Соник будет сохранять импульс до того, как на него | + | *KeepVelocityDistance |
− | + | **Этот параметр задает, как долго Соник будет сохранять импульс до того, как на него начнёт действовать гравитация. | |
− | *0 = Обычная анимация. | + | *MotionType (Modern) |
− | *1 = Обычная анимация. | + | **0 = Обычная анимация. |
− | *2 = Соник сразу переходит в анимацию падения. | + | **1 = Обычная анимация. |
− | *3 = Соник сворачивается в шар, после чего разворачивается из него. | + | **2 = Соник сразу переходит в анимацию падения. |
− | *4 = Трудно объяснить, что за анимация. См.скрин. | + | **3 = Соник сворачивается в шар, после чего разворачивается из него. |
− | *5 = Вылет. | + | **4 = Трудно объяснить, что за анимация. См.скрин. |
− | *6 = Такая же анимация как если бы соник попал в шарик. | + | **5 = Вылет. |
+ | **6 = Такая же анимация как если бы соник попал в шарик. | ||
'''Примечание:''' MotionType 7 и выше могут привести к вылету. | '''Примечание:''' MotionType 7 и выше могут привести к вылету. | ||
− | ==== | + | ---- |
− | =====SizeType | + | =====AdlibTrickJump===== |
− | *Если 1 то это нормальный размер. Если 0, то панель будет меньше чем 1. | + | *SizeType |
+ | **Если 1 - то это нормальный размер. Если 0, то панель будет меньше, чем 1. | ||
+ | ---- | ||
=====ObjectPhysics===== | =====ObjectPhysics===== | ||
− | * Обычно отвечает за разрушаемые объекты. | + | **Обычно отвечает за разрушаемые объекты. |
− | + | *Type | |
− | *Полный список объектов | + | **Полный список объектов: |
− | ====Switch==== | + | <spoiler> |
− | + | * bpc_obj_debrisA | |
− | 0 = Если активировать, то уже не выключится. | + | * bpc_obj_debrisB |
− | 1 = Если сойти с него, то он выключится. | + | * bpc_obj_debrisC |
− | 2 = Если один раз активировать то он деактивируется только через время заданное в "OffTimer". | + | * 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 | ||
+ | </spoiler> | ||
+ | ---- | ||
+ | =====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==== | + | ---- |
− | + | =====Cannon===== | |
− | *Задает высоту выстрела пушки. Если она | + | *BaseVel |
− | + | **Задает высоту выстрела пушки. Если она слишком большая, то Соник может вылетать за уровень и не попасть в точку назначения. Но если значение маленькое, то Соник не достигнет своей цели и упадет раньше. | |
− | Позиция, где Соник | + | *DstPos |
+ | **Позиция, где Соник приземлится. | ||
+ | ---- | ||
+ | ==Коллизии== | ||
− | + | Что такое коллизия, вы знаете из создания уровня, там это была простая твердость. Тут у нас в руках есть куча разных включателей коллизии, от повышения гравитации до ускорения соника. | |
+ | Вот небольшой список того, что на данный момент известно: | ||
− | + | ===Основные параметры коллизий=== | |
− | + | ====Collision_Height==== | |
− | |||
− | |||
− | |||
*Параметр задает высоту. | *Параметр задает высоту. | ||
− | + | ====Collision_Length==== | |
*Задает параметр длинны. | *Задает параметр длинны. | ||
− | + | ====Collision_Width==== | |
*Задает параметр ширины. | *Задает параметр ширины. | ||
− | + | ===Прочие параметры коллизий=== | |
− | + | ====GravityChangeCollision==== | |
*Эта коллизия изменяет гравитацию внутри. | *Эта коллизия изменяет гравитацию внутри. | ||
− | + | ---- | |
+ | ====JumpCollision==== | ||
*Дает импульс Сонику. | *Дает импульс Сонику. | ||
=====ImpulseSpeedOnBoost===== | =====ImpulseSpeedOnBoost===== | ||
− | *Задает силу импульса, который даст коллизия когда Соник использует буст. | + | *Задает силу импульса, который даст коллизия, когда Соник использует буст. |
=====ImpulseSpeedOnNormal===== | =====ImpulseSpeedOnNormal===== | ||
− | *Задает силу импульса, который даст коллизия когда Соник бежит без буста. | + | *Задает силу импульса, который даст коллизия, когда Соник бежит без буста. |
+ | =====Pitch===== | ||
+ | *Это параметр, который задает угол запуска Соника. | ||
+ | =====SpeedMin===== | ||
+ | *Устанавливает, насколько быстро Соник должен пройти для того, чтобы активировать действие коллизии. | ||
+ | ---- | ||
+ | ====FallDeadCollision==== | ||
+ | *Когда Соник проходит через эту коллизию, он умирает. | ||
+ | ---- | ||
+ | ====SlidingCollision==== | ||
+ | *Коллизия заставляет Соника скользить. | ||
+ | ==Враги== | ||
+ | Враги находятся во вкладке Enemy. Там есть враги как для 2D-вида, так и для 3D. Но для того, чтобы ваши враги работали, и игра не вылетала, вам в вашем моде обязательно нужна будет папка bb3 в которой будет <nowiki>#Application.ar.00</nowiki>. | ||
− | ===== | + | Невозможно поставить, к примеру, Egg Pawn'а в [[Green Hill Zone]] (далее GHZ), т.к. данных о нём в GHZ попросту нету. Для этого распаковываем <nowiki>#Application.ar.00</nowiki> (по известному уже нам принципу), и внутри ищем файл EnemyArchiveTree.xml а уже в нем строку: |
− | + | ||
− | + | <spoiler> | |
− | + | <DefAppend> | |
− | ===== | + | |
− | + | <Name>ghz_cmn</Name> (название уровня, расшифровка дана в первом туториале) | |
− | ===== | + | |
− | + | <Archive>EnemyCommon</Archive> (название врага) | |
+ | |||
+ | <Archive>EnemyBeeton</Archive> | ||
+ | |||
+ | <Archive>EnemyBatabata</Archive> | ||
+ | |||
+ | <Archive>EnemyGanigani</Archive> | ||
+ | |||
+ | <Archive>EnemyMotora</Archive> | ||
+ | |||
+ | </DefAppend> | ||
+ | </spoiler> | ||
+ | Если в GHZ вам нужен Egg Pawn, то находим строку о ssh и строку о Egg Pawn'е. | ||
+ | |||
+ | <Archive>EnemyEPawnCommon</Archive> | ||
+ | |||
+ | Далее вставляем последовательно в GHZ и сохраняем, [[Хакинг:Sonic Generations/Создание уровня|перепаковываем]] и сохраняем это в наш 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<br> | ||
+ | К примеру, вам нужно использовать только одну камеру в определенном месте: | ||
+ | |||
+ | Первый объект: | ||
+ | * 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<br> | ||
+ | К примеру, вам нужно использовать несколько камер подряд: | ||
+ | |||
+ | Первый объект: | ||
+ | * 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. Этот пункт написан для тех, кто уже сделал сплайны для своего уровня. (если нет, смотрите [[Хакинг Sonic Generations/Сплайны|туториал по сплайнам]]) | ||
+ | |||
+ | *Переход в 2D осуществляется с помощью объекта ChangeMode_3Dto2D. Ставится он обычно так, чтобы буковки EDOM были расположены к Сонику. (т.е. входить он должен в EDOM а не в MODE). Также, чтобы 2D все-таки заработало, вам нужно поставить False в параметре m_IsEnableFromBack, хотя иногда это и не нужно. Ставится ВСЕГДА этот объект там, где начинаются сплайны и не где-то в другом месте. | ||
+ | *Переход обратно в 3D осуществляется с помощью либо ChangeMode_3DtoForward, либо Dash. Тут уже менять в настройках ничего не нужно. | ||
+ | ==Material Editor== | ||
+ | Материал Эдитор - очень важная штука. Он позволяет применять шейдеры к вашим материалам.<br> | ||
+ | Разнообразие шейдеров дает вам огромный простор для фантазий.<br> | ||
+ | Рассмотрим использование шейдеров на примере создания анимированной воды: | ||
+ | #Для того, чтобы добавить шейдер, нужно выбрать нужный объект, к примеру, waterssh. | ||
+ | #После чего выбираем нужный нам шейдер, к примеру, Water_Opacity_SoftEdge (самый оптимальный для воды). | ||
+ | #Дальше нам требуется добавить текстуры. Нажимаем Add Texture. Нам нужны текстуры dif, nrm, evn (их можно взять в уровне ssh). Для этого выбираем нужный вид и выбираем текстуру. | ||
+ | #После чего можно отредактировать движение воды (это особенно важно для водопадов), для этого стоит ставить отрицательные или положительные значения в g_WaterParam. | ||
+ | #После чего нужно нажать Apply Changes, иначе ничего не сохранится. | ||
+ | Список шейдеров воды:<br> | ||
+ | <spoiler> | ||
+ | *Water_Mul_SoftEdge | ||
+ | *Water Add | ||
+ | *Water_Opacity | ||
+ | *Water_Mul | ||
+ | *Water_Opacity_SoftEdge | ||
+ | *Water Add_SoftEdge | ||
+ | </spoiler><br> | ||
+ | В принципе, все они дают один и тот же эффект, но немного различаются. | ||
+ | Более полный список шейдеров будет приведен позже. | ||
+ | ==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.
Вводим эту ссылку и скачиваем необходимый файл.