[もどる]
一括表示
0773 変数周りについて
投稿者: 2006/12/01(金) 18:31

いつもお世話になっています、薫です。

ゲームが複雑化してくると変数周りに関していろいろ問題が出てきました。
基本的には、レイヤーを使わなければYu-risのコマンドで変数も問題ないのですが、いくつか質問を兼ねてお聞きしたいと思います。

ゲームで主人公の名前を変更可能にできるゲームがありますが。
これ自体は、Yu-risの変数関係とダイアログ関係を使えば問題なくいけると思うのですが。
これで変更された名前を名前枠に表示させようとすると、キャラ名は事前に設定するようになっているので、変更された名前が名前枠に表示出来ないという弊害があります。
例えば、特定の変数『$name』とかを使って、この変数に名前を入れたら名前枠に表示できるようにするということは出来ませんでしょうか?

ADV関係のツールでは、たまに変数使ってSLGやRPGもどきがよく作られるので、変数関係は欠かせないと思います。
変数を使った場合のERISコマンドとの兼ね合いをうまく図れればとても便利ですので、ご検討願えればと思います。

いつも面倒なお願いばかりしてすいません。
よろしくお願いします。

0774 横から失礼します
投稿者: 2006/12/06(水) 12:13

> キャラ名は事前に設定するようになっている
これは「キャラ名定義.yst」でのことですよね。
たとえば、グローバル文字列変数 $G.S(0) に主人公名を保存するなら、
主人公名の定義を
\CHAR.NAME("主人公", $G.S(0), "")
などとすればできるのではないでしょうか。
手元にある制作中のゲームで試したところ、こちらでは動作しました。
(変数の内容が名前枠に出せたというだけで、その他の細かいチェックはしていないのですが…)

もしも見当違いのことを言っていたらすみません。

0775 横から失礼します
投稿者: 2006/12/07(木) 01:24

薪様、レスありがとうございます。
ただ、global.ystで宣言して、一応最新のYu-risで試してやってみているんですが、こちらでは空白になってしまって表示されませんでした。
後、以前、シナリオファイルで変数がセーブされない可能性もあると言われていました。
片方では表示され、片方では空白というそんな状態で使っても大丈夫なのでしょうか?
名前枠の表示できちんと使える変数というのが欲しいとリクエストなのですいません。

0776 横から失礼します
投稿者: 2006/12/07(木) 02:04

> こちらでは空白になってしまって表示されませんでした。
空白になっているということは、変数が空ということですよね。
global.yst で変数の宣言をした後に別ファイル内で初期値を代入するか、
宣言と初期化を同時に行う必要がありますがそちらはどうでしょうか。
(私の場合は後者でテストしました)

それとは別に、自前で宣言した変数は(現状では)自前でセーブしなければなりませんから
薫さんが問題にしているのはむしろこっちかな、と今頃思い至りました…。
変数の命名規則自由化についてはマニュアルでも示唆されていますから
正式版が出る頃には解決していそうな気もします。

しつこくなってしまってすみません。
スルーしていただいて結構です。

0777 横から失礼します
投稿者: 2006/12/07(木) 03:06

度々のレスありがとうございます。

> 空白になっているということは、変数が空ということですよね。
> global.yst で変数の宣言をした後に別ファイル内で初期値を代入するか、
> 宣言と初期化を同時に行う必要がありますがそちらはどうでしょうか。
> (私の場合は後者でテストしました)
ダイアログで、問い合わせて入力された文字を変数に代入する形で代入したので、前者ということになるでしょうか?
確かに後者でテストした場合は表示されますが、シナリオ内で代入しなおしてもそれが有効になりません。
ですから、後者で表示されても前者で表示されなければ、普通にキャラ設定したのと同じなので、はっきり言えばまったく意味ないかと思うのですが(汗)

> それとは別に、自前で宣言した変数は(現状では)自前でセーブしなければなりませんから
> 薫さんが問題にしているのはむしろこっちかな、と今頃思い至りました…。
いえ、変数の表示に関しても上記のような状態ですので両方の問題があるのです(汗)

> しつこくなってしまってすみません。
> スルーしていただいて結構です。
いえいえ。
こういう質問関係は、質問したほうはわかりやすく書いたつもりでも中々意図するところが伝わらないことが多いので。
薪さんとのやりとりで、だいぶわかりやすくなったかと。
怪我の功名ということで、ありがとうございます。
というわけで、上記のような問題がありましたので、引き続きよろしくお願いします。

0778 私も横から失礼します
投稿者:たくみ 2006/12/07(木) 22:31

薫さんどうもですー。
薪さん御助言有り難うごさいます。

ツリー表示を見ると、「横から失礼します」が連発していて
不覚にもちょっと笑ってしまいました(笑
ちゃんとRe:をつけるようにあとで掲示板を修正しておかないと…(^^;ゞ

>ゲームで主人公の名前を変更可能にできるゲームがありますが。
>これ自体は、Yu-risの変数関係とダイアログ関係を使えば問題なくいけると思うのですが。
>これで変更された名前を名前枠に表示させようとすると、キャラ名は事前に設定するようになっているので、
>変更された名前が名前枠に表示出来ないという弊害があります。
>例えば、特定の変数『$name』とかを使って、この変数に名前を入れたら名前枠に表示できるようにするということは
>出来ませんでしょうか?

いや、このあたりも質問されて気づくことが多いですね(^^;
仕事では主人公の名前が固定である事が多かったので、ハっとさせられました。
ただ、結果から言えば出来ますです^^
標準命令としては用意されていないので、気持ち応急処置的なものになりますが、
変数内容表示機能 _[] を利用します。

マニュアルにあまり詳しく書いていないのでここで詳しく説明しますと、
考え方としては、スクリプト中に

_[$G.S(0)]「てすとですー♪」 //← $G.S(0) に「枝理」という文字列が入っているとします

というように記述があると、まず変数の中身が取り出され、

枝理「てすとですー♪」

と変換されます。その後に、名前表示部分の解析がなされるので、
スクリプトに通常どおり記述したのと同様、名前欄に正しく名前が表示されます。
結果的に、変数に格納されていた名前を名前欄に表示することができる、というわけです。

ただ、

_[$G.S(0)]「てすとですー♪」

主人公の台詞の度にこのような記述だと保守性が悪いので、
マクロ化してしまうと便利だと思います。
マクロファイル内で、

macro[name="主人公" str="_[$G.S(0)]" ]

と定義しておけば、

\[主人公]「てすとですー♪」

あるいは

\主人公;「てすとですー♪」

と書くことができるようになります。
このあたりで試してみていただければと思います。
これでまた何か不都合がみつかりましたらお教えいただければ助かりますです。
今後の参考になりました。有り難うございます^^

このあたりも、今後のバージョンアップでさらに便利に使えるようにしたいですね。
事前に定義ファイルで、「主人公」という文字列を変数 $G.S(0) と結びつけておくように出来れば、

主人公「テストですー♪」

とスクリプト中に記述されていたら、『主人公』の部分を自動的に $G.S(0) の中身に展開してくれれば、
さらに記述がすっきりしますしね。


ちなみに補足として、名前の解析機能ですが、
現状だと「」『』()の前に書かれている文字を名前かどうか判断しています。

枝理「てすとですー♪」
枝理『てすとですー♪』
枝理(てすとですー♪)

という記述に対して、正しく名前だと認識されるようになっています。
また、下のように

枝理『てすと「てすとですー♪」ですー♪』

括弧がネストしていても特に問題ありません。
このあたりの記号もいずれ設定できるようにしようと思います。
例えば“”を設定すれば

枝理“てすとですー♪”

という記述でも、枝理が正しく名前として認識されるようにしたりとか。



あと、名前画像のチラつき修正の件ですが、
いまちょっと次の準備でちょっとだけ動かなくてはいけなくて、
更新のほうはもうちょっとだけお待ちください。
早くて今週中、遅くても来週の前半にはバージョンアップしたいと思います。

0779 ありがとうございます。
投稿者: 2006/12/08(金) 00:15

たくみ様

お疲れさまです。

> ツリー表示を見ると、「横から失礼します」が連発していて
> 不覚にもちょっと笑ってしまいました(笑
> ちゃんとRe:をつけるようにあとで掲示板を修正しておかないと…(^^;ゞ
ですねぇ〜
Re:がつかなかったのは気づいていたんでつけて書こうかと思ってたんですがそのままで書き込んでました(苦笑

> 変数内容表示機能 _[] を利用します。
なるほど。
グローバル変数設定して、キャラ設定しただけでは、後から代入しても表示されなかったんですね。
助かります。

> マクロ化してしまうと便利だと思います。
> マクロファイル内で、
>
> macro[name="主人公" str="_[$G.S(0)]" ]
>
> と定義しておけば、
>
> \[主人公]「てすとですー♪」
>
> あるいは
>
> \主人公;「てすとですー♪」
>
> と書くことができるようになります。
なるほど、なるほど。
すごくわかりやすく説明して頂きましてありがとうございます。

> 今後の参考になりました。有り難うございます^^
こちらこそ、ありがとうございます。

> このあたりも、今後のバージョンアップでさらに便利に使えるようにしたいですね。
はい、期待してます。

> あと、名前画像のチラつき修正の件ですが
了解しました。

最近、寒いですので身体に気をつけて、開発がんばってください。
ありがとうございました。

0780 こ、今度は・・・(泣)
投稿者: 2006/12/10(日) 00:15

お疲れさまです、たくみ様

薫です。
たくみさんに言われたようにすると
シナリオ中で
DIALOG[STR="名前を入力してください" INPUT=1 DEFSTR="須藤 美璃亜" LETSTR=$G.N(0)]
として、変数に代入すると代入された変数が表示されるようになりました。
しかし、今度は名前枠に表示されなくなりました(泣)
キャラ名定義の仕方をいろいろ試してみたんですが
名前枠に表示できる設定にすると、シナリオ中の変数の代入がうまくいかず、変数に代入さたれ文字列が表示されるようにすると、名前枠に表示されないとうまくいきません。
やはり、キャラ名定義がネックのような気がします。
キャラ名定義で設定すると文字列と変数を関連づける機能がないとこれはきついようです。

0781 対策とります
投稿者:たくみ 2006/12/10(日) 21:30

なるほど…(^^;
私もまだちょっと勘違いをしていたようです。
$G.S(0) に格納した名前が表示できるようになったとはいえ、
キャラ名定義.txt で登録された名前しか名前欄に表示されないのは
変わりがないわけですよね…。いや、失礼しました。
次のバージョンで簡単な対策をとりたいと思います。
本格的な機能実装はそのあとになると思います。

名前画像チラつきの修正も合わせて、
今日明日には更新できると思いますので、
もう少しだけお待ちくださいませ。