Repository navigation
Releases: mizuki-yura/minato
Release list
湊 (Minato) v0.1.6
追加
ダブルクリックで使えるGUI版の構文チェッカー minato_check_gui.exe を追加しました(minato-checker-gui)
ゴーストのフォルダか .mnt ファイルを窓にドロップするか、ボタンから選ぶと、CLIの minato_check と同じチェックを行い、エラー・警告・お知らせを色分けして一覧表示します。exeのアイコンにフォルダをドロップして起動することもできます。前回選んだフォルダを覚えていて、次に選択画面を開くときはそこから始まります。
全角と半角を変換する組み込み関数 to_hankaku・to_zenkaku を追加しました。
英数字・記号・スペース・カタカナが対象で、半角カナの濁点・半濁点は合成・分解します(to_zenkaku("ガギ") → "ガギ")。漢字やひらがなはそのまま残ります。
数学の組み込み関数 pow・sign・exp・ln・log10・sum を追加しました。
ln と log10 は0以下を渡すと null を返します。自然対数は ln で、log は今までどおりデバッグ出力用の関数です。
rand(lo, hi) で、lo 以上 hi 以下の整数を出せるようにしました。
(両端を含みます。lo > hi なら入れ替えます)。
引数なしの rand() は変わりません。
min(arr)・max(arr) で、配列の中の最小・最大を返せるようにしました。
(空配列は null)。2引数の min(a, b)・max(a, b) は変わりません。
変更
読み込みから静的解析までのチェック処理を、ライブラリの minato::checker にまとめました。
minato_check の出力と終了コードは変わりません。
湊 (Minato) v0.1.5
追加
値の型を調べる組み込み関数 is_num・is_str・is_bool・is_array・is_map・type_of を追加しました。JSONから読み込んだ値が数値か文字列かなどを確かめられます。is_num("42") のように数字が並んだ文字列は、文字列として判定します。
変更
JSONを読み込むサンプル examples/json_dict と examples/dungeon_rpg で、読み込んだ値を型判定で確かめるようにしました。JSONの中身がマップでなければ読み込み失敗として扱い、配列でない分類やマップでない行は読み飛ばします。ダンジョンRPGでは、"値段": "10" のように文字列で書いた数値も数値に直して使います。
修正
直前にセリフがない \q[...] などの行を続けて書くと、改行されずに選択肢がくっついていたのを直しました。セリフの直後の行と同じく、行と行の間に \n が入り、見た目どおりに並びます。
互換性の注意:こうした行の末尾に \n を自分で書いている場合は、改行が2つになります。末尾の \n を消してください。
湊 (Minato) v0.1.4
湊 0.1.4
foreach の中で作る選択肢に ${...} が使えるようになり、セリフに $ をそのまま書けるようになりました。あわせて、ダンジョンRPGのサンプルを追加し、ファイル操作とJSONのドキュメントを整理しています。
新機能
サンプル:ダンジョンRPG
examples/dungeon_rpg に、探索・戦闘・店・持ち物を選択肢で遊べるダンジョンRPGのサンプルを追加しました。
- アイテム表(
items.json)とモンスター表(monsters.json)をJSONで読み込みます。表に行を足すと、台本を直さなくても店やモンスターに反映されます。 - HP・所持金・持ち物・装備は
saveに置くので、ゴーストを閉じても続きから遊べます。
バグ修正
foreach の中の選択肢で ${...} が展開されなかった
foreach の直下など、すぐ上がセリフでない \q[...] の行で、${...} がそのまま表示されていました。
OnShop => {
湊: いらっしゃい。
foreach items as name, item {
\q[${name}(${item.値段}G),OnBuy,${name}]
}
}
\ で始まる行では、どこに書いても ${...} が展開されるようになりました。
改善
$ をそのまま書けるようになった
{ が続かない $ を、ただの文字として書けるようになりました。
湊: 10$だね。
- これまでの
${'$'}という書き方も、そのまま使えます。 ${は今までどおり展開の始まりです。文字として出したいときは${'${'}と書きます。
ドキュメント
- 「ファイルとJSON」の章を追加しました。書き込める場所や、コピー・削除ができないことなど「できること・できないこと」を最初にまとめています。
- 「よくあるミス」に、ファイルやJSONが読み込めないときの対処と、セリフ中の
items.jsonのような語が消える理由を追加しました。 - トップページに、初めての方・里々/YAYAから移ってくる方それぞれの読み始めの案内を追加しました。
注意点(以前のバージョンからの変更)
\![...]など、\で始まる行に${を文字として書いていた場合は、展開されるようになります。文字として出したいときは${'${'}と書いてください。
既知の制約
- セリフの行頭や
${...}の直後にitems.jsonや57.8kgのような.を含む語を書くと、変数の参照として読まれて表示されません。${"items.json"}のように文字列として書いてください。詳しくはドキュメントの「よくあるミス」を参照してください。
更新方法
ghost/master の minato.dll(または shiori.dll)を、0.1.4 の DLL に置き換えてください。台本と save.json はそのまま使えます。
湊 (Minato) v0.1.3
湊 0.1.3
台本からJSONファイルを読み書きできるようになりました。あわせて、台本のエラーが1件しか表示されない問題を修正しています。
新機能
JSONの読み書き(json_parse / json_stringify)
アイテム表や辞書などを、外部のJSONファイルで管理できるようになりました。
ファイルの読み書きは、これまでの file_read / file_write と組み合わせて使います。
OnBoot => {
global items = json_parse(file_read("ghost/master/items.json"))
湊: 薬草は${items.薬草.値段}円。
file_write("ghost/master/out.json", json_stringify(save, true))
}
json_stringifyの第2引数にtrueを指定すると、字下げ付きで書き出します(省略すると1行)。- マップのキーは、JSONに書かれた順のまま保たれます。
- 先頭にBOMが付いたJSON(メモ帳で保存したものなど)も読めます。
- JSONの書き方に誤りがあると
nullになり、SSPのエラーログに警告が出ます。
サンプル:JSONで辞書を管理する
examples/json_dict に、ゴーストの辞書をJSONファイルで管理するサンプルを追加しました。
dict.mnt を include すると、次の関数が使えます。
| 関数 | 動き |
|---|---|
dict_load() |
dict.json を読み込む |
dict_word("話題") |
分類からランダムに1つ選ぶ |
dict_add("話題", "言葉") |
言葉を追加して保存する |
dict_remove("話題", "言葉") |
言葉を削除して保存する |
dict_count("話題") |
分類の言葉の数 |
バグ修正
台本のエラーが1件しか表示されなかった
0.1.2 で追加したエラー表示で、台本に複数のエラーがあっても1件しか表示されていませんでした。
バルーンに先頭3件、SSPのエラーログに全件が表示されるようになります。
- 代入する値がない(
hoge =)、「{」の閉じ忘れなどを、1件目で止めずにすべて報告します。 - 余分な「}」(対応する「{」がない「}」)も報告するようにしました。
改善
大きな配列・マップの読み取りを高速化
items[i].hp や ${table.key.hp} のような読み取りのたびに、変数全体を複製しないようにしました。
1MBのJSONを読み込んだ変数から要素を1回読む時間が、約6msから約0.01msになります。
大きなデータをループの中で読んでも、SSPが固まりません。
注意点(以前のバージョンからの変更)
save.jsonの書き方が変わります。 0.1.2 以前のsave.jsonはそのまま読めます。- 整数は
12.0ではなく12と書かれます。 - キーはアルファベット順ではなく、台本で入れた順に並びます。
- 整数は
save.jsonに入れ子が100段を超える値があると、その項目だけ保存されなくなりました(他の項目は保存されます)。
既知の制約
- エラーをすべて直したつもりでも、次に起動したときに別のエラーが表示されることがあります。表示されたエラーを順に直していってください。
- 大きなデータ(JSONで読み込んだ表など)を関数に渡す処理をループの中で繰り返すと、動作が重くなります。ループの中では
items[i].hpのように、必要な要素だけを読むようにしてください。 - とても大きな整数(16桁を超えるIDなど)は、正確に扱えないことがあります。そうした値は
"12345678901234567"のように文字列として扱ってください。
更新方法
ghost/master の minato.dll(または shiori.dll)を、0.1.3 の DLL に置き換えてください。台本と save.json はそのまま使えます。
湊 (Minato) v0.1.2
湊 v0.1.2
新機能
-
ドット付きのイベント名でトークを定義できるようになりました
OnUpdate.OnDownloadBeginやOnUpdate.OnMD5CompareBeginのような、SSPのドットを含むイベントIDを、そのままトーク名として書けます。
if(...)の条件フィルタも付けられ、call OnUpdate.OnDownloadBeginで呼び出すこともできます。OnUpdate.OnDownloadBegin => { 湊: 更新ファイルをダウンロードしています。 } -
ドット付きcallの打ち間違いを検出します
OnUpdate.OnDownloadBeginなどが定義されているのにcall OnUpdate.OnTypoと書いた場合、静的チェックで notice が出ます。
call reference.0のような動的callには出ません。
エラーメッセージの改善
- エラーにファイル名が付くようになりました。include 先のファイルで起きたエラーも、どのファイルか分かります。
- 「{」の閉じ忘れを、ファイル末尾ではなく 「{」を開いた行 で報告するようになりました。
- パースエラーの文言を改善しました。
- 問題の文字を正しく表示します。改行は「行末」と表示します。
- 補足があるときは「ヒント: …」として表示します。
- 「が必要なところに…」の前の部分が空になることがある不具合を修正しました。
- バルーンの表示を見やすくしました。
- 「main.mntの4行目(OnBoot内): …」の形式で表示します。
- エラーが多いときは先頭3件まで表示し、残りは「他n件」とまとめます。全件は minato_check で確認できます(SSPへの応答の ErrorDescription にも全件が載ります)。
minato_check(構文チェッカー)
- エラー箇所のソース抜粋を、色付きで表示するようになりました。
--no-colorオプションで色を無効にできます。- 診断はすべて標準エラー出力に、成功メッセージだけを標準出力に出すようにしました。
- 引数の説明を実態に合わせました。渡すのは
talks/main.mntを含むディレクトリ(ghost/master)です。
ドキュメント
- ドット付きイベント名の書き方と、callのチェックについて追記しました。
- エラーの出力例を新しい形式に合わせました。
開発者向け
- minato_check をソースからビルドするときは、
--features cliが必要になりました。
cargo build --release --features cli --bin minato_check
本体DLLのビルド方法は変わりません。 - minato_check の結合テストも含めて実行するときは、
cargo test --features cliを使ってください。
湊 (Minato) v0.1.1
湊 0.1.1
実行時エラーが「どこの何が悪いか」分かるようになりました
実行時のエラーや警告に、ファイル名と行番号が付くようになりました。パースエラーと同じ書式です。
main.mntの12行目: items[3] は存在しません(要素数 3、有効な添字は 0〜2)
- 行番号は元のソースファイルの行です。セリフが結合された行の後や、
else ifの条件式でも、正しい行が表示されます。 - 関数や
callの呼び出し先から戻った後に起きたエラーは、呼び出し元の行で報告されます。
配列・Mapのエラーメッセージを具体的にしました
- 配列の範囲外アクセスでは、変数名・要素数・有効な添字の範囲を表示します。空の配列の場合は「空の配列です」と表示します。
- Mapに存在しないキーを読むと、そのMapにあるキーの一覧を表示します(最大10個)。
m['x']とm.xのどちらの書き方でも同じです。m.xの形では、mが中身のあるMapなのに最後のキーだけが無い場合にだけ通知します。変数が未定義の場合や空のMapの場合は、これまでどおり何も出さずに Null を返します。
- 配列の範囲外の添字に代入したときにも警告を出すようにしました。
動作の変更(バグ修正)
- 負の添字(
items[-1])や小数の添字(items[1.5])は、これまで警告なしで別の要素(items[0]やitems[1])を返していました。今後は警告を出して Null を返します。
湊 (Minato) v0.1.0
湊(Minato)の初回公開です。
Rustで書かれたSSP用のSHIORIです。.mnt ファイルに書いたスクリプトで、ゴーストを動かせます。
ベータ版です。
大きな仕様変更が入る可能性があり、更新するとゴーストが動かなくなることがあります。
配布するゴーストで使う場合は、バージョンを固定し、更新前にバックアップを取ってください。
minato-0.1.0.zip 同梱物
- minato.dll: SHIORI本体
- minato_check.exe / minato_check.bat: SSPなしで構文をチェックするツール
- LICENSE / THIRD-PARTY-LICENSES.toml: ライセンス表記
- テンプレートゴースト( minato-template.nar): 最小構成のテンプレートゴースト
テンプレートゴースト
- 起動、終了、ランダムトーク、マウス反応のみのシンプルなゴーストです。
サンプルゴースト
- サンプルゴースト(minato_sample.zip) : デモゴースト
「日の出日の入り・月齢を自動計算」と「ダンジョンRPG」機能を搭載。
はじめかた
Assetsにある「minato-0.1.0.zip」をダウンロード。テンプレートゴーストをSSPにインストールします。
書き方は使い方にある「ドキュメント」を参考にしてください。
使い方
基本的な書き方の他、里々やyayaからの移行ガイドがあります。
ドキュメント: https://mizuki-yura.github.io/minato/
不具合や感想
不具合の詳細な報告はIssueへ、ちょっとした感想や要望はこちらのグーグルフォームへどうぞ。
ここが分かりにくかった等、湊の開発の参考に致します。
グーグルフォーム
https://forms.gle/Y2N53VMhbaiNu8ba7
既知の制限(抜粋)
- セーブは終了時と再読み込み時のみ(強制終了すると、その起動中に覚えたことは消えます)
- SAORI呼び出しは1イベントあたり10回まで
- ループ(for / while / foreach)などに固定の上限があります
- 通信文字コードはShift_JIS固定
- 里々・YAYAの一部機能はありません

