咕咕

想着先咸鱼几天,结果意外地很忙,就没闲下来。本来想来点毕业旅行,因为各种各样的原因(天热是第一)也成不了行。于是在一个月内体会到了学生时代是如何迅速成为历史的——相关的人和事突然就难以抓住了。

总之做了不少事,甚至在哔哩哔哩发了个视频,上次发视频已经是两年前了,想想这两年间发生的事情…… 咕咕的理由还是很充分的。

视频内容其实是取自一套给朋友的游戏绘制的概念设定,画出理想的游戏界面。鉴于可能有些保密环节,就放出来其中一张相关性不太强的内容吧。

硬件购买界面

挺有趣的工作。

这个月主要工作是编程。由于我的能力有限,这半年来看着老无所依的代码实在是有些不知从何下手,梳理脉络也很艰难。所以在六月份解决掉毕业展之后,我决定自己上手、参考老无所依的代码从头写一个更小体量的游戏。

初步设想是做一款专注于物品搜刮元素的回合制地下城生活模拟游戏,和老无所依的机制有重叠也可以互为补充,是一个非常适合我的游戏审美的游戏方案。我将这个游戏的各个流程描述分割为若干小功能,并且争取每天都能有所实现——这样即使我开发能力再弱,一天能实现一个功能,一百天就有一百个功能了。

目前至少知道从何下手了。后续就是提升开发速度,反哺老无所依,并且和值得信任的人类一起开发。在开发过程中,也结合之前的知识写了一些很不错的小工具,在以后都可以广泛地应用于团队批量作业和用户客制化。

能够最大程度地参与游戏开发真的是非常开心的事。也算是终于和自己临时和解,搁置一些烦恼和怨恨,真的用快乐创造快乐。

阶段性反思

最近准备毕业展一直没有开发,只是写了一些游戏设计。进行一下阶段性反思,通过描述设计游戏的习惯讨论我游戏设计过程中未意识到的问题。

在游戏设计中,我对于游戏构成元素的重视程度如下:

文化>美术>玩法

这意味着我设计的游戏总是以传播文化为第一要务,相对轻视玩法。

这是为什么呢?我认为游戏的玩法在现有硬件限制下已经被探索穷尽了,新生的玩法无非是原有玩法的拼插积木;组合得恰当,便可以成为新的爆点。事实上,任何构成元素都是这样的创作方式,只不过电子游戏的兴起相对较晚,众多开发者始终不愿承认玩法已经被穷尽。新兴的事物终将老去,陈旧的事物也会成为新兴事物的养分,然后进入复古阶段、重新开始循环。

解构也不是简单的抽离概念,比如“打篮球不就是几个人追着球跑?”“荣〇战魂不就是剪刀石头布?”……这其实将一切蕴含价值的东西变成了平庸的常见事物,就像我刚才所说的“新生的玩法无非是原有玩法的拼插积木”,这其实忽略了其中的粘合剂和包装——往往是能够称之为价值的东西。不能偷换概念,更不能将人的思考结果忽略。

把任何命题进行无限制解构势必走向虚无。既然我们是对抗虚无的创作者,那就应当将积木作为建构的原件而不是自己的枷锁——如何使用基础元素创造具有智慧的事物呢?这恰恰是创作者的责任所在。


回顾之前的设计,发现生存游戏占多数,题材尤其倾向末世单人生存,我不知道这是否合适,但是从某种程度上代表了我期待的世界状态:完全自由的野蛮生长——一种无政府主义的愿景。我非常希望能做后启示录题材游戏,希望有机会可以做。

至今为止我认为对“孤独感”的处理最好的游戏是《黑暗之魂2》,它的气氛渲染、长久构建和声音设计都使得这款并不被广泛认可的续作成为我心中的第一。即便是今天,仍然能记起从一线天森林到如蜜再到巨人陨落之森的震撼与感动。(虽然内容有点虎头蛇尾)

人是需要孤独的,需要一个整段的时间保持离群状态——保持沉默,保持思考,保持不思考。这是自我认识之要。


那么反思的意义在哪里?我认为,我在游戏制作早期过于专注于前两种的设计(早期指立项后),而疏忽了玩法的打磨和开发。由于游戏的制作流程限制,①应当更加快速地产生可被重复验证的可执行原型,在原型基础上进行迭代开发;②设计好资源类和导入流程,以此为基础进行资源填充。

问题在于,如果①②之间的时间跨度决定了多人协作时的效率,如果能够在短时间内提炼出原型,并在第二个迭代周期打通导入流程,那么在开发时势必可以提高出品速度。目前来说,以往项目的薄弱环节往往在此。

《U》:资源控制出了问题,不能控制完成资源任务的时限,不能控制多人协作时的美术风格,甚至不能控制像素的大小——作为最早期的游戏,确实吃了不少的苦。这个项目的停摆也让我意识到控制流程的必要性,并总结了一套针对新入组美术成员的工作文档。

《N》:可验证原型始终未能诞生,资源填充过多,这充分暴露了编程能力不足的短板和工作规划的误区;但由于早期制作资源非常充沛,所以有相当大的试错空间,并确实做出了不少的成绩,积累了相当多的经验,是我最爱的项目;

《R》:属于想法听起来很有趣,但是实际开发有些痛苦的项目,资源填充流程没有打通,与程序远程交流效率低,开发失去连续性,最终丧失制作动力;

《A》:可验证原型诞生后,证实了玩法并不好玩(或是不对胃口),结束项目止损;

《C》:过于关注资源填充,但是由于游戏类型限制,导致可验证的玩法没有验证的意义——横板过关本身是一种靠细节支撑的弱玩法游戏,它需要大量的细节打磨来支撑其完整性,实际上并不是一种一蹴而就的简单游戏。简单来说,这是非常吃力不讨好的游戏类型;

《H》:相对成功的开发经历,一定程度验证了该理论的正确性,但是由于玩法缺乏拓展性,也难以进行资源的流程化制作;

《E》:相对成功的开发经历,从原型制作、资源调用到系统优化,都有条不紊地遵守该理论,几乎没有浪费时间的开发过程,这需要改日进行更加细致的流程分析来丰富该理论。

冒出游戏想法是一件非常简单的事情,写几句话,拉几张表格,一个有趣的游戏就呼之欲出了,自行开发似乎也说得过去。但是怎样客观地验证游戏玩法、批量产出资源、实现整条流程的通畅运行,这绝非易事。打铁还需自身硬,面对规模更大的项目,其中产生的问题必然不仅是技术问题,这又该如何解决?


当然,以上的流程的分析过于理想化和简化了。游戏设计的流程并不是一条直线,而是一个动态的循环。游戏设计需要不断地测试、反馈、修改、优化,而不是一次性地完成原型、资源、系统等。游戏设计需要更多的实践和验证,而不是只依赖于理论和文档。

越是困难的时期就越需要勇气和热情。

星球兑换指南

MOEBIUS 画的

关注了许久《白宙:老无所依》的你一定对太空很感兴趣吧?来看看要怎样得到属于你自己的星球吧。

什么是星球兑换?

星球兑换是lunch为答谢开发期间提供大额发电支持的朋友们开放的限时限量功能(兑完即止)。为此,笔者开发了一个web应用《漫步白宙》以访问该功能。且该功能尚不支持移动端,请使用电脑访问。

星球是一种基于饭岛区块链的NFT/数字藏品。

《漫步白宙》是一个漫步白宙是一个在线星图浏览器。你可以在这里实时查询游戏《白宙:老无所依》中的星图、星区、阵营、星路等各种信息,这里的星球信息与游戏中实时同步。所有星球都已与知识库链接,允许你轻松地查询或撰写更多有关该星球的内容。

得到一颗星球意味着什么?

《白宙:老无所依》 中共有2098颗星球,本次兑换从中选取了100颗独一无二的星球供你选择。

游戏中所有的星球数据都储存在云上,当每个正版玩家打开游戏时,会自动联机同步星球的内容,实现异步联机的效果。即是说,所有玩家面对的都是同一个宇宙。

随着开发的进展,将开放更多的自定义功能,拥有星球的你除了书写自己的星球故事,你更有机会在这里定义属于自己的NPC剧情、进行星球改造、链接线上游戏!

由于 星球是一种NFT ,持有一颗星球意味着持有者拥有完整的自用权和商用权,上述权利用户在使用星球兑换卡进行兑换时获得。

我该如何兑换星球?

星球兑换卡

首先你需要一张星球兑换卡,取得方式如下:

  1. 爱发电中发电成为正义执行者大议会议员
  2. 白宙知识库注册账户;
  3. 饭岛注册账户,并在用户信息设定中绑定以上两个账户;
  4. 饭岛-我的资产中可以找到本物品;

持有本物品时,可以在《漫步白宙》中兑换一颗你的专属星球:

  1. 进入电脑版《漫步白宙》
  2. 登录你的whiteverse账户(注意不是饭岛)
  3. 点击屏幕右侧购物车按钮
  4. 查看星球兑换卡数量并选择你想要的星球
  5. 在弹出的星球面板中再次点击购物车按钮
  6. 换到了吗?请刷新一下吧。

星球将发放到饭岛账户中,星球信息也可通过“我的星球”按钮访问了。

没有抢到星球兑换卡/没有这么高发电量怎么办?

游戏在发售后,还会开放一定量的公共星球给大家开放(承包),如果你有一颗向往科幻的心,那么白宙一定不会让你失望。

你这肥猪……下周休刊!

自去年十一月初被小人背刺以来,一直处在非常不妙的精神状态中。除了做做网站,任何游戏开发都停止了。确实是没什么足够的力气和勇气继续生产快乐了。

不过作为即将二十七岁的成年人类,就算是再没力气,两三个月也应该足够恢复了。还是应当趁着年轻多为社会贡献价值才好。

决定认真起来好好再拼一把。但使愿无违。

漫画翻译工作流笔记

游戏开发遇到了一些难以解决的问题,具体最近会找机会说一下。既然不好办还是转换一下心情吧!于是最近闲暇之余翻译了一本漫画,基本复刻了去年的工作模式,在此总结一下心得。简单来说分为以下几个步骤:

  1. 图源和预处理
  2. 翻译
  3. 原文清理
  4. 内容重绘
  5. 文本框
  6. 文字粘贴
  7. 校对和导出

这几个步骤在漫画翻译中一般是分工为扫图、翻译、修图、嵌字、校对这几个职能。


图源和预处理

小时候也饱含热情地扫过图,不过太耗时且太累了,而且有时需要拆书。现在可以把书发到淘宝找人代扫。大部分的图源还是来源于网络,这次翻译的图源就是不这么令人满意,不过因为我觉得其中几篇内容很对我胃口,遂硬着头皮上了。不过还是建议有条件的话多来点高清资源。

预处理往往是对图像进行校正,比较泛用的方法是使用ps插件topaz,不过我更倾向于自己写一个命令自行处理。这个网上教程很多,就不加赘述了。

对于比较差劲的图源,有条件可以尝试一下现在逐渐兴起的深度学习修复技术。面对低分辨率但是没怎么丢失图像内容的图片时,效果还是比较不错的。在《超传脑》的打包整理工作时就试用了本技术,效果比较满意(当然这本书由集英社出版,尺度非常克制。完全可以从网上买到了)。

关于psd的预处理:由于大部分工作都是在ps上进行,因此所有的图都应当保存为psd格式的副本,在此应当使用批处理,对图片进行批量的psd转换。查了一下网上并没有什么图片批量转换为psd的在线工具或教程。那我来吧。

  1. 在漫画根目录用ps打开随便一张图片例如021.jpg
  2. 打开动作(Alt+F9),新建一个动作”psd”进行录制
  3. 将图片另存为psd,不改目录、不改名称,仅改格式。
  4. 关闭图片结束录制

点击文件→自动→批处理,选择刚才的创建的动作,选择源文件夹,选择目标 ,点击确定。

大概调成这个状态

在整理文件顺序后,这些psd就可以在后续修图中起到效率强化的作用了。

翻译

我个人的做法是一个对话框一行,漫画分页时进行区分。

小技巧:往往两个屏幕比较好用,漫画放在竖屏,文本放在横屏,在翻译时不需要进行缩放,可以始终保持双手在键盘上。

原文清理

我在ps中完成该流程。首先打开多幅(看自己内存大小)预处理完成的psd文件。

  1. 点击选择工具,切换至添加至选区(这样可以省去按shift复选的疲劳)
  2. 使用选择工具将对话框的所有内容框选
  3. 新建图层
  4. 编辑→填充→填充白色
  5. 保存&关闭

该流程的3-4-5可以使用动作(Alt+F9)录制,并绑定快捷键以大幅提升效率。

内容重绘

遇到不可以用白色取代的文字(拟声词和漫画内容如物品商店招牌海报等)时,标记下来并在上一步完成后逐个替换。上一步的好处就是增加了一层原文遮盖图层,因此可以在该图层上进行重绘。

重绘一般情况下需要用到数位板,不过这并不是一个非常简单的工作,大部分情况下也可以通过加*以注释的方式在内容外标出。不是完美主义者或不需要太彻底的本地化时就不必进行该工作。

在ps中重绘推荐使用画笔工具(软边圆画笔)、仿制图章和污点修复画笔工具。

文本框

一般来说比较讲究的作者会使用不止一种字体:标题、旁白、对话、拟声词、手写、场景内字体。为了保证统一和最大程度还原原作者文本风味,应当对文本进行严格的格式化管理。

我的建议是单独建立一个psd文件用于放置文本框设计标准,在打开时批量放置。

放置时调整好位置,尽量在本环节让下一步能够减少调整文本框大小和格式的时间。

小技巧:不可避免地会出现 ?!、《》、“”、34、UFO 这样的内容,在竖排漫画中,会导致格式混乱,因此建议也采用竖排的排版模式。方法是选中目标文本后,字符→右上角菜单→直排内横排 以达到需要的效果。

在这儿藏着呢

要注意的是,?!这样的密集内容最好使用半角符号,否则会比较影响画面。关于《》和“”,在竖排文字中可以用『』「」来替换(统一在翻译文档中替换),这样的效果较为美观,也符合竖排文字格式。

文字粘贴

嵌字会占去整项翻译工作的1/5时间,和翻译工作不同,嵌字需要在两个应用之间来回操作,因此应当让手离开键盘以解放小拇指。有条件可以使用带宏按键的鼠标,分配三个按键:Ctrl+C, Ctrl+V, Esc——用来退出ps中的文本框编辑模式,根据使用频率来说,和前两项一样有用。

我个人使用了带有六个额外按键的罗技G604进行日常工作,除上述三个外,还绑定了回车、Delete和→。最后一个适合单手看电影。

校对

啊?写错了?mingomingo~ 导出按照之前的批处理方式再做一遍就是了,非常简单。


总之就是这么个过程。下次再翻译的时候就不会忘记了。

另外,关于漫画翻译我也寻找了一些深度学习方面的资料,我自己试了一下,效果并不是很理想,弄下来效率和精致程度还不如整理下来的这个流程高。

另一方面,我也注意到photoshop是提供了psd处理的api的,即是说,可以在这个基础上进行改善,把图像预处理、原文清理、文本框放置、粗翻译的问题解决。按这样来说py+ps是可行的。

jtl1207/comic-translation: 基于深度学习的漫画翻译辅助工具,包含翻译、朗读、图像去字、自动嵌字功能。 目的是帮助非专业汉化人员完成更简单,快速的翻译任务。 (github.com)

kha-white/manga-ocr: Optical character recognition for Japanese text, with the main focus being Japanese manga (github.com)

有什么可以优化的地方,或者过时的地方,欢迎评论指正噢!

Whiteverse: Explorer

Whiteverse: Explorer

Whiteverse: Explorer 1.0.0版本发布,嫌字多点这里直接进

两周前,游戏开发准备进入下一个小阶段。

利用一周时间重新画了之前一半的星球,并且新添加了一百余颗,几乎要肝到吐血。一天画它十个星球,一年不就三千六百五十个了?

用一周的时间再次好好琢磨了这两年和程序员对接的痛,感觉做东西还是想法最重要啊。实践类型问题的解法是多样的,只要能坚持解题就好了。总之!还是希望游戏能好好开发,画的图、码的字、做的小工具都不要白费。

关于这个程序的编辑和导出功能,现在仅对知识库认证档案员开放,毕竟是用于游戏开发的;假如您有任何合理编辑需求,或有任何bug和功能建议,请在下面回复或发邮件联系我。邮件会迅速回复。

lunch@whiteverse.com

飯岛换新域名了

fandao.fun

由于计划逐渐拓展,决定将飯岛单个提出并继续深度开发。总之,现在是BETA版本0.7.5了,真是做了很多工作!始终有新的灵感在开发过程中迸发出来,并且一一实现真是有趣。

抢到了看起来还不错的干净域名!折腾了一晚上摁着DNS解析和301重定向使劲,结果查到最后是因为没整好SSL,重新申请了六七个证书解决问题。

飯岛堡盒,设计了看起来装了很好吃的汉堡的盒子用于后续开箱。

最近逐渐找到并驾驭新的美术风格,并且以此为基础设计了新的游戏、与飯岛深度结合。计划起来相当有趣!已经在着手利用闲暇时间开发了。

认清形势放弃幻想

如果说这几年给我什么经验的话,那么就是人永远会在自己不擅长的地方吃亏。

在老无所依这个游戏上,我和朋友投入了非常多的精力和资金;这几年间,工作和生活高强度耦合,也逐渐在社交圈中自我边缘化。许多经历的事情、面临的境遇都不是我创业前能想象到的。

即使是像我这样的不善于交际的家伙,这些年也认识了不少人。这几年添加的微信好友是之前数量的数倍。合作的尝试进行了十余次,也算是付出了不少感情和金钱。在这些尝试中,我惊讶于人与人之间的差异和差距,惊讶于某些我视为常理的观念的缺失,惊讶于与年龄不符的行为和心理状态的呈现。即便是目前的情况,也不能说是顺遂。

离研究生毕业还有半年,年收入负二十几万,每天在全职开发已经开发了很久的项目,并且不能确定实现全部的想法还要多少久。

和当初合作的朋友回顾这几年的历程,总是会感叹真是足够倒霉了,也见了够多的烂人,就是不敢提放弃。就好比小时候看CCTV7,提到有关农村企业家自主创业 “借钱养小动物-没搞好环节导致小动物大批量病死-家人朋友劝放弃-不放弃继续梭哈-成功” 这种历程,总觉得是演的吧,怎么都是一个套路捏?

然而现在想想就觉得好笑得很。好,至少走到第三阶段了,希望我是能撑到播出的那类企业家

如果说这几年给我什么经验的话,那么就是人永远会在自己不擅长的地方吃亏。

这也是为什么最近这么忙。在做游戏方面,我的能力存在短板,多年以来也不愿意去填补:认为这并不是什么困难的技术,只是麻烦的工作而已。所以总将编程环节交给别人去做,自己掌握其他的事情。

……单是这么讲,会给人一种懒惰且爱找理由的印象,确实,我看着都是这样。不过我这些年确实没有闲着,一直在探索其他领域的技术和创作方法论,并且是有所为的。

然而,一遍一遍地在程序(选人)上跌倒,就是我管理的全责了。缺乏相关的鉴别能力,一味地付出信任、相信人可以改变,最后把自己摆到受害者的位置上实在是太愚蠢、太愚蠢了。诚然,我对坑人的水货非常反感,但最后付出代价的只有自己。

所以,如果想自己做项目,还没什么领导能力,或者没什么钱,那就要自己做好技术。

好土

说来可笑,在去年底程序跑路之后,自己检查代码后就越来越觉得这确实不是什么困难的技术,只是麻烦的工作而已。

做游戏最重要的还是要回归想法和演出效果。

比较可惜的一点就是很久没有和朋友一起联系玩耍了,别提一起玩,即便是自己玩游戏这种事都是一两个月之前了。比较搞笑,一个搞游戏开发的,不玩游戏。从前的我的周末状态是这样的:打开相关的独立游戏网站,一口气下它二十几个游戏,整个周末都用来感受不知名网友制作的作品。那时候根本不在乎是谁做的,这个游戏的构建原理是什么,怎么能够更好玩,只是单纯地玩。

现在玩游戏要记笔记,写测评,总结分析开发流程,提炼玩法,分类。同时还要想今天打游戏花掉的这些时间是不是还能利用起来,用来写写文章敲敲代码,哪怕是画两笔呢?毕竟还有这么多工作没有做完。

真是不自由啊。

我怀念几年前可以到处旅游,住几十块钱青年旅店的时候。那时的世界色彩饱和度还很高。

正则表达式匹配网址url

论坛开发了添加网址的功能,利用正则表达式过滤网址,并转换成需要的格式。网上搜基本都没法用,没用的还转得到处都是,真是浪费时间。

/(((http|https)\:\/\/)?[a-zA-Z0-9\.\/\?\:@\-_=#]+\.([a-zA-Z0-9\%\&\.\/\?\:@\-_=#])*)/

以https://wp.whiteverse.com/wp-admin/post.php?post=1150为例。

转换成数组之后,分组如下:

(
    [0] => https://wp.whiteverse.com/wp-admin/post.php?post=1150
    [1] => https://wp.whiteverse.com/wp-admin/post.php?post=1150
    [2] => https://
    [3] => https
    [4] => 0
)

https://regex-vis.com/还是挺好用的,可以图形化检测这个表达式是否可用。

在测试中发现,有的时候&符号会被吞掉,这时候在表达式中把”\&”改成”&”再进行一次字符串替换就可以了。