我给设计的这个游戏改了个名字,现在它有正式名字了:《鳞光纪》。蛇娘的鳞片、这个纪元的故事,都在这四个字里。
主菜单标题画面上写的,就是它。
前几篇讲的是怎么把游戏"做出来"。从这一篇开始讲优化——但我不打算贴一堆代码截图念经,那玩意自己看代码就行。这一篇只讲你一打开游戏就能看见的变化,而且每一处都放新旧对比:老版本长什么样、现在长什么样、中间发生了什么。
先看图说话:
图 1:《鳞光纪》现在的主菜单——六位蛇娘环绕四周,花瓣飘落,底部是星尘和战绩信息栏
一、主菜单:从"借来的封面"到"全家福"
老版本的主菜单是什么样?说来惭愧——它没有自己的封面。当时偷懒,直接把第一张地图的背景图(校园庭院)拿来当主菜单背景,按钮往上一摆就开张了。玩家一进游戏,看到的其实是"关卡的底图",只是上面盖了几个按钮。
现在的主菜单是专门画的封面:六位蛇娘围绕在标题两侧,月夜、灯笼、水母灯一堆场景元素铺开,右上角还有一轮月亮。另外加了两层飘动的东西——樱花瓣和光斑,一冷一暖,让画面"活"起来。
这个飘动效果的技术思路其实很朴素:菜单上同时飘着 42 个小元素(22 片花瓣 + 20 个光斑),如果每一片都实时旋转、缩放、算透明度,菜单就成了性能黑洞。所以我提前把每个角度、每档透明度都画好存起来,运行时只是轮流拿出来贴——就像提前拍好一套定格动画,播放的时候只管翻页。
# 教学简化版 · 思路示意(非完整可运行)
# 预先把花瓣的 15° 一档的旋转 + 4 档透明度都画成小图
for angle in range(0, 360, 15):
cache[angle] = rotate_and_fade(petal, angle) # 只在加载时做一次
# 播放时只是"翻页",不再实时旋转
二、小怪:从"一只紫影怪走天下"到"四套主题皮肤"
这是我自己最看不下去的一处老设计。
老版本里,所有地图刷的是同一只小怪——一只紫色的独眼圆球。你在樱花校园里打它,在霓虹夜市里打它,在深海里还是打它。背景换得再漂亮,怪永远是那只"紫薯精",出戏得很。
现在四张地图各有一套自己的怪:校园里是气鼓鼓的樱花精,夜市里是霓虹机甲风格的悬浮眼球,深海里是半透明的发光水母,神域里是拖着火焰尾巴的狐火。怪一进场,你就知道自己在哪张图。
图 2:左上角是老版本的小怪(所有地图共用),其余四只是现在各地图自己的怪
让"换装"这件事能成,靠的是前面打好的素材管线:AI 生成的每只怪都是一整张图,脚本自动把它抠成透明底、切成游戏能用的小贴图,再按地图挂上去。游戏代码只认"这只怪用哪个贴图编号",换怪等于换编号,一行配置的事。
三、精英和 Boss:从"数值放大器"到"真有牌面"
老版本刷精英的方式简单粗暴:拿小怪放大一圈,血量乘个倍数,完事——长得一模一样,就是更抗揍,玩家根本不知道"精英"来了。Boss 更简陋:因为当时没有 Boss 贴图,它是用代码现场画出来的几何图形(一个带装饰的圆),出场全靠脑补。
现在的精英和 Boss 都是专门画的贴图:深海精英是一只巨大的红色深海鱼,校园 Boss"樱之守护者"是一尊铠甲武士。血条也分家了——Boss 有贯穿屏幕顶部的专属大血条,精英头顶挂自己的小红条,一眼分清谁是谁。
图 3:深海遗迹,绯焰正面对精英怪(右侧大家伙,头顶有专属血条),周围小怪成群
图 4:剧情模式 Boss 战——顶部是"樱之守护者"的专属血条,右侧就是 Boss 本体,不再靠脑补
Boss 的攻击也升级了,一共七种攻击模式。我拿最有代表性的"震击"举例:Boss 跺地产生范围伤害,但不是马上结算——地面上会先出现一个预警圈,闪 1 秒之后才炸。就这一秒,把"莫名其妙掉血"变成了"我看到、我反应、我躲开",这是动作游戏手感里最关键的一步。
BOSS_SLAM_DAMAGE = 20 # 震击命中扣多少血
BOSS_SLAM_RADIUS_CELLS = 3.0 # 影响半径
BOSS_SLAM_TELEGRAPH = 1.0 # 预警圈亮 1 秒,之后才结算伤害
四、双人编队:带一位候补下场,随时换人
老版本只能单打独斗。现在可以带一位候补蛇娘组队上场:屏幕左上角显示主战和候补两个头像,战斗中一键换人,候补登场时还会把护盾交接过去,衔接得上不挨打。
图 5:左上角两个头像——潮汐主战中,星璃候补(头像外圈是换人冷却);右侧 Boss 压阵
当然,无尽模式还是老样子,怪越刷越多、越刷越快。现在怪群围上来的画面终于对得起"生存"两个字了:
图 6:无尽模式,霓虹夜市——潮汐被一群主题小怪围住,水花特效正在生效
五、普攻:六个人,六种手感
老版本最偷懒的地方:六个角色的普攻完全一样。换来换去,只是换了张皮。
现在分成了两条路、六种手感:
-近战三连(薄荷、潮汐、月见):贴脸输出,普通攻击是三段连击——前两段快,第三段是重击收尾,自带击退。三段各有各的特效,看动效就知道打到第几段。
-远程弹幕(樱落、绯焰、星璃):保持距离放弹,而且各玩各的花样——樱落的弹丸会"种花",绯焰的伤害最高,星璃的弹幕散射开还能穿透敌人。
图 7:薄荷近战三连第一段——绿色风刃贴身横扫
图 8:第三段收尾——特效明显比前两段大一圈,命中还会把小怪击退
三连的手感调过一轮:近战的风险比远程大(要贴脸),所以近战半径从 120 调到了240——代码注释里我原话写着"原值 120 翻倍",就是打完发现根本摸不到人,全在空挥。
六、技能:每人一套专属连招,释放还有专属动作
老版本的技能是六张公共技能卡:升级三选一,谁捡到谁用,樱花风暴也好护盾也好,跟角色本身没有任何关系——把"樱落"玩成了"谁都能放樱花"。
现在每个角色有自己的一套五技能连招,五个技能环环相扣,不是五个孤立按钮。举两个新角色的例子:
-星璃 · 连星成轨:普攻和技能会在地上留下"星位",星位之间自动连线电击敌人;她还能召唤引力井把怪吸成一团、放大招让全场星位连成星座一起引爆。玩起来像布一个星阵。
-月见 · 月相盈亏:她有一套"月相"系统,新月减伤、上弦加速、满月增伤、下弦回血,技能跟着月相变效果——大招"望月"把月相锁在满月,输出直接拉满。
更关键的是释放动作:老版本放技能,角色原地不变;现在每次施放,角色会摆出这个技能的专属姿势立绘,配合技能特效一起播放。下面两张是实机截图——星璃施放"星引"时地面展开引力井,月见放大招"望月"时头顶凝出满月:
图 9:星璃施放"星引"——脚下展开紫色引力井,把小怪往里拉
图 10:月见施放大招"望月"——凝聚出巨大的月亮,蓄力待坠
为了让每个技能的特效都有"专属感",六个人一共做了66 张技能特效贴图(每人 5 个技能 × 双形态 × 若干效果),全部从 AI 生图走管线抠成透明底再接入战斗。这也是为什么现在放技能和以前"画个圆圈"观感完全不同——那些光效是正经画出来的图,不是代码现涂的。
七、场景:一张地图 → 四个世界
最后是舞台。老版本只有一张校园地图,打穿全场都是樱庭。现在四张地图四种气质:校园庭院、霓虹夜市、深海遗迹、樱花神域。而且它们不只是换背景——越后面的图,怪刷得越密、成长越凶,难度和视觉一起升级。
图 11:四张地图全景——校园庭院 / 霓虹夜市 / 深海遗迹 / 樱花神域
八、彩蛋:一张贴图,重画了六代
最后放一个可能没人注意过的细节。角色贴图不是一次画成的——下面是绯焰的六代形象,从第一代的"比基尼+蛇尾"一路迭代到现在。每一代我都留着备份,翻相册的时候有种看自己小时候照片的感觉。
图 12:绯焰贴图的六代演进——从第 1 代到现在,服装、比例、鳞片质感一直在改
写在最后
这一篇讲的全是"看得见"的:名字、主菜单、怪、Boss、编队、普攻、技能、场景。