「Story文件格式」:修訂間差異

出自Arcaea中文维基
→‎vn文件夹:​ 看懂了
(未顯示由 3 位使用者於中間所作的 14 次修訂)
行 10: 行 10:
 在main和side文件夹下可以看见entries文件,vn文件和一个csb格式文件.
 在main和side文件夹下可以看见entries文件,vn文件和一个csb格式文件.
===csb格式文件===
===csb格式文件===
*csb格式文件 存放 了对应界面 中不同图片所在的位置。'''需要专门的 译器打开。'''<s>你就算加了新剧情你也没法摆啊</s>
*csb格式 为cocos2dx的UI布局 文件 ,定义 了对应 分支的 界面 布局,比较难以 辑(参考:[FlatBuffer https://google.github.io/flatbuffers/])


===entries文件===
===entries文件===
entries文件为每个剧情的信息,包含解锁条件、需求曲包、前置分支关系等
 格式
 格式
{| class="wikitable"
{| class="wikitable"
行 18: 行 20:
| <nowiki>{"entries": [{故事信息1},{故事信息2},……,{故事信息n}]}</nowiki>
| <nowiki>{"entries": [{故事信息1},{故事信息2},……,{故事信息n}]}</nowiki>
|}
|}
 例子
 例子
  {
  {
行 43: 行 46:
  "clearCharaId": 0
  "clearCharaId": 0
  },
  },
  {
  ...
"minor": 4,
"requiredPack": "rei",
"storyType": "nvl",
"clearSongId": "mazenine",
"clearCharaId": 0
},
{
"minor": 5,
"requiredPack": "rei",
"requiredMinor": 4,
"storyType": "nvl",
"clearSongId": "halcyon",
"clearCharaId": 0
},
{
"minor": 6,
"requiredPack": "rei",
"requiredMinor": 5,
"storyType": "nvl",
"clearSongId": "etherstrike",
"alternateSuffix": "ZR",
"clearCharaId": 14
},
{
"minor": 7,
"requiredPack": "rei",
"requiredMinor": 5,
"storyType": "nvl",
"requirementAnomalyId": "fractureray"
},
{
"minor": 8,
"requiredPack": "rei",
"requiredMinor": 7,
"storyType": "nvl",
"clearSongId": "fractureray",
"clearCharaId": 0
},
{
"minor": 9,
"requiredPack": "rei",
"requiredMinor": 8,
"storyType": "nvl",
"clearSongId": "fractureray",
"clearCharaId": 15
}
  ]
  ]
  }
  }
行 106: 行 63:
  ]
  ]
  }
  }
*MinorID(integer): 本minor 的ID,引用的基础。
*MinorID(integer): 子剧情 的ID,引用的基础。
*requiredPackID(ansistring):该剧情所要求的曲包,请移步[[曲包信息(packlist)格式]]。
*requiredPackID(ansistring):该剧情所要求的曲包,请移步[[曲包信息(packlist)格式]]。
*requiredMinorID(integer):解锁 本Minor 所需通过 的MinorID
*requiredMinorID(integer):解锁 此子剧情 所需通过 的前置子剧情ID
**如果 本Minor 需要多个前 置Minor ,则代码如下
**如果 子剧情 需要多个前 置子剧情 ,则代码如下
  "additionalRequires": ["requiredentriesID-requiredMinorID", "requiredentriesID-requiredMinorID",……]
  "additionalRequires": ["requiredentriesID-requiredMinorID", "requiredentriesID-requiredMinorID",……]
:*requiredentriesID(integer):对应requiredMinorID所隶属的entries.
:*requiredentriesID(integer):对应requiredMinorID所隶属的entries.
*type(nvl,vn):本剧情的展现模式,如果为nvl则为普通文本剧情;如果为vn则为 情景剧
*type(nvl,vn):本剧情的展现模式,如果为nvl则为普通文本剧情;如果为vn则为 视觉小说模式
  ……
  ……
  "storyType": "vn",
  "storyType": "vn",
行 119: 行 76:
:*vnChar(ansistring):当本剧情为vn时所调用的情景剧文件夹(\assets\app-data\story\vn)/资源(\assets\app-data\story\vn\res)的名称。
:*vnChar(ansistring):当本剧情为vn时所调用的情景剧文件夹(\assets\app-data\story\vn)/资源(\assets\app-data\story\vn\res)的名称。
*clearSongID(ansistring):需要通过的曲目ID
*clearSongID(ansistring):需要通过的曲目ID
*alternateChar(ansistring): 咕咕咕
*alternateChar(ansistring): 如果剧情后面的编号不是MinorID时所采用的字符串。
*requirementAnomalyID(ansistring):需要[[解歌系统#特殊解歌系统|迷之解锁]]的曲目ID
*clearCharaId(integer):解锁时需要采用的[[搭档]],ID编号参见[[曲包信息(packlist)格式]]
 
===vn文件(story文件夹下)===
格式
{| class="wikitable"
|-
| <nowiki>{"requiredentriesID-requiredMinorID": {对应故事1},"requiredentriesID-requiredMinorID": {对应故事2},……}</nowiki>
|}
例子
{
"3-1": {
"en": "It’s early evening. Outside, ...”",
"ja": "それは夕暮れ、黄昏のころ。\n野外にて、...",
"ko": "이른 저녁이다. 바깥은 태양이 발하는 호박빛의 황혼이 쉼 없이 하늘을 물들이고 있지만,\n...\"",
"zh-Hans": "夜色将至。屋外,太阳所溢出的琥珀色暮光马不停蹄地想要从天际溜走,...",
"zh-Hant": "夜色將至。屋外,太陽所溢出的琥珀色暮光馬不停蹄地想要從天際溜走,..."
},
"3-2": {
...
},
...
}
归纳
{
"requiredentriesID-requiredMinorID": {
"en": "English story",
"ja": "日本語の物語",
"ko": "한국어 이야기",
"zh-Hans": "简体中文的故事",
"zh-Hant": "正體中文的故事"
},
 ……
}
由于变量名已经在先前阐明,故不再赘述。但需要注明的是:
*换行符是\n
*文本内容的英文双引号为\",避免json转义
*分页符为|
==vn文件夹==
vn文件夹下包含所有不同语言下对应视觉小说模式的剧情的脚本文件,以及res文件夹,对应所需资源。
===res文件夹===
res文件夹下包含当前V-1视觉小说所有所需文件,以及一个zettai文件夹,对应3-3视觉小说所需文件。
===vns文件===
vns为Arcaea中视觉小说模式的剧情的脚本文件,包含有以下指令
{| class="wikitable"
|-
|play <audio> <volume> <loop>
|}
*播放音频
*loop为循环至剧情结束(无法停止),可选
{| class="wikitable"
|-
|say <content>
|}
*显示剧情内容,每次say会清空屏幕已有剧情
{| class="wikitable"
|-
|show <pic> <posX>:<posY> <anchorX>:<anchorY> <scaleX>:<scaleY> <transition> normal
|}
*显示图片
*pos为图片锚点在图片上的位置,图片左下角为(0,0),右上角为(1,1)
*anchor为图片锚点在屏幕上的位置,屏幕左下角为(0,0),右上角为(1,1)
*scale为图片缩放比例,1为原始大小
**锚点为图片缩放过程中的原点
*transition为渐变效果
*结尾参数不明,现有vn全部为normal
{| class="wikitable"
|-
|hide <pic> <transition>
|}
*隐藏图片
*transition为渐变效果,可选
{| class="wikitable"
|-
|move <pic> <dx>:<dy> <duration> <curve>
|}
*移动图片
*dx:dy为移动的距离,单位为像素
*duration为移动时长
*curve为移动过程使用的曲线
*transition:仅支持fade淡入淡出渐变,格式为fade(<duration>,<curve>)
*curve:支持linear、sinein、sineout、sineinout,详见[https://easings.net easings 一览]

於 2019年6月21日 (五) 07:43 的修訂

  • 這只是對Story文件的格式分析,並不表示任何人可以曲解劇情。
  • 本頁面將保持孤立狀態,嚴禁鏈入/引用!

總論

在apk包中,所有關於劇情的部分都在\assets\app-data\story中,包含多個文件。不同的文件(夾)包含不同的作用。 其中paths決定story界面圖像排布,entries記錄劇情關卡信息,vn記錄劇情文字/情景劇信息

文件夾/文件分析

在main和side文件夾下可以看見entries文件,vn文件和一個csb格式文件.

csb格式文件

entries文件

entries文件為每個劇情的信息,包含解鎖條件、需求曲包、前置分支關係等

格式

{"entries": [{故事信息1},{故事信息2},……,{故事信息n}]}

例子

{
	"entries": [{
			"minor": 1,
			"requiredPack": "core",
			"storyType": "nvl",
			"clearSongId": "lumia",
			"clearCharaId": 0
		},
		{
			"minor": 2,
			"requiredPack": "core",
			"requiredMinor": 1,
			"storyType": "nvl",
			"clearSongId": "memoryfactory",
			"clearCharaId": 0
		},
		{
			"minor": 3,
			"requiredPack": "core",
			"requiredMinor": 2,
			"storyType": "nvl",
			"clearSongId": "pragmatism",
			"clearCharaId": 0
		},
		...
	]
}

歸納

{
	"entries": [{
			"minor": MinorID,
			"requiredPack": "requiredPackID",
			"requiredMinor": requiredMinorID,
			"storyType": "type",
			"clearSongId": "clearSongID",
			"alternateSuffix": "alternateChar",
			"requirementAnomalyId": "requirementAnomalyID",
			"clearCharaId": clearCharaId
		},
	]
}
  • MinorID(integer):子劇情的ID,引用的基礎。
  • requiredPackID(ansistring):該劇情所要求的曲包,請移步曲包信息(packlist)格式
  • requiredMinorID(integer):解鎖此子劇情所需通過的前置子劇情ID
    • 如果子劇情需要多個前置子劇情,則代碼如下
		"additionalRequires": ["requiredentriesID-requiredMinorID", "requiredentriesID-requiredMinorID",……]
  • requiredentriesID(integer):對應requiredMinorID所隸屬的entries.
  • type(nvl,vn):本劇情的展現模式,如果為nvl則為普通文本劇情;如果為vn則為視覺小說模式。
……
		"storyType": "vn",
		"storyData": "vnChar",
……
  • vnChar(ansistring):當本劇情為vn時所調用的情景劇文件夾(\assets\app-data\story\vn)/資源(\assets\app-data\story\vn\res)的名稱。
  • clearSongID(ansistring):需要通過的曲目ID
  • alternateChar(ansistring):如果劇情後面的編號不是MinorID時所採用的字符串。
  • requirementAnomalyID(ansistring):需要迷之解鎖的曲目ID
  • clearCharaId(integer):解鎖時需要採用的搭檔,ID編號參見曲包信息(packlist)格式

vn文件(story文件夾下)

格式

{"requiredentriesID-requiredMinorID": {对应故事1},"requiredentriesID-requiredMinorID": {对应故事2},……}

例子

{
	"3-1": {
		"en": "It’s early evening. Outside, ...”",
		"ja": "それは夕暮れ、黄昏のころ。\n野外にて、...",
		"ko": "이른 저녁이다. 바깥은 태양이 발하는 호박빛의 황혼이 쉼 없이 하늘을 물들이고 있지만,\n...\"",
		"zh-Hans": "夜色将至。屋外,太阳所溢出的琥珀色暮光马不停蹄地想要从天际溜走,...",
		"zh-Hant": "夜色將至。屋外,太陽所溢出的琥珀色暮光馬不停蹄地想要從天際溜走,..."
	},
	"3-2": {
		...
	},
	...
}

歸納

{
	"requiredentriesID-requiredMinorID": {
		"en": "English story",
		"ja": "日本語の物語",
		"ko": "한국어 이야기",
		"zh-Hans": "简体中文的故事",
		"zh-Hant": "正體中文的故事"
	},
……
}

由於變量名已經在先前闡明,故不再贅述。但需要註明的是:

  • 換行符是\n
  • 文本內容的英文雙引號為\",避免json轉義
  • 分頁符為|

vn文件夾

vn文件夾下包含所有不同語言下對應視覺小說模式的劇情的腳本文件,以及res文件夾,對應所需資源。

res文件夾

res文件夾下包含當前V-1視覺小說所有所需文件,以及一個zettai文件夾,對應3-3視覺小說所需文件。

vns文件

vns為Arcaea中視覺小說模式的劇情的腳本文件,包含有以下指令

play <audio> <volume> <loop>
  • 播放音頻
  • loop為循環至劇情結束(無法停止),可選
say <content>
  • 顯示劇情內容,每次say會清空屏幕已有劇情
show <pic> <posX>:<posY> <anchorX>:<anchorY> <scaleX>:<scaleY> <transition> normal
  • 顯示圖片
  • pos為圖片錨點在圖片上的位置,圖片左下角為(0,0),右上角為(1,1)
  • anchor為圖片錨點在屏幕上的位置,屏幕左下角為(0,0),右上角為(1,1)
  • scale為圖片縮放比例,1為原始大小
    • 錨點為圖片縮放過程中的原點
  • transition為漸變效果
  • 結尾參數不明,現有vn全部為normal
hide <pic> <transition>
  • 隱藏圖片
  • transition為漸變效果,可選
move <pic> <dx>:<dy> <duration> <curve>
  • 移動圖片
  • dx:dy為移動的距離,單位為像素
  • duration為移動時長
  • curve為移動過程使用的曲線
  • transition:僅支持fade淡入淡出漸變,格式為fade(<duration>,<curve>)
  • curve:支持linear、sinein、sineout、sineinout,詳見easings 一覽