Хакинг:Sonic Generations/SonicGLVL — различия между версиями
Red TF (обсуждение | вклад) м |
Red TF (обсуждение | вклад) м |
||
Строка 440: | Строка 440: | ||
*Переход в 2D осуществляется с помощью объекта ChangeMode_3Dto2D. Ставится он обычно так, чтобы буковки EDOM были расположены к Сонику. (т.е. входить он должен в EDOM а не в MODE). Так же, чтобы 2D все-таки заработало, Вам нужно поставить False в параметре m_IsEnableFromBack, хотя иногда это и не нужно. Ставится ВСЕГДА этот объект там, где начинаются сплайны и не где-то в другом месте. | *Переход в 2D осуществляется с помощью объекта ChangeMode_3Dto2D. Ставится он обычно так, чтобы буковки EDOM были расположены к Сонику. (т.е. входить он должен в EDOM а не в MODE). Так же, чтобы 2D все-таки заработало, Вам нужно поставить False в параметре m_IsEnableFromBack, хотя иногда это и не нужно. Ставится ВСЕГДА этот объект там, где начинаются сплайны и не где-то в другом месте. | ||
*Переход обратно в 3D осуществляется с помощью либо ChangeMode_3DtoForward, либо Dash. Тут уже менять в настройках ничего не нужно. | *Переход обратно в 3D осуществляется с помощью либо ChangeMode_3DtoForward, либо Dash. Тут уже менять в настройках ничего не нужно. | ||
+ | ==Material Editor== | ||
+ | Материал Эдитор очень важная штука. Он позволяет применять шейдеры к вашим материалам.<br> | ||
+ | Разнообразие шейдеров дает вам огромный простор для фантазий.<br> | ||
+ | Рассмотрим использование шейдеров на примере создания анимированной воды: | ||
+ | #Для того, чтобы добавить шейдер нужно выбрать нужный объект, к примеру, waterssh.(1) | ||
+ | #После чего выбираем нужный нам шейдер, к примеру, Water_Opacity_SoftEdge (самый оптимальный для воды). (2) | ||
+ | #Дальше нам требуется добавить текстуры. Нажимаем Add Texture. Нам нужны текстуры dif, nrm, evn (их можно взять в уровне ssh). Для этого выбираем нужный вид и выбираем текстуру (3; 3.1;) | ||
+ | #После чего можно отредактировать движение воды (это особенно важно для водопадов) для этого стоит ставить отрицательные или положительные значения в g_WaterParam (4) | ||
+ | #После чего нужно нажать Apply Changes иначе ничего не сохраниться (5) | ||
+ | Список шейдеров воды: | ||
+ | <spoiler> | ||
+ | Water_Mul_SoftEdge | ||
+ | Water Add | ||
+ | Water_Opacity | ||
+ | Water_Mul | ||
+ | Water_Opacity_SoftEdge | ||
+ | Water Add_SoftEdge | ||
+ | </spoiler> | ||
+ | В принципе, все они дают один и тот же эффект, но немного различаются. | ||
+ | Более полный список шейдеров будет приведен позже. |
Версия 18:51, 26 марта 2013
После создания и запаковки уровня у Вас появился вопрос, что же дальше? Как мне поставить пружины или ускорители? Как вставить камеры? На эти вопросы я отвечу здесь.
Содержание
Быстрый гайд
Многие затрудняются с камерой в SonicGLVL т.к. она не похожа на ту, что есть в 3ds Max'е. Чтобы крутить камеру зажмите колесико мышки, чтобы крутить влево/вправо/вверх/вниз – alt + колесико мышки. Чтобы приближать – ctrl + колесико мышки.
Объекты
Начнем с того, что пройдемся по объектам в соникглвл. В основном все нужные нам объекты находятся в Common. Там есть все нужное для нормального геймплея – кольца, кольца и панели для ускорения и прочее.
Стоит отметить, что каждый объект нуждается в тщательной калибровке, невозможно с первого раза поставить пружину так, чтобы попасть туда, куда вам нужно. Поэтому приготовьте много валерьянки, ибо бегать между программой и игрой Вам придется очень много.
Основные параметры
IsCastShadow
- Если true то объекты будет отбрасывать тень. Если false то не будет. Стоит отметить, что некоторые объекты не могут отбрасывать тень.
Range
- Это свойство устанавливает расстояние отрисовки объекта. Если диапазон очень низкий, то скорее всего его не будет видно издали. Если же он наоборот высок, то его можно будет видеть за километр.
- Иногда приходится устанавливать очень большие значения в случае камер и изменений камер; это не только расстояние отрисовки, но и расстояние, на котором объект существует. Если объект попытается взаимодействовать с другими объектами, которые не загружены / не находятся в одной области с ним, то игра скорее всего вылетит.
SetObjectID
- Параметр ID объекта, не трогайте этот параметр без надобности.
OutOfControl
- Этот параметр дает понять, как долго эффект объекта будет действовать на соника. К примеру, если в JumpBoard этот коэффициент большой, то вы не сможете некоторое время управлять соником после взаимодействия.
IsTo3D
- Если true то Соник вернется в 3D, если он в 2D разделе. Если false, Sonic не будет переключаться обратно в 3D.
Вот немного особенностей некоторых объектов:
Ring
- IsLightSpeedDashTarget
- Если поставить true то кольцо превратится в лайпспиддашринг, если 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. Чем больше значение тем больше платформа будет.
- loorType
- 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. Там есть враги как для 2д вида, так и для 3д. Но для того, чтобы ваши враги работали, и игра не вылетала, вам в вашем моде обязательно нужна будет папка 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
Тут весь прикол в том, что высота и наклон, и все-все остальное задается не вручную (это очень все облегчает) а самим расположением объекта (можете камерой соникглвл присмотреть себе ракурс и примерно поставить туда камеру, такой же вид будет и в игре). А все остальные настройки, как и в parallel, да и в других камерах так же.
objCameraPanVertical
Настройки такие же как и в parallel, а высота и расположение зависит от расположение в самом соникглвл как и 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
Переходы от 3д и 2д задаются двумя вещами – сплайнами и объектами серии Changers. Этот пункт написан для тех, кто уже сделал сплайны для своего уровня. (если нет, смотрите туториал по сплайнам)
- Переход в 2D осуществляется с помощью объекта ChangeMode_3Dto2D. Ставится он обычно так, чтобы буковки EDOM были расположены к Сонику. (т.е. входить он должен в EDOM а не в MODE). Так же, чтобы 2D все-таки заработало, Вам нужно поставить False в параметре m_IsEnableFromBack, хотя иногда это и не нужно. Ставится ВСЕГДА этот объект там, где начинаются сплайны и не где-то в другом месте.
- Переход обратно в 3D осуществляется с помощью либо ChangeMode_3DtoForward, либо Dash. Тут уже менять в настройках ничего не нужно.
Material Editor
Материал Эдитор очень важная штука. Он позволяет применять шейдеры к вашим материалам.
Разнообразие шейдеров дает вам огромный простор для фантазий.
Рассмотрим использование шейдеров на примере создания анимированной воды:
- Для того, чтобы добавить шейдер нужно выбрать нужный объект, к примеру, waterssh.(1)
- После чего выбираем нужный нам шейдер, к примеру, Water_Opacity_SoftEdge (самый оптимальный для воды). (2)
- Дальше нам требуется добавить текстуры. Нажимаем Add Texture. Нам нужны текстуры dif, nrm, evn (их можно взять в уровне ssh). Для этого выбираем нужный вид и выбираем текстуру (3; 3.1;)
- После чего можно отредактировать движение воды (это особенно важно для водопадов) для этого стоит ставить отрицательные или положительные значения в g_WaterParam (4)
- После чего нужно нажать Apply Changes иначе ничего не сохраниться (5)
Список шейдеров воды:
Water_Mul_SoftEdge Water Add Water_Opacity Water_Mul Water_Opacity_SoftEdge Water Add_SoftEdge
В принципе, все они дают один и тот же эффект, но немного различаются. Более полный список шейдеров будет приведен позже.