文字列変数について



eramakerにおいて文字列変数に関わる操作は、直接の代入と表示しかできない。
 STR:0 = ほげほげ
や、
 PRINTS STR:0
は可能であるが、たとえば比較
 IF STR:0 == ほげほげ
 		(処理)
 ENDIF
や、変数の中身を他の変数に代入すること
 STR:0 = ほげほげ
 STR:1 = STR:0
はできない。(変数を介した代入に関しては、エラーこそ出ないものの、意図した動作はしない。上の場合では、STR:1に保存されているのは「STR:0」という文字列である。)

STR, SAVESTR の利用法

調教名を表示する
eramakerには、Train.csv ファイルに書かれた調教コマンド名を表示する変数(仮に TRAINNAME とする)が用意されていない。そのため、たとえば eratohoRR v.1317 では、各調教コマンドの本体となる関数(COMxx.ERB 内の @COMxx)の中で、STR:0 に直接調教コマンド名を代入して、履歴などに表示させている。

例)調教コマンド「愛撫」における実際の例 :
 @COM0
 (中略)
 STR:0 = 愛撫
履歴を表示させるとき :
 @SHOW_EQUIP
 (中略)
 PRINT 前回調教コマンド:
 PRINTS STR:0

これに代わる方法として、各調教コマンド名を Str.csv や専用の関数(仮に @TRAINNAME とする)で管理し、履歴では STR:x の x に、調教コマンドに対応する数値を代入することで、調教コマンド名を表示させるというものがある。

例)Str.csv :
 0,愛撫
 1,クンニ
 2,アナル愛撫
表示させるとき :
 PRINTS STR:SELECTCOM
主人の呼び方を変更する
eramakerにおいて、主人の呼び名を表示するために使われる変数は CALLNAME:MASTER である。しかしこれは Chara0.csv の「呼び名」を見ているため、相手からの呼ばれ方を変更するためにはCSVを直接書き換えなければならなかった(しかもこの場合、相手ごとに呼ばれ方を変える、ということはできない)。

そこで、CALLNAME の替わりに SAVESTR を用いることで、より柔軟に対応できるようにすることができる。

例)呼び方を指定する :
 PRINTFORML %NAME:TARGET%に%NAME:MASTER%を何と呼ばせますか?
 PRINTFORML  [0] %CALLNAME:MASTER%
 PRINTFORML  [1] %NAME:MASTER%さん
 PRINTFORML  [2] ご主人様
 PRINTFORML  [3] お兄ちゃん
 
 $INPUT_LOOP
 INPUT
 
 IF RESULT == 0
 		SAVESTR:TARGET = %CALLNAME:MASTER%
 ELSEIF RESULT == 1
 		SAVESTR:TARGET = %NAME:MASTER%さん
 ELSEIF RESULT == 2
 		SAVESTR:TARGET = ご主人様
 ELSEIF RESULT == 3
 		SAVESTR:TARGET = お兄ちゃん
 ELSE
 		GOTO INPUT_LOOP
 ENDIF
表示させるとき :
 PRINTFORML 「%SAVESTR:TARGET%……」

ただし、これを実装するためには、口上や地の文における CALLNAME:MASTER をすべて SAVESTR:TARGET に置き換えなければならない。また、CALLNAME:PLAYER に関してはまた別個の処理をしなければならなくなる。

方法は異なるものの、eratohoのフランドール口上やeraElona、era☆staなどが呼び名を変える試みを行っているので、そちらも参照されたし。

「eratohoJ用咲夜口上」では、ひらがな・カタカナ・英数字に限り、10文字まで自由に入力できる、というシステムを実現している。その手法をかいつまんで説明すると、
  1. ポケベル入力のように各文字を数値と一対一対応させ、入力・保存を可能にする(入力・保存に、文字列ではなく数値を使用する)。
  2. CFLAG:300に1文字目の番号、CFLAG:301に2文字目の番号、……という形で名前を保存する。
  3. STR:700〜709に、各数値に対応させた文字を代入する。
  4. 「STR:310 = %STR:300%%STR:301%……%STR:309%」とし、名前を呼び出すときは「STR:310」を使用する。
という形になっている。STRが変更された場合は、手順3.〜4.を再び行う(関数化して呼び出す)。

STR (SAVESTR) に文字列変数を代入したときの動作

まず、STR (SAVESTR) の中には、文字列変数を%でくくった形(PRINTFORM で文字列変数の中身を展開させるときの方法)で代入しなければならない。
 STR:0 = %CALLNAME:MASTER%

そして、これを展開できる書式は以下の2つのみである。
 PRINTFORMS STR:0

 PRINTFORM %STR:0%
この2つのどちらかであれば、正常に展開されて表示される。ちなみに、改行させること (PRINTFORMSL, PRINTFORML) や、入力待ちにさせること (PRINTFORMW, PRINTFORMSW) も可能。

また、多重の入れ子にすることも可能。
 STR:0 = ほげほげ
 STR:1 = %STR:0%
 STR:2 = %STR:1%
 
 PRINTFORM %STR:2%
は正常に「ほげほげ」と表示される。
ただし、上の場合は入れ子にした元の部分を参照しているだけなので、STR:0を変更するとSTR:1, STR:2の表示結果も変わってしまうことに注意。

なお、以下のようにやると、
 STR:0 = ほげほげ
 STR:1 = STR:0
 PRINTS STR:1
「ほげほげ」とは表示されず、替わりに「STR:0」と表示される(STR:0 は変数ではなく単なる文字列として認識される)ので注意。

Emueraの場合

Emueraでは、文字列変数に関する仕様が(主にユーザーや口上作者、開発者にとって使いやすくなるように)変更されている。

たとえば、SAVESTR:0を用いて主人の名前を変更したい場合、
 PRINTL 名前を入力してください
 INPUTS 
 SAVESTR:0 = %RESULTS%
で、SAVESTR:0にキーボードから入力した文字列が保存される。以後RESULTSの中身を変更しても、SAVESTR:0の中身は保たれる。

また、NAMEやCALLNAMEをERBの方から変更できるようになっているので、
 PRINTL 名前を入力してください
 INPUTS 
 NAME:MASTER = %RESULTS%
という形でも通る。変更後も、デフォルトの名前・呼び名(CSVで指定したもの)はCSVNAME・CSVCALLNAMEで呼べる。
※ただし、特に呼び名(CALLNAME)について、あるキャラの口上で変更すると、他のキャラからも同じ呼ばれ方をするようになる、という問題が発生する。たとえば自身が作成する口上では、
  • キャラ番号に対応したSAVESTR:xxを使用する
  • CFLAGの文字列変数版である「CSTR」を使用する(Emueraのみ)
  • 文字列変数「MASTERNAME」を使用する(Emueraのみ。「MASTERNAME」は「MASTERNAME:TARGET」とみなされるため、干渉は起こらない)
など、なるべく干渉を避けるよう心掛けよう。

Emueraの仕様の詳細については、Emuera公式ページを参照。

Menu

メニュー







他OSで動かす方法



リンク

どなたでも編集できます