2 个版本

0.0.2 2024 年 6 月 2 日
0.0.1 2024 年 5 月 30 日

#741开发工具

MIT 许可协议

13KB
162

Sol

用于自定义内容的编程语言。

[!警告]

Sol 处于早期开发阶段,目前不应用于实际项目。不过,欢迎加入讨论,并帮助我确定其未来 :-)

Sol 将现代编程语言设计应用于重新发明创建和维护游戏资产的方式。它的语法既 优美高效,并且类型安全。它从 LUA、Rust 和 GDScript 中汲取灵感,在美学和组织上创造出卓越的开发体验。

Sol 也是免费、开源、与引擎无关的,并且不由公司拥有。在你创作了一个资产后,你真正 拥有 它,并且可以轻松将其移植到其他引擎。

每个 .sol 文件都是一个 "资产",例如,一个物品...

-- weapons/iron_sword.sol

using game.models.*
using game.sprites.icons

impl ItemKind
  label = "Iron Sword"
  durability = 4
  icon = icons.iron_sword

  action on_use(target: Character)
    target.try_equip_weapon(weapon: self)
  end
end

...或者一个场景...

using game.chars.Jude

--todo Add portraits to those dialogues;
def "Main Scene"
  [Echo]
  - Jude, could you please move a little?

  [Jude]
  - nah

  [Echo]
  - I'll hit you in the head with a pan.

  [Jude]
  - *moves*

  move(who: Jude, by: vec2(1, 0))
end

...甚至是一个关卡。

...impl Room

def player_spawn : Marker
  position = vec2(-10, -3)
  facing = DOWN
end

def chest1 : Chest
  position = vec2(0, 0)
end

任何属于你游戏 "内容" 而不是你必须针对引擎编码的核心机制,都可以放入 .sol 文件中 :-)

Sol 的脚本功能看起来简单(得益于类似 LUA 的语法),但实际上远非最小化。Sol 确实 是一种编程语言,并且由于它的虚拟机是用 Rust 编写的,因此运行速度快。

特性

  • 纯文本:可以轻松地纳入版本控制;
  • 与引擎无关:你的资产将不是 'Godot' 资产或 'Unity' 资产,而是 你的 资产,无论你将它们带到哪里;
  • 极快的迭代周期;
  • 简单但强大的对话框,语法简单,你可能甚至会用它来绘制草图;
[Jude smiling]
- Hello, there!
- I found one item here and I want to give it to you, {player.name}!
  • 彻底的类型安全,遵循 "让无效状态不可表示" 的口号,以消除在游戏开发中常见的整个类别的错误;
model Item
  field name : text
  field unbreakable : truth
  field icon : Image
  if not unbreakable then
    field durability : nat
  end
end
  • 使用 sol add <dependency_uri> 进行依赖管理,以快速将资产包或框架安装到你的项目中;
  • 通过使用 extensions 与外部资源(.png、.gltf、.aseprite)进行互操作;
  • 与引擎集成的可能性;
  • 重构工具,如 LSP 和 sol migrate

安装

您可以从源码编译作为Rust项目,或者通过crates.io使用cargo进行安装。

cargo install sol-lang

将来,我想为几个引擎提供集成插件。在这些情况下,插件将负责构建 sol

Sol LSP正在开发中,以及Zed扩展。

贡献

暂未提供。


[1] - "使无效状态无法表示."

依赖关系

~10–23MB
~296K SLoC