视觉小说完结撒花!!!

发布于 2023-11-19  569 次阅读


暑假期间很无聊,尝试了一下galgame(非限制级),觉得挺有意思的,正好要给朋友准备生日礼物,于是决定开始自己着手制作一部送给他,顺便参加一下gamejam大赛ヾ(•ω•`)o......
  1. 游戏简介
  2. 本实现逻辑
  3. 游戏下载
  4. 特别鸣谢

游戏简介

tips:阅读前请先去了解何为galgame,不然可能会产生一些误解

故事发生在新纪元的魔法世界,继承大光明神之力的主角组建自己的队伍对抗黑魔法师集团--影界,而这其中又有魔法协会的暗箱操控,主角在经历九死一生的战斗后击败了影界首领,而等待他的却是魔法协会的逮捕令......

基础实现逻辑

众所周知(可能吧ψ(._. )>)视觉小说有四要素,即剧本,演出,音乐和UI。

首先来说说剧本

说是剧本,实际上也只是保存在本地的一个txt文件罢了。相信玩过gal的都明白,剧情的展示是一句一句的(后面我简称为幕),这也决定了剧本要能够区分每一幕以及当前幕的辅助信息(比如该到A说话时的背景音乐等)。

为了实现这个功能,我选择了最笨的办法,也就是将每一句话开头或结尾加上特征符号意味着一句话的开始或结束,再加上不同的符号表示着该句话的发出者(说话的那个人)。举个栗子,A说出了B,那么剧本可以写成A:B*,其中:将说话人和内容隔开,*代表这一幕的结束。

然而光改剧本是没用的,我们还需要在代码中进行关键字匹配,也就是正则表达式了(不知道的自己搜搜,这里不展开)。通过正则表达式在程序中将每一幕分开,并用列表存起来,方便跳转。

做完上面的工作,我们已经完成了基础。

然而一个合格的galgame是令人回味无穷的,这归功于跌宕起伏的情节,而想要情节复杂就免不了要有了分支,顾名思义,从主线剧情分出去的分剧情,通常导向各个不同的游戏结局.....而我实现这个功能的方式依旧是添加关键词(因为没想到更好的办法)具体操作为记录当前第几幕,之后利用跳转功能暂时跳转到别的幕中,碰到特定关键词就返回......

接下来是演出

作为四要素里最重要的一环,Galgame的演出是指通过对图像(如人物立绘、背景图片)、声音(如BGM、音效)等素材的组合、变换达成一种叙事的视听效果。拿大家比较熟悉的电影来举例,Galgame里的演出可以类比于电影的表演、摄像、灯光、剪辑、音响等的总和,可以说它负责Galgame里所有关于视听语言的一切。。

Gal的主体画面分为三部分,分别是人物、背景、文本框(我会在UI部分讲到)。

人物的位置基本会划分为左、中、右三个固定位置,游戏的角色立绘会固定的出现在这三个地方。如果一场戏对话人数超过三个,则一般会是根据人物的讲话情况,几个人物立绘交替出现在画面上。

背景放在人物立绘后面一般作为故事发生的场景。也会有只有背景没有人物的时候,作用类似于电影中的“空镜头”。一是为了介绍故事发生空间,二是作为一种节奏的过渡,相当于叙事中的逗号句号。不过有时候这种Galgame“空镜头”的出现则是由于成本原因,没有绘制当前场景所需的人物,于是就干脆就不放了。

接下来是音乐

音乐分为音效和背景音乐。

由于经济原因(实际上是0成本),所有音频文件都是网上找的(主要是爱给网)。背景音乐是根据剧情进展不同来随时调整的。

最后是UI

ui图片来源依旧是从爱给网上找的,传统的galgame是将按钮隐藏在菜单当中,但我选择将所有按钮暴露出来,堆叠在屏幕的左上角,虽然会有些遮挡视线,但这样比较简单明了。

至于文本框我则是直接选择黑色半透明矩形,感觉还挺不错的......

游戏下载

点我点我

特别鸣谢

感谢pygame群友以及同学hrq的出谋划策,让我在独游开发中得到支持.....


一名来自天津的高三学生,喜欢做游戏和写算法题,qq1358275285