【源氏跑酷】如何做一張多難度地圖

最近更新(2023.6.27)
????????模板代碼升級到了V1.9.1版本,可以支持多難度傳送門,并且支持霧子多難度跑酷,地圖工坊設(shè)置新增了 時間挑戰(zhàn) 功能,打開之后限定時間內(nèi)完成解鎖下一難度,修改Global.GoldMedal中的數(shù)值就可以修改限制時間長短
前言
up的兩張多難度地圖,里阿爾托:BCX66,伊利奧斯:RSHN8
地圖演示:https://www.bilibili.com/video/BV1j8411f7PZ

模板代碼:19SR2 /?EM8CD(霧子)
????????多難度地圖是由編輯器54CRY修改而來的,只要地圖數(shù)據(jù)全局變量名相同,國服編輯器的地圖數(shù)據(jù)大概率也能導(dǎo)入,目前沒有配套的編輯器,且只能實現(xiàn)0關(guān)多難度(作者比較懶),另外如果作圖的時候加了太多擊殺球/彈球(總數(shù)大于30~40左右),有可能會隨機炸房,作圖的時候還請不要做成源氏撿球圖

一、作圖階段【建議網(wǎng)頁端瀏覽】
????????不會作圖?是誰還沒看NEKO神的作圖指南,學會了再繼續(xù)后續(xù)步驟
? ? ? ? 作圖教程:https://www.bilibili.com/video/BV11v4y1n7oo
????????up為了避免ow地圖工坊的翻譯bug用的是英文界面,你們就只能中英對照著看了
? ? ? ? 現(xiàn)階段的多難度地圖是將多個0關(guān)相同的圖強行塞到一起,首先要做的就是多做幾個0關(guān)起點相同的地圖,作圖完成后將復(fù)制出來的數(shù)據(jù)存成文本文件,我們將在最后一步將他們整合起來,地圖數(shù)據(jù)內(nèi)容一般如下:
? ? ? ??actions
? ? ? ??{
????????? ? ? ??Global.A = Array(Vector(0, 0, 0));????檢查點數(shù)據(jù),數(shù)據(jù)格式為(Vector(),?Vector()),第一個矢量(Vector)就是0關(guān)起點
????????? ? ? ??Global.Dao = Array();??????????????????????檢查點給刀,數(shù)據(jù)格式為(-1, -1, -1),-1改成給刀關(guān)卡
????????? ? ? ??Global.SHIFT = Array();??????????????????檢查點給s,數(shù)據(jù)格式為(-1, -1, -1),-1改成給s關(guān)卡
????????? ? ? ??Global.H = Array();??????????????????????????擊殺球位置,數(shù)據(jù)格式為(Vector(),?Vector())
????????? ? ? ??Global.I = Array();????????????????????????????擊殺球半徑,數(shù)據(jù)格式為(-1, -1, -1),改-1可修改擊殺球半徑
????????? ? ? ??Global.killballnumber = Array();???????擊殺球關(guān)卡,數(shù)據(jù)格式為(-1, -1, -1),-1為擊殺球應(yīng)用關(guān)卡
????????? ? ? ??Global.TQ = Array();????????????????????????彈球位置,數(shù)據(jù)格式為(Vector(),?Vector())
????????? ? ? ??Global.EditMode = Array();??????????????彈球彈力,數(shù)據(jù)格式為(-1, -1, -1),改-1可修改彈球彈力
????????? ? ? ??Global.TQ5 = Array();??????????????????????彈球給刀,數(shù)據(jù)格式為(True, False),True給刀,F(xiàn)alse不給
????????? ? ? ??Global.TQ6 = Array();??????????????????????彈球給s,數(shù)據(jù)格式為(True, False),True給s,F(xiàn)alse不給
????????? ? ? ??Global.BounceToggleLock = Array();?????黃彈球,數(shù)據(jù)格式為(True, False),True黃彈球,F(xiàn)alse綠彈球
????????? ? ? ??Global.pinballnumber = Array();???????彈球關(guān)卡,數(shù)據(jù)格式為(-1, -1, -1),-1為彈球應(yīng)用關(guān)卡
????????}
? ? ? ? 所有全局(Global).變量名(A)就是包含地圖數(shù)據(jù)的全局變量了,等于號 “=” 是賦值,只要數(shù)組(Array)括號里是空的,都是無用數(shù)據(jù),可以刪除,以上是比較重要的數(shù)據(jù),建議保留,其他的全局變量如封禁、難度等不想游戲里地圖工坊設(shè)置反復(fù)設(shè)置的話可以保留
????????要想保證每次0關(guān)位置都相同,確定了0關(guān)位置就可以保存成數(shù)據(jù),每回作圖就復(fù)制粘貼到地圖數(shù)據(jù)規(guī)則,以下是數(shù)據(jù)保存的例子:
? ? ? ??actions
? ? ? ??{
????????? ? ? ??Global.A = Array(Vector(0, 0, 0));????檢查點數(shù)據(jù),數(shù)據(jù)格式為(Vector(),?Vector()),第一個矢量(Vector)就是0關(guān)起點
????????}
二、數(shù)據(jù)整合
????????前面作圖階段我們已經(jīng)獲得了好幾個0關(guān)相同的地圖數(shù)據(jù),接下來就是整合,有編程基礎(chǔ)的可能會好理解一點,實在搞不明白就找up幫忙整合罷,id:十六#31649

????? ? ①我們從檢查點數(shù)據(jù)(Global.A)開始,/**/中的內(nèi)容是注釋,導(dǎo)入游戲會自動刪除,每個數(shù)據(jù)以逗號分隔,不要漏掉任何一個逗號和括號,最后以分號 ";" 結(jié)尾,以下是檢查點全局變量數(shù)據(jù)模板:
? ? ? ??actions
? ? ? ??{
????????? ? ? ??Global.A = Array(
????????????????????????/* 0關(guān)矢量數(shù)據(jù),必須包含兩個相同的0關(guān)矢量數(shù)據(jù),否則會有bug */
????????????????????????Array(Vector(0, 0, 0), Vector(0,?0, 0)),?
????????????????????????/* Easy?*/
????????????????????????Array(),?
? ? ????????????????????/* Medium?以此類推,做了幾個圖就多加幾個數(shù)組(Array)*/
????????????????????????Array(),?
? ? ????????????????????/*?Hard?注意最后一個數(shù)組(Array)需要以 "));" 結(jié)尾?*/
????????????????????????Array());
????????}
? ? ? ??
????????②接著是檢查點給刀給s數(shù)據(jù)(Global.Dao/Global.SHIFT),數(shù)據(jù)結(jié)構(gòu)基本和檢查點數(shù)據(jù)一樣,從左到右分別是0關(guān)、Easy、Medium……,有多少難度就加多少個數(shù)組,0關(guān)給技能就把第一個-1改成0,如果遇到了-1但是0關(guān)有技能的問題就改成-2或者更小,其他難度就直接復(fù)制粘貼替換就好
? ? ? ??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的版本可以游戲內(nèi)單關(guān)封禁,但是多難度地圖現(xiàn)在還不支持多難度單關(guān)封禁,只支持分難度封禁卡蹭,需要額外添加兩個全局變量DifficultyBanCreate(卡小)和DifficultyBanMulti(蹭留),數(shù)組里的-1改成要封禁的難度就行,0關(guān)是0,Easy是1,Medium是2……
? ? ? ??actions
? ? ? ??{
????????????????Global.DifficultyBanCreate = Array(-1, -1, -1);
????????????????Global.DifficultyBanMulti = Array(2,?3, 4);
????????}
? ? ????④最后是擊殺球/彈球/傳送門數(shù)據(jù)(Global.H → Global.pinballnumber),以下數(shù)據(jù)使用的和前面的結(jié)構(gòu)不同,需要額外添加三個全局變量killballDifficulty、pinballDifficulty和CustomPortalDifficulty確定擊殺球/彈球/傳送門應(yīng)用到的難度,注意大小寫,一定要確定每個變量數(shù)組里所包含的數(shù)據(jù)數(shù)量相同
? ? ? ??actions
? ? ? ??{
? ? ? ??? ? ? ??Global.H = Array();??????????????????????????????????擊殺球位置,數(shù)據(jù)格式為(Vector(),?Vector())
????????? ? ? ??Global.I = Array();????????????????????????????????????擊殺球半徑,數(shù)據(jù)格式為(-1, -1, -1),改-1可修改擊殺球半徑
????????? ? ? ??Global.killballnumber = Array();???????????????擊殺球關(guān)卡,數(shù)據(jù)格式為(-1, -1, -1),-1為擊殺球應(yīng)用關(guān)卡
????????????????Global.killballDifficulty = Array();?????????????擊殺球難度,數(shù)據(jù)格式為(-1, -1, -1),-1為擊殺球應(yīng)用難度
????????? ? ? ??Global.TQ = Array();????????????????????????????????彈球位置,數(shù)據(jù)格式為(Vector(),?Vector())
????????? ? ? ??Global.EditMode = Array();??????????????????????彈球彈力,數(shù)據(jù)格式為(-1, -1, -1),改-1可修改彈球彈力
????????? ? ? ??Global.TQ5 = Array();??????????????????????????????彈球給刀,數(shù)據(jù)格式為(True, False),True給刀,F(xiàn)alse不給
????????? ? ? ??Global.TQ6 = Array();??????????????????????????????彈球給s,數(shù)據(jù)格式為(True, False),True給s,F(xiàn)alse不給
????????? ? ? ??Global.BounceToggleLock = Array();???????黃彈球,數(shù)據(jù)格式為(True, False),True黃彈球,F(xiàn)alse綠彈球
????????? ? ? ??Global.pinballnumber = Array();???????????????彈球關(guān)卡,數(shù)據(jù)格式為(-1, -1, -1),-1為彈球應(yīng)用關(guān)卡
????????????????Global.pinballDifficulty = Array();? ? ??????????彈球難度,數(shù)據(jù)格式為(-1, -1, -1),-1為擊殺球應(yīng)用難度
????????????????Global.CustomPortalStart = Array();????????傳送門入口,數(shù)據(jù)格式為(Vector(),?Vector())
????????????????Global.CustomPortalEndPoint = Array(); 傳送門出口,數(shù)據(jù)格式為(Vector(),?Vector())
????????????????Global.CustomPortalCP = Array();????????? ?傳送門關(guān)卡,數(shù)據(jù)格式為(-1, -1, -1),-1為傳送門應(yīng)用關(guān)卡
????????????????Global.CustomPortalDifficulty?= Array();? ?傳送門難度,數(shù)據(jù)格式為(-1, -1, -1),-1為傳送門應(yīng)用難度
????????}
????????擊殺球/彈球/傳送門最好別放在0關(guān),0關(guān)大概率能用但我沒測過bug
????????我個人建議,一個一個難度整合,比如先從Easy難度開始,假設(shè)Easy地圖擊殺球位置數(shù)據(jù)里有3個矢量(Vector),將他們復(fù)制過來,接著就是復(fù)制半徑和應(yīng)用關(guān)卡,最后在killballDifficulty里加上3個1,即Global.killballDifficulty =?Array(1, 1, 1);,代表Easy難度一共有3個擊殺球,彈球/傳送門也是如此
????????完成了Easy難度再復(fù)制Medium難度的,先數(shù)好數(shù)組里有多少個數(shù)據(jù),每個難度的每個賦值給變量的數(shù)組里所包含的數(shù)據(jù)數(shù)量應(yīng)該保持一致,比如一共有5個,那就Global.killballDifficulty =?Array(1,?1, 1, 2, 2, 2, 2, 2);

三、導(dǎo)入數(shù)據(jù)/上傳地圖
????????新建房間導(dǎo)入多難度模板代碼:19SR2,刪除模板地圖數(shù)據(jù)規(guī)則里的所有數(shù)據(jù),然后導(dǎo)入我們整合好的多難度數(shù)據(jù),換好地圖,改作者和代碼,不出意外的話,只要不出意外的話,真的沒有意外的話,重啟比賽之后你就能看到多難度地圖了
????????目前多難度地圖應(yīng)該最多支持7個難度,再往多了作圖的人也折磨,這個上限是可以修改的,具體可以找up,另外所有難度的名字也可以自定義,修改規(guī)則(" Combine Difficulty - 復(fù)合難度 by 十六 ")里的全局變量Global.DifficultyList就可以實現(xiàn),這里放出一個自定義過后的示例(代碼:13MEK)
