如果只是看我的话,我可能会选择 OpenWebGAL 作为游戏的开发引擎。因为我本身比较了解和网页编程相关的内容,我自己认为这一款引擎可能更适合我们后续的自定义和美化。
但考虑到解恪布其实并不熟悉网页编程,同时 Ren’Py 作为比较老牌的视觉小说制作引擎,它制作视觉小说在网上的教程会比其他两个引擎更多,同时其 Python 的语法也更易于我们理解。
所以我们最终还是选择了使用 Ren’Py 进行制作。
注:demo 是指“演示版”,通常是游戏制作完成前的一个小版本,供玩家试玩。
在制作的前期,我也给解恪布列出了 Ren’Py 基本上所有可以实现的功能,以供他写剧本的时候做一个参考。
我也趁着这一段时间抓紧去学习了 Ren’Py 的一些基本语法。
本想着可以帮着解恪布把游戏的 demo 先做出来让我们试玩一下,结果在那个晚上,解恪布居然直接把他写的剧本做成了一个 demo 发给了我。
那个时候我在想说:啊?这不是都不需要我了?(开玩笑)
那个晚上我真的很兴奋,直接给他录了一个我试玩的视频。
这一个试玩版在剧情上其实已经非常成熟了,各种反转和伏笔都有,整个故事也非常完整。
除了有一些情节的不合理之处还需要进行调整,我认为这已经是一个非常好的开始了。这也给了我们很大的信心,觉得我们真的可以把这个游戏做出来。
在这整个故事中,总共有两个角色:琴和本葵。他们之间的相互对话和互动构成了整个故事的主线。
由于本葵其实就是主角(“我”),在游戏中并不需要直接出镜,所以我们只需要对“琴”进行人物形象的设计。
很巧的是,我们之前的高中同学“无水行舟”有学习过美术,所以我们直接找他来帮我们设计了这个角色。
虽然在游戏制作的后期,我们还是遇到了一点时间拖延上的问题,不过好在还是在游戏的发布日前顺利完成了。
在解恪布完成了游戏的 demo 版本后,我们也开始对剧本进行了一些优化。
要知道,整个游戏的剧情是整个游戏的核心,好的剧情可以让玩家更容易地沉浸在游戏中。
所以我们也因此对剧本进行了多次的修改和优化。
基本上每周解恪布都会给我发几个剧本的修改版本,我也会在每次收到后进行阅读和反馈。
当然很多的剧情修改和讨论都是在微信视频里进行的,这里只是截取了一些文字上的修改意见。
剧情真的是很重要的一个环节,有时候可能一个小小的修改就能让整个故事变得更完整,同样有时候一个小小的标点符号可能都会影响到整个对话的流畅度。
我们也是在制作的过程中才深刻地体会到了这一点。
既然剧本上已经完成得差不多了,那么接下来就到了游戏代码的编写。
由于解恪布在剧本的设计上涉及了“多线叙事”的设计,所以我在编写前先按照他的剧本内容绘制了一个“剧本流程图”,以便于我在编写代码的时候可以更清晰地了解整个故事的走向。
真的很感谢解恪布在整个游戏制作过程中对剧本的精心打磨和设计,如果不是他的剧本足够出色,我想我们也不会有这么大的动力去完成这个游戏。
剧情相关的文字部分代码是由解恪布在修改剧本时就已经加上的,所以我只需要负责游戏的逻辑部分。
包括:剧情分支的选择,游戏窗口的展示,整体软件的样式,剧情结局的判定等等……
以下是游戏的部分代码片段:
# game/script.rpy
# 第一次不回头
label noreturn:
"我没有回头,大步向厨房走去。"
stop music fadeout 7.0
scene black with dissolve
"我给自己倒了一杯热水,但回到房间时,水已经凉了。"
"我一口气喝完了凉水,钻回了被窝。"
"那天晚上很冷,被窝里越来越冷。"
"我彻夜难眠。"
$ show_quick_menu = False
pause 1.0
$ show_black_screen_tips()
show text _("{size=+50}被遗忘的初心{/size}") with Dissolve(1.0)
pause
$ hide_black_screen_tips()
hide text with dissolve
show text _("{size=+20}是否返回到上一个选项?{/size}") with dissolve:
xalign 0.5
ypos 500
play audio show
menu:
"返回":
play audio tone
jump back
"结束":
$ show_quick_menu = False
play audio tone
jump fakeover
hide text
因为是第一次写这种类型的代码,对代码格式、代码逻辑、代码注释等方面都不太熟悉,所以代码写得比较乱,还请见谅。
而且确实本身对 Ren’Py 以及其背后的 Python 语法也不是很熟悉,所以在编写代码的时候也遇到了一些问题。
因此我觉得在这里要特别感谢一下腾讯元宝(不是广告),很多时候我在编写代码时遇到问题,都是先自己查一下中文文档,如果还是解决不了的话,就会去问一下 AI。
虽然有时候 AI 的回答并不准确,但大部分时候还是能给我一些启发和思路。
在制作过程中,我们也参考了其他使用 Ren’Py 制作的视觉小说游戏的代码,学习他们的实现方式和技巧。
要说视觉小说游戏中最重要的元素之一,那一定是游戏中的文本。所以显而易见:游戏中对字体的选择也是非常重要的。
在这款游戏中,我们共选择了 4 款字体:
其中,小米的免费商用字体 MiSans 是我们游戏中所有游戏界面的字体,而朱雀仿宋是我们游戏中所有对话文本的字体。
这两个字体都各有优点:小米的 MiSans 字体简洁大方,适合用在游戏界面上;而朱雀仿宋则更有书法的韵味,适合用在对话文本中。
其他两款字体 Altinn-DIN 和 Torono Glitch Sans 则用在了一些对话选项和主页 Logo 上,用于突出特殊文本。
因为这是我们的第一款游戏,所以选择的这四款字体都是免费商用的,同时在游戏的关于界面也留下了字体许可证声明的页面,以表示对字体作者的尊重。
其实我在做这款游戏之前对这块版权相关的知识并不是很了解,所以在制作过程中也学习了很多相关知识。
关于翻译我真的很想好好说说,因为 Ren’Py 引擎有着“开箱即用”的多语言翻译支持,所以我本以为这应该是比较简单的一个环节。
但现实告诉我们,这实际上是整个游戏制作过程中最耗时的一个环节。
由于我们打算把它发布到 itch.io 平台上,所以最初我们的计划是将游戏文本翻译为:英语、日语和繁体中文。
先通过 Ren’Py 导出所有文本文件,然后定好要翻译成的目标语言,然后……
问题来了:怎么翻译呢?
聪明的我们马上想到,可以用 AI 进行翻译!
于是我就迅速写了一个脚本,从 Ren’Py 导出的文本文件中读取文本,然后选择 DeepSeek 进行翻译。(感谢 DeepSeek 救了我们一命)
// tranlator/index.js;
async function translateString(str) {
// 使用 DeepSeek API 翻译
const completion = await openai.chat.completions.create({
messages: [
{
role: "system",
content: `你是一个专业的游戏内容翻译助手,请讲以下文字翻译成英语(只翻译文本内容,含有{}等特殊字符中的内容请原样输出,保留原文中的{w}、{p}、{nw}、{#auto_page}、{#quick_page}、{#file_time}%Y-%m-%d %H:%M、{b}等符号,“本葵”是人名只翻译为“Koi”,“琴”是人名只翻译为“Jyn”),直接输出“【】”符号中翻译后的句子:【${str}】`,
},
],
model: "deepseek-chat",
});
return String(completion.choices[0].message.content)
.replaceAll(/【|】/g, "") // 替换掉 AI “不小心” 输出的【】和 [] 符号
.replaceAll(/\[|\]/g, "")
.trim();
}
// 提取 Ren'Py 导出的文本文件中的文本的代码省略
然后问题就来了:翻译出来的文本有很多问题。
因为 AI 翻译时没有剧情上下文,如果不把整个文本文件传给 AI 的话,AI 很可能因为缺乏上下文而翻译错误。
但如果一次性把整个文本文件传给 AI,AI 又会因为文本过长而无法处理。
而且有时翻译后的文字可能在中文段落长度合适,但翻译成英文后就会变得很长,导致游戏中显示不全。更别提一些“谐音梗”可能根本无法翻译。
所以我们最终决定:先用 AI 大概翻译一遍,然后人工进行校对和修改。(哭)
上下滑动图片查看更多
接下来就是漫长的校对过程。从 4 月 2 日开始研究翻译,直到 4 月 27 日上线前我们还在修改翻译文本。
不过好在最终上线前我们还是完成了所有文本的翻译。
游戏配乐是游戏氛围的重要组成部分,好的配乐能让玩家更容易沉浸在游戏中。
在配乐方面,我们选择了甘茶の音楽工房(Music Atelier Amacha)的音乐作为游戏背景音乐。
同时使用了 Sound Effect Lab 的音效作为游戏音效,为游戏增添细节。
当然,我们也在游戏关于界面中注明了这些音乐和音效的来源,以表示对作者的尊重。
我们的好朋友“萧空坎”也为游戏创作了一首原创歌曲《Night Walk In The Wind》,作为游戏主题曲。
独立视觉小说《一个温暖的故事》主题曲原声 Night Walk In The Wind
2025 年 4 月 28 日,我们的第一款游戏顺利发布了。
当天,解恪布就在微信朋友圈发布了游戏宣传图,并附上了游戏介绍,收到了很多朋友的支持和鼓励。
上下滑动图片查看更多
我们也在 itch.io 和 HumiHumi 上同步进行了发布。
我们还用这款游戏参加了 HumiHumi 举办的“第二届 HumiHumi 视觉小说大赛”,并获得了铜奖。
不管结果如何,我们的第一款游戏最终成功发布了!
这次游戏制作经历让我和解恪布都收获颇丰。虽然过程有些艰辛,但最终结果让我们非常满意。
对我而言,作为非游戏专业的学生,我们能够成功完成一款游戏,真的非常开心。
也许就像解恪布在微信朋友圈中说的那样:
我们对游戏的热爱和对故事的执着,会让我们继续朝着这个方向前进,让我们一起期待下一款游戏的到来吧!
- 本文完 -
欢迎前往 微信公众号 参与讨论
一个普普通通的艺术生
🙋♂️ 是大学生
📍 来自福建厦门
💻 懂一点技术
© 2025 XHEMJ Designed by Xhemj & JieKebu