Skip to content

Latest commit

 

History

History
59 lines (52 loc) · 4.33 KB

readme.md

File metadata and controls

59 lines (52 loc) · 4.33 KB

mika 游戏及游戏库

这里是名为mika的游戏及游戏库,游戏使用python语言编写,目前还没有开始开发本体。

游戏库实现了类curses的字符界面显示,后端采用python写成,使用Pyodide运行在浏览器中。

游戏库提供了一种类tex语法的标记语言,可以方便地描述字符风格、动画、位置等内容。

\tick[:0.1]Behold\delay[:0.5], here I am!\delay[:1.0]
The {\s[bg=gray]Most {\s[fg=gold]\tick[:0.4]ALMIGHTY} and {\s[fg=red]\tick[:0.4]POWERFUL}}
{\s[bg=red]Dragon} in this Kingdom!

使用该游戏库,可以使用程序化、模块化的思想,实现一个文字冒险游戏。目前可以实现文字冒险游戏的常见功能,如地图(不能实现rpg游戏的图形化地图)、人物、对话分支、对话次数决定内容、条件

TODO

  • 全局宏
    • 将人物的宏加上命名空间,人物自己读取宏的时候,可以省略掉命名空间。这样就可以读取其他人物设置的宏了
  • 调用外部函数
    • 人物和地图都可以加调用外部函数的宏,由各自的dialogue类管理。外部函数可以有参数
  • 自定义字符类型
    • 自定义字符弄一个命令,命令参数包括自定义字符类型和参数,具体渲染成什么,由渲染器来实现
  • 半角字符
    • 一个格子中可以放2个半角字符,采用自定义字符来实现。再实现自动转换成半角字符的命令
  • (已更改实现方式)人物头像及表情
    • 加入一个特定的绝对坐标引用,表示放头像的地方,然后头像直接使用行内的重定位显示,就不需要写单独的功能了。
  • 区域性dialogue
    • 将屏幕分为若干个区域,每个sentence指定要输出到的区域
    • 使用模块化的yaml存储对话,编译到styleml,对话内容仍然使用styleml书写
      • 使用模块的方式组织文件,每个文件包含一个yaml dict,其中的每一项表示一个「段落」,段落是若干个sentence的列表,第i个句子会获得(模块名).(段落名).(序号)的全局名称(label)
      • 句子可以是一个字符串,此时它会将属性都设为默认。还可以是一个dict,这时就会根据dict中的信息自定义。dict需要一个template属性,是所有要应用的模板,如果没有的话,默认是空列表。模板是程序预设好的,可供快速生成固定的对话形式,如选择、跳转目的标签、对话次数。
    • 使用template的方式实现地图(场景)
    • 在一个sentence里面同步/异步地call另外一个sentence
      • 前端实现
      • 容许多个sentence动画同时进行
      • 中断操作会尝试中断所有正在进行动画的sentence,如果存在不能中断的sentence,会跳过这些sentence
      • 只有在所有sentence动画都被中断后,才能继续下一个sentence
    • 接续call sentence
      • call sentence时,直到return为止
  • 书写系统的互相引用
    • 每一种书写系统(glyphset)(至少包括组字的)实现一个渲染到格子的方式(包括默认的)。\g命令的参数先使用styleml parser解析一遍,再使用书写系统渲染器来渲染。
    • 这样就可以实现单独着色组合字的不同部件了
  • 修改器命令
    • 类似\s的命令,使用程序来修改styleml中的字符串,例如可以用来做「拼音自动转为注音符号组合」的功能。
  • 宏计算命令
    • 对于每个数据类型,开放一定的操作符以供styleml使用,这样就可以用宏实现计数器、物品背包和金钱(背包和金钱不在计划内)。
  • 模块引用的向上查找功能
    • 实现一个模块相对路径引用的语法,使得它可以在绝对路径中向上寻找最近匹配的一级名字。这样就可以方便地引用比较远的兄弟节点。
    • 考虑使用"<>"符号
  • glyphwiki书写系统(glyphset)
    • 使用svg引用glyphwiki上的字
  • 热点
    • 用来代替对话的choice选项
    • 文字点击时(或使用键盘定位到时)跳转到特定场景
    • 默认按源代码中的顺序排列,还可以指定像tabindex一样的东西按指定顺序排列,还可以考虑实现一个分组属性,进行二维选定。
  • 结构化yaml对话
    • 可递归地解析yaml对话中每个段落的内容,这样来实现自动生成选择结构等结构。