关于吉里吉里的启动方法

 为了保证吉里吉里内核能够正常启动、正确读取到程序运行所需的脚本文件,通常情况下,需要先指定一个 项目目录(project folder) ( 详细请参考程序的目录结构(Storage System)页面 )。
 项目目录的确定方法虽然有很多种,不过吉里吉里内核会优先以下面列出的顺序来选择 ( 书写顺序越靠前的,优先度就越高 )。
 关于启动时需要对吉里吉里内核设置的各类选项,请参考 命令行选项 页面。

项目目录的优先辨识顺序

命令行中指定的文件夹(folder)或文件包(archive)
 将目录作为命令行的参数指定的场合,吉里娘就会将其视为项目目录来执行操作。
 将XP3文件包作为命令行的参数指定的场合,吉里娘会视为指定的XP3文件包中包含了项目目录,并执行下一步操作。
 虽然也可以通过命令提示符界面(command prompt)将文件(file)或者目录(folder)作为命令行的参数进行指定,但最简单的还是直接打开资源管理器之类的,把希望吉里娘执行的文件或者目录、直接用鼠标拖拽到吉里吉里内核exe的图标上就可以了(就是那个双鱼的exe)。
 另外,可以把一些常用的项目目录集中起来放到同一个目录下,给这个大目录起一个好记的名称、然后做一个快捷方式放到桌面上,这样,作为吉里吉里内核exe的参数使用起来也会变得更加方便一些吧。

U子注
这里的最后一条说明得不是很清楚,考虑到大家也许会看得比较迷,于是在这里解释一下。
由于本身内容并不重要,所以木有强迫症的读者可以直接略过这部分。

关于那个“吉里吉里内核exe的参数”其实是这样的:可执行文件(这里主要指.exe文件)在执行的时候是可以向它传参数的,原理上,大概跟程序的入口函数有关,也就是main(argc,argv),不过目前U子也没有专门学过编程,所以原理上这里也没法解释得很明白,更重要的是这对于接续的阅读来说似乎并没有太大的帮助,本来只是为了尊重原文的表述、还原一个完整的内容,所以刻意去查了一下,结果还是一知半解的……

就查得的成果而言,在Windows平台下可以这样用:win键+R打开运行,输入吉里娘内核所在的根目录、要从盘符开始,然后在目录结尾输入吉里娘内核的“文件名.exe”,以未改名的原始内核为例就是“krkr.eXe”,然后空格,可以选择继续输入参数,这个参数也就是你想要用吉里娘运行的东西,可以是目录名比如data啦、Sample啦之类的文件夹,也可以是xx.xp3这样的文件包。

例:D:\KRKR2\krkr.eXe data 或者 D:\KRKR2\krkr.eXe data.xp3

另外要注意的是,关于上面提到的这个快捷方式的问题。
其实,你是不能把项目目录直接快捷方式到桌面上、然后直接用win+R运行或者直接用鼠标把这个快捷方式拖动到KR的exe上,这样做是不能执行的,会报错。
因为快捷方式本身是一个后缀名为.lnk的文件,并不是目标文件本身,直接快捷方式一个项目目录到桌面只能帮助你快速打开它而已,再没其他意义了……
所以根据原文,这里理解成了把常用的项目目录集中在一起,然后把这个用来集中各种项目目录的文件夹快捷方式到桌面上。
并且还要注意,如果想用win+R的方式“快速”启动项目,krkr.eXe还必须要放在这个大目录下才可以。
再直白点说,这就相当于是把一个内核的exe跟N个你自己改过名后的data文件夹放在同一个目录下,然后把这个目录快捷方式到桌面上,再用win+R的方式运行这些被你重命名后的data目录中的任意一个(以及,如果这样弄了那你也只能用win+R来运行这些工程了,因为自定义的名称kr是不会认的,默认情况下kr只认data和content-data这两种命名方式的项目工程目录,这在下面也有写)……

嘛,虽然看起来没太大意义,不过这样做确实可以实现整理项目的效果、也方便对项目的统一管理,也算是个好习惯吧。
这里为此解释了一大串,好像更迷了QAQ,各位读者大大们不要打窝奥(>﹏<)。

与可执行文件处于同一目录下的 content-data 文件夹
 在存放吉里吉里内核的可执行文件的目录下,如果存在名为 content-data 的文件夹,吉里娘就会将这个文件夹视为项目目录,并运行。
与可执行文件处于同一目录下的 "data.xp3" 文件
 在存放吉里吉里内核的可执行文件的目录下,如果存在名为 data.xp3 的文件包的场合,吉里娘就会视为这个XP3文件包中包含了项目目录,并运行。
与可执行文件处于同一目录下的 "data.exe" 文件
 在存放吉里吉里内核的可执行文件的目录下,如果存在名为 data.exe 的可执行文件的场合,吉里娘会视为这个可执行文件中存在xp3文件包、并且文件包中包含了项目目录,然后运行。(U子注:或者也可以理解为,吉里娘是直接把这个data.exe视为了xp3文件包,然后在里面寻找项目目录并运行。)
( 由于XP3文件包可以与可执行文件合为一体,所以也存在这种确定项目目录的方法。 )(U子注:这里大概是在指封包工具里的生成exe功能。)
内核自身与 XP3 文件包结合在一起的情况
 虽然XP3文件包可以跟可执行文件相结合,不过也存在XP3文件包跟内核自身相结合的情况,在这种情况下,吉里娘会视为自己体内包含有项目目录,并运行……(U子的吐槽:这样翻总觉得哪里怪怪的…… 嘛咿咔——)
与可执行文件处于同一目录下的 data 文件夹
 在存放吉里吉里内核的可执行文件的目录下,如果存在名为 data 的文件夹,吉里娘就会将这个文件夹视为项目目录,并运行。

U子注
上面这种大概是各位新人君们最熟悉的情况了吧w
虽然这条从优先度上来看是权重最低的,不过U子觉得在开发阶段只需要遵循这条讲的就足够了,其他的情况基本都只可能在开发完成封包的时候才会有所体现。
在封包的时候可以选择封成exe或者xp3文件包,区别大体在于破解的难易度上。(这里要注意,不存在不能破解的封包,只是难度问题)
虽然封成exe可以增加破解的难度,但是目录下如果有一大堆exe程序的话,可能会让玩家不知道那个才是用来开始游戏的,所以一般都是封成xp3文件包。
所以各位新人君只需要按照这一条所说的,在kr内核exe所在目录下建个data文件夹来当工程目录就可以啦w

 如果内核在尝试过上述几种方法后还是无法确定项目目录的话,则会显示 目录/文件包选择 的界面。
 但是要注意的是,如果在封包工具中的“可执行文件设定”选项卡下勾选了「只从XP3文件包执行」的话,吉里娘将视为项目目录仅存在于XP3文件包中,这时,就只能执行data.xp3文件、data.exe文件、以及「内核自身与 XP3 文件包结合在一起的情况」这三种场合下的操作了。( 详细请参考吉里吉里设定工具 页面 )。

选择目录/文件包

 选择目录/文件包的界面如下图所示。
FolderSelector.png

 位于左侧的列表只能显示目录结构(也就是只有文件夹、也包括压缩包里面的),所以想要选择用内核运行具体的某个文件时,需要选中左侧的目录,被选中的目录下的文件和子目录会在右侧的区域显示出来,其中文件夹会排在文件的前面。(U子注:这里翻译得可能跟原文表达的意思不太一样,说实话,那个原文有点奇怪、U子并没能完全读懂意思,于是干脆根据自己理解写了一下,嘛,反正内容也不怎么重要啦……)

「不选择」按钮
 按下这个按钮,将不会选择项目目录。但吉里吉里主控制台(Controller)还是会启动的。虽然是未指定项目目录的状态,不过使用debug控制台(Console)和脚本编辑器(ScriptEditor)还是可以对简单的脚本进行测试的。
「OK」按钮
 用吉里娘内核运行当前选中的目录或文件。
「取消」按钮
 不进行任何操作,直接关闭吉里吉里。

U子注
关于这个界面,结合之前提到的项目目录优先度识别的概念,在这里再作一些补充说明。
上面提到的项目目录优先辨识顺序一般是指:作为项目目录的文件夹/文件包/可执行文件,与吉里吉里内核的exe存放于同一目录下时,吉里吉里内核对它们进行辨识的优先顺序。
解释起来就是,如果在目录下同时存在多种可以被吉里吉里内核视为项目目录的对象时,优先度相对高的会优先被当作项目目录被内核运行,相对低的就会被略过而不被运行。

而选择目录/文件包的这个界面,则只会在吉里吉里内核找不到项目目录时才会被打开。
换言之就是:只有吉里娘在自己呆的目录里木有找到任何看起来可以执行的文件或者看起来像是项目目录的东西时,才会跑出来问你要执行哪里的哪个文件。

以及,在这里还需要注意一点,如果你只是放一个裸的内核exe、别的什么都没有的话,是打不开任何东西的,吉里娘会报错说:找不到krdevui.dll。
这是因为构建「选择 文件/文件包」这个界面的代码并没有被嵌在kr的内核里,所以如果没有这个dll文件,那「选择 文件/文件包」界面的UI就无法被载入出来了,然后就会报错。(然而这句报错的代码却是嵌在内核里的……)

综上所述,如果想要直接启动吉里吉里内核,途径有以下两种:
  1.只把krkr.eXe跟krdevui.dll放在一起,然后运行,会启动文件检索界面,可以选择直接打开主控制台或者打开想要运行的文件;
  2.只把krkr.eXe跟命名为data或者content-data的文件夹放在一起,并且在这个文件夹里需要有一个名为startup.tjs的文件,然后运行,会执行startup.tjs中的代码。

上述的两种是方法是涉及文件最少、也是最基本的启动吉里吉里内核的方法了。其中第二种是最根本的kr程序的启动方法。
不过一般做开发的时候都是搭KAG启动就是啦w

吉里吉里内核最初执行的文件

 在决定了项目的目录后,最初被吉里吉里内核执行的文件是位于项目目录下的 startup.tjs 文件。如果在项目的顶层目录内找不到这个文件、或者它压根就不存在的话,吉里娘就会报(ao)错(jiao)w

U子注
关于“为什么一定是startup.tjs这个文件”、以及“能不能根据自己的喜好命名一个最初执行的文件”之类的问题,其实理论上是可以的,只不过由于定义这个文件名的代码是被写在内核里的,所以需要拆开内核来改内核的源代码,所以不像KAG最初执行的first.ks那样,一般都懒得去改它。

再唠叨一下开发阶段kr启动后的默认文件执行顺序:
  KRKR.exe → data或content-data目录 → startup.tjs → initialize.tjs(KAG中默认) → 读取各种KAG系统文件(KAG中默认) → first.ks(KAG中默认) → 开发者自己指定跳转的文件……

其中从initialize.tjs开始就不是必须的了,可以自己重新指定。

消息映射表文件(Massage_Map file)

 吉里吉里内核会在启动后,紧接着会扫描自身所在目录下是否存在 msgmap.tjs 这个文件,如果存在的话就会对它进行加载。与上面提到的关于项目目录在封包时的操作相同,如果在封包工具中的“可执行文件设定”选项卡下勾选了「不读取信息映射文件」选项,内核则不会再对它进行读取(详细请参考吉里吉里设定工具 页面)。所谓的 msgmap.tjs 文件,是使用 System.assignMessage 方法,实现提示消息重新分配的效果。 msgmap.tjs 文件也可以使用 吉里吉里主控制台(Controller) 生成。

U子注
关于这个 msgmap.tjs 文件,里面写的其实就是我们平时经常能看到的那些报错信息,而且这个里面写的很大一部分U子都没怎么见到过,比较常见的其实也就那么几个,比如“语法错误(%1)”、“脚本编辑器(例外通知)”之类的。

我们平时看到的报错信息其实可以分成两类:
  一类是像 msgmap.tjs 文件中定义的这些(其实 msgmap.tjs 里的提示消息并不完全,在内核源代码的其他文件中还定义了别的一些提示消息,看起来都是差不多的,之前自翻内核的时候知道的,不过当时也没关注这些提示消息到底是怎么分类的,有兴趣的童鞋可以自己查……),这类消息是跟内核本身的运行相关的,情况多为内核跟操作系统间、或者tjs语言跟内核本身之间,在产生交互时发生了某些些状况的提示消息、或者说报错的信息;
  而另一类则是KAG系统中定义的报错信息,例如我们经常见到的“发生了错误 文件:blabla.ks 行:xx 标记:blabla(←可能显示了错误前后的标记) 后略……”,这样的错误提示是KAG系统自己定义的,一般是利用内核自带的方法“System.inform(msg,"标题栏文字")”来实现的,跟前者不同,这类消息根据需要完全可以手动添加,比如在剧本打通之后可以添加上“System.inform(msg,"恭喜")”,然后再定义一个名为msg的变量,把“恭喜你通关了”之类的字符串存进去就可以了。

我们再回到 msgmap.tjs 文件上,这个文件本身是不存在的,里面的消息其实都是被封在内核里的、属于内核源代码的一部分。
如果用的是原版的内核,那这些消息就都会是日文的。
就像刚才提到的,类似这样定义的提示消息,并不止 msgmap.tjs 里写的这些,不过唯独 msgmap.tjs 这个文件可以摘出来重新改,具体原因U子也没搞明白,总之只要存放内核的目录下有这个 msgmap.tjs ,内核就会忽视原先嵌入在内核里的内容并读取它里面定义的内容。
如果是使用没有翻译过的原版内核、又想要给用户塑造一个良好的体验,就可以尝试导出它然后手动翻译一下,在封包的时候记得带上它就好。

关于如何导出,只要把主控制台的面板调出来,然后在面板上的任意位置右键,下拉菜单里就可以找到相关的一个选项,在汉化版内核里是“创建消息映射文件(M)”,点选之后选择一个保存位置就可以导出了。

启动参数设定文件

 吉里吉里内核可以读取用 吉里吉里设定工具 生成的设定文件 (.cf 格式的文件和 .cfu 格式的文件) ,并根据其中的设定做出相应的操作。
 关于文件名以及文件被生成的位置,请参照 吉里吉里设定工具 页面。