转跳到内容

只显示该作者

只有该作者的内容显示中。 返回到主题

推荐贴

2cddcd11f35da66075c0d.png
↑点击这里,欢乐多多,奖励多多哦~↑

前言:

剧透

拿来主义的排版,别打我

感觉沉睡了一万年……这次主要是找个地方放一下自己玩票的研究成果。

A社是一个让我一言难尽的游戏开发商。我对它的游戏性设计、数值设计、人设以及UI设计爱不释手,与此同时又对它的二选一机制,喂X剧情以及微妙的系统细节敬而远之。从大番长到战国兰斯,从妻中蜜到母娘乱馆,不外乎是。

于是时光流转,18年,兰斯系列的最终作兰斯10发售了。卡牌系统的RPG一下子就夺走了我的目光,我对卡牌这种小东西一向没有什么抵抗力。游戏体验非常完美,直到我知道了一个令我蛋疼无比的事实:二周目不继承卡片,收集卡片只能用在短短的后日谈里。

从难度曲线的角度来说,这样的做法其实无可厚非,但是兰斯10使用的并非deckbuilding(卡牌构筑)式的游戏系统(如杀戮尖塔,或许这样我还比较容易接受)而是靠堆属性的资源整合式。对于我这种爽点不在难度而是我全都要的人来说,这样的设计就非常痛苦,一如之前的二选一机制。

SSG虽然能解决一部分的问题,但无法根除我心中的焦躁感。于是我想起了AinDecompiler,A社专用的反编译工具。(我想起以前狐狸也写过兰斯8的修改教程,工具就是AinDecompiler。)但是AinDecompiler于15年就停止更新了,而后续的A社作品由于系统更新后数据结构的变更而不再受到支持。(题外话:工具的作者SomeLoliCatgirl据说是被欧美黄油代理商Mangagamer收编了,一些A社作品的正版英化应该都经过他手。)于是我的心思也就渐渐消退了。

直到今年,我听闻了兰斯10官中的消息。再次打开游戏的我没有通关的热情,但之前消退的某种心思却再度唤醒。我不死心地搜索AinDecompiler的消息,意外地找到了新的工具,那就是去年刚出的alice-tools。

感觉有点话痨了,那么接下来是正文。

 

 

一.工具篇
使用的工具为alice-tools,当前版本0.5.1,作者Nunuhara Cabbage(没错,就是那个ヌヌハラ……起的一手好名字)
下载:https://haniwa.technology/alice-tools/
源码:https://github.com/nunuhara/xsystem4

(下载页面有说明,英文使用者可以跳过这段)
说是工具,实则为工具包,目前有以下五个组件:
aindump:导出ain文件里的代码或文本信息;
ainedit:将编辑过的代码/文本注入回ain文件;
exdump:导出ex文件里的静态数据;
exbuild:将导出的静态数据重建;
alice-ar:解包ald/afa/flat文件(目前无法用于中文版)。
(注:原本中文版ain存在无法注入代码的问题,现已修复。)

 

二.提取/封装
(下载页面有说明,英文使用者可以跳过这段)

剧透


我们的目标文件是游戏根目录下的Rance10.ain以及Rance10EX.ain

在cmd或者powershell里按照格式执行程序,我们的基本格式如下:


aindump -c -o out.jam --input-encoding GBK Rance10.ain

这一步是提取ain文件里的代码。-c指提取代码模式,-o以及之后的out.jam指定输出文件,--input-encoding GBK是因为中文版的ain文件并非默认的日文SHIFT-JIS编码而需要进行转换,最后的Rance10.ain则是指定对象ain文件的目录索引。
如果只提取文本的话将-c替换成文本模式的-t,如下:


aindump -t -o out.jam --input-encoding GBK Rance10.ain

另外,aindump提取代码时默认开启宏功能,如果要看到更为基础的代码可以添加--no-macros参数,如下:


aindump -c -o out.jam --input-encoding GBK --no-macros Rance10.ain

编辑完毕后,我们可以将编辑好的代码/文本注入回ain文件,基本格式如下:


ainedit -c out.jam -o out.ain --output-encoding GBK Rance10.ain

out.jam指上一部提取并编辑的文件,out.ain则是我们给成品指定的名称,这里注意--output-encoding GBK意味着我们输出的文件是GBK编码,这样才能被执行文件识别,最后我们还是需要指定原本的ain文件的目录。如果上一部提取的是文本,则一样使用-t替换-o,如下:


ainedit -t out.jam -o out.ain --output-encoding GBK Rance10.ain

生成好的out.ain文件就可以重命名替换游戏根目录下的源文件(注意备份),然后进游戏查看效果。

以上是ain的部分,ex文件的部分则相对简单一些,没有什么变化:
提取:exdump -o out.x Rance10EX.ex
封装:exbuild -o out.ex out.x
out.x就是可编辑的文件,封装时不需要指定源文件目录。生成的ex文件同样重命名替换根目录文件进游戏查看效果。

 

三.ex修改
准备工作基本结束了,接下来就是实际的部分了。
我们先说ex文件吧(相对简单不少),目前贴吧里主流的修改基本都是对ex文件修改。
ex文件里保存着游戏使用的绝大多数静态数据。
结构也比较简单,主要的两种数据结构,table就是表格了,逗号分割可以比较简单的转换为csv格式,如:

table E_声音分组设定 = {
    { indexed int 分组编号, int 対応音声分组编号 = -1, float 默认响度 = 0.800000 },
    { 0, -1, 0.800000 },
    { 1, -1, 0.800000 },
    { 2, -1, 0.800000 },
    { 3, -1, 1.000000 },
    { 4, -1, 0.800000 },
    { 5, -1, 0.177828 }
};


table的修改只需要替换对应的合理值,没有什么需要注意的点。
比较重要的table有任务信息(不含条件逻辑),卡牌信息以及技能信息,其他可以忽略。

另一种tree类似于json,主要区别在于使用“=”而不是“:”,如:

tree 排除故障时奖励/头目 = {
    3轮以内打倒了 = {
        值 = 1,
    },
    1轮内打倒了 = {
        值 = 1,
    },
    过度杀戮 = {
        值 = 10,
    },
    使用大招打倒了 = {
        值 = 0,
    },
};


tree类型里数据结构相对重要一些,我们稍微拆开来写。
1.map数据:

剧透


地图路线的配置全部包括在这里,简化结构如下:


tree MAP数据 = {
    [任务名称] = {
        尺寸 = (list) { [x轴], [y轴] },
        数据 = {
            0001 = {
                MAP位置 = (list) { [x坐标], [y坐标] },
                種別 = "[格子类型]",
                [编号 = 1,]
            },
            0002……
        }
    }
    [任务名称2]……
}


这组数据的作用是为任务绘制一张x乘y的地图,在上面对应坐标的格子绘制对应种别的内容。
种别主要是两种,道路和箱,道路对应之后的制表符方向,如"道路(─)""道路(└)""道路(┬)"等,而箱则不单指宝箱而是所有的事件方格。编号的数值会引用接下来任务数据中同名任务对应编号的事件触发。

 

2.任务数据

剧透


所有的地图事件或者战斗信息都包括在这里,纯事件而无地图的话基本是下面的样子:


    挑战模式/问候 = {
        001 = {
            故事 = "901/挑战模式/入口",
            结束 = 1,
        },
    },

相对完整的简化结构:


tree 任务数据 = {
    [任务名称] = {
        背景 = "[背景]",
        地名 = "[地名]",
        音乐 = "[音乐]",
        [フラグ = "[flag]",]
        001 = {
            故事 = "[脚本名]",
            音乐 = "[音乐]",
            [图片A = "[格子样式]",]
            [图片B = "[放置物样式]",]
            [フラグ = "[flag]",]
            [选择分支 = {
                分支前 = {
                    背景 = "[背景]",
                    地名 = "[地名]",
                    音乐 = "[音乐]",
                    头像 = "[头像]",
                    说明 = "[说明]",
                },
                分支左 = ……
                分支右 = …… 
            },
            [战斗 = "[战斗对象]",]
            [処理 = "[奖励内容]",]
            [卡牌 = (list) { "[卡牌名]"[,"[卡牌名]","[卡牌名]"]},]
            [克鲁伦萨 = "[图鉴名]",]
            [秘书登录 = "[秘书名]",]
            [传送 = [事件编号],]
            [结束 = [int],]
            [故事2 = "[脚本名]",]
            [故事3……]
        },
        002……
        },
    },
    [任务名称2]……
}


看起来很繁琐的结构,但大部分时候每个事件只会用其中的一两条。
比较好理解的部分不做解释了,flag代表进行到这个格子会触发相应flag效果,处理则是开宝箱、获得勋章食券一类的效果,指定卡牌则会有固定掉落。
选择分支中的左前右是跟地图数据中制表符的方向挂钩的。
克鲁伦萨翻译的比较谜,实际效果是解锁收藏里的对应图鉴。
传送会在事件结束后跳转到对应事件编号的格子,根据这个原理可以简单的修改出无限开箱的循环路线。
要注意的是有效值,flag、战斗对象、奖励内容、脚本名等的有效值不在ex文件中定义
配置结束时,数值为1则事件结束,为2则进入无继承BE,为3是放弃任务,为4则游戏结束。

 

3.成就情报

剧透


这里定义了所有成就信息(不含达成条件判断逻辑),基础结构如下:


tree 成就情报 = {
    [成就名] = {
        种类 = [类型],
        加成 = "[加成]",
        值 = (list) { "[条件/卡牌名]",…… },
        说明 = "[说明]",
        [隠し表示 = 1,]
    },
    [成就名2]……
}

种类=1时为收集卡片成就,值已配置的是需求卡片的个别名(卡名)或者识别名(角色名)。
种类=10时为条件成就,值里配置对应的条件值会在游戏逻辑里进行处理。
种类=20时判断成就个数,值配置所需的成就数。
配置隠し表示完成前就会变成问号。
加成则是成就效果,可以修改这里的数值达到出门满cp的状态。


4.其他:
相对次要但可以关注的数据还有卡牌情报,CG回想,障碍物(地图装饰物),食券条件(识别名情报),秘书数据/情报,不多赘述了。

 

四.ain修改
写到这感觉累了,那就鸽了吧
相对较不推荐的修改方式,需要有一定的汇编基础。或者有爱和脑子也行
建议没兴趣的同学不用看下去了,有兴趣的同学先补充下汇编基础知识或者直接看个乐子。
目前alice-tools无法做到像AinDecompiler那样反编译出可读性较高的高级代码,只能反汇编出无分割的汇编码。好在alice-tools自带了一部分宏功能优化了可读性。
因为大部分的静态数据都储存在ex文件中,只有逻辑部分归属于ain,那我们的修改思路也基于此,从flag、卡名之类的字符串或者游戏内元素相关的函数名作为切入点下手。
虽然多读一些代码对于我们更好地掌握游戏结构有很大帮助,但是从修改的角度来说以点破面各取所需也不尝是个好办法。
这里就拿实际的例子说明吧:


例1:初期追加卡片

剧透

因为每次新游戏开始都是固定的配置,我们就检索其中的一张“高级牛车”,很容易就找到以下的代码:


    S_PUSH "Lv42 兰斯"
    CALLFUNC T友方卡牌生成
    POP
    S_PUSH "Lv35 希露"
    CALLFUNC T友方卡牌生成
    POP
    S_PUSH "全裸 希露"
    CALLFUNC T友方卡牌生成
    POP
    S_PUSH "魔剑 卡奥斯"
    CALLFUNC T友方卡牌生成
    POP
    S_PUSH "高级牛车"
    CALLFUNC T友方卡牌生成
    POP
    S_PUSH "全魔物大百科"
    CALLFUNC T友方卡牌生成
    POP
    S_PUSH "Lv42 兰斯"
    CALLFUNC P卡牌配置
    S_PUSH "Lv35 希露"
    CALLFUNC P卡牌配置
    S_PUSH "希露"
    CALLFUNC P秘书登录
    S_PUSH "希露"
    CALLFUNC P秘书任命
    S_PUSH "爱丽丝"
    CALLFUNC P秘书登录

我们只需要参照上面重复的结构跟着追加卡片即可,比如:


    S_PUSH "1级神 ALICE"
    CALLFUNC T友方卡牌生成
    POP

修改完开始新游戏就能看到效果。

例2:妖怪王的日常生活任务

剧透

据说游戏中存在一个妖怪王政宗的废案事件,以及与之相关的奖励卡牌“妖怪宝具”。
该事件并不难找,任务识别名为“政宗和妻子”。
我们在代码中搜索“政宗和妻子”,会找到六个结果,其中四个是文本相关,剩下来两个一个是条件,一个是结果奖励。我们截取出条件的部分:


    .S_LOCALASSIGN 名称 "政宗和妻子"
    .LOCALREF 名称
    A_REF
    CALLFUNC 任务実行済み
    PUSH 0
    EQUALE
    IFZ 0xd50b3c
    S_PUSH "妖怪王 政宗"
    CALLFUNC P友方卡牌識別名有无
    PUSH 0
    NOTE
    IFZ 0xd50b3c
    PUSH 1
    JUMP 0xd50b42
0xd50b3c:
    PUSH 0
0xd50b42:
    IFZ 0xd50b6e
    S_PUSH "阿町"
    CALLFUNC P友方卡牌識別名有无
    PUSH 0
    NOTE
    IFZ 0xd50b6e
    PUSH 1
    JUMP 0xd50b74
0xd50b6e:
    PUSH 0
0xd50b74:
    IFZ 0xd50ba0
    S_PUSH "诺瓦儿"
    CALLFUNC P友方卡牌識別名有无
    PUSH 0
    NOTE
    IFZ 0xd50ba0
    PUSH 1
    JUMP 0xd50ba6
0xd50ba0:
    PUSH 0
0xd50ba6:
    IFZ 0xd50bd2
    S_PUSH "野菊"
    CALLFUNC P友方卡牌識別名有无
    PUSH 0
    NOTE
    IFZ 0xd50bd2
    PUSH 1
    JUMP 0xd50bd8
0xd50bd2:
    PUSH 0
0xd50bd8:
    IFZ 0xd50c04
    S_PUSH "折女"
    CALLFUNC P友方卡牌識別名有无
    PUSH 0
    NOTE
    IFZ 0xd50c04
    PUSH 1
    JUMP 0xd50c0a
0xd50c04:
    PUSH 0
0xd50c0a:
    IFNZ 0xd50c16
    JUMP 0xd50c28
0xd50c16:
    .LOCALREF 名称
    A_REF
    CALLFUNC >据点环节登录
0xd50c28:

不难看出,任务发生的条件其实就是未进行过该任务并且五个角色在队。之所以不能执行的原因,就是因为"妖怪王 政宗"并非识别名(角色名)而是卡名,正确的识别名是“政宗”。
替换掉进游戏应该就能看到效果了。

2ga6UWzTuBmKMXe.png

不要在意细节x1

例3:卡牌的掉落条件

剧透

这里我们随机在ex文件里的卡牌数据中找一张相对普通的卡,“Lv2 库琳”。
检索解出的jam文件结果一共有两处,一处位于名为T卡牌一覧的函数内,另一处则是名为T卡牌箱的函数,很明显我们要找的是后者。
查看前后代码很容易看出函数内存在大量重复的结构,我们拆出其中“Lv2 库琳”对应的一段如下:


    .S_LOCALASSIGN v "Lv2 库琳"
    PUSH 0
    .LOCALREF fg
    .LOCALREF v
    A_REF
    S_PUSH ""
    S_PUSH ""
    PUSH 0
    CALLFUNC TA7
    PUSH 1
    EQUALE
    IFNZ 0xd29f6e
    JUMP 0xd29fa8
0xd29f6e:
    .LOCALINC2 aa
    .LOCALREF 卡牌BOX
    .LOCALREF aa
    REF
    .LOCALREF v
    A_REF
    S_ASSIGN
    DELETE
0xd29fa8:

这里有一条IFNZ指令(if not zero)进行跳转,如果用高级语言表述的话其实就是一句if语句,条件则是TA7函数的返回值=1。
TA7函数又是做什么的呢?我们检索到函数本体,


int TA7(int ▲等级, int ▲箱子, string v, string 识别名 = "", string 条件 = "", int ▲フラグ = 0)

不难看出之前结构中CALLFUNC上面执行的就是将TA7所需的参数堆进栈中。
TA7本身的逻辑我们这里不展开分析(等下会大约说下判断),但它的功能可以看出是根据给出的参数判断这张卡是否符合进宝箱的条件返回0或1。
跳转之后的部分,可以看到调用了不少本地变量。我们转到函数开始的地方查看它们的定义:


    .S_LOCALASSIGN v ""
    .S_LOCALASSIGN na ""
    .LOCALREF 卡牌BOX
    PUSH 500
    PUSH -1
    PUSH -1
    PUSH -1
    CALLHLL Array Alloc 12
    .LOCALASSIGN aa 0

可以看出卡牌BOX应该是一个数组,那跳转之后的部分就比较好理解了,将数组编号加1并将卡名赋值进去。
这样我们就将这段结构简化成伪码:


if (TA7(param) == True){
    aa++;
    卡牌BOX[aa] = v;
}


至于参数的部分,铺开来说就太长了,只说结果:
(此段可参照alice-tools作者nunuhara的文章:https://haniwa.technology/misc/gacha.html,略有不同)
▲等级:指卡牌本身的等级。
虽然外观上只有C\R\UR三种,其实内部一共有7种等级:0、4、9、10、14、19、20。
其中0、4、9为C卡,普通宝箱掉落;10、14、19为R卡,稀有宝箱掉落,20为UR卡,升级过的稀有宝箱才掉落。
0与10级的卡若队中不存在则默认进卡池,否则50%概率;
4与14级的卡仅当队中已有对应卡才有20%的概率进卡池;
9与19级的卡仅当队中不存在才100%概率进卡池(也就是说,限1张);
20级卡的卡若队中不存在则默认进卡池,否则25%概率。

▲箱子:箱子等级,该参数不在结构中指定而是调用来的。
箱子等级一共四种,0代表普通宝箱,1代表稀有宝箱,还有一种flag触发的3级宝箱,必定掉落UR。
箱子中的每一格会进行一次稀有度判断,如果成功0级会升成1级,1级会升成2级。
稀有度的来源:
基础:5%;
宝物商人:10%;
部队奖励:10%;
小小里程碑B:5%;
小小里程碑E成就:5%;
合计最大值为35%。

v:卡名,很好理解。
识别名:角色的名称,若该参数有设置,则队伍内需要有对应角色该卡才会掉落。
条件:星数需求,通常为20,40,80。值得注意的是,在TA7的判断里,食券的三个阶段和三种星数需求完全等价
也就是说,20星=食券1,40星=食券2,80星=食券3。
▲フラグ:除去0以外,该值有两种设置:若为1时,该卡从11回合开始才进卡池;若为2,则是标志该卡为裸卡。

根据以上的规则,我们可以自行调整卡片掉落的参数,甚至追加游戏中无法掉落的卡牌。
除此以外,不少卡片在上面的结构之外还有额外的判断逻辑,这里不详述了。

例4:高难度模式追加等同于CP点的难度

剧透

我们回到例1中的位置,这段函数的名称是T初始化1,也就是第一部的初始化。少许往下翻一点,便能看到如下的代码:


    CALLFUNC P取得游玩状态
    PUSH 12
    EQUALE
    IFNZ 0xcaaf7c
    JUMP 0xcaaf96
0xcaaf7c:
    .GLOBALREF tt
    PUSH 4
    PUSH 1
    ASSIGN
    POP
0xcaaf96:
    .GLOBALASSIGN ◆难度 1
    .GLOBALREF tt
    PUSH 4
    REF
    PUSH 1
    EQUALE
    IFNZ 0xcaafce
    JUMP 0xcaafe0
0xcaafce:
    .GLOBALASSIGN ◆难度 5
0xcaafe0:

P取得游玩状态是什么作用并不是我们要关心的部分,暂时只需要知道这里就是第一部两种初始难度的设置位置就可以了。
接下来要找的就是CP点的获取位置。尝试检索成就数据里的“CP+1”的字符串,但只能找到结局成就判断相关的内容。
于是去掉+1尝试单独搜索“CP”字符串,这次似乎是找到了理想的结果:名为CompletedTrophy@ClearPoint::get的方法。
我们要做的就是调用这个方法,然后追加到难度上。
结构体的方法与函数不同,生成的代码中较少有CALLFUNC直接调用的例子,这种时候我们可以查找方法对应的编号堆栈的情况。
先搜索这个方法被调用的实体,该方法对应的编号为FUNC 0x706b(以及一个副本FUNC 0x706c,但未被使用),用计算器算出十进制值为28779
检索28779,去掉文本对话中的另一个结果,我们找到了如下的代码:


    PUSHSTRUCTPAGE
    PUSH 25791
    CALLMETHOD 0
    PUSHSTRUCTPAGE
    PUSH 1
    .GLOBALREF g_completedTrophy
    PUSH 28779
    CALLMETHOD 0
    ASSIGN
    POP
    PUSHSTRUCTPAGE
    PUSH 2
    DUP2
    REF

其中我们需要的就是中间的三行,这个struct的全局实体以及调用方式:


    .GLOBALREF g_completedTrophy
    PUSH 28779
    CALLMETHOD 0

CP值有了,难度赋值的位置也有了,但我们还差一步,.GLOBALASSIGN是工具预生成的宏,这个宏只能赋值常量而非变量。
.GLOBALASSIGN等价于下列指令:


PUSHGLOBALPAGE
PUSH <varno>
PUSH value
ASSIGN
POP

用上面三行替换掉PUSH value的部分再加上5,但我们还需要varno◆难度这个变量名不能直接用在这里。
于是用--no-marcos参数再次解包,找到相同位置对比获得varno344,我们得到下面的代码:


    PUSHGLOBALPAGE
    PUSH 344
    .GLOBALREF g_completedTrophy
    PUSH 28779
    CALLMETHOD 0
    PUSH 5
    ADD
    ASSIGN
    POP

替换掉.GLOBALASSIGN ◆难度 5这一行再编译,开始新游戏就能看到效果。

例5:新周目继承统合部队

剧透

 

这个有比较强的偶然性,所以只简述下思路:
首先,从T初始化1索引到上一级的Initchapter,从而确认到GameChapter1GameChapter2GameChapter3三个结构。
其次,通过阅读代码确认GameChapter3代表了挑战模式
然后,找到GameChapter3中与统合部队界面共用的部分:


    CALLFUNC GlobalSave::Load
    CALLFUNC GameChapter3::InitParty

最后,尝试嵌入GameChapter1中合适的位置,代码如下(片段):


void GameChapter1@InitGameData(void) ref array<CharacterRank> <dummy : 右辺值参照化用>
FUNC 0x580e
    .GLOBALREF g_character
    PUSH 27978
    CALLMETHOD 0
    .GLOBALREF g_clearPointBonus
    PUSH 27631
    CALLMETHOD 0
    PUSH 0
    CALLFUNC GlobalSave::Load
    CALLFUNC GameChapter3::InitParty
    CALLFUNC TadaFunc::InitChapter
    .GLOBALREF g_gameContext
    PUSH 26128
    CALLMETHOD 0
    PUSH 1
    EQUALE
    IFNZ 0x33eb64
    JUMP 0x33ebda
0x33eb64:

尝试过放在InitChapter之后,但是会导致无存档状态下初始部队清空直接导致gameover,于是调整了顺序。

leSgiQ2ECJLtMRy.png

拿了全卡档试验效果,不要在意细节x2

 

五.结语
感觉写的还是比较乱且啰嗦,嘛反正就当是笔记,无所谓了。
作为出发点的新周目继承这个目标已经实现了,接下来也没有太多的追求,可能就对受到影响的flag修修补补了吧。
写这么多,就当是留个纪念了。
下载区怎么用完全忘了,等我研究下再看要不要把自制的试毒向补丁放上来……
卡牌掉落和任务条件整理了一半,看心情再继续(大概摸了
随缘更新(基本摸了

剧透

答えのない 現実で
自分らしく 生き続けよう
それぞれが選んだ道 紡がれた明日と
也许失去了很多,但至少我还活着。

 

,由q2w3e2007修改
注释
YXM YXM 2福缘 1级精华奖励
YXM YXM 100.00节操 补分
YXM YXM 633.00节操 攻略技巧
闇夜の影 闇夜の影 10.00节操 图文链接奖励。
  • 喜欢(+1) 2
  • 感谢(+1) 2
链接到点评
9 小时前, 无所谓啦 说道:

看不懂,不过这个标题让我想起了以前同学用的一个东西:改之理

嘛,让标题看上去高大上点(

以前还有给自制补丁冠名磁场转动的(港漫恐怖至斯

5 小时前, 闇夜の影 说道:

sGqEgr5i2LdUj89.jpg怎么偏偏这次早睡我错过的东西这么多×

体验活动或将遭到毁灭性打击.jpg×

你醒啦?.jpg

不去试试打破e社传统限定版专供编号11的天冥店铺特典append吗×

现在修改这么成熟了(并没有),体验活动还好得了吗?×

不过我可以秘授你些分辨修改存档的方法,估计大部分修改党都管不住这手的×

链接到点评
1 分钟前, raynormj 说道:

哇大佬,我这刚想说如果真开打的话说不定就要试试你给出的黑科技了,结果:mx015:

行,转头默默构思有没有同人文可以写就是啦:mx014:

:mx035:一个存档,只要它看起来是合法的,用上去是合法的,那它就是合法的

我只是给黑科技指了条路,没有任————何搞出非法存档的意思,真的×

要刷卡还是ssg靠谱×

 

链接到点评
11 分钟前, raynormj 说道:

新人gal+剧情向玩家,我最近都在版区里问,难度多大,分支结局多不多,通一遍时长大致多少,有没有雷(类似难搞的迷宫之类的)。。。(不过收到了巨多反馈,哎嘿)

 

刷卡直接弃了:mx014:花8个小时换三四千节操的活我现在都想哭(AC御宅

兰10认真看剧情的话,游戏时间可太长了……食券剧情能看到睡着×

为刷而刷就算了,好好玩的话达到目标数量应该是不用刻意刷的:mx013:

链接到点评
4 分钟前, raynormj 说道:

嘛,所以我想大概了解一下人物性格,然后搞场关公战秦琼的二创。就算老玩家觉得写得不好要打我,我就让他们爬网线过来打:mx077:

:mx048:不想被网线砍的话建议像夏娃兰斯版那样写兰斯穿越记就行,那样只要把握兰斯一个人的性格就好了,剩下来的写自己熟悉的角色内容。

链接到点评
1 小时前, 无所谓啦 说道:

战国兰斯吧已经有全XX存档了,不会修改也无所谓了

还好我已经通了一遍,再开直接14CP起步简直逆天,随便乱打也能通关了

全卡档当然有啊,但是很多是一眼能看出来修改的那种,比如战兰吧前段时间的那个帖子

14cp要通关肯定是没问题,但是兰10这么多内容和结局,一次通关应该是不够的

我想改的主要是全卡档甚至ssg都办不到的事,否则也没有这么折腾了:wn006:

链接到点评
  • YXM精选了本主题
×
×
  • 新建...

重要消息

为使您更好地使用该站点,请仔细阅读以下内容: 使用条款