YAML-based fantasy console for the terminal
npm install hasciiYAML ベースのファンタジーコンソール。ターミナルで動作する。
``bash`
bun add -g hascii
`bashTUI コンソールを起動
hascii
Controls
| Key | Action |
|-----|--------|
| Arrow keys / WASD | Move |
| Z / J | Action A (confirm) |
| X / K | Action B (cancel) |
| ESC | Exit / Back |
Specs
| Item | Value |
|------|-------|
| Screen | 80x22 |
| Colors | 16 (0-15) |
| SFX | 16 slots |
| Patterns | 8 slots |
| Channels | 4ch |
| Waveforms | TRI, SAW, SQR, PLS, ORG, NOI, PHA, SIN |
| Octave | 2-5 |
| Volume | 0-7 |
Language
Hascii は YAML で記述する宣言的なゲーム言語。Elm アーキテクチャ (init/update/draw) に基づいている。
`yaml
yaml-language-server: $schema=hascii/hascii.schema.json
meta:
title: "GAME"
frame: 10
bg: 0
init:
x: 40
y: 10
score: 0
update:
- if: btn.left
set: { x: { sub: [x, 1] } }
- if: btn.right
set: { x: { add: [x, 1] } }
draw:
- cls:
- fill: 10
- rect: [x, y, 2, 1]
- stroke: 7
- print: [score, 0, 0]
`$3
ゲームのメタデータを定義する。
| Key | Description |
|-----|-------------|
|
title | ゲームタイトル |
| frame | フレームレート (1-60) |
| bg | 背景色 (0-15) |$3
ゲーム開始時の初期状態を定義する。ここで定義した変数は update と draw から参照できる。
`yaml
init:
x: 40
y: 10
items: [1, 2, 3]
player: { hp: 100, mp: 50 }
`$3
毎フレーム実行されるロジックを定義する。状態を変更するには
set を使う。`yaml
update:
# 変数を設定
- set: { x: 10, y: 20 } # 条件付き (短縮形)
- if: condition
set: { x: 0 }
# 条件付き (then/else)
- if: condition
then:
- set: { x: 1 }
else:
- set: { x: 0 }
# ループ
- each: items
as: item
index: i
do:
- set: { score: { add: [score, item] } }
# 配列操作
- push: { to: arr, item: value }
- filter:
list: arr
as: item
cond: { gt: [item, 0] }
`$3
毎フレームの描画処理を定義する。
`yaml
draw:
- cls: # 画面クリア
- fill: 10 # 塗りつぶし色 (0-15)
- stroke: 7 # 線の色 (0-15)
- noFill: # 塗りつぶし無効
- noStroke: # 線無効
- rect: [x, y, w, h] # 矩形
- circ: [x, y, r] # 円
- print: [text, x, y] # テキスト
`$3
式は
{ operator: [args] } の形式で記述する。| Expression | Description |
|------------|-------------|
|
{ add: [a, b] } | 加算 |
| { sub: [a, b] } | 減算 |
| { mul: [a, b] } | 乗算 |
| { div: [a, b] } | 除算 |
| { mod: [a, b] } | 剰余 |
| { min: [a, b] } | 最小値 |
| { max: [a, b] } | 最大値 |
| { rnd: [min, max] } | 乱数 (整数) |
| { abs: n } | 絶対値 |
| { floor: n } | 切り捨て |
| { eq: [a, b] } | 等価 (0 or 1) |
| { lt: [a, b] } | 小なり |
| { gt: [a, b] } | 大なり |
| { and: [a, b, ...] } | 論理 AND |
| { or: [a, b, ...] } | 論理 OR |
| { not: a } | 論理 NOT |
| { at: [arr, i] } | 配列アクセス |
| { len: arr } | 配列の長さ |$3
入力状態は組み込み変数で参照する。
| Variable | Description |
|----------|-------------|
|
btn.left | 左キー押下中 |
| btn.right | 右キー押下中 |
| btn.up | 上キー押下中 |
| btn.down | 下キー押下中 |
| btn.a | Z キー押下中 |
| btn.b | X キー押下中 |
| btnPressed.left | 左キー押した瞬間 |
| btnPressed.right | 右キー押した瞬間 |
| btnPressed.up | 上キー押した瞬間 |
| btnPressed.down | 下キー押した瞬間 |
| btnPressed.a | Z キー押した瞬間 |
| btnPressed.b` | X キー押した瞬間 |TUI コンソールにはエディタが内蔵されている。
| Tab | Description |
|-----|-------------|
| CODE | YAML ソース編集 |
| SPRITE | (未実装) |
| MAP | (未実装) |
| SFX | 効果音エディタ |
| TRACKER | 4ch 音楽トラッカー |
| PLAY | ゲームプレビュー |
| DATA | セーブデータ |
| QUIT | エディタ終了 |
MIT