【源氏跑酷】如何做一张多难度地图

最近更新(2023.6.27)
模板代码升级到了V1.9.1版本,可以支持多难度传送门,并且支持雾子多难度跑酷,地图工坊设置新增了 时间挑战 功能,打开之后限定时间内完成解锁下一难度,修改Global.GoldMedal中的数值就可以修改限制时间长短
前言
up的两张多难度地图,里阿尔托:BCX66,伊利奥斯:RSHN8
地图演示:https://www.bilibili.com/video/BV1j8411f7PZ

模板代码:19SR2 / EM8CD(雾子)
多难度地图是由编辑器54CRY修改而来的,只要地图数据全局变量名相同,国服编辑器的地图数据大概率也能导入,目前没有配套的编辑器,且只能实现0关多难度(作者比较懒),另外如果作图的时候加了太多击杀球/弹球(总数大于30~40左右),有可能会随机炸房,作图的时候还请不要做成源氏捡球图

一、作图阶段【建议网页端浏览】
不会作图?是谁还没看NEKO神的作图指南,学会了再继续后续步骤
作图教程:https://www.bilibili.com/video/BV11v4y1n7oo
up为了避免ow地图工坊的翻译bug用的是英文界面,你们就只能中英对照着看了
现阶段的多难度地图是将多个0关相同的图强行塞到一起,首先要做的就是多做几个0关起点相同的地图,作图完成后将复制出来的数据存成文本文件,我们将在最后一步将他们整合起来,地图数据内容一般如下:
actions
{
Global.A = Array(Vector(0, 0, 0)); 检查点数据,数据格式为(Vector(), Vector()),第一个矢量(Vector)就是0关起点
Global.Dao = Array(); 检查点给刀,数据格式为(-1, -1, -1),-1改成给刀关卡
Global.SHIFT = Array(); 检查点给s,数据格式为(-1, -1, -1),-1改成给s关卡
Global.H = Array(); 击杀球位置,数据格式为(Vector(), Vector())
Global.I = Array(); 击杀球半径,数据格式为(-1, -1, -1),改-1可修改击杀球半径
Global.killballnumber = Array(); 击杀球关卡,数据格式为(-1, -1, -1),-1为击杀球应用关卡
Global.TQ = Array(); 弹球位置,数据格式为(Vector(), Vector())
Global.EditMode = Array(); 弹球弹力,数据格式为(-1, -1, -1),改-1可修改弹球弹力
Global.TQ5 = Array(); 弹球给刀,数据格式为(True, False),True给刀,False不给
Global.TQ6 = Array(); 弹球给s,数据格式为(True, False),True给s,False不给
Global.BounceToggleLock = Array(); 黄弹球,数据格式为(True, False),True黄弹球,False绿弹球
Global.pinballnumber = Array(); 弹球关卡,数据格式为(-1, -1, -1),-1为弹球应用关卡
}
所有全局(Global).变量名(A)就是包含地图数据的全局变量了,等于号 “=” 是赋值,只要数组(Array)括号里是空的,都是无用数据,可以删除,以上是比较重要的数据,建议保留,其他的全局变量如封禁、难度等不想游戏里地图工坊设置反复设置的话可以保留
要想保证每次0关位置都相同,确定了0关位置就可以保存成数据,每回作图就复制粘贴到地图数据规则,以下是数据保存的例子:
actions
{
Global.A = Array(Vector(0, 0, 0)); 检查点数据,数据格式为(Vector(), Vector()),第一个矢量(Vector)就是0关起点
}
二、数据整合
前面作图阶段我们已经获得了好几个0关相同的地图数据,接下来就是整合,有编程基础的可能会好理解一点,实在搞不明白就找up帮忙整合罢,id:十六#31649

①我们从检查点数据(Global.A)开始,/**/中的内容是注释,导入游戏会自动删除,每个数据以逗号分隔,不要漏掉任何一个逗号和括号,最后以分号 ";" 结尾,以下是检查点全局变量数据模板:
actions
{
Global.A = Array(
/* 0关矢量数据,必须包含两个相同的0关矢量数据,否则会有bug */
Array(Vector(0, 0, 0), Vector(0, 0, 0)),
/* Easy */
Array(),
/* Medium 以此类推,做了几个图就多加几个数组(Array)*/
Array(),
/* Hard 注意最后一个数组(Array)需要以 "));" 结尾 */
Array());
}
②接着是检查点给刀给s数据(Global.Dao/Global.SHIFT),数据结构基本和检查点数据一样,从左到右分别是0关、Easy、Medium……,有多少难度就加多少个数组,0关给技能就把第一个-1改成0,如果遇到了-1但是0关有技能的问题就改成-2或者更小,其他难度就直接复制粘贴替换就好
actions
{
Global.Dao = Array(-1, Array(2, 4), Array(4, 6), Array(1, 3), Array(3, 5));
Global.SHIFT = Array(-1, Array(-1, -1), Array(-1, -1), Array(-1, -1), Array(-1, -1));
}
③然后是分难度封禁卡蹭,v1.9的版本可以游戏内单关封禁,但是多难度地图现在还不支持多难度单关封禁,只支持分难度封禁卡蹭,需要额外添加两个全局变量DifficultyBanCreate(卡小)和DifficultyBanMulti(蹭留),数组里的-1改成要封禁的难度就行,0关是0,Easy是1,Medium是2……
actions
{
Global.DifficultyBanCreate = Array(-1, -1, -1);
Global.DifficultyBanMulti = Array(2, 3, 4);
}
④最后是击杀球/弹球/传送门数据(Global.H → Global.pinballnumber),以下数据使用的和前面的结构不同,需要额外添加三个全局变量killballDifficulty、pinballDifficulty和CustomPortalDifficulty确定击杀球/弹球/传送门应用到的难度,注意大小写,一定要确定每个变量数组里所包含的数据数量相同
actions
{
Global.H = Array(); 击杀球位置,数据格式为(Vector(), Vector())
Global.I = Array(); 击杀球半径,数据格式为(-1, -1, -1),改-1可修改击杀球半径
Global.killballnumber = Array(); 击杀球关卡,数据格式为(-1, -1, -1),-1为击杀球应用关卡
Global.killballDifficulty = Array(); 击杀球难度,数据格式为(-1, -1, -1),-1为击杀球应用难度
Global.TQ = Array(); 弹球位置,数据格式为(Vector(), Vector())
Global.EditMode = Array(); 弹球弹力,数据格式为(-1, -1, -1),改-1可修改弹球弹力
Global.TQ5 = Array(); 弹球给刀,数据格式为(True, False),True给刀,False不给
Global.TQ6 = Array(); 弹球给s,数据格式为(True, False),True给s,False不给
Global.BounceToggleLock = Array(); 黄弹球,数据格式为(True, False),True黄弹球,False绿弹球
Global.pinballnumber = Array(); 弹球关卡,数据格式为(-1, -1, -1),-1为弹球应用关卡
Global.pinballDifficulty = Array(); 弹球难度,数据格式为(-1, -1, -1),-1为击杀球应用难度
Global.CustomPortalStart = Array(); 传送门入口,数据格式为(Vector(), Vector())
Global.CustomPortalEndPoint = Array(); 传送门出口,数据格式为(Vector(), Vector())
Global.CustomPortalCP = Array(); 传送门关卡,数据格式为(-1, -1, -1),-1为传送门应用关卡
Global.CustomPortalDifficulty = Array(); 传送门难度,数据格式为(-1, -1, -1),-1为传送门应用难度
}
击杀球/弹球/传送门最好别放在0关,0关大概率能用但我没测过bug
我个人建议,一个一个难度整合,比如先从Easy难度开始,假设Easy地图击杀球位置数据里有3个矢量(Vector),将他们复制过来,接着就是复制半径和应用关卡,最后在killballDifficulty里加上3个1,即Global.killballDifficulty = Array(1, 1, 1);,代表Easy难度一共有3个击杀球,弹球/传送门也是如此
完成了Easy难度再复制Medium难度的,先数好数组里有多少个数据,每个难度的每个赋值给变量的数组里所包含的数据数量应该保持一致,比如一共有5个,那就Global.killballDifficulty = Array(1, 1, 1, 2, 2, 2, 2, 2);

三、导入数据/上传地图
新建房间导入多难度模板代码:19SR2,删除模板地图数据规则里的所有数据,然后导入我们整合好的多难度数据,换好地图,改作者和代码,不出意外的话,只要不出意外的话,真的没有意外的话,重启比赛之后你就能看到多难度地图了
目前多难度地图应该最多支持7个难度,再往多了作图的人也折磨,这个上限是可以修改的,具体可以找up,另外所有难度的名字也可以自定义,修改规则(" Combine Difficulty - 复合难度 by 十六 ")里的全局变量Global.DifficultyList就可以实现,这里放出一个自定义过后的示例(代码:13MEK)
