这里是 狗见了英语都摇头 ,这是我第一次参加GameJam活动,因为其他GameJam大多都2-7天,想法没时间落地非常憋屈,一周时间对我来说太短了,但这次Booom有三周时长,导师又对我的论文水平判了死刑让我有了大量空闲时间,自己掂量了一下时间应该可以赶完,大不了国庆通几次宵,遂决定参加。
因为以前其他比赛的组队经历并没有给我带来良好体验的缘故,再加上我之前主要是在学校做VR相关的开发,学校的开发嘛懂的都懂。害怕组队会给真正的佬拖后腿,我又会一点美术,大不了搞像素风格,所以这次决定Solo完成比赛,如果有好结果能够转为长期项目再组建小队。
为什么Solo还有时间写半程纪录
我以前就有写开发日志的习惯,写这篇的时候正是中秋节深夜我在失眠,加上功能推进比较顺利,所以想换换脑子。
读题与初步策划
9月20日题目揭晓。说实话我看见这个题目的时候愣了一下,这不是GMTK2022的题目吗。但我琢磨一下觉得骰子其实是一个题干的包装,题眼是随机性,还必须是不公正的随机性。既然是在随机上做文章:我第一反应就是我不做数值随机因为我讨厌这种随机,我要做策略随机,第二反应是我随机绝对不碰乘除法,我打游戏一碰到×和÷就猪脑过载直接放弃计算,第三反应是数值要尽量压缩小,易计算,就像陷阵之志那样,尽量把数据压到10以内。
因为是Solo,所以有几点定位很清晰:
1. 肯定不可能从0造轮子,写的代码的起点尽量是我之前写过的,轻车熟路。
2. 音效要么来自cc0,要么自己用库乐队录几个简单音节手搓
3. 能用插件就用插件
4. 解耦什么意思一下得了,一切面相功能实现而不是扩展性
5. 因为我干过三维美术,深知3D流程有多麻烦,这次100%是纯2D
我回顾了一下之前写过的能用的轮子,一个基于网格的A星寻路,一个跟某某学院写下来的象棋AI(现在看来这俩已经改得面目全非几乎重写)。框架则选我最顺手的Qframework,它里面自带了GridKit和很多帮我完成不熟悉流程的内置轮子可以帮我快速开发。从这些有限的条件我的Booom游戏关键词已经呼之欲出了:策略随机,象棋,基于网格,小数值。
得出这些内容后我迅速想到了两款游戏:陷阵之志和霰弹国王,我陷入了短暂的我这算不算抄袭这似乎和GameJam精神不太一致的挣扎,但我很快不往这方面想了,一方面这事在学术论文圈子根本不叫事,只要你做出差异化或者改进就有可取之处,另一方面我21天能做完就了不起要烧高香了,不管别人怎么说我做得爽就行。
于是两款游戏我各自又开了一把,一些轻车熟路的苦痛记忆涌上心头:黑棋国王AB都能走,但是我提示机会用完了没算到会被吃,三法杖局被主教终结,没刀锋你面前的卒都不能杀,在保护机甲保护驾驶员和建筑之间苦苦思索最后选择放弃时间线重开一盘……
我决定了这次GameJam的方向:
1. 一款基于象棋的战棋游戏。
2. 玩家的操作单位<=3(因为我很讨厌战棋一个人控制一车面包人的设定,选择太多就是没有选择,只剩下选择内耗)
3. 局内战斗不涉及任何随机性,随机性在场外决策中
4. 操作单位要有极大的差异性,且不能一次失误就全盘皆输
5. 题材向科幻和AI方面靠,因为我喜欢
6. 系统性设计(硬掰也要把象棋怎么跟AI科幻联系在一起说清楚了)
7. 肉鸽!!!!!!!(但是大概率没时间完成)
确定这些大方向之后我开始写中二设定,但在确定玩家目的上犯了难,在20号当天我放下设定的思考先去画美术素材了。直到22号CEO的动态用嘴做游戏——《几率因子》里提到了坍缩,CEO提议的那个数值随机我看着就头疼,但是坍缩这个词启发了我怎么圆设定。
- 背景是什么?
按我的理解生成式人工智能需要人工标记信息源形成一个极高维度的特征轴空间作为自己的数据库,所以设定在未来某个有意识的AI借助某一契机实体化了,它为了扩张自己必然四处收集信息去扩充自己的特征轴空间让自己更聪明更了解世界。为了反制AI人们产生了新职业——特征数据摧毁工人,每个人都有各自清理的特征轴,定期清理AI新生的特征轴,拖慢AI自我进化的速度。
- 那为什么会显示出象棋?
这是软件根据AI行为规律模拟出来方便人理解的显示方法,这样也能解释通后来可能会出现的象棋中不可能出现的走法和特殊情况。真正的特征数据摧毁工人不需要这个,他们每天见到的内容以一堆代码。“象棋”是政府开发出来号召并吸引普通民众一同参与到清理工作中来的图像化数据编译软件M。主角出于某种原因困在某地,AI如果继续在附近以实体化的形态收集信息会让他死亡(靠近会有类似于辐射病之类的设定)。所以他要用M清理靠近的特征数据(每天靠近的特征数据是不同的,解释了肉鸽为什么不同,也解释了为什么主角要一直去清理,而特征轴可以很方便的纳入各种题材,扩展性很强)
- 玩家操控的单位是什么?
一个在数据海洋里由人操控的程序,它分主机Host和子机Slave,他们的关系就像潜水员和潜水钟,或者宇航员和氧气仓(但为了容错率,只有主机死亡才是游戏结束,子机死亡可由主机复活,所以前面两个比喻都不合适,最终妥协了不想了,直接主机就是服务器的样子,子机就是宇航员的样子,为什么不是潜水员因为宇航员听起来比潜水员酷)。
- 随机机制是什么?
1. AI数据空间是变换的:关卡内容变化,涉及内容和可以展开的设计太多了时间不够,Booom期间不做,如果转为长期项目就做。
2. 信息的传递是变化的:你可以在每局战斗开始前获取随机支援,但AI空间因你的破坏行为带来的变化导致你不能随心所欲的获得想要的内容,警戒值越低随机到的支援效果越偏向保守,警戒值越高随机到的则偏向激进。我找了量子力学里的,同时也用在随机地图生成算法中的名词波函数观测来指代这种随机性。
3. 策略的变化:AI不可能看着你删除数据无动于衷,每局下来都会提高警戒值,而你在每局战斗清理数据后会获得冗余数据,且满3次后,玩家会对决最终的也是最核心需要删除的数据。警戒值不仅会影响信息的传递,还会影响你加工冗余数据的内容(说白了一种商店)。
这是目前的策划案子,玩法的话我倾向于边做边改,用语言描述也比较困难,总之这个策划除开坍缩部分,其余都在20号傍晚敲定了。我就正式开始转入开发。
开发流水账
第1天(9.20)
a) 上午+下午写基础策划考虑玩法 b) 晚上画主机子机和棋盘棋子素材
第2天(9.21)
a) 上午:完成棋盘系统的搭建 b) 下午:处理鼠标点击功能,配置主机子机,实现瞬移 c) 晚上:为了搭配棋盘出现动画重画棋盘素材
第3天(9.22)
a) 上午接入以前写好的A*寻路,去网上找了个范围显示写法教程,配合网格系统做处理接入项目(教程在这里,需要的可以拿去https://www.bilibili.com/video/BV1jg411d7A8/?spm_id_from=333.999.0.0&vd_source=42adcf39eb4e4d28795c0022a66ea630) b) 尝试接入以前写好的象棋走法AI,写的什么鬼玩意儿,改AI改了一天 c) 晚上:看到CEO的主意,修改设定和策划
第4天(9.23)
a) 上午完成箭头指向系统和攻击瞄准系统 b) 下午完成粒子系统打击感和霰弹枪音效,完成初步敌人扣血机制 c) 晚上上课
第5天(9.24)
a) 上午,整理血条和死亡逻辑和特效。整理有效射程伤害和基础射程伤害,整理tag和layer关系。b)下午:昨天下午写了句bug导致血条失效,花了两小时才找到,要死了。以前只用过UE里的连连看,第一次打开Unity的Shadergraph想通过材质实现fx,找了好久找不到怎么实现enum,发现keyword有enum,实验半天发现只有在编译的时候才有效,很烦。最后用GPT写了个custom funcation解决问题,发现颜色无法正确显示颜色非常的淡,因为时间不够就没有深究。 c) 晚上,修改AI规则,规划游戏小流程回合切换
第6天(9.25)
a) 上午,修正射线碰撞导致的全部打在Player_Slave身上的bug。修改棋子Sprite像素化死亡的拉伸问题,并赋予音效。修正甩枪会丢失伤害目标的Bug。b) 下午,修改棋子会重叠的问题(在行走前一步重新执行了判断,但后面又重新出现了,烦得不行)。创建敌人行动预示系统,完成Player状态UI的拼接,完成攻击瞄准过程中Player的转身。c) 晚上:完成Player状态数据和状态UI的互通,敌人消失规则(碰到Slave,Slave消失,碰到Host,Enemy消失
第七天(9.26)
a) 上午:修正EnemyAI在Enemy死亡后还会继续运算的bug,修正Enemy非攻击状态斜走碰到Player误触掉血。b) 晚上:下午:修改EnemyAI规则,当移动的位置一步就能吃子就马上修改修改目标方向。并同步更新ActiveTips的显示。c) 晚上:回退EnemyAI规则,不然太简单也太蠢了,棋类因为场地要求的范围有限且被威胁物体都能移动所以Into the breach类似的规则没法成立。最后决定AI从先执行再思考变成先思考再移动,但是角色移动的同时如果就在一步吃子的路上就会显示QuicklyTip。
第8天(9.27)
a) 上午+下午:完成新AI和快速反应提示系统的创建,修改因移动关闭碰撞导致isunitGird无法更新的bug,修改防斜走bug判定条件,修改AI预测条件。找了我8个小时我真的骂出来了,恨我自己,想抽自己大耳巴子。b) 晚上:运行顺序显示,修改回合切换按钮与对应回合的可交互性,尝试打包,修打包bug。
第9天(9.28)
a) 上午:开始完善回合交替,完成游戏开始登录模式,修改修改Grid更新模式中TheUnitTransformInGrid不更新的bug。b) 下午:每个回合恢复行动点和移动距离,同步ActionUI状态,重新同步Status状态更新,让自己人也可被攻击,且会显示轮廓。c) 晚上:如果鼠标移动到原地会被攻击也会产生预示,字体更换为凤凰点阵体
第10天(9.29)
a) 上午:拼插件UI(好吧其实就是一种卡牌),卡牌摆放位置逻辑+插槽逻辑+加牌/减牌逻辑完成,实现卡牌系统。听说导师现在改论文都是开一对一小会,而我不写小论文了所以这俩月都没找我,芜湖,爽死。b) 下午:将卡片规则分离成单个脚本。修改炮会把障碍物当炮架子的bug。修改第一回合不行动点跳过回合没用的bug。建立资源点收集系统,资源点不够卡牌拖不出来。取消“撤销”按钮的功能,因为要写拦截命令,之前没写过,问了一下GPT在胡诌,时间可能来不及就放弃了。 c) 晚上:中秋节晚上,出去吃烧烤,放松一下。
核心游玩功能实现后的样子
写到这儿判断了一下还有警戒系统,商店系统,准备系统都没写,音效和交互还没优化,跟别提Bug,国庆肯定得熬夜通宵了,就写到这儿吧,祝我按时交游戏捏o(^▽^)o!