me =~ s/nai/liu/m;
记录一下全成就游戏名单。
Xbox 360 零售版游戏(包括 DLC 全完成,13 款)
XBLA for Xbox 360(13 款)
XBLA for Windows Phone 7(8 款)
Galgame(刷成就专用,13 款)
主游戏已全成就,未完成 DLC(2 款)
《Implode!》本周三刚刚在 Marketplace 上线,今天就全成就了。这几天没干别的,闲下来就打开手机拆房子。
综合来说,《Implode!》是一个非常不错的手机游戏。虽然没有华丽的画面和音效,但是上手就停不下来了。
关卡设计也有独到之处,有几关需要将炸药放到高分位置才能拿到 A+。但是有些高分位置根本就没用,不放炸药也能完成任务,不知道开发人员为什么这么设计。大部分关卡都很简单,看一下就知道大概炸药应该放在哪,所以全 A+ 并不是很难。这个游戏一共 150 个关卡,全成就也就只是时间问题。
炫耀时刻到了,上照片。
一直到今早看到这个状态,才意识到我已经好长时间没有更新 Blog 了。
一直到看了全成就游戏列表,才意识到最近玩的都是小游戏。
的确,最近很少有连续的时间玩游戏。虽然每天晚上都有一两个小时的空余时间,但是一想到拿起手柄就无法放下的心情,还是算了。上网刷刷 S1,看看片,这一两个小时也就打发了。
所以,手机上的小游戏就成为另外一个选择。毕竟小游戏不需要连续的游戏时间,每一关耗时很短,“今天到此明天继续”也没什么问题。
另外,主机上的游戏越来越不如从前。《Fable III》因为存档毁于 bug 而暂时放弃;《Dirt 3》因为手感不如二代,而难度又太高(漂移太诡异)而暂时搁置;所有 Kinect 游戏的成就真叫作成就,完全就是拿时间搭出来的;《Dungeon Siege III》之类的游戏流程又太长。其他的就没什么好玩的游戏了。
总之,世道变了。主机游戏没什么新意,每况愈下,加上时间约束,也就只能玩玩小游戏了……
P.S. 数了一下,之前为了刷成就,通了 12 个 Galgame……
在上一个全成就帖之后,已经过去 5 个月了。虽然这 5 个月中全成就了很多游戏,成就分也增加了 10000 多分,但是因为大部分都是 Gal Game,成就都是刷出来的,所以也就再也没写成就帖。
这一次集中记录一下 Windows Phone 7 的游戏进度。
在去年 12 月初买了 Windows Phone 7 之后,一直抠门,没舍得买游戏,下载了一大堆试玩版。结果,圣诞节在家耐不住寂寞,顺手解锁了《Glyder》。有第一个就有第二个,之后又买了《Revolution》、《Ilomilo》、《Parachute Panic》、《Butterfly》等等。其中最贵的是《Ilomilo》,花了 $5.49,其他的价格都是 $3.49。
手机游戏的确便宜,但是便宜不等于不好玩、不耐玩。
这些游戏里,目前耗时最长的大概是《Glyder》。这也是 Windows Phone 7 上见到的第一款像样的 3D 飞行游戏。尽管是滑翔机,没有飞行模拟那样华丽,但是合理的地图、多种多样的装备收藏、和那些看似重复但技巧性很强的任务,的确令这款游戏值得称道。起初,总是因为没办法在规定时间完成任务而恼火。到了后期,随着装备增强,反而所有的任务都似乎少了些挑战性。
同样是玩游戏,但是玩 PS2 游戏和玩 Xbox 360 游戏的感觉就是不一样,除了画面的增强,还有一个关键的因素就是 Xbox 360 的成就系统。话题似乎扯远了,但是反过来看《Glyder》这款本来是发布在 iPhone 上的游戏,加入了成就系统之后,反而延长了游戏时间。本来那些可以完成也可以不完成的任务,当它们成为成就解锁的条件之一,也就变成必须完成的任务。
《Revolution》比较遗憾的是成就 bug。第 47 关因为不明原因被设为三步夺金。但实际通关过程中,三步无法解开所有齿轮,所以金牌自然拿不到,现在无数人被卡在 224/225 金牌而无法拿到最后的成就。如果排除这个 bug,《Revolution》是一款很好的益智游戏,通过排列摆放齿轮,让所有的齿轮转动,这种简单的创意却带来无限的挑战。
《Ilomilo》之前在 Xbox 360 上就全成就过了(自制机通关),比较另类的迷宫游戏。这次出在 Windows Phone 7 上,二话不说就买了。比较喜欢《Ilomilo》世界和人物的设定,还有 BGM。目前《Ilomilo》BGM 是仅存在于手机上的 5 首歌之 3。另外,《Ilomilo》开发商比较厚道,第一个 Title Update 一下子新增了 20 多个新地图(第二故事)。
《Butterfly》纯属无聊玩玩,很简单,但是却很好的发挥了触摸屏的长处。这游戏全成就很快,甚至在全成就的时候还没收到微软的游戏购买账单。
《Parachute Panic》目前还没全成就……
回头想想,跟主机上动辄 $59.99 甚至 $69.99 的游戏相比,$3.49 的游戏也很好玩,游戏性完全不逊于主机游戏。难怪任天堂拿手机游戏开炮,说他们抢了主机游戏的利润。如此高的性价比,就是手机游戏的优势啊。
开场
早就听说这游戏是成就神作,就想着一定要拿来刷成就。正巧本期《Official Xbox Magazine》搞了个 Gal 专题,里面第一个介绍的游戏就是《俺の嫁 ~あなただけの花嫁~》。为了响应欧美对 Gal 的注目,俺决定把这游戏通掉!
游戏通掉之后,很喜欢日历界面的那个 Q 版人物动态图,于是乎就开始打游戏光盘的主意……
光盘数据结构
游戏光盘上的数据分为 4 个文件夹:
MOVIE:包含所有的开场、结尾动画,720p WMV 格式,拖出来就能看
Table:所有的游戏内部设定数据
UNION:所有的游戏素材
XML:没看明白,估计是画面描述
既然素材都在 UNION 文件夹里,那就直接研究这里。
存储方式
所有素材都经过分类,打包储存于不同的 UNI2 文件当中。
所有的音频都以 xWMA 形式储存。xWMA 是微软为 Xbox 360 专门制定的音频编码,基于 WMA,但是加入了硬件解码,所以不能在 PC 上直接用播放器打开。需要 xWMA to WAV converter。
图像和其他文件都要经过 XBCompression 压缩。必须用 XBDecompress 解压之后才能浏览、编辑。
图像基本上都是 DDS/DXT5 格式,据说是显卡优化格式。需要用 ATI Compressonator 打开。可以另存为 PNG 文件。
其他还有一些文件暂时没找到打开方式。
本次所研究的 UNI2 文件来自 Xbox 360 游戏《俺の嫁 ~あなただけの花嫁~》。
文件基础结构
本次所研究的 UNI2 文件具有以下基本结构。不保证其他 UNI2 文件也拥有相同的结构。
簇大小(Cluster Size):0x800(2KB)
文件标识符在 Cluster 0(Offset:0x00000000)
文件分配表在 Cluster 1(Offset:0x00000800)
文件数据始于分配表之后的 Cluster
所有的文件都是对齐于相应的簇(2KB boundary),这跟文件分配的概念是一致的。
文件头
从图中可以看出,UNI2 文件头包含 4 个 Int32(Uint32?)。
第一个 Int32:0x554e4932(ASCII:UNI2)是文件标识符。
第二个 Int32:0x00010000 不知道是什么意思。有可能是簇大小?或者文件数据区的起始地址?
第三个 Int32:0x00000012 所包含的文件个数。(这个 UNI2 里面包含 18 个文件)
第四个 Int32:0x00000001 也不知道是什么意思。有可能是文件分配表的起始簇?
文件分配表
每 4 个 Int32 代表一个文件。意义为:
第一个 Int32:文件编号(File ID)
第二个 Int32:文件起始簇编号(这个是偏移量,要加上数据区其实簇编号才是真正的文件起始)
第三个 Int32:文件所占数据区大小(以簇为单位,所以并不是真正的文件长度)
第四个 Int32:文件的实际长度(字节)
结构研究明白了,做个 Parser 并不是什么难事。
Windows Phone 7 除了玩 Xbox Live 游戏外,还有一个更方便的应用——看攻略。
一边开着 Xbox 360,一边开着 Windows Phone 7 中的 OneNote……
最后,Windows Phone 7 和 Xbox 360 哥俩好的合影~
下周老婆大人就从国内回来了。估计到时候也没很多时间可以用在游戏开发上。好在最底层的基础库 + 实用库架构已经完成,以后再出问题只需要微调就可以了。
总结了一下目前为止完成的代码。(包含注释)游戏基础库代码量 3333 行(这个数字 - -|||),TGGe Extension 代码量 702 行。
去掉注释什么的,代码量也在 3500 行以上。这是目前我个人制作的最大的工程了。纪念一下。
从网上找了一个破解的《Mirror's Edge》xex 文件,好处就是可以随意更改 ini。
但是光盘上的 Coalesced.ini 是被打过包的 ini 集合。麻烦归麻烦,随手做了一个 Coalesced.ini 封包/解包程序(cooker)。试了一下运行良好。
想把每关 Speed Run 的时间限制改成 1 小时么?试试这个吧。
下载地址 (需要 .NET Framework 3.0)
| 日 | 一 | 二 | 三 | 四 | 五 | 六 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | ||
| 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| 13 | 14 | 15 | 16 | 17 | 18 | 19 |
| 20 | 21 | 22 | 23 | 24 | 25 | 26 |
| 27 | 28 | 29 | 30 | 31 |