December 16, 2014

Dungeon of the Endless

最近一直在玩 Dungeon of the Endless 。按 steam 上的记录,已经超过了 70 小时。今天决定给他在 steam 上写一篇推荐

很羞愧的说,我还没有打过 easy 模式的 Escape pod ,最多到 12 层就挂了。

总的来说,这是近两年我玩过的最好的 Roguelike 游戏,如果放宽一点说,也是最对我粘度最高的一款。很难想像,一个几乎没有成长积累,死了就要从零重新开始的游戏,可以粘住人一盘又一盘的从头开始。而且,玩了 70 个小时没有打过第一关(如果把 escape pod 看作第一个挑战的话)还一直说它的好话。正如游戏那简单的教程最后说的:还有很多可以教你的,不过只要你死的次数主够多,就都知道了。一点点探索游戏的玩法是最大的乐趣。

基本上这是标准的 Roguelike ,有人物成长、有科技升级、有不定期搜集到的装备、有随机迷宫、有突如其来的难题(解决不了就得从零来过)。它的创新点在于掺入了最近几年流行的塔防元素,想想百玩不腻的 Kingdom rush 就知道这是个很惹人喜爱的模式了。

DotE 给人的体验是每道门后的未知刺激,到了 8 层以后更加的明显。随机迷宫的布局真正增加了策略性,在 dust 有限的情况下,你如何布局你的英雄。同时你还得和自己的贪念做斗争:出口已经找到了,我要不要多开一道门?要不要把正在 Operator 的英雄拉过来参战?似乎这拨怪已经拦截住了,省一口 Food 吧?只有在英雄死掉后才追悔莫及。

可是,游戏又总给你留下点希望。有一次我开局不错,到了第 8 层四个英雄都升到了 9 级,工业科技食物攒了一大堆,结果贪心导致死了三个英雄。本来打算放弃的,但抱着试一试的想法,用一个英雄逃离了第 8 层,还在第 9 层还找到了 2 个新同伴。这种起死回生的体验真是非常棒。

阅读全文 "Dungeon of the Endless" »

December 14, 2014

skynet 社区广州聚会小记

昨天(2014 年 12 月 13 日),忙了一天,终于把说道半年的心事了了。skynet 社区的第一次线下聚会。

一直在 qq 群里说想搞一次线下聚会,让使用 skynet 的同学有机会当面交流一下,忙这忙那的拖到年底。直到又人有重提,择日不如撞日,就选在了本周六。

原来计划搞此 30 人的小聚会就好了,可以就在办公室会议室里。结果没料到公司最近扩张太快,新办公地又暂时没有搞定,会议室都被塞满了。那么转移到楼下餐厅吧,大概可以装下 40 人。

故意没有宣传,想着不会有太多人报名。可到了最后几天,邮件列表上的报名人数超过了 60 人,赶紧去找新场地。最终昨天来了 80 多人。btw. 南京远道来的同学辛苦了。

阅读全文 "skynet 社区广州聚会小记" »

December 08, 2014

乐观锁和悲观锁

最近晓靖给 skynet 提了一个 pr

提之前我们讨论了好久,据说是因为查另外一个问题时改写了 skynet 的消息调度部分发现在某些情况下可以提高 CPU 的使用率。

之前 skynet 的消息调度采用的是基于 cas 的无锁结构。但本质上,并发队列这种数据结构,无论是采用 spin-lock 还是 cas 无锁结构,为了保证时序,进队列或出队列的部分都必须是依次进行的,也就是说,多核心无助于提高队列的性能。

使用无锁结构,无非是对发生冲突保有乐观态度,觉得大多数情况下冲突不会发生,一旦发生就采取重来一次的策略。

而使用 spin lock ,则是对冲突采取悲观策略,认为冲突经常发生,所以在操作共享字段时,锁住资源独享操作。

最终,都必须等前一件事情做完,才能接着做下一件事。

阅读全文 "乐观锁和悲观锁" »

November 25, 2014

策划们离不开的 Excel

我相信至少在国内的游戏策划圈, Excel 是每天必不可少的存在。倒不是因为要用它制作数值表格,一切文档最终都一定是用 Excel 写的。但作为一个程序员,我相当的痛恨 Excel 文件,就好像我当初痛恨 word 一样。只有几个字就不要保存成 doc 文件啦,可现在已经没有人用 word 了,大家全转去 Excel 了。如果有可能,策划一定愿意在单元格里写脚本的,这样可以将重点标红。

提取 Excel 中的文字信息并不复杂,但真正的麻烦在于 Excel 文件对版本管理工具是极不友好的。甚至你打开一次 Excel 文件再保存关闭,也会生成一个完全不同的新版本。这是因为,文件中记录了最后修改的时间(是的,Excel 不信任文件系统里的时间);还有激活的单元格是哪一个。在这种环境下,多人协作的版本控制工具用起来绝对是一个悲剧。

我大概花了一周时间来试图解决一系列问题。结果不算成功,也不算失败。这里记录一下上周踩过的坑。

问题源于我们的项目中,策划把一切他们能生产的东西都记在了诸多的 excel 表格里。当然,和上世纪的程序员一样,大家都尽量自己维护自己的那块文件,所以即使在版本管理工具下,也基本没有冲突。但是总有那么 1% 的机会,几个人会修改同一张表格的,尤其在项目压力大时,往往实现功能的程序也会打开表格对里面的数据做一些修改。在版本控制工具下,冲突就在所难免了。尤其是我们刚刚让策划从 svn 迁移到 git 下,git 的工作流的复杂性很容易让策划的脑子不够用了(实际上受 Excel 文件格式限制,他们也只需要一个版本备份工具,其它本来就是多余的)。我开始动念头来解决问题。

首先,xlsx 文件其实是一个标准 zip 压缩包,里面打包了一系列 xml 文件。如果仅仅是需要一个文本格式,那么只需要把包解开,用一种非压缩的形式重新打包即可。

对于一些嵌入的图片,只需要用 base64 编码。由于嵌入表格的图片多半不会修改,所以并不会造成版本间的差异。

一开始,我以为这项工作两小时就能搞定,事后发现,太天真了。

我写了一个 lua 的小程序,可以读出 zip 包里的文件,对文件名排序,然后按文件名/内容的次序依次把文件连在一起形成一个大文本文件(其中的2进制内容使用 base64 编码)。这样处理后,xlsx 文件基本就是一个文本文件了。为了对版本管理工具友好,我对 xml 里的标签后增加了适当的分行。这样处理以后,版本管理工具基本能识别出表格数据每个版本的差异。

第2步,可以动手消除一些对版本有影响却对我们没有意义的数据段。比如文件的最后修改时间、激活的单元格等。这样、如果打开一个 excel 文件,保存后就不会产生差异。

那么,这是一个新的文件格式。怎么让 Excel (或 wps 等兼容产品)打开它编辑呢?

虽然第一反应是给 excel 写一个插件。但我知道拿不是一两个小时可以搞定的。所以我选择了一条弯路。写了一个脚本,可以生成一个临时目录/文件,在用户想打开一个自定义格式文件时,先转换为标准的 xlsx 临时文件,让关联的软件(excel 或 wps 等)编辑它。我们可以监控这个文件的变更时间,来即使把临时文件转换回去。当这个临时文件可写时,就表示已经停止编辑这个文件了(excel 对打开的文件有文件锁定)。这时,可以删除临时文件。

让自定义文件格式关联到这个脚本(我用 lua 编写的十多行程序),策划就可以直接双击自定义格式文件编辑了。

阅读全文 "策划们离不开的 Excel" »

November 13, 2014

skynet 的 UDP 支持

考虑了很久, 最终还是给 skynet 加上了基本的 UDP 支持. 虽然大多数情况下, 我不赞成使用 UDP 协议. 尤其是在网络游戏领域. 但考虑到 skynet 已经不仅仅应用于游戏领域, 我想, 加入有限的 UDP 支持是有意义的.

btw, 根据最近的反馈看,有人把 skynet 用于交换机(由于使用的是 powerpc 的 CPU ,帮助解决了一些大小端 bug );有应用于证券领域;还有做视频广播的。另外,把 skynet 用于 web 开发的应该也有人在,就简单的测试来看,性能方面不比把 lua 集成到 nginx 差。

目前,UDP 这部分代码已经完成,放在 github 里一个叫 udp 的分支上,不久以后会合并到主干上。由于我自己没有什么这方面的需求,所以还需要有 udp 需求的同学读一下代码,实际使用,这样才可能发现潜在的问题。

关于这部分的设计以及 api 文档,我补充在 wiki 上了

阅读全文 "skynet 的 UDP 支持" »

November 04, 2014

RLA 文件中的法线信息提取

最近想在游戏中加一点简单的环境光,因为游戏中使用的都是 2d 图片,那么最廉价的方法应该是给图片加上法线图了。

好在我们游戏的原始图素都是用 3d 建模,然后再用平面修整的。基本几何结构信息可以从模型提取出来。当然,我们并不真的需要自己写程序去从模型中计算出最终渲染图的法线信息。所有渲染软件都可以输出它。

比如 3ds max ,如果你把渲染结果输出成 .rla 文件,那么就可以勾选 normal zbuffer 等额外的通道输出。

记得我读大学时写过一个 rla 文件解析程序,当时是为了提取里面的 Z 通道。这都过了十多年了,果然完全找不回当年写的代码了,也忘记曾经怎么实现的,所以就从头来搞。

阅读全文 "RLA 文件中的法线信息提取" »

October 27, 2014

文明太空的评测

Sid Meier's Civilization: Beyond Earth ,中文社区翻译成 文明 太空。这个周末全部耗在这个游戏里了,steam 统计有 35 小时的记录时间。

鉴于 steam 上全是差评,而我觉得游戏还不错,值得一玩。所以动手写了篇好评,拉高评价吧。

steam 上评测链接在此 ,觉得有用点个赞 :) 。

阅读全文 "文明太空的评测" »

Misc

Categories

Archives

Recent Comments