User:在咕咕咕的咕子/世界地图格式:修订间差异

来自Arcaea中文维基
(fix,信息解析后面再写)
无编辑摘要
 
第6行: 第6行:
==阅前提示==
==阅前提示==
 本页面记载的是Arcaea移动版服务器中存放的世界模式地图的格式。<br>
 本页面记载的是Arcaea移动版服务器中存放的世界模式地图的格式。<br>
 地图 实际上为一份json 文档, 其格式要求较为严格,如果您想要编写地图的话,请确保您拥有扎实的json 编写基 。<br>
  每张 地图 均为JSON 文档, 建议在 编写 前学习 本的JSON文档语法 。<br>
''如果您有能力做到自己建立一个Arcaea服务器游玩,本页面兴许可以在您编写地图时提供帮助。''


==代码解析==
==代码解析==
第17行: 第16行:
}
}
</syntaxhighlight>
</syntaxhighlight>
 在地图中,也 保存着地图 台阶的信息,每个台阶的编写框架如下:
 在地图中,也保存着地图台阶的信息,每个台阶的编写框架如下:
<syntaxhighlight lang="json">
<syntaxhighlight lang="json">
{
{
第36行: 第35行:
**float -- 浮点数 例:<code>123.456</code>
**float -- 浮点数 例:<code>123.456</code>
**boolean -- 布尔值 例:<code>true</code>(是),<code>false</code>(否)
**boolean -- 布尔值 例:<code>true</code>(是),<code>false</code>(否)
**array -- 数组 例:<code>[4, 2, 2]</code>
**object -- 对象 例:<code>{"info": "helloworld"}</code>


  对于 一张地图 可以填写的所有信息如下。''(地图信息 允许 乱序排放, 并没有强制的 排序要求)''
 一张地图 可以填写的所有信息如下。''(地图信息 可以 乱序排放, 排序要求)''
  {
  {
    "map_id": string,
    "map_id": string,
第75行: 第76行:
    "require_localunlock_songid": string,
    "require_localunlock_songid": string,
    "require_localunlock_challengeid": string,
    "require_localunlock_challengeid": string,
    "coordinate": string ("x,y"),
    "coordinate": string (x,y),
    "step_count": int,
    "step_count": int,
    "custom_bg": string,
    "custom_bg": string,
第85行: 第86行:
    "steps": [
    "steps": [
      {
      {
        // step 1
        "position": int,
     },
       "capture": int,
     {
       "items": [
        // step 2
         {
           "type": string,
           "id": string,
           "amount": int
         }, ...
       ],
       "restrict_id": string,
       "restrict_ids": [
         string, ...
       ],
       "restrict_type": string,
       "restrict_difficulty": int,
       "step_type": [
         string, ...
       ],
       "speed_limit_value": int,
        "plus_stamina_value": int
      }, ...
      }, ...
    ]
    ]
}
在地图中,每个台阶可以填写的所有信息如下。''(与地图信息相同,台阶信息也允许乱序排放,没有强制排序的需求)''
{
   "position": int,
   "capture": int,
   "items": [
     {
       "type": string,
       "id": string,
       "amount": int
     }
   ],
   "restrict_id": string,
   "restrict_ids": [
     string, ...
   ],
   "restrict_type": string,
   "restrict_difficulty": int,
   "step_type": [
     string, ...
   ],
   "speed_limit_value": int,
   "plus_stamina_value": int
  }
  }


第122行: 第115行:
{
{
    "map_id": "example",
    "map_id": "example",
    //地图ID str 必需字段
    //地图ID string 必需字段
    //请确保输入的map_id与 所对应的 地图文件名相同
    //请确保输入的map_id与地图文件名相同
     
     
    "is_legacy": false,
    "is_legacy": false,
    //是否启用Legacy地图机制 bool
    //是否启用Legacy地图 机制 boolean
    //于1.7.0新增
    //于1.7.0新增
     
     
    "is_repeatable": true,
    "is_repeatable": true,
    //是否启用无限地图机制 bool
    //是否启用无限地图 机制 boolean
     
     
    "is_beyond": false,
    "is_beyond": false,
    //是否启用Beyond地图机制 bool
    //是否启用Beyond地图 机制 boolean
    //于3.0.0新增
    //于3.0.0新增
     
     
    "beyond_health": 100,
    "beyond_health": 100,
    //Beyond 地图/Breach地图的总百分比 int
    //Beyond/Breach地图的总百分比 int
    //于3.0.0新增
    //于3.0.0新增
     
     
    "character_affinity": [
    "character_affinity": [
    ],
    ],
    //Beyond地图的相性契合搭档 [int, ...]
    //Beyond地图的相性契合搭档 array[int]
   //填写格式: [CharacterID]
    //于3.0.0新增
    //于3.0.0新增
     
     
    "affinity_multiplier": [
    "affinity_multiplier": [
    ],
    ],
    //Beyond地图的相性契合加成 [float, ...]
    //Beyond地图的相性契合加成 array[float]
    //于3.0.0新增
    //于3.0.0新增
    
    
    //character_affinity与affinity_multiplier的照应关系 为:
    //character_affinity与affinity_multiplier的照应关系:
    //设character_affinity为[0, 1],character_affinity为[1.0, 1.5]
    //设character_affinity为[0, 1],character_affinity为[1.0, 1.5]
    //那么该地图的相性契合信息为 {0: 1.0, 1: 1.5}
    //那么该地图的相性契合信息为: {0: 1.0, 1: 1.5}
    
    
    "is_breached": false,
    "is_breached": false,
    //是否启用Breach地图机制 bool
    //是否启用Breach地图 机制 boolean
    //于5.3.0新增
    //于5.3.0新增
    
    
    "disable_over": false,
    "disable_over": false,
    //是否禁 止Overdrive 与PROG 计算 bool
    //是否禁 止搭档超量加成 与进度 计算 boolean
    //于5.3.0新增
    //于5.3.0新增
    
    
    "new_law": "",
    "new_law": "",
    //Breach地图的法则 str
    //Breach地图的法则 string
    //于5.3.0新增
    //于5.3.0新增
  
   //开启Breach地图的机制时,请注意Beyond地图的机制也要开启
   //因为Breach地图中不存在相性契合,因此character_affinity与affinity_multiplier理应均为空数组
    
    
    //法则类型(5.3.0):
    //法则类型(5.3.0):
    //over100_step50 PROG = OVER + STEP/2
    //   over100_step50: PROG = OVER + STEP/2
    //frag50 PROG x= FRAG
    //   frag50: PROG x= FRAG
    //lowlevel PROG x= max(1.0, 2.0 - 0.1 x LEVEL)
    //   lowlevel: PROG x= max(1.0, 2.0 - 0.1 x LEVEL)
    //antiheroism PROG = OVER - ||OVER-FRAG|-|OVER-STEP||
    //   antiheroism: PROG = OVER - ||OVER-FRAG|-|OVER-STEP||
     
     
    "chapter": 0,
    "chapter": 0,
    //地图章节 int 必需字段
    //地图章节 int 必需字段
     
     
    // 特殊类 章节
    //章节 列表:
    //0 活动 Event
    //   0: 活动 Event
    //1001 Beyond
    //   1001: Beyond
  
    //    普通章节:
    //普通章节 :以1开始为 第一章
   //     1:  第一章
    //Breach 章节 :以2001开始为 第一章
    //     2: 第二章
   //     往后的章节以此类推
   //   陷落 章节:
   //     1: 陷落 第一章
     
     
    "available_from": -1,
    "available_from": -1,
    //从X时开始可用 int 必需字段
    // 该地图 从X时开始可用 int 必需字段
    //填写10位/16位时间戳,-1表示 一直 可用
    //填写10位/16位时间戳,-1表示 地图永远 可用
    //于1.5.2新增
    //于1.5.2新增
     
     
    "available_to": -1,
    "available_to": -1,
    // 经过X 关闭 int 必需字段
    // 该地图从X 开始 关闭 int 必需字段
    //填写10位/16位时间戳,-1表示 一直 不关闭
    //填写10位/16位时间戳,-1表示 地图永 不关闭
    //于1.5.2新增
    //于1.5.2新增
    
    
    "require_type": "",
    "require_type": "",
    //解锁时所需物品的类型 str
    //解锁 地图 时所需物品的类型 string
       
       
    //解锁类型(5.3.0)
    //解锁类型(5.3.0):
    //pack 曲包(配合require_id使用)
    //   pack 曲包(配合require_id使用)
    //character 角色(616没用过,配合require_id使用)
    //   character 角色(616没用过,配合require_id使用)
    //single 单曲(配合require_id使用)
    //   single 单曲(配合require_id使用)
    //fragment 残片(配合require_value使用)
    //   fragment 残片(配合require_value使用)
    //chart_unlock 解锁谱面(配合require_id使用,格式 为[SongID]+[ratingClass]
    //   chart_unlock 解锁谱面(配合require_id使用,格式 为SongID+ratingClass)
    //chapter_step 章节步数(配合require_value使用)
    //   chapter_step 章节 内达到一定 步数(配合require_value使用)
    //chapter_maps 完成地图(配合require_value使用,目前只出现在Beyond背景地图中)
    //   chapter_maps 完成 章节内数张 地图(配合require_value使用,目前只出现在Beyond背景 地图中)
     
     
    "require_id": "",
    "require_id": "",
    //解锁时需要 开启 对应 物品ID str/[str, ...]
    //解锁 地图 时需要 解锁 的物品ID string / array[string]
    //[str, ...] 形式 于3.10.0新增 ,后续在4.2.0添加普通地图的显示
    // 格式 array[string, ...] 于3.10.0新增
     
     
    "require_value": 0,
    "require_value": 0,
    //解锁时需要花费的对应物品的数量 int
    //解锁 地图 时需要花费的对应物品的数量 int
   //与require_type语句相连,只有前置语句填写到指定数据后才能发挥作用
   //也与requires语句相连,只有前置语句不存在时才能发挥作用
     
     
    "requires": [
    "requires": [
{
{
   "type": "",
   "id": "",
   "value": 0
}
}
],
],
    //解锁时 需的多个物品 [{str: 'str | int', ...}, ...]
    //解锁 地图 时需 要解锁 的多个物品 array[object]
    //dict中可填入type/id/value三 ,值类型与上述require前缀 相同
    //type, id, value三键 效果与require_type, require_id, require_value效果 相同
   //该语句的解锁条件优先于require_type/id/value
    //于4.2.0新增
    //于4.2.0新增
    //使用例:
    
    //"requires": [
    "requires_any": [
//   {
     {
   //    "type": "pack",
   "type": "",
   //  "id": "base",
   "id": "",
   //    "value": 0
   "value": 0
    //   }
     }
    //]
   ],
   //解锁地图时需要解锁其中之一的多个物品 array[object]
   //格式与requires相同
   //于5.9.0新增
  
   //require各键的优先级:
    //   require三键: 即require_type, require_id, require_value
   //   存在requires时,优先使用requires中的条件
   //   不存在requires,存在require三键时,使用require三键中的条件
   //   不存在requires,也不存在require三键时,使用requires_any中的条件
    //   如果requires,requires三键,requires_any均不存在,则不设置解锁条件
     
     
    "require_localunlock_songid": "",
    "require_localunlock_songid": "",
    //需要 本地 锁XXX歌 的任意难度 str
    // 解锁地图前 需要解 锁的 目 string
    //填写 指定歌曲ID,用来判断本地是否解锁了指定歌曲的任意难度
    //填写 : SongID
   //判断解锁方 :寻找本地"un"文件中[SongID]|[ratingClass]|[UnlockType]所有的解锁条件,如果其中一条"complete"被设为成功值,则解锁
    //于1.5.0新增
    //于1.5.0新增
     
     
    "require_localunlock_challengeid": "",
    "require_localunlock_challengeid": "",
    //需要 本地 过XXX 异象 str
    // 解锁地图前 需要通 过的曲目 异象 string
    //填写 指定异象ID,用来判断本地是否通过了指定歌曲的异象
    //填写 : SongID
   //判断解锁方 :寻找本地"un"文件中[AnomalyID]_challenge|0|102解锁条件,如果"complete"被设定为0或不存在,默认不解锁
    //于1.6.0新增
    //于1.6.0新增
  
   //require_localunlock_challengeid的判断方式:
   //   寻找本地"un"文件中SongID_challenge|0|102解锁条件,判断"complete"是否为通过值
   //   如果"complete"被设定为0或条件不存在,默认锁定地图
     
     
    "coordinate": "0,0",
    "coordinate": "0,0",
    //地图在对应章节应用的X/Y坐标 str 必需字段
    //地图在对应章节应用的X/Y坐标 string 必需字段
    //前者代表X,后者代表Y
    //前者代表X,后者代表Y
    //X 数时向 ,为负数时向左
    //   X: 负则左移,
    //Y 数时向 ,为负数时向下
    //   Y: 负则下移,
     
     
    "step_count": 22,
    "step_count": 25,
    //地图总步数 int 必需字段
    //地图总步数 int 必需字段
     
     
    "custom_bg": "",
    "custom_bg": "",
    //地图 使 的背景 str
    //地图 的自定义背景 string
    //如果不填写,则默认使用章节背景
   //填写格式: FilePath
    // 填写后,游戏会自动查找位于img/world中的[value].jpg
   //填写后,游戏会 使 用img/world/FilePath来代替世界模式中显示 章节 背景
    //    如果不填写,则默认使用章节背景
    //   is_beyond为true时无效果
    //于1.8.3新增
    //于1.8.3新增
     
     
    "stamina_cost": 2,
    "stamina_cost": 2,
    //在 地图内游玩一次所需要的体力 int
    //在地图内游玩一次所需要的体力 int
   //也会影响Play+的体力消耗
     
     
    "chain_info": {},
    "chain_info": {
    // 用来 声明该地图所在 的Chain {str: 'str | int', ...}
     "id": "",
    // 可以 入id与index两个键,值类型分别为str与int
     "index": 0
    //id 为所在Chain,index为解锁顺序(从1开始)
   },
   
    //声明该地图所在 的链式解锁 object{string: string / int}
   "curr_position": 0,
    //填 写格式:
    "curr_capture": 0,
    //   id: ChainID
   "is_locked": false,
    //   index: UnlockIndex
    // 没用
    // 于3.10.0新增
     
     
    "steps": [
    "steps": [
    //该地图的台阶设置 [dict, ...] 必需字段
    //该地图的台阶设置 array[object] 必需字段
{
{
"position": 0,
"position": 0,
//台阶的 位 int
//台阶的位 int 必需字段
//可随意填写,设定为相同的值都可以正常读取
     
     
"capture": 5
"capture": 5
//台阶的步数 int
//台阶的步数 int 必需字段
},
},
{
{
"position": 1,
"position": 1,
"capture": 5,
"capture": 5,
"items": [{}]
"items": [
//奖励 [{str: 'str | int', ...}]
   {
// 此处为空,直接删除也可达成同 效果
     "type": "",
     "id": "",
     "amount": 0
   }
],
// 台阶的 奖励 array[object]
//填写格式:
//   type: string
//   id: string
//   amount: int
//奖励类型(6.0.0):
//   character: 搭档,id格式为CharacterID
//   world_song: 世界解锁类型的曲目/难度,id格式为SongID(曲目) / SongID+ratingClass(难度)
//   single: 单曲,id格式为SongID
//   fragment: 残片
//   memory: 记忆源点
//   core: 核心,id格式为CoreID
//   pack: 曲包,id格式为PackID
//   world_unlock: 世界解锁相关奖励,目前只有背景
"restrict_type": ""
//限制游玩的类型 string
//填写格式:
//   song_id: 限制游玩曲目
//   pack_id: 限制游玩曲包
"restrict_id": "",
//限制游玩指定的曲目/曲包 string
//填写格式:SongID/PackID
"restrict_ids": [
],
//限制游玩指定的多首曲目 array[string]
//填写格式:[SongID]
//restrict_type为pack_id时无 效果
"restrict_difficulty": 0,
//限制游玩指定难度 int
//填写格式:ratingClass
"step_type": [
],
//台阶的类型 array[string]
//台阶类型(6.0.0):
//   randomsong: 随机曲目台阶
//   speedlimit: 限速台阶
//   plusstamina: 体力奖励台阶
//   wall_nell: 假哀寂地图的灰色台阶
//   wall_impossible: 假哀寂地图的破裂灰色台阶
//   special_lament_rain: 假哀寂地图的Lament Rain异象台阶
"speed_limit_value": 0,
//限速台阶限制的最大流速 int
//填写格式:对应流速x10后的数字
//仅当step_type中存在speedlimit时有效
"plus_stamina_value": 0,
//体力奖励台阶奖励的体力数量 int
//仅当step_type中存在plusstamina时有效
},
},
//下列台阶为奖励总览
{
{
"position": 2,
"position": 2,
第295行: 第367行:
"type": "character"
"type": "character"
"id": "0"
"id": "0"
// 角色
// 搭档奖励
//type: str, id: str
//id: CharacterID
//id对应CharacterID
}
}
]
]
第308行: 第379行:
"type": "world_song",
"type": "world_song",
"id": "shadesoflight"
"id": "shadesoflight"
//世界解锁类型的 曲/难度
//世界解锁类型的曲 /难度 奖励
//type: str, id: str
//id: SongID(曲目) / SongID+ratingClass( 难度)
//id对应SongID
// 如需解锁 难度 ,在SongID末尾添加对应ratingClass数字即可
}
}
]
]
第322行: 第391行:
"type": "single",
"type": "single",
"id": "auxesia"
"id": "auxesia"
//单曲
//单曲 奖励
//type: str, id: str
//id: SongID
//id对应SongID
}
}
]
]
第336行: 第404行:
"amount": 616
"amount": 616
//残片
//残片
//type: str, amount: int
}
}
]
]
第348行: 第415行:
"amount": 616
"amount": 616
//记忆源点
//记忆源点
//type: str, amount: int
//616没用过,但存在
//616没用过,但存在
}
}
第361行: 第427行:
"id": "core_generic",
"id": "core_generic",
"amount": 1
"amount": 1
//核心
//核心 奖励
//type: str, id: str, amount: int
//id: CoreID
//id对应CoreID
       
       
//核心种类(5.2.6)
//核心种类(5.2.6):
//core_generic 以太之滴 Ether Drop
//   core_generic: 以太之滴 Ether Drop
//core_hollow 中空核心 Hollow Core
//   core_hollow: 中空核心 Hollow Core
//core_desolate 荒芜核心 Desolate Core
//   core_desolate: 荒芜核心 Desolate Core
//core_chunithm CHUNITHM 核心 CHUNITHM Core
//   core_chunithm: CHUNITHM 核心 CHUNITHM Core
//core_crimson 深红核心 Crimson Core
//   core_crimson: 深红核心 Crimson Core
//core_ambivalent 悖异核心 Ambivalent Core
//   core_ambivalent: 悖异核心 Ambivalent Core
//core_scarlet 绯红核心 Scarlet Core
//   core_scarlet: 绯红核心 Scarlet Core
//core_groove 音炫核心 Groove Core
//   core_groove: 音炫核心 Groove Core
//core_binary 双生核心 Binary Core
//   core_binary: 双生核心 Binary Core
//core_colorful 缤纷核心 Colorful Core
//   core_colorful: 缤纷核心 Colorful Core
//core_umbral 暗影核心 Umbral Core
//   core_course_skip_purchase: 次元结晶 Warped Shard
//core_sunset 暮色核心 Sunset Core
//   core_umbral: 暗影核心 Umbral Core
//core_course_skip_purchase 次元结晶 Warped Shard
//   core_sunset: 暮色核心 Sunset Core
}
}
]
]
第389行: 第454行:
"type": "pack",
"type": "pack",
"id": "base"
"id": "base"
//曲包
//曲包 奖励
//type: str, id: str
//id: PackID
//id对应PackID
//NS端专属,在移动端也存在,但使用移动端显示时会崩溃
//NS端专属,在移动端也存在,但使用移动端显示时会崩溃
}
}
第403行: 第467行:
"type": "world_unlock",
"type": "world_unlock",
"id": "scenery_chap1"
"id": "scenery_chap1"
//世界解锁相关
//世界解锁相关 奖励
//type: str, id: str
//目前只能添加背景
//于3.0.0新增
//于3.0.0新增
//章节背景(4.4.4)
//章节背景(4.4.4):
//scenery_chap1 失落的世界 Lost World
//   scenery_chap1: 失落的世界 Lost World
//scenery_chap2 谜域的界外 Outer Reaches
//   scenery_chap2: 谜域的界外 Outer Reaches
//scenery_chap3 聚合的塔尖 Spire of Convergence
//   scenery_chap3: 聚合的塔尖 Spire of Convergence
//scenery_chap4 沉眠的回声 Dormant Echoes
//   scenery_chap4: 沉眠的回声 Dormant Echoes
//scenery_chap5 无央的决裂 Boundless Divide
//   scenery_chap5: 无央的决裂 Boundless Divide
//scenery_chap6 遗忘的构念 Forgotten Construct
//   scenery_chap6: 遗忘的构念 Forgotten Construct
//scenery_chap7 回首的天际 Horizon of Anamnesis
//   scenery_chap7: 回首的天际 Horizon of Anamnesis
//scenery_beyond Beyond Beyond
//   scenery_beyond: Beyond
}
}
]
]
第427行: 第489行:
"type": "anni5tix",
"type": "anni5tix",
"amount": 1
"amount": 1
//五周年兑换券
//五周年兑换券 奖励
//type: str, amount: int
//于3.12.2新增
//于3.12.2新增
}
}
]
]
},
},
//下列台阶为限制条件总览
{
{
"position": 11,
"position": 11,
第439行: 第501行:
"restrict_type": "song_id"
"restrict_type": "song_id"
//限制游玩指定曲目
//限制游玩指定曲目
//restrict_id: str, restrict_type: str
//restrict_id: SongID
//restrict_id对应SongID
},
},
{
{
第451行: 第512行:
"restrict_type": "song_id"
"restrict_type": "song_id"
//限制游玩指定的多首曲目
//限制游玩指定的多首曲目
//restrict_ids: [str, ...], restrict_type: str
//restrict_ids: [SongID]
//restrict_ids对应SongID
},
},
{
{
第460行: 第520行:
"restrict_type": "pack_id"
"restrict_type": "pack_id"
//限制游玩指定曲包
//限制游玩指定曲包
//restrict_id: str, restrict_type: str
//restrict_id: PackID
//restrict_id对应PackID
},
},
{
{
第468行: 第527行:
"restrict_difficulty": 2
"restrict_difficulty": 2
//限制游玩指定难度
//限制游玩指定难度
//restrict_difficulty: int
//restrict_difficulty: ratingClass
//restrict_difficulty对应ratingClass
//于3.10.0新增
//于3.10.0新增
},
},
//下列台阶为各台阶类型总览
{
{
"position": 15,
"position": 15,
第479行: 第538行:
]
]
//随机曲目
//随机曲目
//step_type: [str, ...]
//曲目列表会显示特殊曲目(ID:random)
},
},
{
{
第490行: 第547行:
"speed_limit_value": 65
"speed_limit_value": 65
//流速限制
//流速限制
//step_type: [str, ...], speed_limit_value: int
//speed_limit_value: 对应流速x10
//speed_limit_value为 对应流速x10 后的数字
},
},
{
{
第501行: 第557行:
"plus_stamina_value": 12
"plus_stamina_value": 12
//体力奖励
//体力奖励
//step_type: [str, ...], plus_stamina_value: int
//plus_stamina_value: 体力 数量
//plus_stamina_value对应增加 体力
},
},
{
{
"position": 18,
"position": 18,
"capture": 5,
"step_type": [
"wall_nell"
]
//假哀寂地图的灰色台阶
},
{
"position": 19,
"capture": 5,
"step_type": [
"wall_impossible"
]
//假哀寂地图的破裂灰色台阶
},
{
"position": 20,
"capture": 5,
"step_type": [
"special_lament_rain"
]
//假哀寂地图的Lament Rain异象台阶
},
//下列台阶为一些特殊的台阶示例
{
"position": 21,
"capture": 5,
"capture": 5,
"items": [
"items": [
第518行: 第598行:
]
]
//设置多个奖励
//设置多个奖励
//游戏内 实际 只显示第一个奖励
// 游戏内 显示时, 显示第一个奖励
},
},
{
{
"position": 19,
"position": 22,
"capture": 5,
"capture": 5,
"restrict_id": "base",
"restrict_id": "base",
第528行: 第608行:
"randomsong"
"randomsong"
]
]
//限制曲包+随机曲目 混搭
//限制曲包 + 随机曲目
},
},
{
{
"position": 20,
"position": 23,
"capture": 5,
"capture": 5,
"restrict_ids": [
"restrict_ids": [
第552行: 第632行:
}
}
]
]
//限制 曲+限制难度+随机曲目+体力奖励+流速限制+残片奖励 混搭
//限制曲 + 限制难度 + 随机曲目 + 体力奖励 + 流速限制 + 残片奖励
},
},
{
{
"position": 21,
"position": 24,
"capture": 0,
"capture": 0,
"items": [
"items": [
第562行: 第642行:
"id": "core_generic",
"id": "core_generic",
"amount": 5
"amount": 5
//最后一格 设置至少一个奖励
//最后一格 必须 设置至少一个奖励
}
}
]
]
第575行: 第655行:
    "map_id": "example",
    "map_id": "example",
    "is_beyond": true,
    "is_beyond": true,
   //是否启用Beyond地图机制 bool
   
    "beyond_health": 150,
    "beyond_health": 150,
   //Beyond地图的总百分比 int
   
    "character_affinity": [
    "character_affinity": [
0,
0,
1
1
],
],
   //Beyond地图的相性契合搭档 [int, ...]
   
    "affinity_multiplier": [
    "affinity_multiplier": [
1.0,
1.0,
1.5
1.5
],
],
   //Beyond地图的相性契合加成 [float, ...]
   
    "chapter": 1001,
    "chapter": 1001,
   //地图章节 int
   
    "available_from": -1,
    "available_from": -1,
    "available_to": -1,
    "available_to": -1,
    "require_id": "shadesoflight2",
    "require_id": "shadesoflight2",
   //解锁时需要开启的对应物品ID str/[str, ...]
   
    "require_type": "chart_unlock",
    "require_type": "chart_unlock",
   //解锁时所需物品的类型 str
    "coordinate": "0,0",
    "coordinate": "0,0",
    "step_count": 5,
    "step_count": 5,
   //地图总步数 int
  
    "stamina_cost": 3,
    "stamina_cost": 3,
   //在该地图内游玩一次所需要的体力 int
   
    "curr_position": 0,
    "curr_position": 0,
    "curr_capture": 0,
    "curr_capture": 0,
第615行: 第677行:
    "steps": [
    "steps": [
{
{
// 使用正常地图语句,如要正确 配置请从 结尾Step开始编辑
//配置 台阶时, 请从 下至上进行配置
"position": 0,
"position": 0,
//最低点,用于标记开头
// 台阶 最低点,用于标记开头
      
      
"capture": 50
"capture": 50
// 以beyond_health的值为被减数,与所有capture相加后的和相减,结果为0则配置成功
//确保全部capture的值相加起来等于beyond_health的值
//或者 确保全部capture的值相加起来等于beyond_health的值
},
},
{
{
第636行: 第697行:
{
{
"position": 2,
"position": 2,
// 标记 二点
//二点
      
      
"capture": 25,
"capture": 25,
// 以capture的值为减数,与 一点得出的百分比相减 ,得出 本点百分比
// 一点得出的百分比 为被减数,capture的值为减数, 相减 后的差为 本点百分比
//一点从100%开始,相减后得到结果75,则本点从75%开始
//一点从100%开始, 与capture的值 相减后得到结果75,则本点从75%开始
      
      
"items": [
"items": [
第649行: 第710行:
}
}
]
]
//奖励只会在本点 开始 时领取
//奖励只会在 到达 本点时领取
},
},
{
{
"position": 3,
"position": 3,
// 标记 一点
//一点


"capture": 50,
"capture": 50,
// 以capture 的值为减数 ,将其与beyond_health 的值相减 ,得出 本点百分比
// 以beyond_health 的值为 减数 ,capture 的值 为减数, 相减 后的差为 本点百分比
//此地图的beyond_health为150,相减后得到结果100,则本点从100%开始
//此地图的beyond_health为150, 与capture的值 相减后得到结果100,则本点从100%开始
      
      
"restrict_id": "shadesoflight",
"restrict_id": "shadesoflight",
"restrict_type": "song_id"
"restrict_type": "song_id"
// 普通/特殊 限制 会在到达下一点前一直有效
//限制 条件 会在到达下一点前一直有效
},
},
{
{
"position": 4,
"position": 4,
//最高点,用于标记奖励
// 地图 最高点,用于标记奖励
      
      
"capture": 0,
"capture": 0,
第686行: 第747行:
    "map_id": "example",
    "map_id": "example",
    "is_beyond": true,
    "is_beyond": true,
   //是否启用Beyond地图机制 bool
   
    "beyond_health": 200,
    "beyond_health": 200,
   //Beyond地图/Breach地图的总百分比 int
   
    "character_affinity": [
    "character_affinity": [
    ],
    ],
   //Beyond地图的相性契合搭档 [int, ...]
   
    "affinity_multiplier": [
    "affinity_multiplier": [
    ],
    ],
   //Beyond地图的相性契合加成 [float, ...]
  
    "is_breached": true,
    "is_breached": true,
   //是否启用Breach地图机制 bool
  
    "disable_over": true,
    "disable_over": true,
   //是否禁止Overdrive参与PROG计算 bool
  
    "new_law": "over100_step50",
    "new_law": "over100_step50",
   //Breach地图的法则 str
   
    "chapter": 2001,
    "chapter": 2001,
   //地图章节 int 必需字段
   
    "available_from": -1,
    "available_from": -1,
    "available_to": -1,
    "available_to": -1,
    "require_type": "chart_unlock",
    "require_type": "chart_unlock",
   //解锁时所需物品的类型 str
   
    "require_id": "inkarusi2",
    "require_id": "inkarusi2",
   //解锁时需要开启的对应物品ID str/[str, ...]
   
    "coordinate": "0,0",
    "coordinate": "0,0",
    "step_count": 6,
    "step_count": 6,
   //地图总步数 int 必需字段
   
    "stamina_cost": 3,
    "stamina_cost": 3,
   //在该地图内游玩一次所需要的体力 int
   
    "curr_position": 0,
    "curr_position": 0,
    "curr_capture": 0,
    "curr_capture": 0,
第735行: 第772行:
      // for step in steps:
      // for step in steps:
      //   current_health += step['capture']
      //   current_health += step['capture']
      //   print(f"Pos {step['position']}: {current_health}%")
      //   print(f"Position {step['position']}: {current_health}%")
      {
      {
        "position": 0,
        "position": 0,
        // 标记 一点
        //一点
        
        
        "capture": 50
        "capture": 50
        //以 点的百分比为减数, 将其与下一 点的百分比相减 ,得出capture 的值
        //以 下一 点的百分比为 减数, 点的百分比 为减数, 相减 后的差则为capture 的值
        // 进度 定0%, 下一点的百分比为50% ,相减后得50,即为capture的值
        // 因为此点为地图的起 点,所以此点百分比 定为0%, 已知 下一点的百分比为50% ,50 - 0 = 50
      },
      },
      {
      {
        "position": 1
        "position": 1
        // 标记 二点
        //二点
        
        
        "capture": 50,
        "capture": 50,
        //以此点的百分比为减数, 将其与 下一点的百分比相减 ,得出capture 的值
        //以此点的百分比为减数,下一点的百分比 为被减数, 相减 后的差则为capture 的值
        // 由一 点的capture 可知 ,一点的百分比 与本点的百分比的差为50,则本点的百分比为50%
        // 已知此 点的capture 为50% 一点的百分比 为100% ,100 - 50 = 50
        
        
        "items": [
        "items": [
第763行: 第800行:
      {
      {
        "position": 2,
        "position": 2,
        // 标记 三点
        //三点
        
        
        "capture": 50,
        "capture": 50,
        //以此点的百分比为减数, 将其与 下一点的百分比相减 ,得出capture 的值
        //以此点的百分比为减数,下一点的百分比 为被减数, 相减 后的差则为capture 的值
        // 由二 点的capture 可知 二点的百分比与本点的百分比的差为50,则本 点的百分比为100%
        // 已知此 点的capture 为150% 下一 点的百分比为100% ,150 - 100 = 50
        
        
        "items": [
        "items": [
第801行: 第838行:
        "restrict_type": "song_id",
        "restrict_type": "song_id",
        "restrict_difficulty": 2
        "restrict_difficulty": 2
// 普通/特殊 限制 会在到达下一点前一直有效
//限制 条件 会在到达下一点前一直有效
      },
      },
      {
      {
        "position": 4,
        "position": 4,
        "capture": 50,
       //四点
      
        "capture": 50
       //以此点的百分比为减数,下一点的百分比为被减数,相减后的差则为capture的值
       //已知此点的capture为200%,下一点的百分比为150%,200 - 150 = 50
      
        "items": [
        "items": [
          {
          {
第845行: 第887行:
        
        
        "capture": 0,
        "capture": 0,
// 确保capture 为0
//capture必须 为0
        
        
        "items": [
        "items": [

2024年12月5日 (四) 21:22的最新版本


  • 本页保持孤立!

阅前提示

本页面记载的是Arcaea移动版服务器中存放的世界模式地图的格式。
每张地图均为JSON文档,建议在编写前学习基本的JSON文档语法。

代码解析

框架

一张地图的总体框架如下。

{
    // map data
}

在地图中,也保存着地图台阶的信息,每个台阶的编写框架如下:

{
    "steps": [
        {
            // step 1
        },
        {
            // step 2
        }, ...
    ]
}

细节解析

  • 地图信息内可能会出现众多数据,可能会出现的数据格式如下:
    • string -- 字符串 例:"this is a string"
    • int -- 整数 例:616
    • float -- 浮点数 例:123.456
    • boolean -- 布尔值 例:true(是),false(否)
    • array -- 数组 例:[4, 2, 2]
    • object -- 对象 例:{"info": "helloworld"}

一张地图内可以填写的所有信息如下。(地图信息可以乱序排放,无排序要求)

{
   "map_id": string,
   "is_legacy": boolean,
   "is_repeatable": boolean,
   "is_beyond": boolean,
   "beyond_health": int,
   "character_affinity": [
       int, ...
   ],
   "affinity_multiplier": [
       float, ...
   ],
   "is_breached": boolean,
   "disable_over": boolean,
   "new_law": string,
   "chapter": int,
   "available_from": int,
   "available_to": int,
   "require_type": string,
   "require_id": string,
   "require_value": int,
   "requires": [
       {
           "type": string,
           "id": string,
           "value": int
       }, ...
   ],
   "requires_any": [
       {
           "type": string,
           "id": string,
           "value": int
       }, ...
   ],
   "require_localunlock_songid": string,
   "require_localunlock_challengeid": string,
   "coordinate": string (x,y),
   "step_count": int,
   "custom_bg": string,
   "stamina": int,
   "chain_info": {
       "id": string,
       "index": int
   },
   "steps": [
       {
           "position": int,
           "capture": int,
           "items": [
               {
                   "type": string,
                   "id": string,
                   "amount": int
               }, ...
           ],
           "restrict_id": string,
           "restrict_ids": [
               string, ...
           ],
           "restrict_type": string,
           "restrict_difficulty": int,
           "step_type": [
               string, ...
           ],
           "speed_limit_value": int,
           "plus_stamina_value": int
       }, ...
   ]
}

地图信息

普通地图:

{
    "map_id": "example",
    //地图ID string 必需字段
    //请确保输入的map_id与地图文件名相同
      
    "is_legacy": false,
    //是否启用Legacy地图的机制 boolean
    //于1.7.0新增
      
    "is_repeatable": true,
    //是否启用无限地图的机制 boolean
      
    "is_beyond": false,
    //是否启用Beyond地图的机制 boolean
    //于3.0.0新增
      
    "beyond_health": 100,
    //Beyond/Breach地图的总百分比 int
    //于3.0.0新增
      
    "character_affinity": [
    ],
    //Beyond地图的相性契合搭档 array[int]
    //填写格式: [CharacterID]
    //于3.0.0新增
      
    "affinity_multiplier": [
    ],
    //Beyond地图的相性契合加成 array[float]
    //于3.0.0新增
    
    //character_affinity与affinity_multiplier的照应关系: 
    //设character_affinity为[0, 1],character_affinity为[1.0, 1.5]
    //那么该地图的相性契合信息为: {0: 1.0, 1: 1.5}
    
    "is_breached": false,
    //是否启用Breach地图的机制 boolean
    //于5.3.0新增
    
    "disable_over": false,
    //是否禁止搭档超量加成参与进度计算 boolean
    //于5.3.0新增
    
    "new_law": "",
    //Breach地图的法则 string
    //于5.3.0新增
    
    //开启Breach地图的机制时,请注意Beyond地图的机制也要开启
    //因为Breach地图中不存在相性契合,因此character_affinity与affinity_multiplier理应均为空数组
    
    //法则类型(5.3.0:
    //    over100_step50: PROG = OVER + STEP/2
    //    frag50: PROG x= FRAG
    //    lowlevel: PROG x= max(1.0, 2.0 - 0.1 x LEVEL)
    //    antiheroism: PROG = OVER - ||OVER-FRAG|-|OVER-STEP||
      
    "chapter": 0,
    //地图章节 int 必需字段
      
    //章节列表: 
    //    0: 活动 Event
    //    1001: Beyond
    //    普通章节: 
    //        1: 第一章
    //        2: 第二章
    //        往后的章节以此类推
    //    陷落章节: 
    //        1: 陷落第一章
      
    "available_from": -1,
    //该地图从X时开始可用 int 必需字段
    //填写10位/16位时间戳,-1表示地图永远可用
    //于1.5.2新增
      
    "available_to": -1,
    //该地图从X时开始关闭 int 必需字段
    //填写10位/16位时间戳,-1表示地图永不关闭
    //于1.5.2新增
    
    "require_type": "",
    //解锁地图时所需物品的类型 string
          
    //解锁类型(5.3.0: 
    //    pack 曲包(配合require_id使用)
    //    character 角色(616没用过,配合require_id使用)
    //    single 单曲(配合require_id使用)
    //    fragment 残片(配合require_value使用)
    //    chart_unlock 解锁谱面(配合require_id使用,格式为SongID+ratingClass)
    //    chapter_step 章节内达到一定步数(配合require_value使用)
    //    chapter_maps 完成章节内数张地图(配合require_value使用,目前只出现在Beyond背景的地图中)
      
    "require_id": "",
    //解锁地图时需要解锁的物品ID string / array[string]
    //格式 array[string, ...] 3.10.0新增
      
    "require_value": 0,
    //解锁地图时需要花费的对应物品的数量 int
      
    "requires": [
		{
		    "type": "",
		    "id": "",
		    "value": 0
		}
	],
    //解锁地图时需要解锁的多个物品 array[object]
    //type, id, value三键效果与require_type, require_id, require_value效果相同
    //于4.2.0新增
    
    "requires_any": [
        {
		    "type": "",
		    "id": "",
		    "value": 0
        }
    ],
    //解锁地图时需要解锁其中之一的多个物品 array[object]
    //格式与requires相同
    //于5.9.0新增
    
    //require各键的优先级: 
    //    require三键: 即require_type, require_id, require_value
    //    存在requires时,优先使用requires中的条件
    //    不存在requires,存在require三键时,使用require三键中的条件
    //    不存在requires,也不存在require三键时,使用requires_any中的条件
    //    如果requires,requires三键,requires_any均不存在,则不设置解锁条件
      
    "require_localunlock_songid": "",
    //解锁地图前需要解锁的曲目 string
    //填写格式: SongID
    //于1.5.0新增
      
    "require_localunlock_challengeid": "",
    //解锁地图前需要通过的曲目异象 string
    //填写格式: SongID
    //于1.6.0新增
    
    //require_localunlock_challengeid的判断方式: 
    //    寻找本地"un"文件中SongID_challenge|0|102解锁条件,判断"complete"是否为通过值
    //    如果"complete"被设定为0或条件不存在,默认锁定地图
      
    "coordinate": "0,0",
    //地图在对应章节应用的X/Y坐标 string 必需字段
    //前者代表X,后者代表Y
    //    X: 负则左移,正则右移
    //    Y: 负则下移,正则上移
      
    "step_count": 25,
    //地图总步数 int 必需字段
      
    "custom_bg": "",
    //地图的自定义背景 string
    //填写格式: FilePath
    //填写后,游戏会使用img/world/FilePath来代替世界模式中显示的章节背景
    //    如果不填写,则默认使用章节背景
    //    is_beyond为true时无效果
    //于1.8.3新增
      
    "stamina_cost": 2,
    //在地图内游玩一次所需要的体力 int
      
    "chain_info": {
        "id": "",
        "index": 0
    },
    //声明该地图所在的链式解锁 object{string: string / int}
    //填写格式: 
    //    id: ChainID
    //    index: UnlockIndex
    //于3.10.0新增
      
    "steps": [
    //该地图的台阶设置 array[object] 必需字段
		{
			"position": 0,
			//台阶的位置 int 必需字段
      
			"capture": 5
			//台阶的步数 int 必需字段
		},
		{
			"position": 1,
			"capture": 5,
			"items": [
			    {
			        "type": "",
			        "id": "",
			        "amount": 0
			    }
			],
			//台阶的奖励 array[object]
			//填写格式: 
			//    type: string
			//    id: string
			//    amount: int
			
			//奖励类型(6.0.0):
			//    character: 搭档,id格式为CharacterID
			//    world_song: 世界解锁类型的曲目/难度,id格式为SongID(曲目) / SongID+ratingClass(难度)
			//    single: 单曲,id格式为SongID
			//    fragment: 残片
			//    memory: 记忆源点
			//    core: 核心,id格式为CoreID
			//    pack: 曲包,id格式为PackID
			//    world_unlock: 世界解锁相关奖励,目前只有背景
			
			"restrict_type": ""
			//限制游玩的类型 string
			//填写格式:
			//    song_id: 限制游玩曲目
			//    pack_id: 限制游玩曲包
			
			"restrict_id": "",
			//限制游玩指定的曲目/曲包 string
			//填写格式:SongID/PackID
			
			"restrict_ids": [
			],
			//限制游玩指定的多首曲目 array[string]
			//填写格式:[SongID]
			//restrict_type为pack_id时无效果
			
			"restrict_difficulty": 0,
			//限制游玩指定难度 int
			//填写格式:ratingClass
			
			"step_type": [
			],
			//台阶的类型 array[string]
			//台阶类型(6.0.0):
			//    randomsong: 随机曲目台阶
			//    speedlimit: 限速台阶
			//    plusstamina: 体力奖励台阶
			//    wall_nell: 假哀寂地图的灰色台阶
			//    wall_impossible: 假哀寂地图的破裂灰色台阶
			//    special_lament_rain: 假哀寂地图的Lament Rain异象台阶
			
			"speed_limit_value": 0,
			//限速台阶限制的最大流速 int
			//填写格式:对应流速x10后的数字
			//仅当step_type中存在speedlimit时有效
			
			"plus_stamina_value": 0,
			//体力奖励台阶奖励的体力数量 int
			//仅当step_type中存在plusstamina时有效
		},
		//下列台阶为奖励总览
		{
			"position": 2,
			"capture": 5,
			"items": [
				{		
					"type": "character"
					"id": "0"
					//搭档奖励
					//id: CharacterID
				}
			]
		},
		{
			"position": 3,
			"capture": 5,
			"items": [
				{
					"type": "world_song",
					"id": "shadesoflight"
					//世界解锁类型的曲目/难度奖励
					//id: SongID(曲目) / SongID+ratingClass(难度)
				}
			]
		},
		{
			"position": 4,
			"capture": 5,
			"items": [
				{
					"type": "single",
					"id": "auxesia"
					//单曲奖励
					//id: SongID
				}
			]
		},
		{
			"position": 5,
			"capture": 5,
			"items": [
				{
					"type": "fragment",
					"amount": 616
					//残片
				}
			]
		},
		{
			"position": 6,
			"capture": 5,
			"items": [
				{
					"type": "memory",
					"amount": 616
					//记忆源点
					//616没用过,但存在
				}
			]
		},
		{
			"position": 7,
			"capture": 5,
			"items": [
				{
					"type": "core",
					"id": "core_generic",
					"amount": 1
					//核心奖励
					//id: CoreID
          
					//核心种类(5.2.6: 
					//    core_generic: 以太之滴 Ether Drop
					//    core_hollow: 中空核心 Hollow Core
					//    core_desolate: 荒芜核心 Desolate Core
					//    core_chunithm: CHUNITHM 核心 CHUNITHM Core
					//    core_crimson: 深红核心 Crimson Core
					//    core_ambivalent: 悖异核心 Ambivalent Core
					//    core_scarlet: 绯红核心 Scarlet Core
					//    core_groove: 音炫核心 Groove Core
					//    core_binary: 双生核心 Binary Core
					//    core_colorful: 缤纷核心 Colorful Core
					//    core_course_skip_purchase: 次元结晶 Warped Shard
					//    core_umbral: 暗影核心 Umbral Core
					//    core_sunset: 暮色核心 Sunset Core
				}
			]
		},
		{
			"position": 8,
			"capture": 5,
			"items": [
				{
					"type": "pack",
					"id": "base"
					//曲包奖励
					//id: PackID
					//NS端专属,在移动端也存在,但使用移动端显示时会崩溃
				}
			]
		},
		{
			"position": 9,
			"capture": 5,
			"items": [
				{
					"type": "world_unlock",
					"id": "scenery_chap1"
					//世界解锁相关奖励
					//于3.0.0新增
		
					//章节背景(4.4.4: 
					//    scenery_chap1: 失落的世界 Lost World
					//    scenery_chap2: 谜域的界外 Outer Reaches
					//    scenery_chap3: 聚合的塔尖 Spire of Convergence
					//    scenery_chap4: 沉眠的回声 Dormant Echoes
					//    scenery_chap5: 无央的决裂 Boundless Divide
					//    scenery_chap6: 遗忘的构念 Forgotten Construct
					//    scenery_chap7: 回首的天际 Horizon of Anamnesis
					//    scenery_beyond: Beyond
				}
			]
		},
		{
			"position": 10,
			"capture": 5,
			"items": [
				{
					"type": "anni5tix",
					"amount": 1
					//五周年兑换券奖励
					//于3.12.2新增
				}
			]
		},
		//下列台阶为限制条件总览
		{
			"position": 11,
			"capture": 5,
			"restrict_id": "shadesoflight",
			"restrict_type": "song_id"
			//限制游玩指定曲目
			//restrict_id: SongID
		},
		{
			"position": 12,
			"capture": 5,
			"restrict_ids": [
				"shadesoflight",
				"sayonarahatsukoi"
			],
			"restrict_type": "song_id"
			//限制游玩指定的多首曲目
			//restrict_ids: [SongID]
		},
		{
			"position": 13,
			"capture": 5,
			"restrict_id": "base",
			"restrict_type": "pack_id"
			//限制游玩指定曲包
			//restrict_id: PackID
		},
		{
			"position": 14,
			"capture": 5,
			"restrict_difficulty": 2
			//限制游玩指定难度
			//restrict_difficulty: ratingClass
			//于3.10.0新增
		},
		//下列台阶为各台阶类型总览
		{
			"position": 15,
			"capture": 5,
			"step_type": [
				"randomsong"
			]
			//随机曲目
		},
		{
			"position": 16,
			"capture": 5,
			"step_type": [
				"speedlimit"
			],
			"speed_limit_value": 65
			//流速限制
			//speed_limit_value: 对应流速x10
		},
		{
			"position": 17,
			"capture": 5,
			"step_type": [
				"plusstamina"
			],
			"plus_stamina_value": 12
			//体力奖励
			//plus_stamina_value: 体力数量
		},
		{
			"position": 18,
			"capture": 5,
			"step_type": [
				"wall_nell"
			]
			//假哀寂地图的灰色台阶
		},
		{
			"position": 19,
			"capture": 5,
			"step_type": [
				"wall_impossible"
			]
			//假哀寂地图的破裂灰色台阶
		},
		{
			"position": 20,
			"capture": 5,
			"step_type": [
				"special_lament_rain"
			]
			//假哀寂地图的Lament Rain异象台阶
		},
		//下列台阶为一些特殊的台阶示例
		{
			"position": 21,
			"capture": 5,
			"items": [
				{
					"type": "fragment",
					"amount": 616
				}, 
				{
					"type": "memory",
					"amount": 616
				}
			]
			//设置多个奖励
			//在游戏内显示时,只会显示第一个奖励
		},
		{
			"position": 22,
			"capture": 5,
			"restrict_id": "base",
			"restrict_type": "pack_id",
			"step_type": [
				"randomsong"
			]
			//限制曲包 + 随机曲目
		},
		{
			"position": 23,
			"capture": 5,
			"restrict_ids": [
				"tempestissimo",
				"testify"
			],
			"restrict_type": "song_id",
			"step_type": [
				"randomsong",
				"plusstamina",
				"speedlimit"
			],
			"restrict_difficulty": 3,
			"plus_stamina_value": 2,
			"speed_limit_value": 25,
			"items": [
				{
					"type": "fragment",
					"amount": 2000
				}
			]
			//限制曲目 + 限制难度 + 随机曲目 + 体力奖励 + 流速限制 + 残片奖励
		},
		{
			"position": 24,
			"capture": 0,
			"items": [
				{
					"type": "core",
					"id": "core_generic",
					"amount": 5
					//最后一格必须设置至少一个奖励
				}
			]
		}
	]
}

Beyond地图的台阶排列与普通地图不同:

{
    "map_id": "example",
    "is_beyond": true,
    "beyond_health": 150,
    "character_affinity": [
		0,
		1
	],
    "affinity_multiplier": [
		1.0,
		1.5
	],
    "chapter": 1001,
    "available_from": -1,
    "available_to": -1,
    "require_id": "shadesoflight2",
    "require_type": "chart_unlock",
    "coordinate": "0,0",
    "step_count": 5,
    "stamina_cost": 3,
    "curr_position": 0,
    "curr_capture": 0,
    "is_locked": false,
    "steps": [
		{	
		//配置台阶时,请从下至上进行配置
			"position": 0,
			//台阶最低点,用于标记开头
        
			"capture": 50
			//确保全部capture的值相加起来等于beyond_health的值
		},
		{
			"position": 1,
			"capture": 25,
			"items": [
				{
					"type": "fragment",
					"amount": 616
				}
			]
			//剩余点的计算原理与二点相同
		},
		{
			"position": 2,
			//二点
        
			"capture": 25,
			//以一点得出的百分比为被减数,capture的值为减数,相减后的差为本点百分比
			//一点从100%开始,与capture的值相减后得到结果75,则本点从75%开始
        
			"items": [
				{
					"type": "core",
					"id": "core_generic",
					"amount": 1
				}
			]
			//奖励只会在到达本点时领取
		},
		{
			"position": 3,
			//一点

			"capture": 50,
			//以beyond_health的值为被减数,capture的值为减数,相减后的差为本点百分比
			//此地图的beyond_health为150,与capture的值相减后得到结果100,则本点从100%开始
        
			"restrict_id": "shadesoflight",
			"restrict_type": "song_id"
			//限制条件会在到达下一点前一直有效
		},
		{
			"position": 4,
			//地图最高点,用于标记奖励
        
			"capture": 0,
			//确保capture0
        
			"items": [
				{
					"type": "world_song",
					"id": "shadesoflight3"
				}
			]
		}
	]
}

Breached地图的台阶排列与普通地图不同:

{
    "map_id": "example",
    "is_beyond": true,
    "beyond_health": 200,
    "character_affinity": [
    ],
    "affinity_multiplier": [
    ],
    "is_breached": true,
    "disable_over": true,
    "new_law": "over100_step50",
    "chapter": 2001,
    "available_from": -1,
    "available_to": -1,
    "require_type": "chart_unlock",
    "require_id": "inkarusi2",
    "coordinate": "0,0",
    "step_count": 6,
    "stamina_cost": 3,
    "curr_position": 0,
    "curr_capture": 0,
    "is_locked": false,
    "steps": [
        // 打印出每个点百分比的Python代码示例:
        // current_health = 0
        // steps = [dict, ...]  # 即为地图的steps
        // for step in steps:
        //     current_health += step['capture']
        //     print(f"Position {step['position']}: {current_health}%")
        {
            "position": 0,
            //一点
            
            "capture": 50
            //以下一点的百分比为被减数,此点的百分比为减数,相减后的差则为capture的值
            //因为此点为地图的起始点,所以此点百分比固定为0%,已知下一点的百分比为50%,50 - 0 = 50
        },
        {
            "position": 1
            //二点
            
            "capture": 50,
            //以此点的百分比为减数,下一点的百分比为被减数,相减后的差则为capture的值
            //已知此点的capture50%,下一点的百分比为100%,100 - 50 = 50
            
            "items": [
                {
                    "type": "core",
                    "id": "core_generic",
                    "amount": 2
                }
            ]
			//奖励只会在本点开始时领取
        },
        {
            "position": 2,
            //三点
            
            "capture": 50,
            //以此点的百分比为减数,下一点的百分比为被减数,相减后的差则为capture的值
            //已知此点的capture150%,下一点的百分比为100%,150 - 100 = 50
            
            "items": [
                {
                    "type": "fragment",
                    "amount": 500
                }
            ],
            "restrict_ids": [
                "memoryfactory",
                "lumia",
                "pragmatism",
                "paradise",
                "flashback",
                "flyburg",
                "partyvinyl",
                "nirvluce",
                "blossoms",
                "romancewars",
                "moonheart",
                "syro",
                "nexttoyou",
                "memoryforest",
                "guardina",
                "inkarusi",
                "mazenine",
                "themessage",
                "sulfur",
                "etherstrike",
                "fractureray",
                "solitarydream"
            ],
            "restrict_type": "song_id",
            "restrict_difficulty": 2
			//限制条件会在到达下一点前一直有效
        },
        {
            "position": 4,
            //四点
            
            "capture": 50
            //以此点的百分比为减数,下一点的百分比为被减数,相减后的差则为capture的值
            //已知此点的capture200%,下一点的百分比为150%,200 - 150 = 50
            
            "items": [
                {
                    "type": "core",
                    "id": "core_generic",
                    "amount": 2
                }
            ],
            "restrict_ids": [
                "memoryfactory",
                "lumia",
                "pragmatism",
                "paradise",
                "flashback",
                "flyburg",
                "partyvinyl",
                "nirvluce",
                "blossoms",
                "romancewars",
                "moonheart",
                "syro",
                "nexttoyou",
                "memoryforest",
                "guardina",
                "inkarusi",
                "mazenine",
                "themessage",
                "sulfur",
                "etherstrike",
                "fractureray",
                "solitarydream"
            ],
            "restrict_type": "song_id",
            "restrict_difficulty": 2
        },
        {
            "position": 5,
            //终点,用于标记奖励
            
            "capture": 0,
			//capture必须为0
            
            "items": [
                {
                    "type": "world_song",
                    "id": "inkarusi3"
				}
			]
		}
	]
}