实验室切换
* 合作模式
下列是为双人模式制作关卡切换的方式。
做张地图,并使用“实例”
首先, 制作一张合作地图。 然后添加一个 func_instance , 双击查看它的 VMF file 并找到名为 instances/coop/coop_lighting_ents.vmf的文件 (所用内容均为游戏自带)
修改取得的实例
地图结束逻辑位于实例 instances/coop/coop_endlevel_room.vmf 中, 以地图的方式打开它,然后点击Save 保存一份副本 ———例如my_coop_endlevel_room.vmf
在这张地图的一个小房间里,你能找到名为 transition_script 的 logic_script 实体。其 Entity Scripts 属性设置为 debug_scripts/mp_coop_transition_list.nut
.
无需修改一开始选中的文件! 它是Portal 2原先的一部分,你也绝对不想碰它(对吧?)。相反,更改副本的 Entity Scripts 属性指向你自己的L_S
例如debug_scripts/my_mp_coop_transition_list.nut 然后,保存地图。
回到你的合作实验室, 选中拆卸室的实例房间, 找到 func_instance 后将它的 VMF file 换成你的副本.
修改脚本
现在转到传送门2安装并创建这个脚本(?)
当然,别碰V社自带的小玩意儿,你只需要这种: scripts/vscripts/debugscripts
(这段莫得翻译)
// Map order
MapPlayOrder<- [
"mp_coop_easiest",
"mp_coop_easiest_two"
]
function TransitionFromMap()
{
local nextmap = -2
// Loop through maps
foreach( index, map in MapPlayOrder )
{
if( GetMapName() == MapPlayOrder[index] )
{
// This is the map we're on
nextmap = -1
else
{
if (nextmap == -1)
{
// This is the first map past that one
nextmap = index
}
}
}
printl( "nextmap = " + nextmap )
if (nextmap > 0)
{
// We found a map; go to it
EntFire( "@command", "command", "changelevel " + MapPlayOrder[nextmap], 1.0 )
}
else
{
// No map found; we're done
EntFire( "@command", "command", "disconnect", 2.0
}
}
顶部的数组 MapPlayOrder 是按顺序排列的地图列表。(对于那些不熟悉 Squirrel 的人,请注意每张地图都用引号括起来,并且每张地图 之间 必须有一个逗号。也就是说,最后一个映射后面没有逗号。别忘了最后一个括号!)
要转到地图结束后的大厅,请将 “mp_coop_lobby_2” 添加为列表中的最后一个地图 (MapPlayOrder)
试试就逝世
使用修改后的 endlevel room 而不是默认的 endlevel room 制作额外的合作地图。将它们全部编译。
现在,你就能试试你的地图了。加载第一张地图玩玩。
当你通关时,游戏 将切换到下一张地图。一旦它到达终点,它就会简单地退出到主菜单。
* 单人模式
单人模式亦如此。
像上面一样修改
在单人模式中, 结束逻辑arrival_departure_transition_ents.vmf 位于maps/instances/transitions文件夹中.以地图形式打开它并保存一个副本,
例如my_arrival_departure_transition_ents.vmf
在这张地图最小的房间里依然有一个名为@transition_Script的logic_script 。其 Script Entity 属性指向 transitions/sp_transition_list.nut
还是别碰它娘. 相反,更改副本的 Entity Scripts 属性指向你自己的L_S 例如transitions/my_sp_transition_list.nut.
保存修改后的VMF版本。
修改脚本
这个脚本中有很多内容,毫无疑问,一个更简单的版本可以处理一系列简单的实验室;但是,这是你必须做的最低限度(你必须吃的屎山代码)。 查找地图列表并搜索demo_paint,即最后一张地图在文件中,在这后面添加你的地图。(同样,地图名称用引号括起来,除了最后一张地图外,后面还有一个逗号。别忘了最后的括号) 结果应该如下所示:
// ---------------------------------------------------
// Demo files
// ---------------------------------------------------
"demo_intro",
"demo_underground",
"demo_paint",
// ---------------------------------------------------
// Your title
// ---------------------------------------------------
"your_first_level",
"your_second_level"
]
切换地图的实际逻辑在 TransitionFromMap 中。要使游戏在显示结束文本后退出到主菜单,请查找以下行:
EntFire( "end_of_playtest_text", "display", 0 )
EntFire( "@end_of_playtest_text", "display", 0 )
并在它们后面添加:
EntFire( "@command", "Command", "disconnect", 2.0 )
保存它。 (同样的,修改副本而不是V社的东西)
编译和测试
制作并编译其他地图。
现在可以返回第一张地图并从 Hammer 运行它;游戏将加载并将你放入你的第一张地图。当你到达末尾时,它将运行脚本中的下一个地图,并在所有操作完成后退出到主菜单。