Arcaea World Map Format

 

貌似网上能搜到一篇讲解,不管了,把之前写的整理一下扔出来
Client Version: 4.1.9

Overview

目前还是用着JSON文件直接读取的办法,以后的事以后再说(

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
{
    "map_id": "test",  // Unique name of the map
    "is_legacy": false,  // Legacy style map
    "is_beyond": false,  // Beyond challenge style map
    "beyond_health": 200,  // The total percentage of a beyond map
    "character_affinity": [],  // e.g. [0, 1]
    "affinity_multiplier": [],  // e.g. [1.5, 2.0]
    "chapter": 0,
    "available_from": -1,
    "available_to": 2106124800000,
    "is_repeatable": true,  // Repeatable map
    "require_id": "",
    "require_type": "",
    "require_value": 0,
    "require_localunlock_songid": "",
    "require_localunlock_challengeid": "",
    "chain_info": {},
    "coordinate": "0,0",  // Location coordinates in the chapter
    "step_count": 12,  // Total steps (unused)
    "custom_bg": "",  // Background picture
    "stamina_cost": 2,  // Stamina cost per time
    "curr_position": 0,  // (unused)
    "curr_capture": 0,  // (unused)
    "is_locked": false,  // (unused)
    "steps": [{
        "position": 0,  // Step position, starting from 0, must be continuous
        "capture": 10  // Progress required to crawl a step
    }, {
        "position": 1,
        "capture": 20,
        "items": [{
            "type": "fragment",
            "amount": 1000
        }]
    }, {
        "position": 2,
        "capture": 10,
        "restrict_id": "base",
        "restrict_type": "pack_id"
    }, {
        "position": 3,
        "capture": 10,
        "restrict_id": "base",
        "restrict_type": "pack_id",
        "step_type": ["randomsong"]
    }, {
        "position": 4,
        "capture": 10,
        "items": [{
            "type": "core",
            "id": "core_generic",
            "amount": 1
        }]
    }, {
        "position": 5,
        "capture": 10,
        "step_type": ["speedlimit"],
        "speed_limit_value": 20
    }, {
        "position": 6,
        "capture": 10
    }, {
        "position": 7,
        "capture": 10,
        "step_type": ["plusstamina"],
        "plus_stamina_value": 2
    }, {
        "position": 8,
        "capture": 10
    }, {
        "position": 9,
        "capture": 10,
        "items": [{
            "type": "fragment",
            "amount": 125
        }]
    }, {
        "position": 10,
        "capture": 10000,
        "step_type": ["plusstamina","speedlimit"],
        "plus_stamina_value": 2,
        "speed_limit_value": 5,
        "restrict_id": "fractureray",
        "restrict_type": "song_id",
        "restrict_difficulty" : 2
    }, {
        "position": 11,
        "capture": 0,
        "items": [{
            "type": "core",
            "id": "core_crimson",
            "amount": 500
        }, {
            "type": "fragment",
            "amount": 125
        },{
            "type": "character",
            "id": "2"
        }
        ]
    }]
}

Details

The following is in Chinese, and I’m too lazy to translate.

list: array, dict: object, int&float: number, str: string

Chapter

chapter: int是章节ID,0是event章节,1是第一章,后面以此类推,特别有1001是beyond章节

Character Affinity

搭档契合,character_affinity: list[int]affinity_multiplier: list[float]是一一对应的,前者是搭档列表,后者是对应搭档的进度倍数列表

Chain Info

  • chain_info: dict里只有id: strindex: int
  • id 一致的就是一组图,index 是各个图的顺序,从1开始
  • 只对 Beyond 图有效,代表了一个链式的解锁顺序,前一张图未完成是看不到下一张图的信息的
  • 可参考官方的那个五连环

Available Time

限时地图,一般出现在 event 章节中,请注意available_from: intavailable_to: int都是毫秒时间戳,应当有13位

Map Require

  • require_type: str只能其中一个:pack, character, single, fragment, chart_unlock, chapter_step
  • require_id: str | list[str]可以是list!解锁条件只显示第一个未解锁的,且require_type相同(目前只见过chart_unlock
  • chart_unlock似乎只在beyond图中生效,普通图会无曲绘,注意此时require_idsong_id + difficulty
  • 当类型为character时,请注意require_id一定是字符串,也就是说如果是搭档,就会出现'require_id': '2'的情况
  • 当类型为chapter_stepfragment时,require_id被忽略,需要require_value: int作为数值
  • require_localunlock_songid: str是隐藏式本地歌曲解锁,会出现”???”的提示(目前只见过fractureraygrievouslady
  • require_localunlock_challengeid: str是隐藏式本地挑战解锁,会出现”???”的提示(目前只见过singularity, tempestissimo, testify
  • 其实还有个requires: list[dict],但目前并无作用

Step Items

  • items: list[dict],请注意最后一格需要有奖励,而且一般来说capture为0
  • 对于每一个item,type: strid: str是必须的,amount: int是可选的,即物品数量
  • 请注意id一定是字符串,也就是说如果是搭档,就会出现'id': '2'的情况
  • item都有啥,不是此文重点,懒得说了……

Step Type

  • step_type: list[str]是台阶类型,可以同时是多种类型,可选值有:plusstamina, randomsong, speedlimit
  • 当类型中有plusstamina时,即为体力格,plus_stamina_value: int就是增加的体力值
  • 当类型中有speedlimit时,即为限速格,speed_limit_value: int就是最大允许速度值,是游戏中实际速度值的10倍
  • 当类型中有randomsong时,即为随机格,必须有下面的Step Restrict来限制随机范围

Step Restrict

  • restrict_type: str是前提,没有这项将不会有限制,只有两个可选值:song_idpack_id
  • restrict_ids: list[str]优先于restrict_id: str,有前者则后者失效,前者是多个值的列表,后者是单个值
  • restrict_difficulty: int是可选的,只能是0, 1, 2, 3的其中一个