とまぁ、多分YU-RISをお使いの方々ならみんな何かしら書こうと思ってらっしゃる内容かと。
β5で大きく進化しそうなのでβ4.5で書くのはどうなのかなーと思わなくもないですけれど、講座や非公式マニュアルの少ないYU-RISですから何でも良いからとりあえず書こうかなと思って書いておきます。
ここはあくまでメモ書きなので内容がそれなりにまとまってきたら別のページに分けると思います。(まぁ、まとまってくるかどうかもわかりませんけど)
1,起動まで
まずは何はともあれ本体をダウンロードしましょう。
▲YU-RIS公式サイト
2012/02/13 追記
※現在YU-RISには 安定版(YU-RIS Beta4.5) と 開発版(YU-RIS Beta4.7) があります。
はじめて使う人でよくわからない人は 安定版 を使うといいと思います。
安定版は ダウンロード のページの 2つ目 です。
公式サイトへ行ったら上の項目から ダウンロード ページへ移動します。
一番上にある ■YU-RIS〜 というのをダウンロードしましょう。(〜の部分はバージョン番号です)
2種類ありますが、よくわからなければ 自己解凍形式 にしておきましょう。
下の方に色々ありますがとりあえず気にしなくても問題ありません。
ダウンロードが完了したら yu-ris_〜.exe を起動します。
7-Zip 自己解凍書庫 というのが起動しますので任意のフォルダを指定して 解凍 ボタンを押して解凍して下さい。
解凍できたら解凍したフォルダを開いてみます。
・はじめに.txt
・マニュアル(フォルダ)
・システム(フォルダ)
があれば問題ありません。
はじめに を一通り読んだ後、まずはマニュアルから・・・といきたいところですが、マニュアルについては公式サイトのオンラインマニュアルが最新ですのでそちらを参照した方がよろしいでしょう。
とりあえず何もわからずともデモが起動できますのでシステムフォルダの中の yu-ris.exe を起動してみましょう。
YU-RISコンパイラ というのが起動し、しばらくするとウインドウが現れ起動します。
あとはスタートからYU-RISで出来る内容についてのデモが見られますので、まずはどんなことが出来るのか実際に見てこの機能使ってみたい!と思ったら公式マニュアルを参照してみましょう。
公式マニュアルをいきなり見てもよくわからないかもしれません。以降の説明についてはそのうち追記していきたいと思います。
2,素材の表示とBGMや効果音を鳴らそう
■そもそもどこからスクリプトを書けばいいの?
■立ち絵や背景を表示してみよう
■BGMや効果音を鳴らそう
配布準備 最終確認
■ファイルのパック処理
■エンジン設定の初期化
β4.5から エンジン設定 というものが追加されています。
配布を行う際は以下の2つのファイルを必ず同封しましょう。
エンジン設定.exe
yscfg.dat
yscfg.dat についてはエンジン設定で設定したデータが保存されています。
配布時にはこのファイルを初期化しておきましょう。
初期化方法
1、エンジン設定.exe を起動
2、初期化ボタンを押す
3、終了
簡単ですが忘れずにやっておきましょう!
あれどこだっけ?
■文字色/文字装飾の定義
UserDefine/文字定義.txt
\TD.SIZE(横幅, 縦幅)
\TD.COLOR(標準色(0xffffff), グラデ色(0xdddddd -1指定でグラデ無し))
\TD.SHADE.COLOR(影色(0x000000))
\TD.SHADE.XY(1, 1) 影の位置
\TD.OUTLINE.COLOR(袋文字色(0x000000))
\TDDEF(登録名(MesText))
変数について
■型について
INT (整数型 -9223372036854775808〜9223372036854775807 64bit精度)
FLT (実数型 64bit精度)
STR (文字列型 半角・全角文字)
とりあえず2049文字まで\_strlen( )命令にて動作を確認。2050文字になるとエラー落ちしました。
2559文字まで起動、2560文字になると起動時にエラー落ちしました。
まぁ、2000文字も入れば普通は困りませんね。
■型の種類について
YU-RISには3種類の変数がある。それぞれ宣言は以下の通り
ローカル変数
INT[@hoge] FLT[@hoge] STR[$hoge]
スタティック変数
S_INT[@hoge] S_FLT[@hoge] S_STR[$hoge]
グローバル変数
G_INT[@hoge] G_FLT[@hoge] G_STR[$hoge]
変数の適用範囲
グローバル変数 システム全体から呼び出せる
スタティック変数 ファイル内であれば呼び出せる
ローカル変数 #=LABELからRETURN[]されるまでの間呼び出せる
システム{
グローバル変数
ファイル{
スタティック変数
#=LABEL{
ローカル変数
RETURN[]
}
}
}
スタティック変数配列について
スタティック変数で配列を定義する時に数値変数を用いて定義を行うとエラーになるようである。
これについては仕様なのかどうなのかよくわからない。
ちなみにローカル変数では問題ない。
それと数値変数だと 変数が存在するため計算できませんでした。 という旨のエラーだが文字列変数だとエラーを吐かずに配列要素が無いというエラーとなる
以下検証時の内容
{
S_INT[@a = 10]
S_INT[@b = 20]
S_STR[$str(@a, @b)]
}
#=VERIFY
{
$str(0 , 3) = "テスト"
RETURN[]
}
追記:動作したりしなかったりするのを確認。条件不明。要追加検証。けど時間が無いのでとりあえず保留。
■配列について
8次元配列まで利用可能(β版仕様)
宣言は以下の通り、要素の初期化もできます。
INT[@A(10) = 3]
STR[$(3, 2) = "TEST"]
配列変数に対して値を複数別の値で初期化することはできない?
INT[@T(10) = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] のような記述は不可。
■型変換
$A = $(@B)
@B = @($A)
$A = $(@B * 3)
@B = @($A + "135")
※文字列変数を数値変数へ変換する場合に数値化できない文字列だった場合には代入結果が不確定となるので要注意(β版仕様)
■INT型配列検証
制限を越えると「配列サイズが4000000Byteを超えています。」というエラーが出る。
つまり定義可能な最大値は以下のような感じ。
INT[@hoge(4000000)]
INT[@hoge(4000000, 1)]
INT[@hoge(2000000, 2)]
INT[@hoge(1333333, 3)]
INT[@hoge(1000000, 4)]
INT[@hoge(1000000, 2, 2)]
■@_LC ループカウンタについて
@_LC ループカウンタはループごとに値を保持
LOOP[SET=2]
@_LC (1〜2)
LOOP[SET=3]
@_LC (1〜3を2回)
LOOPEND[]
LOOPEND[]
マクロの作り方について
はじめに macro.yst というファイルはフォルダ内に1つしか作ることが出来ません。
※逆に言えばフォルダを分けることでマクロ定義ファイルも分けることが可能です。
MACRO[NAME=マクロ名 STR="マクロ文字列"]
定義の仕方
macro[name=HOGE name2=hoge str=";GOSUB[#=hoge pstr=$_M pint2=$_M2 pint3=$_M3]" def="'" def2="0" def3="0"]
HOGE と hoge が実際に呼び出す時の名前です。今回の場合だと
\HOGE() 又は \hoge()
で呼び出すことが出来るようになります。
name は最大で8個まで定義でき(name、name2〜name8)定義した全ての名前で呼び出すことが可能になります。普通は1個か2個で十分だと思います。
次に動作ですが、今回の内容では #=hoge のラベルにGOSUBされるようにしています。
str="" の中身はマクロ実行時に置換される文字列なのでGOSUBである必要はありません。好きなように命令をまとめたりして定義して下さい。
※ここからはGOSUBで引数を受け取りたい場合のお話。
その後に続いているなんか色々は引数となります。要は \HOGE(引数1,引数2,引数3) とまぁ、ココに来るやつですね。
引数として渡したい数だけ書きますが書き方としては以下の通りです
pstr=$_M or pint=$_M
pstr2=$_M2 or pint2=$_M2
pstr3=$_M3 or pint3=$_M3
第1引数だけはpstr1など数字が付かないことに注意
INT型を引数とする時も必ず $_M となるので注意
次に def=" " についてです。
これはデフォルト値となっています。この部分は定義しなくてもいいのですが定義しておくと便利なことがいくつかあります。
何も指定しなかった場合に値を入れてくれる。
引数を省略することができる。
といったメリットがあります。
例えば pstr=$_M の時に def="!!!" としておくと \HOGE() と何も書かなかった場合に "!!!" が引数として渡されます。
ただし省略できるのは定義してある順番通りなので以下のような場合は注意が必要です。
pstr=$_M pint2=$_M2 pint3=$_M3 の時 def="!!!" def2="10" def3="50"
これを呼び出すには
\HOGE("テスト文字列")
とすることで10と50を書かずにすみます。しかし、 2番目の引数だけ書かないでおきたい というような場合には
\HOGE("テスト文字列", , 100)
のように書く必要があります。カンマ区切りをしなくてはいけなくなってしまうので頻繁に使う引数を最初に、あまり使わない引数を後にすると良いと思います。
引数 と 戻り値 について
ここまでに上で書いた pint pstr が引数となるのは解ったと思うのですが、その値をどうやって受け取るのかと戻り値についてを以下に書きます。
引数の受け取り
$_PSTR(1) @_PINT(1)
2個以上ある場合には $_PSTR(1) $_PSTR(2) $_PSTR(3) となります。
戻り値も同様に受け取ります。
戻り値に関しては RETURN[rstr=$str] のように書くことで値を代入できます。
$_RSTR(1) @_RINT(1)
※引数と戻り値の $_PSTR や $_RSTR の変数はあくまで値の受け渡しに使うための一時的な変数なので
基本的には受け取ったら別の変数(ローカル変数など)へ代入しましょう。
命令の定義、命令として呼び出されるラベル内容、命令の呼び出し の流れは以下のようになります。
今回は文字列と数値を引数にして、呼び出すと文字列をダイアログで表示。その後、数値に20を加算した値と、それを2倍した値を返す命令です。
マクロ定義
引数は 1つ目に文字列 2つ目に数値 です。
macro[name=HOGE name2=hoge str=";GOSUB[#=hoge pstr=$_M pint2=$_M2]" def="'" def2="0"]
呼び出されるラベル {}とか付いていますが特に意味は無くこのラベルがココまでの範囲だよと見やすくするために付けているだけです。
#=hoge
{
STR[$str = $_PSTR(1)]
INT[@a = @_PINT(2)]
DIALOG[STR="#=hogeが呼び出されました。引数は:"+$_str+"です。"]
@a += 20
RETURN[ rint=@a rint2=@a * 2 ]
}
命令の呼び出し
\hoge("ゆーりす", 300)
DIALOG[STR="戻り値1つめは"+$( @_RINT(1) )+"です。2つ目は"+$( @_RINT(2) )+"でした。"]
※受け渡す変数で 配列変数を全て受け渡すことは出来ません。 これ出来ると大変便利なんですが・・・。
#=hoge
INT[@hoge(2, 2)]
RETURN[rint = @hoge( )]
YU-RISスクリプトの開始
yu-ris.exe を起動させると data/script/system_start.yst の #SYSTEM_START というラベルが呼び出される。
YU-RISのスクリプトはここから始まります。
起動直後に GO[#=es.ERIS] が呼ばれているため、デフォルトの状態ではそのまますぐに ERIS の処理に移行しています。
もしERISとかいいからとりあえずYU-RISだけで何か組んでみたい!という人は
ERISへのGO命令をコメントアウトしてそのまま書くもよし、GO[#=スクリプト開始] とでも定義して新しいファイルへ飛んでもいいと思います。
開発版
CGACT[ ]
変数
公式マニュアルには 変数自体は配列変数で、グローバル/ローカルともに 0〜5000 までの要素が利用できます。
と書かれていますがローカル変数について若干検証を行いました。
利用バージョン:yu-ris_0461_015
変数の最大数は 8191 まで代入することが可能でした。13ビット?
これを超えると 配列に指定した要素値が、配列サイズを超えているか、負の値を指定しています。 というシステムエラーが発生します。
ちなみに数値変数、文字列変数それぞれ8191まで入りました。
例
@L(8191)
$L(8191)
CGアニメーションとYMVムービー
ムービー読み込み命令
\SP.ANMV
アニメーションCG読み込み命令
\SP.ANCG
現在アニメーション表示を行うには上記の2つの命令がありますが、YMVについては同時に複数のムービーを扱うことは出来ません。
利用バージョン:yu-ris_0461_015 現在
アニメーションCGについては複数のCGを読み込んで表示することが可能です。
基本的な漫符表現などはCGで対応可能ですが高精細な表現はYMVが綺麗なんじゃないか。
α付きで複数を重ねれば表現の幅はかなり広がる気がします。(必要スペックが高くなるのは避けられませんが…。)
質問掲示板で質問したところ、いずれはムービーも複数扱えるようにしたいとのことなので今後に期待です。
はて、そこまでして何を表現したいのかと言われると何があるんだろうか。
テキストレイヤー
テキストレイヤーを作成するには事前に空画像を作成する必要がある。
空画像を作成する、引数は空画像の幅(W)と高さ(H)
\SP.ECG(W, H)
空画像の座標位置を決める
\SP.ZXY(X, Y, 0)
テキストを定義する。ここでいう変数番号とは$L(変数番号)のことである
\SP.TXL(変数番号, フォント定義:SML等)
初期状態では表示されないため表示する。
\SP.2A(0, 255, 0)
\SP.GO(TX)
$L(指定変数番号) = "表示文字列"
使用例
\SP.ECG(200, 40)
\SP.ZXY(8, 0, 0)
\SP.TXL(0010, M)
\SP.2A(0, 255, 0)
\SP.GO(TX)
$L(10) = "テキストレイヤー表示テスト。"
公式マニュアル未公開 動作要検証
※\SP.ECG、\SP.TXL共に公式マニュアルで未公開(12/01/14現在)なのでこの通りで動く保障はありません。
空画像を大きくとって改行とかも出来ると用語説明とかに使えそうですが改行方法不明。
汎用選択肢実行命令
\CSEL( , , , , )
■CSEL時にボタンを消したい
(CSELを使った選択画面の時、セーブやロードなどのボタンを隠したい)
\CSEL 命令の直前に\UI.RELOAD 命令を呼ぶ
例
@L(777)=3
\UI.RELOAD //メイン設計ファイルが再読込される
\CSEL( 〜 )
UserDesign\メイン画面設計.txt
IF[@L(777)==3] //4番目のデザイン
{
//ここに、表示したいボタンだけを定義
}
IFEND[]
システム効果音について
β4.5には設定画面にシステム効果音音量というものが存在します。
一般的にシステム効果音というとボタンに対する決定音やマウスオーバー時に鳴る音ですね。
基本的には以下の内容で鳴らすことが可能なようです。
UserDesignにてボタンに対するシステム効果音も定義できるそうです。
\BT.SE(ボタンにマウスカーソルを乗せた時に再生するシステム効果音ファイル名, ボタンをマウスクリックした時に再生するシステム効果音ファイル名)
これを \BT.SET 命令より前に書くことでボタンにシステム効果音が登録されます。
ファイルはデフォルトでは se フォルダですが、 UserDefine\フォルダ定義.txt の SSEフォルダ の定義の項目で変更可能となっています。
例
\BT.SE(mouse_over_se, mouse_crick_se)
余談
とりあえず上記を使用すれば無事ボタンのシステム音を鳴らすことが出来ます
が、どうしてもボタン以外でシステム効果音が鳴らしたい!というのであれば
\SSE( )
という命令があります。指定は \SE 命令と同じです。
この命令で呼び出された音はシステム効果音音量に依存します。
通常の効果音音量を変更しても音量は変わりません。
この命令はマニュアルには書かれていませんのでその辺はご理解の上使うとよろしいかと。
文字にルビ文字を付けたい
ERISにはルビ文字を付ける機能が基本機能として備わっています。
しかし、デフォルトの状態ではルビ機能は無効に設定されています。
これは恐らく意図せずにルビ文字になってしまうことを防ぐためかと思われます。
というわけでとりあえず設定を有効にしましょう。
data / script / UserDefine / メイン定義.txt
@T(36,21)=0 // [ルビ文字]機能の有効(=1)/無効(=0)
$T(36,22)="RUBY" // [ルビ文字]定義文字列
@T(36,23)=0 // [ルビ文字]文字間隔
@T(36,24)=0 // [ルビ文字]行間隔
$T(36,25)="≪" // [ルビ文字]設定開始文字
$T(36,26)="/" // [ルビ文字]設定区切文字
$T(36,27)="≫" // [ルビ文字]設定終了文字
上記のような内容が記述されていると思いますので @T(36,21)=0 を0から1へ変更して有効化しましょう。
また、必要に応じて他の定義も変更することが出来ます。
実際にルビ文字を付ける時には上記で定義されている ≪ / ≫ の3つの文字を使用します。
使用するには ≪ルビを付ける文字/ルビ文字≫ というような記述方法になります。
使用例
彼女は展覧会でその≪風景写真/ふうけいしゃしん≫を熱心に見ていた。
もし文章内で ≪ / ≫ を使用する場合は ≪ / ≫ を他の文字へ変更することで対処可能となります。
ちなみにルビ文字の文字定義(文字色など)は同じく UserDefine 内の 文字定義.txt の中の RUBY(ルビ用) で設定されています。
メイン定義.txt 内の $T(36,22)="RUBY" が対応しています。
時間差演出
ERISには何もしない処理 \SP.NOP がありますがそれについてメモ。
時間差動作の時間差部分を処理させるためのもの。
\SP.NOP( 時間 )
\SP.NOP(1000)
\SP.GO(NAZ, 演出1)
\SP.SXY(100,100,1000)
\SP.GO(NAZ, 演出1)
\SP.NOP(1000)
\SP.GO(NAZ)
\SP.SXY(100,100,1000)
\SP.GO(NAZ)
これだと並列動作になってしまう。
演出名を付けないと順次処理されるようにならない。
まぁ、よく見ると当たり前なのですが演出名付け忘れて少し悩みました。
というか公式マニュアルの 演出命令(連続演出)の使い方 にちゃんと書いてありますよね。まぁ、忘れそうなので一応メモ。
#=es.ERIS
system_start.yst で最初に呼ばれてくるラベル
ERISで実装されているYU-RIS標準ライブラリ
ファイルディレクトリ: ERIS/stdlib/ystdlib.yst
□ \_STRLEFT(文字列 , 数値) 文字の左側から指定文字分取得する
ラベル名: #=es._strleft
引数:文字列 , 取得文字数
戻り値:文字列
例
\_STRLEFT("テスト文字列",3)
$_RSTR(1)
□ \_STRRIGHT(文字列 , 数値) 文字の右側から指定文字分取得する
ラベル名: #=es._strright
引数:文字列 , 取得する文字数
戻り値:文字列
例
\_STRRIGHT("テスト文字列",2,3)
$_RSTR(1)
□ \_STRMID(文字列 , 数値 , 数値) 文字の指定位置から指定文字分取得する
ラベル名: #=es._strmid
引数:文字列 , 左の指定位置,取得する文字数
戻り値:文字列
例
\_STRMID("テスト文字列",2,3)
$_RSTR(1)
□ \_STRINS(文字列 , 文字列 , 数値) 文字列の指定した位置の後ろに文字列を挿入する
ラベル名: #=es._strins
引数:文字列 , 挿入文字列 , 挿入位置
戻り値:文字列
例
\_STRINS("テスト文字列","挿入文字",3)
$_RSTR(1)
□ \_STRLEN(文字列) 文字数を調べる
ラベル名: #=es._strlen
引数:文字列
戻り値:文字数
例
\_STRLEN("テスト文字列")
@_RINT(1)
\_label.info.exist($S.LBL.LOOP) 指定したラベルが存在しているか調べる
ファイルディレクトリ: stdlib/macro.yst
macro[ name=LABEL.INFO.EXIST name2=label.info.exist str="GOSUB[#=es._label.info.exist PSTR=$_M]" def="''" ]
stdlib/ystdlib.yst
引数:ラベル名(STR) 戻り値:フラグ(INT) 有:1 無:0
#=es._label.info.exist
LABELINFO[#=$_PSTR(1) EXIST=1 LET=@r]
\SP.TXL( , )
テキストレイヤー
\SP.TXL(数値, 文字列)
\SP.TXL(数値, フォント定義:SML等)
例
\SP.TXL(0011, L)
$L(11) = "第一章 きゅーたろーの旅立ち"
もしかして配列番号,変数名?
macro[name=SP.TXL str="GOSUB[#=es.SP.TXL.SET pint=$_M pstr2=$_M2]" def="0" def2="''" ]
es_Sprite.yst
#=es.SP.TXL.SET
{
@H.COM(@e_TXL) += 1;
@P.I1(@e_TXL) = @_PINT(1);
$P.S1(@e_TXL) = $_PSTR(2);
return[]
}
S_INT[@e_TXL = 06]
■どうも変数が競合すると問題が起きるっぽい?要検証。
\SP.ECG(450, 0)
\SP.ZXY(8, 50, 0)
\SP.TXL(0011, L)
\SP.2A(0, 255, 0)
\SP.GO(TX)
$L(11) = "テスト"
\SP.DEL(TX)
\SP.ECG(450, 0)
\SP.ZXY(8, 50, 0)
\SP.TXL(0011, L)
\SP.2A(0, 255, 0)
\SP.GO(TX2)
$L(11) = "てすと2"
変数かぶらないようにちゃんと管理すれば問題ないのかもしれないが・・・。
\CSEL( , , , , )
汎用選択肢実行命令
macro[name=CSEL
str="
IF[@es.SEL.SEQFLAG]@es.SEL.SEQFLAG=0;
\SCRIPTPOS_SAVE;
IFEND[];
GOSUB[#=ES.CSEL.SET pint=$_M2 pint2=$_M3 pint3=$_M4 pint4=$_M5];
$_M=@es.LSD(093,05);
\SCRIPTPOS_SAVE;
"
def="@es.CSELNO" def2="0" def3="-1" def4="300" def5="300"
]
#=ES.CSEL.SET
{
GOSUB[#=es.Voice.DataInit]
\BT.N1(ES.GAMEMAIN.BTN.VOICE)
@es.SELMODE=2
@es.LSD(093,01) = @_PINT(1)
@es.LSD(093,02) = @_PINT(2)
@es.LSD(093,03) = @_PINT(3)
@es.LSD(093,04) = @_PINT(4)
GOSUB[#=ES.CSEL]
LOOP[]
{
IF[@es.SELMODE==0] LOOPBREAK[] IFEND[]
//時間制限処理
IF[@es.LSD(093,02)!=-1 && @es.LSD(093,02) <= @_OS_TIME(1)-@STARTTIME] //制限時間になったら0番のボタンが押されたことにして処理
@es.LSD(093,02)=-1
GOSUB[#=ES.CSEL.BTN.SEL.ON pint=0]
IFEND[]
WAIT[FRAME=1]
}
LOOPEND[]
return[]
}
追加機能について
ここの内容についてはあんまり気にしなくてもいいと思います。
普通にADVゲームを作るだけならERISの基本機能で十分ですし。
本家の仕様には無くて個人的に欲しかった機能を書いた物です。
もし、同じ機能が欲しいと思ってた方にとってはちょっとだけ幸せになれるかもしれません。
一応使用方法とかも載せときますがたいした物はないですよ。
■文字列内文字列検索
文字列内文字検索はあるのに文字列内文字列検索がないのは不便です。
使い方
以下の内容を macro.yst と適当なファイル stdlib.yst とか作成してコピペすればOKです。
呼び出すときは
\_STRSTR(検索対象文字列,検索したい文字列)
戻り値は対象文字列の検索文字列の頭文字の位置が返ってきます。
で使えます。
例
\_STRSTR("表示テキスト内容を処理すれば何かに使えないかな?", "何か")
@_RINT(1) // 恐らく15が返ってきています。
macro.yst に追記する内容
// ■ _STRSTR : 文字列1の先頭から文字列2を検索し,見つかった場合はその位置を,みつからなければ-1を返す
macro[name=STRSTR name2=strstr str=";GOSUB[#=_strstr pstr=$_M pstr2=$_M2]" def="'" def2="'"]
適当なファイルに追加する内容
// ■ _STRSTR : 文字列1の先頭から文字列2を検索し,見つかった場合はその位置を,みつからなければ-1を返す
// 引数
// $_PSTR(1) : 検索対象文字列
// $_PSTR(2) : 検索文字列
// 戻り値
// @_RINT(1) : 文字列1中の文字列2の先頭文字位置
#=_strstr
{
INT[@len1 = 0]
INT[@len2 = 0]
INT[@getpos = -1]
STR[$c1] // 対象文字列の1文字目
STR[$c2] // 検索文字列の1文字目
STR[$strtmp] // 検索対象からの抜き出し用
IF[$_PSTR(1)=="'" || $_PSTR(2)=="'"]
// DIALOG[STR="引数が正しくありません。"]
ELSE[]
// 検索対象文字列から文字数取得
VARINFO[LENGTH=1 SET=$_PSTR(1) LET=@len1]
// 検索文字列の文字数取得
VARINFO[LENGTH=1 SET=$_PSTR(2) LET=@len2]
// 文字数チェック
IF[@len1 < @len2]
// DIALOG[STR="検索文字列の方が検索対象文字列より多いです。"+$(@len1)+":"+$(@len2)]
ELSE[]
// 検索文字列の先頭文字取得
VARACT[COPY=1 SET=$_PSTR(2) LET=$c2 POS=1 LENGTH=1]
// 先頭文字が一致したら文字列が一致するか調べる
LOOP[SET=@len1-@len2]
{
// 先頭文字の一致を探す
VARACT[COPY=1 SET=$_PSTR(1) LET=$c1 POS=@_LC LENGTH=1]
IF[$c1==$c2]
// 対象から検索文字分取得
VARACT[COPY=1 SET=$_PSTR(1) LET=$strtmp POS=@_LC LENGTH=@len2]
IF[$strtmp==$_PSTR(2)] @getpos=@_LC LOOPBREAK[] IFEND[]
IFEND[]
}
LOOPEND[]
// 確認用
// DIALOG[STR=$strtmp+"=="+$_PSTR(2)+":pos:"+$(@getpos)]
IFEND[]
IFEND[]
return[rint=@getpos]
}
■ERIS命令 \GO.SAVE セーブ画面を開く
この命令は私が セーブ画面開く命令とか作れないだろうか とかtwitterでつぶやいていたらエンジン作者の穂乃井様が作って下さいました。
※機能要望や質問がある時は公式掲示板へ書き込みましょう。
以下を macro.yst にコピペするとシナリオ中に \GO.SAVE と書くことでセーブ画面を表示させることが出来ます。
MACRO[name=GO.SAVE str="\SP.FINISH;GOSUB[#=ES.SCENARIO.SS];@es.SCENARIOSTOP=4;\es.S.GOSUB('ES.SAVE',0,0,1,0);\SCRIPTPOS_SAVE"]
おまけにロードも \GO.LOAD で開けます。
MACRO[name=GO.LOAD str="\SP.FINISH;GOSUB[#=ES.SCENARIO.SS];@es.SCENARIOSTOP=4;\es.S.GOSUB('ES.LOAD',0,0,1,0);\SCRIPTPOS_SAVE"]
別にテキストウィンドウにボタンあるからわざわざ開く必要あるの?
という方が大半かと思われますが、私としては大助かりだったりします。それはもう大喜びです…。
利用例としては 章の終わりなどに自動的にセーブ画面が開いてくる というような使い方が出来るかもしれません。