设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索

(应该算完结?)基于inky的非线性剧情处理简易教程

查看数: 4708 | 评论数: 12 | 收藏 5
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2022-3-9 22:41

正文摘要:

本帖最后由 清和QingHe 于 2022-4-10 15:26 编辑 由于太懒了这个主题立项到现在都没有开始正式的写文章,所以不如先开题然后后续不断补充好啦 大概会一段一段的更新,时间不定,应该……会更完吧( 总之,这是写 ...

回复

kirh_036 发表于 2022-9-27 09:09:16
这玩意儿和 QQ Bot 是绝配,加点投票系统之类的功能扔群里,会很有戏剧效果的。
breaakerq 发表于 2022-3-22 02:10:19
清和QingHe 发表于 2022-3-21 23:49
好问题。
在我目前理解的范围之内,单纯的使用inky导出的web互动小说应该是没有办法读档的(至少在我阅读 ...

这里面还有个问题就是,假如产生的html5文件必须依赖于Chrome一类的外部浏览器打开,那么这些浏览器是不允许html5中嵌入的js脚本直接写入本地文件的,只能是点存档键然后下载到本地(?)玩家体验应该不会很好(
所以我还是觉得inky应当使用Electron一类自带渲染引擎的东西开发会比较好。
算了算了还是老老实实玩renpy去了(不是

点评

@guoxiaomi不过我想了下好像确实可以把存档写进local storage没错。  发表于 2022-3-22 08:23
@guoxiaomi 如果我没搞错,mv用的Qt WebEngine,属于自带内核了。如果是导出网页版的话,好像得部署本地服务器或者绕过第三方浏览器的安全机制才能运行  发表于 2022-3-22 08:16
mv就是h5+js没有问题,写入到local storage里就行  发表于 2022-3-22 05:06
清和QingHe 发表于 2022-3-21 23:49:08
本帖最后由 清和QingHe 于 2022-3-21 23:50 编辑
breaakerq 发表于 2022-3-20 10:34
我其实老早就听说inky了,其实蛮有意思的,比较适合做做rougelike啥的。
但我就有一点很疑惑:
inky做的游 ...


好问题。
在我目前理解的范围之内,单纯的使用inky导出的web互动小说应该是没有办法读档的(至少在我阅读的文档中没有相关的标记词和函数能实现,如果有的话欢迎分享~)。所以读档需要外部代码添加来实现。
其次,由于ink本身存在“事件触发”,即“条件内容”操作(这一部分由于没有现有的例子,所以我仅仅是在九楼结尾提了一嘴,并没有展开细说)。所以理论上存档与读档实际上就是存储/读取“节点”实现的。所以在代码实现部分只需要保存节点就可以了。
当然,如果是要做AVG游戏的话,相关引擎也是有许多并且都有完整的故事树系统的,就没有必要一直去纠结inky原生存档读档的问题啦~
breaakerq 发表于 2022-3-20 10:34:23
我其实老早就听说inky了,其实蛮有意思的,比较适合做做rougelike啥的。
但我就有一点很疑惑:
inky做的游戏咋存读档?
(就因为搞不明白这个,至今没法用inky做游戏)
清和QingHe 发表于 2022-3-20 02:34:34
5. 选项与条件点,开启分与隐藏支剧情!

如果你看过上文,你应该已经学会如何按照线性故事框架进行写作了。华丽的故事不能失去多结局,就像西方不能失去耶路撒冷(大雾)。所以,如果想要出现多结局,就必然会在节点进行选择处做出分支选项,从而走向不同的分线。选项本身还分为两种,普通选项和一次性选项。
普通选项是需要和跳转结合在一起,构成分支跳转操作的。选项的结构为“+”和选项文本组合。但是一般选项文本后都会加上跳转从而组成完整的分支选择块。通常情况下,输入的选项文本都会作为后面文本的一部分出现在全文中。如果你想要一个不会出现文本的选项,那么可以将选项文本置于[方括号]中。这种形式一般用于表示动作或者一些无声的行为之中。在一些文本叙事中,无声行为或许比语言更具有表现力,
INK 代码复制
  1. 一念,前脚突然踏空。原本无垠的草地不见了,身体突然下坠,转眼周围便由碧青转为墨黑色。风如寒锋般划的脸颊刺痛,睁开双眼甚至都变得困难起来。
  2. 开……开玩笑的吧,日本轻小说都不敢这么写。
  3. 是梦吧,一定是梦吧。
  4. + [平静的审视四周]
  5. ->chapter2
  6. + [挣扎着试图醒来]
  7. -> end1


一次性选项构成很简单,如果你期望玩家对某一个选项只能点击一次,那么最简单的方式就是把选项的 + 改成 *。“一次性选项”大多数使用情况下是伪多选一情况,本质上还是限定玩家只能选择一个或者说出现许多无用选项。感觉说起来比较抽象,可以将下面的例子复制到inky中亲自查看一下效果。通过一次性选项,制造了“梅琳娜”和“暗月女王”两个伪选项,实际上只有“菈妮”为可选项。(个人主观,方便举例而已。拒绝带入。)
INK 代码复制
  1. 所以,你的选择是:
  2. -> example
  3. == example ==
  4. * [菈妮] ->happyending
  5. * [梅琳娜] ->example
  6. * [暗月女王] ->example
  7.  
  8. == happyending ==
  9. “来,走吧。我亲爱的王啊。”
  10.     -> END


相信有部分玩家玩的游戏存在多周目或者要求达成某些条件后才能够解锁部分剧情。在ink中同样可以体现,你需要的可能是“条件内容”操作。相关操作在“用 Inky 编写基于 Web 的互动小说”一文中有详细的例子,此处就不展开讲述了。条件内容主要用于当当前的剧情满足某些特定条件后,进而开启结局。如果可以用“选择”完成的条件满足,尽量不要使用“条件内容”。
(写到这里差不多基础教程就结束了,以后看情况补充好了。不说了,摸老头环去了.jpg)
清和QingHe 发表于 2022-3-14 08:53:17

->ink简易教程

1.下载安装,初识界面!
写ink脚本,我们常常用编辑工具inky。开发者使它可以进行多端支持(Windows\Mac\Linux),你可以通过下面的链接进行下载和安装!
官方下载地址:https://github.com/inkle/inky/releases
如果你习惯使用vscode进行编辑的话,可以在vscode的拓展中找到ink插件使其支持ink语法!

好的,相信你一定下载并安装好了这个小小的软件。它的界面为全英文的并且不支持语言切换(该学英文了兄弟)。分界线将整个界面分为两部分——左边编辑,右边便可以实时加载更新结果。这对我们的编辑是很有用的,所见即所得。右上角的单箭头是后退,双箭头是重置预览的故事;inky编写的文件后缀为.ink,为我们提供了web、json、js文件三种导出形式(你可以从file中找到他们);如果感觉到字号有些小,可以通过同时按下Ctrl和+调整字号(你可以从view中找到他们);同时inky也支持修改主题——我想不会有人在深夜里还想盯着刺眼的白屏写作。通过View->Theme->Dark将界面调整为炫酷的黑色从而在夜里护眼式写作!

2.举个例子!
我将随手写的一个相对完整的小随笔放在了附件里,你可以进行下载查看。当然,如果你不愿意下载的话,ye可以将下面这段直接复制到编辑器的左边并仔细观察右边的变化:

INK 代码复制
  1. /*
  2. “白塔”这个意象实际上是作为写教程构思故事的时候突然蹦出来的字眼。既然作为教程,注定了这个故事的不完整性。但是我还是会尽量的将故事讲完整或者通过片段向你演示ink的用法。
  3. */
  4. ->preface
  5. //需要指向节点开启故事,我个人习惯开头为序章,你不妨将起始节点写为“start”
  6. == preface ==
  7. //节点为英文通过==包裹
  8.  

  9. “碧青的天空,若隐若现的白塔,无尽的街道。于无垠的草地上醒来,破碎的约定与回忆。颠倒而又虚幻的存在着的、关于我的另一个世界。”
  10. ->chapter1
  11.  
  12. == chapter1 ==
  13. 我这是……在哪里?
  14. 从浅草中起身。周围的环境是如此的陌生。远处的白塔若隐若现,古旧的塔身透漏着神秘的吸引力。
  15. “白……白……”
  16. 谁在呼唤我的名字?
  17.  
  18. 一念,前脚突然踏空。原本无垠的草地不见了,身体突然下坠,转眼周围便由碧青转为墨黑色。风如寒锋般划的脸颊刺痛,睁开双眼甚至都变得困难起来。
  19. 开……开玩笑的吧,日本轻小说都不敢这么写。
  20. 是梦吧,一定是梦吧。
  21. + [平静的审视四周]
  22. ->chapter2
  23. + [挣扎着试图醒来]
  24. -> end1
  25.  
  26. == chapter2 ==
  27.  
  28. ->END
  29.  
  30. == end1 ==
  31. “呼……——呼!”
  32. 深渊般的下坠感使白突然惊醒。一缕清阳轻轻打在她惺忪的睡脸上。紧紧攥住松软的被窝,令人安心的真实感。趴在床头的橘猫看见主人醒了,撒娇的喵喵叫着。一切与从前一样。
  33. 啪嗒。
  34. 手腕上月光石手链的红绳突然断裂,月光石摔落在地板上,发出闷重声响。
  35. TODO:手链->约定之物;月光石->幽静、柔和、预知;红线->命运之线;写作时记得体现。
  36. “似乎……做了一个很真实的梦,可是……到底梦到了什么呢……”
  37. ->END
  38. //指向end,表示“故事流从此处停止”


如果你没有接触过相关,可能会对非文字符号感到眼花缭乱和退缩,不要害怕,接下来我会依次讲解文中出现的符号。

白塔.zip

1.38 KB, 下载次数: 8

清和QingHe 发表于 2022-3-11 18:14:12
本帖最后由 清和QingHe 于 2022-3-11 18:19 编辑

->inky适合的范围:


inky本身并非作为互动小说编辑器出身的,而是作为Unity的一个集成插件,后渐渐独立出来。相比于同类型的互动小说编辑来说,inky没有具象化的流程块(或者说是结构框架),一切是以文字与节点的形式展现出来的。当故事相对比较简单时,我们可以尝试用Twine类的图形化工具进行展示;但如果故事变得错综复杂,我们很难从一堆关系线中理清故事脉络,同时对故事的增添或者删改也成为一个问题。inky将故事模块节点化后,我们可以很容易的添加或者删除一个选项,一个剧情走向,或者一段小故事。ink作为一种标记性语言,相比于编程语言学习门槛极低,同时可用性又相对较高。所以对于使用Unity的游戏开发者来说,是一件不错的选择。
虽然感觉说了不是一遍了,这里再次重复,如果你想要流程图具象化的,twine完全能够胜任。目前的ink不支持显示流程图,因为其本身理念就是因为故事过于复杂,为了灵活处理故事逻辑解决流程图解决不了的问题。

呼,终于把该讲的废话都讲完了,之后就要开始讲ink的基本教程了233(我是绝对不会承认是因为最近打游戏和编剧情样本浪费调时间了的)
假定看到这篇教程的你没有任何编程经验,但是对电脑基础知识稍有了解(既然做游戏了多少得懂点文件下载删除安装叭)。放轻松,我会按照步骤一步步的教学如何写出简单的叙事框架,尽可能的充实基本内容。如果需要进阶的知识,欢迎随时访问官方文档或者中文文档。
拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-5-13 14:05

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表