介绍tnpquest
- 在两年多前,我开始看Warriors。
- 在大约两年前,我在官网上发现了第一个Warriors相关的游戏,就是这个Flash游戏Warriors The New Prophecy Quest Game,简称tnpquest。这只是一个简单的小游戏,但对于没多少基础的我,还是费了很大的劲才完成了。
- 在大约一年前,也是暑假,我开启了一个项目,用C++模仿(mimic)这个游戏。一方面在AFO之后练练代码能力,另一方面原来的游戏玩起来太费时间了,因为有很多时间在等待骰子结果。
- 之后一直弃坑,NOIp2018的时候又写了一点,一直到今年暑假。深受FalconDevelops的鼓舞,我又找到了代码,终于基本写完了。
这些都是根据我的文件修改日期推算的……
到GitHub上去下载我重写的CLI版本吧。目前仅为alpha,欢迎大家测试并Issue或PR。
原始游戏
由于官网大更新,原始游戏已经找不到了。还好当初为了离线玩和研究,我已经把有关文件都下载下来了。除了可以用上面的版本,这里还提供完整文件,当然你也可以到archive上去找存档。打开loader.swf
或Game.swf
,或者如果没有Flash Player,打开我自己写的test.html
,启用Flash支持。在/src
下还有反编译结果,需要至少Flash CS6打开,虽然我还没怎么看懂。
游戏的目的是收集到4颗星,也称为vital item,然后找到月池,获得武士名。
反编译
在尝试反编译前,我想通过统计得出时间概率,但最终放弃了,太麻烦了。不过有时看不懂反编译结果的时候,还是需要到原始游戏去实验。
我用的是流行的开源Flash反编译工具,JPEXS Free Flash Decompiler。去年我还不想碰Flash,于是我导出了所有资源,不过最重要的还是ActionScript。由于有很多文件,一种简单的方法是搜索最大的文件。
C++重新实现
我很懒,也不太会写GUI(我只写过Delphi),于是我决定写CLI。考虑到某种古老的兼容性,我把行宽限制为80,每个格子用3x10个字符表示。第一行显示地形,第二行显示格子里的内容,第三行用于分隔。然而很多地形和内容都很长,于是我造了很多缩写。我怀疑大部分人都猜不到是什么意思,于是我打算写一个缩写对照表。
趣谈
本部分包含游戏内部的细节,阅读后可能会影响体验。
- 尽管要求找到4颗星,其实一共有5颗星,也许是为了降低难度。在第2行第3列一定有一颗星,因为这是后来SPJ的。有如下实现
1 | cells[10].enemy = 6; |
1 | /** |