1个不稳定版本

0.0.1 2024年5月30日

#161 in #tree-sitter


用于 sol-lang

MIT 许可证

640KB
20K SLoC

C 20K SLoC JavaScript 224 SLoC Rust 29 SLoC // 0.3% comments

Sol ☀️

[!WARNING] Sol 目前处于早期开发阶段,尚不可用。

Sol是一种用于应用程序和资源的数据/标记/脚本语言。作为基于文本的语言,您可以将 .sol 检入版本控制,而后端无关性意味着您可以在不同的引擎和实现之间迁移资源。Sol 本身具有高度的移植性 -- 它是用 Rust 编写的,只需要为您定义的外部符号提供实现。

特性

Sol包含许多语言特性,从合约定义到完整的编程。

模型

您可以定义类型安全的模型...

model Item
  field name                : text
  field usage_count         : text
  field consume_when_used   : truth
  field on_use              : Action
end

...并在另一个文件中实现它们。

impl Item

name = "Hamburger"
usage_count = 1
consume_when_used = yes

action on_use
  * You eat the {name}.
  * It tastes like cardboard.
  player.stats.heal(HP, 10)
  * Restored 10HP!
end

对话框

值得注意的是,Sol内置了对对话框的支持,这使得它可以创建一个 美丽的 过场场景格式,看起来像是一部剧本。

use game::chapter_1::RETURNED_TO_SCHOOL

scene "School Entrance"
  with player do
    .move(10, 20)
    .look_at(Alexander)
  end

  [Alexander smiling]
  - Welcome back, dude? How have you been?
  wait(2.0 seconds)
  [& guilty]
  - Not much for talking, huh...
  - Um... by the way... eh...
  - Sorry for back there... when I... um... abandoned you...
  [& smiling]
  - No hard feelings, right?

  [Player]
  - *sigh*...

  set RETURNED_TO_SCHOOL
end

事实

Sol允许定义类型化的 代数 事实,有助于确保您的游戏处于有效状态。

let chapter1 : some {
  SCHOOL_BEGGINING,
  DUNGEON_1 : some {
    PART_1,
    PART_2,
    PART_3 : all {
      BOSS_STATUS: either {
        BEFORE_BOSS,
        AFTER_BOSS : all {
          death_count : i32,
          used_violence : truth,
        }
      },
      SECRET_PUZZLE_STATUS: {
        UNDISCOVERED,
        UNFINISHED,
        COMPLETED_N_TIMES : i32
      },
    },
  },
  RETURNED_TO_SCHOOL,
}

事实是一个模型,而存档文件是事实模型的实现。通过使用 Sol,保存和加载变得轻松快捷。

安装

暂不可用。

贡献

暂不可用。

依赖项

~2.7–4MB
~71K SLoC