Ru/Level Transition (Portal 2): Difference between revisions
(Заготовка для перевода) |
m (obsolete language category) |
||
(17 intermediate revisions by 3 users not shown) | |||
Line 1: | Line 1: | ||
{{ | {{lang|title=Переходы между уровнями|Level Transition (Portal 2)}} | ||
|title=Переходы между уровнями | |||
| | |||
}} | |||
=Кооперативный режим= | =Кооперативный режим= | ||
Здесь описано создание последовательности тестовых камер для кооперативного режима. | |||
==Создание карты== | ==Создание карты== | ||
Во-первых, {{L|Creating a Portal 2 Coop Map|создайте кооперативную карту}}. Добавьте экземпляр {{L|func_instance}}, задав его файл VMF на instances/coop/coop_lighting_ents.vmf. (All we're using is the {{L|point_servercommand}} inside.) | |||
==Изменение Endlevel== | ==Изменение Endlevel== | ||
Логика конца карты находится в экземпляре instances/coop/coop_endlevel_room.vmf. Загрузите эту карту в Hammer и '''сохраните ее как копию'''-- например, my_coop_endlevel_room.vmf. | |||
В маленькой комнатке в этой карте есть {{L|logic_script}} под именем transition_script. (Для его выбора можете воспользоваться командой поиска энтити (Find Entities).) Его свойству Entity Scripts задано значение debug_scripts/mp_coop_transition_list.nut. | |||
''' | '''Не изменяйте этот файл!''' Это часть Portal 2, и трогать его не следует. Вместо этого в свойстве Entity Scripts укажите свой собственный скрипт-- например, debug_scripts/my_mp_coop_transition_list.nut. Затем сохраните карту. | ||
Вернитесь в свой кооперативный уровень, выберите func_instance, содержащий комнату конца уровня, и отредактируйте его файл VMF, чтобы он ссылался на измененный вами файл. | |||
==Изменение скрипта== | ==Изменение скрипта== | ||
Теперь перейдите в scripts/vscripts/debugscripts в папке установки Portal 2 и создайте этот скрипт. (Не трогайте скрипт Valve.) Вам потребуется что-то вроде этого: | |||
<source lang="text"> | <source lang="text"> | ||
// | // Порядок карт | ||
MapPlayOrder<- [ | MapPlayOrder<- [ | ||
"mp_coop_easiest", | "mp_coop_easiest", | ||
Line 34: | Line 30: | ||
local nextmap = -2 | local nextmap = -2 | ||
// | // Прокручивание карт | ||
foreach( index, map in MapPlayOrder ) | foreach( index, map in MapPlayOrder ) | ||
{ | { | ||
if( GetMapName() == MapPlayOrder[index] ) | if( GetMapName() == MapPlayOrder[index] ) | ||
{ | { | ||
// | // Это карта, в которой мы сейчас находимся | ||
nextmap = -1 | nextmap = -1 | ||
} | } | ||
Line 46: | Line 42: | ||
if (nextmap == -1) | if (nextmap == -1) | ||
{ | { | ||
// | // Первая карта, идущая после этой | ||
nextmap = index | nextmap = index | ||
} | } | ||
Line 56: | Line 52: | ||
if (nextmap > 0) | if (nextmap > 0) | ||
{ | { | ||
// | // Найдена карта; переходим к ней | ||
EntFire( "@command", "command", "changelevel " + MapPlayOrder[nextmap], 1.0 ) | EntFire( "@command", "command", "changelevel " + MapPlayOrder[nextmap], 1.0 ) | ||
} | } | ||
else | else | ||
{ | { | ||
// | // Карта не найдена; больше ничего нет, заврешение | ||
EntFire( "@command", "command", "disconnect", 2.0 ) | EntFire( "@command", "command", "disconnect", 2.0 ) | ||
} | } | ||
Line 67: | Line 63: | ||
</source> | </source> | ||
Верхний массив, MapPlayOrder, это список ваших карт по порядку. (Тем, кто не знаком с Squirrel, следует иметь в виду, что каждая карта заключается в кавычки, ''между'' картами должны стоять запятые. То есть после последней карты запятая не ставится. И не забудьте поставить закрывающую скобку!) | |||
Чтобы после прохождения карт возвращаться в распределитель, добавьте "mp_coop_lobby_2" как последнюю карту в списке (MapPlayOrder). | |||
==Проверка== | ==Проверка== | ||
Создайте еще несколько кооперативных карт с использованием своей измененной комнаты конца уровня вместо стандартной. Скомпилируйте все карты. | |||
Теперь вы можете {{L|Testing Portal 2 Co-Op Maps Alone|проверить свои карты}}. Просто загрузите первую карту и сыграйте в нее. По достижении её конца Portal 2 переключится на следующую карту. А в конце последней карты произойдет выход в главное меню. | |||
( | (Также можно добавить Распределитель как в игре. См. mp_coop_transition_list.nut.) | ||
=Одиночный режим= | =Одиночный режим= | ||
В одиночном режиме все примерно так же. | |||
==Изменение переходного уровня== | ==Изменение переходного уровня== | ||
Логика конца карты в одиночном режиме находится в экземпляре ({{L|func_instance}}) arrival_departure_transition_ents.vmf в папке maps/instances/transitions. Загрузите эту карту в Hammer и '''сохраните под другим именем''', например my_arrival_departure_transition_ents.vmf. | |||
В этом экземпляре в самой маленькой комнате находится логический скрипт ({{L|logic_script}}) под именем @transition_Script. Его свойство Script Entity указывает на transitions/sp_transition_list.nut. | |||
''' | '''Не изменяйте этот файл'''. Вместо этого укажите свой собственный скрипт, например transitions/my_sp_transition_list.nut. | ||
По желанию здесь же вы можете изменить {{L|game_text}} под именем @end_of_playtest_text, отображающий строку текста после последней карты. Просто измените свойство Message Text. | |||
Сохраните измененный файл VMF. | |||
==Изменение скрипта== | ==Изменение скрипта== | ||
Внутри скрипта описано множество других действий, и несомненно проще было бы создать описание простой серии карт. Здесь приведен необходимый минимум. | |||
В списке найдите карту "demo_paint", последнюю карту в файле. Добавьте свои карты после неё. (Имена карт берутся в кавычки, между ними ставится запятая, но ''после последней карты запятая не ставится''. Не забудьте закрывающую скобку.) | |||
Результат должен выглядеть примерно так: | |||
<source lang="text"> | <source lang="text"> | ||
Line 108: | Line 104: | ||
// --------------------------------------------------- | // --------------------------------------------------- | ||
// | // Ваше название | ||
// --------------------------------------------------- | // --------------------------------------------------- | ||
"your_first_level", | "your_first_level", | ||
Line 115: | Line 111: | ||
</source> | </source> | ||
Логика смены карт находится в TransitionFromMap. Чтобы в Portal 2 после отображения завершающего текста вышло главное меню, найдите следующие строки | |||
<source lang="text"> | <source lang="text"> | ||
Line 122: | Line 118: | ||
</source> | </source> | ||
и добавьте эту строку после них: | |||
<source lang="text"> | <source lang="text"> | ||
EntFire( "@command", "Command", "disconnect", 2.0 ) | EntFire( "@command", "Command", "disconnect", 2.0 ) | ||
</source> | </source> | ||
Сохраните файл (изменённую копию файла .nut - не заменяйте исходный файл Valve!) | |||
==Проверка== | |||
Создайте и скомпилируйте остальные карты. Загрузите и запустите в Hammer первую карту; Portal 2 загрузится с первой картой. По достижении её конца Portal 2 переключится на следующую карту. А в конце последней карты произойдет выход в главное меню. | |||
{{ACategory|Portal 2 Level Design}} | |||
{{ACategory|Portal 2 Tutorials}} |
Latest revision as of 03:51, 22 August 2024
Кооперативный режим
Здесь описано создание последовательности тестовых камер для кооперативного режима.
Создание карты
Во-первых, создайте кооперативную карту . Добавьте экземпляр func_instance , задав его файл VMF на instances/coop/coop_lighting_ents.vmf. (All we're using is the point_servercommand inside.)
Изменение Endlevel
Логика конца карты находится в экземпляре instances/coop/coop_endlevel_room.vmf. Загрузите эту карту в Hammer и сохраните ее как копию-- например, my_coop_endlevel_room.vmf.
В маленькой комнатке в этой карте есть logic_script под именем transition_script. (Для его выбора можете воспользоваться командой поиска энтити (Find Entities).) Его свойству Entity Scripts задано значение debug_scripts/mp_coop_transition_list.nut.
Не изменяйте этот файл! Это часть Portal 2, и трогать его не следует. Вместо этого в свойстве Entity Scripts укажите свой собственный скрипт-- например, debug_scripts/my_mp_coop_transition_list.nut. Затем сохраните карту.
Вернитесь в свой кооперативный уровень, выберите func_instance, содержащий комнату конца уровня, и отредактируйте его файл VMF, чтобы он ссылался на измененный вами файл.
Изменение скрипта
Теперь перейдите в scripts/vscripts/debugscripts в папке установки Portal 2 и создайте этот скрипт. (Не трогайте скрипт Valve.) Вам потребуется что-то вроде этого:
// Порядок карт
MapPlayOrder<- [
"mp_coop_easiest",
"mp_coop_easiest_two"
]
function TransitionFromMap()
{
local nextmap = -2
// Прокручивание карт
foreach( index, map in MapPlayOrder )
{
if( GetMapName() == MapPlayOrder[index] )
{
// Это карта, в которой мы сейчас находимся
nextmap = -1
}
else
{
if (nextmap == -1)
{
// Первая карта, идущая после этой
nextmap = index
}
}
}
printl( "nextmap = " + nextmap )
if (nextmap > 0)
{
// Найдена карта; переходим к ней
EntFire( "@command", "command", "changelevel " + MapPlayOrder[nextmap], 1.0 )
}
else
{
// Карта не найдена; больше ничего нет, заврешение
EntFire( "@command", "command", "disconnect", 2.0 )
}
}
Верхний массив, MapPlayOrder, это список ваших карт по порядку. (Тем, кто не знаком с Squirrel, следует иметь в виду, что каждая карта заключается в кавычки, между картами должны стоять запятые. То есть после последней карты запятая не ставится. И не забудьте поставить закрывающую скобку!)
Чтобы после прохождения карт возвращаться в распределитель, добавьте "mp_coop_lobby_2" как последнюю карту в списке (MapPlayOrder).
Проверка
Создайте еще несколько кооперативных карт с использованием своей измененной комнаты конца уровня вместо стандартной. Скомпилируйте все карты.
Теперь вы можете проверить свои карты . Просто загрузите первую карту и сыграйте в нее. По достижении её конца Portal 2 переключится на следующую карту. А в конце последней карты произойдет выход в главное меню.
(Также можно добавить Распределитель как в игре. См. mp_coop_transition_list.nut.)
Одиночный режим
В одиночном режиме все примерно так же.
Изменение переходного уровня
Логика конца карты в одиночном режиме находится в экземпляре (func_instance ) arrival_departure_transition_ents.vmf в папке maps/instances/transitions. Загрузите эту карту в Hammer и сохраните под другим именем, например my_arrival_departure_transition_ents.vmf.
В этом экземпляре в самой маленькой комнате находится логический скрипт (logic_script ) под именем @transition_Script. Его свойство Script Entity указывает на transitions/sp_transition_list.nut.
Не изменяйте этот файл. Вместо этого укажите свой собственный скрипт, например transitions/my_sp_transition_list.nut.
По желанию здесь же вы можете изменить game_text под именем @end_of_playtest_text, отображающий строку текста после последней карты. Просто измените свойство Message Text.
Сохраните измененный файл VMF.
Изменение скрипта
Внутри скрипта описано множество других действий, и несомненно проще было бы создать описание простой серии карт. Здесь приведен необходимый минимум.
В списке найдите карту "demo_paint", последнюю карту в файле. Добавьте свои карты после неё. (Имена карт берутся в кавычки, между ними ставится запятая, но после последней карты запятая не ставится. Не забудьте закрывающую скобку.)
Результат должен выглядеть примерно так:
// ---------------------------------------------------
// Demo files
// ---------------------------------------------------
"demo_intro",
"demo_underground",
"demo_paint",
// ---------------------------------------------------
// Ваше название
// ---------------------------------------------------
"your_first_level",
"your_second_level"
]
Логика смены карт находится в TransitionFromMap. Чтобы в Portal 2 после отображения завершающего текста вышло главное меню, найдите следующие строки
EntFire( "end_of_playtest_text", "display", 0 )
EntFire( "@end_of_playtest_text", "display", 0 )
и добавьте эту строку после них:
EntFire( "@command", "Command", "disconnect", 2.0 )
Сохраните файл (изменённую копию файла .nut - не заменяйте исходный файл Valve!)
Проверка
Создайте и скомпилируйте остальные карты. Загрузите и запустите в Hammer первую карту; Portal 2 загрузится с первой картой. По достижении её конца Portal 2 переключится на следующую карту. А в конце последней карты произойдет выход в главное меню.