因为在扒角色台词和语音的时候做了不少研究,为了避免以后忘记,写个笔记存一下。
这里面放的主要是一些跟随游戏一起分发(应该是)的JSON文件,比如有哪些卡、哪些活动这种最基础的信息。仓库位于Sekai-World/sekai-master-db-diff。下面提及几个(我)最常用的文件:
actionSets.json # 区域对话和一些场景小人
assetList.json # 资源文件列表 # 卧槽这个文件不更新了,别用
cards.json # 卡牌
cardEpisodes.json # 卡牌SideStory
events.json # 活动
eventStories.json # 活动剧情
mysekaiCharacterTalks.json # MySeikai场景对话
specialStories.json # 特殊剧情(比如周年、愚人节之类的)
unitStories.json # 主线剧情
gameCharacters.json # 人物基础信息
character2ds.json # 似乎是live2d的模型信息,在对话中的人物id是用这个字段标识的,需要通过它映射到实际人物id
characterProfiles.json # 人物资料卡
对于剧情和对话文件,比较重要的是其中的 scenarioId
和 assetbundleName
字段,根据这两个字段可以查到这个剧情的详细 asset
文件。
可以使用 Sekai Viewer 提供的资产浏览器。文件的下载路径为 https://storage.sekai.best/sekai-jp-assets/{PATH}
这些文件基本上都是统一的 .asset
文件(实际内容为JSON格式),一个文件记录了一段剧情中的详细信息。
/
/scenario
/unitstory
组合主线剧情
/{assetbundleName}
关联自 unitStories.json
文件中的 chapters[].assetbundleName
/{scenarioId}.asset
关联自 unitStories.json
文件中的 chapters[].episodes[].scenarioId
/profile
个人介绍剧情
/{scenarioId}.asset
关联自 characterProfiles.json
文件中的 scenarioId
。似乎有多个版本/special
特殊剧情
/{assetbundleName}
关联自 specialStories.json
文件中的 assetbundleName
,也有可能是 episodes[].assetbundleName
,有点奇葩,可能只能两种都尝试一下
/{scenarioId}.asset
关联自 specialStories.json
文件中的 episodes[].scenarioId
/tutorial_story
教程剧情,一般没有关注的必要,略过/actionset
区域对话剧情
/{groupId}
神秘分组编号,感觉类似分卷压缩的时候随机分配的,似乎无任何规律,只能一股脑全部下载了
/{scenarioId}.asset
关联自 actionSets.json
文件中的 scenarioId
/event_story
活动剧情
/{assetbundleName}
关联自 eventStories.json
文件中的 assetbundleName
/scenario
/{scenarioId}
关联自 eventStories.json
文件中的 eventStoryEpisodes[].scenarioId
/character/member
卡牌Side Story
/{assetbundleName}
关联自 cards.json
或 cardEpisodes.json
文件中的 assetbundleName
/{scenarioId}
关联自 cardEpisodes.json
文件中的 scenarioId
/card_normal.webp
和 /card_after_training.webp
卡面图片(也有 png
格式)对于每个 .asset
文件,主要关注的是其中的 TalkData
字段,以下择部分关键字段解释
{
"TalkData": [
{
"TalkCharacters": [
{
"Character2dId": 8 // 关联 character2ds.json 中的 id,需要在其中查 characterId 确定角色
}
],
"WindowDisplayName": "雫", // 屏幕上显示的名字,不一定是角色真名
"Body": "ミクちゃん、リンちゃん、それにカイトさんも。\n相談に乗ってくれて、ありがとうございました", // 文本
"Voices": [ // 语音数据。如果是没有语音的角色这里是空数组
{
"Character2dId": 8, // 同上
"VoiceId": "voice_card_ev_idol_07_08_4a_01_08", // 语音ID,下载语音文件的依据
}
],
},
...
]
}
语音文件需要根据 .asset
文件中的 scenarioId
和 VoiceId
查询。文件都有wav
和 mp3
两种格式
/
/sound
/scenario/voice
活动、主线、自我介绍、特殊剧情语音/card_scenario/voice
卡牌Side Story语音/actionset/voice
场景对话语音/{scenarioId}
关联自上述 {scenarioId}.asset
的文件名部分
/{VoiceId}.wav
关联自{scenarioId}.asset
文件中的 TalkData[].Voices[].VoiceId
VoiceId
似乎有一定的命名规律:
voice_ev_shuffle_01_5_66_18
表示第 01 次混活第 5 话 第 66 句台词,是角色ID 18 说的voice_ev_night_10_08_49_20
中的 night 指的是25时的箱活,其他代号有 idol / street / band / wondervoice_ev_wl_night_01_05_98_20
中的 wl 指的是WL活动。虚拟歌手WL时组合代号为 piaprovoice_ms_idol4_33_05
指 idol (即MMJ)的主线剧情第 4 话voice_card_ev_street_08_09_4b_01_10
指street (VBS)第8次箱活的角色ID 9 的3星卡牌的b(后篇)剧情voice_card_bd_202410_06_4a_01_05
是生日卡,2024年10月的角色ID 6 的生日卡a(前篇)剧情(生日卡的星级似乎总是4)voice_card_fes_202206_04_4b_01_04
是fes卡,解释方式同上voice_card_ev_sanrio_02_4b_01_02
这种三丽鸥联动活动卡但是这一堆规律并不是严格遵守的,还有诸如前导零之类奇奇怪怪的问题,总之写在这里仅作记录,实际意义很有限。