game jam 记录与分享
2017年十月底,我参加了所在的美国某大学游戏开发俱乐部举办的GameJam。活动从周五下午5点30开始公布主题,周日中午12点提交游戏。大约有50人参加了此次活动,超过一半的人在比赛前已经组好了队伍,而我作为一个第一次参加这种比赛的国际生(且大概是唯一一个中国人),在活动之初自然是独自一人的。在主题kick off前,大家都在热烈讨论和组队,而我在观察那些和我一样一脸懵逼的人作为我潜在队友的考虑对象。我和前面的女生交流了几分钟,对方是一个非游戏开发相关专业(计算机,美术,音乐)的学生,但是有自学过一段时间的python,此前没有参加过俱乐部meeting,对游戏开发也没有任何接触,只是经朋友介绍来参加的这个活动,于是我放弃了和她组队的想法。很快,组织者开始了对于活动一些规则的介绍,并公布了游戏的主题——炼金术(Alchemy)。所有参与者都有些沸腾,开始在活动范围寻找合适的地点与自己的队友们一起讨论这个主题并开始设计他们的游戏,而我也趁这个机会找到了两个落单的人组成了一个队伍。
队友1: Nick, 一个擅长java以及c系语言的Computer Engineering专业生,此前从未进行过游戏开发。
队友2: Deni,参加过一次game jam,并用love2d开发了一个2d横版平台类游戏的程序员。
我:一个用了四年rpg maker xp,此后接触过各种非主流引擎,什么都学了一点点但没一样精通的菜鸟程序员。
由于两名队友都是程序员,而我作为队伍中唯一一个有自己试着画过素材的人,自然是当仁不让的扛起了美术的担子。经过一系列讨论,我们决定制作一个2d策略类游戏,或者俗称战棋游戏。由于unity是俱乐部中最火的游戏引擎,我在此次活动前努力学习了一个月,本来也想趁此机会练习一下unity的开发能力;但由于我本身要负责美术,两名队友又没有接触过,自然是只能作罢了。最终,开发引擎被决定为love2d,我们开始了对游戏本身的设计。
故事的主角是一个为了研究炼金术而不择手段的炼金术士,由于长期接触药物而导致自己年轻的生体迅速老化,变成了一个young old man。他雇用了几名佣兵,开始了寻找炼金材料的旅程。游戏的基本战斗规则和其他的策略类游戏出入不大,每回合每个角色拥有一定的体力值,体力的消耗与行动的步数对应,此外进行攻击也需要消耗1点体力。如果某单位被攻击时还有上回合没有消耗的体力,该单位便有可能进行反击操作,反击的概率由体力值的多少决定。此外,体力值无法积累,每回合开始之初体力会重置。设计完基本规则后,就是对主要人物的设计了。起初,我提出了一个想法:炼金术士除了移动以外唯一的手段就是投掷液体药物。药水的作用完全随机:可能会对目标造成伤害,可能会使目标迟钝,也有可能对目标造成治疗效果。但是,Nick很快就否决这个点子,“这是一个有趣的想法,但并不会是一个有趣的游戏机制。” 于是我们将其修改为,炼金术士可以花费一定行动值来制造一个随机的药水,玩家会在药水完成后得知他的作用。药水是可以保存的,但是炼金术士只能同时携带三瓶药水。此后我们又讨论了一些关于另外几个角色的故事背景,人物性格以及攻击类型。地图方面,我们暂定了两个。一个是在山洞附近,目标为一只小型魔物的血液。小型魔物本身无战斗力,但是他拥有某种能力来迷惑靠近的敌人,此外他也拥有几个大型魔物作为保镖。另外一个地图为城堡,我们的队伍将从贵族家中抢夺某重要材料,战斗对象为各种守卫。
当这些策划完成时,时间已经过了三个小时了。之后的时间,Deni首先帮助我们熟悉了Github的使用,然后开始教Nick用love2d和一些lua的基本语法,而我则开始使用windows10自带的画图软件画起了地图图块。10点半左右,我起身回家睡觉,他们两个住得比较近就多呆了一会儿。第二天,我在大约10点的时候来到了学校,此时他们两人已经在写代码了。上午的时间我基本都在使用windows画图绘制各种地图以及临时图标来供他们使用。他们则在实现地图的在游戏中的绘制。下午,我开始用piskel画各种人物的行走图。因为时间问题(同时也是实力问题,这是我第一次尝试绘制完整的四方向人物行走图),我选择把所有的地图图块以及人物画成32x32。偶然想起当初用RPG Maker时用过的行走图纸娃娃工具,将不同的衣着造型以及五官搭配在一套裸体行走图上来完成不同的人物,我也尝试先画了两套不同的裸体模版,然后在这个基础上层层添加,效率确实比我想象的要高很多。这一天过得很快,但是游戏的总体进度十分不理想,晚上的时候我们也意识到在第二天中午完成几乎是不可能的了。Deni在大约8点左右就回家了,此时我们游戏系统还依然惨不忍睹——人物已经勉强可以移动了,但只是勉强计算与目标地点的距离直接消耗体力,然后改变位置,没有行走路径,也没有对不可通过地形的检测。游戏没有ui界面,也没有任何动画,所有的一切都只是数值的计算,我们的核心内容—随机药水还根本没有开始编写。Nick已经开始在发呆了,我的精力也有些无法集中。好在俱乐部在game jam中有一个传统——周六晚上九点所有人停下手中的游戏,徒步行走约一英里去学校附近的一个Cold Stone买冰淇淋。同时,路途中大家也会和别人讨论自己的游戏进度。重新回到俱乐部时已经过了大约一个小时,超过一半的人已经回家了。此时精神稍微放松了一些,剩下的人又都重新开始回到对各自游戏的开发中。Nick此后又待了一段时间,修复了几个bug并编写了一个简单的攻击函数,看了下时间已经快到凌晨了,便回了家。我由于住的较远,而且也十分希望在第二天提交作品前游戏能有一定的可玩性,选择留在这里通宵。又花了一个多小时的时间,把剩下的几个人物都完成了,只剩下个人认为最难的骑兵正面还没有绘制。画到这里说实话我已经有些厌倦了,起身四处转了一圈,几个房间内除了管理人员以外只有不到是个人还呆在这里,而他们的游戏都已经基本成型,我意识到剩下的几个小时自己依然不能闲着。我开始研究Nick和Dani留下的代码,在网上查了一些关于lua的基本语法,尝试着自己编写一些简单的部分。lua的确是一个相当简单的语言,但它在很多方面的用法和我之前接触的编程语言都完全不同。凭着对现有代码的观察与模仿以及google的帮助,在快要天亮的时候,我已经在游戏中插入了一些音效,并开发了一个简单UI来显示数据。之前曾听到他们谈论lua的继承问题,后来他们不得不使用了hardcode的方式编写地图以及人物数据。我也自己尝试了一下调用tiled软件生成的地图,不过又想了想目前只有一个地图需要考虑,hardcoding没什么,就放弃了修改,转而新增了一个存放地图信息的二位数组,将图块分到了不同的图层。这个时候已经差不多早上7点了。我起身和其他那些奋斗了一夜的同志们交流了一些进度,测试了一两个别人的游戏,之后队友们陆续回到了俱乐部。我跟他们交流了一些这一晚上的进度,Deni整理并优化了一些我之前的代码,便重新投入了对于攻击、反击功能的开发,我也终于能以程序员的身份来实现这个游戏。在我完成了对于行动范围显示的编写以后,Deni让我试着实现一个简单的敌人AI。离结束时间还有两个多小时,如果我能完成对AI的编写,我们的作品虽然依旧简陋,但至少能作为一个游戏来运行。可惜的是,一整晚的时间已经耗尽了我的精力,之后的时间里我已经完全无法进行有效率的开发。因为代码中一些细微的语法或引用错误,AI不断报错,浪费了大量的时间。此外,由于一些判断逻辑的错乱,AI的行动也完全没有达到我们预想的效果,在中午12点前,我们终究只能上传一个无法测试的半成品。
作品上传后,所有参赛这聚在一起,轮流展示自己的游戏,然后最终大家进行投票来决定排名。每一个作品都给我一种眼界大开的感觉,各有特色,完成度也都不低,大家都在一片欢声笑语中上去体验其他队伍的游戏,我也颇受感染,本来极度疲惫的精神又硬生生的多熬了两个小时,直到我们团队上台展示。由于AI的故障,游戏无法试玩,我们只能阐述当初的设计观念以及预期的效果。之后,我感觉再也撑不下去了,便自己先离开了。
总结
此次参加game jam,我的确获益匪浅。对于一个新手来说,game jam能极大的提高一个开发者的开发效率,团队协作能力,以及对于自我的认知。在活动结束当天,我最大的一个感想就是,三个人(且有两人是第一次接触这个引擎)在两天之内开发一个可玩性高的战棋类游戏几乎是不可能的……除非使用RPG Maker之类的内置一套完整游戏系统的引擎。撇开ai和大量游戏内容的设置不谈,光是对于机制的实现,自动寻路等就需要耗费大量的时间与精力。高估自己大概是每个程序员都会犯的错误吧。。。但这些并不重要。记得之前写一篇profile的时候,我采访了俱乐部内的一名成员,他参加过3次俱乐部举办的game jam。在讨论完他在活动中的经历后,他谈及自己的感想,说到:“game jam是提升一名游戏制作者设计和开发能力的很好的途径。到了最后,能否完成已经没有那么重要了。重要的是游戏开发的精神以及你对于自己创造能力的挑战。”
除了作为一个参与者的心得以外,我还有两点感受。
1. 很多参与者从来都没有接触过游戏开发,但都抱着学习的态度来参加了这个活动。他们中途也许也会质疑自己,但很多都尽力坚持到了最后。
2. 自我认知真的很重要。有的东西你可能学了很久,为其花费了大量的精力,但永远会在一些方面有所不足,需要继续钻研与练习;有的东西你可能接触不多,但只要敢于尝试,愿意坚持,最终总会有超出自己预期的成果,以及让你不会后悔的收获。
刚开头看到GameJam做策略游戏,其实某种程度上就猜到结局了
@resty:但是有模板的话还是能很快搭建的
@resty:没错,其实我一开始也有担心过这个问题,但是队友都挺乐观的,我就选择相信他们也相信自己了。最后虽然没完成,不过我感觉也不是完全没有希望的,毕竟三个人中两个人是初次接触这个引擎和语言,否则的话完成度会高很多。
谢谢评论!
@Compasslg:其实涉及AI 数值 平衡之类的游戏都很危险。如果参加之前想做,应该要不少准备