サイトロゴ

フリーのRTSRPG「Millennium Legend」をメインとしたブログ、その他すぴブレの改造講座など。
 

今日はかなり久々のブログ更新となりました。

製作の方はとても順調です、・・・・もう別のゲームになってきましたが・・・

さて、今回はすぴブレ三大便利だけど使われない要素(注1)の一角である、
CallTransについての講座となります。
いつも通り前置きが長くなっていますが、下に行けばいくほど
内容が濃くなっているはずです。

注1:すぴブレ三大便利だけど使われない要素
1、ロジック
2、CallTrans
3、・・・・・・・?
3大要素ってキリがよかったんだけども・・思いつかなかったさ


私は最近このCallTransにとてもお世話になっています、おかげで作業効率が跳ね上がりました。

例として・・軽量化です。(ゲームが完成してないのに軽量化となっ?!)
wilo.jpg
すぴブレにて改造、製作を行っている方は上の画像はどんな風にPoweredで実装されているか
検討がつくはずです。

しかし、私はこの表示をたった一行で表示させています。

<CallTrans p="ヴァルハラ平原" w="クライシスタ将軍の撃破" l="部隊長の全滅" path="Event/Common/PWL.xsl"/>

これだけです。

私はゲームの勝利条件に場所、勝利条件、敗北条件をこのように表示させてますが、
どうせ場所、勝利条件、敗北条件以外は同じ風に書くのだから、処理の一括化をし始めました。
これにより今までより簡単に作業が進むようになりました。

この表示をいちいち書くと以下の通りになります。

<Powered x="50" y="70" w="400" h="130" life="5000">
      <Tag y="5" font="big" msg="ヴァルハラ平原"/>
      <Tag y="32" msg="――――――――――――――――――――――――――――――――――――"/>
      <Tag y="45" font="info" col="0xffff0000" msg="勝利条件:"/>
      <Tag y="65" font="info" col="0xffff0000" msg="クライシスタ将軍の撃破"/>
      <Tag y="85" font="info" col="0xff8888ff" msg="敗北条件:"/>
      <Tag y="65" font="info" col="0xffff0000" msg="部隊長の全滅"/>
</Powered>

長いです・・・そこで工夫をすると一行になります。
今回はこれを例としてCallTransの便利さを簡単に説明していきたいと思います。
                                  ここまでが長い前置きです。

CallTransとはXSLというファイルを使ってイベントを実行するという仕組みです、
本来はHTMLなどのインターネットのページの作成などに使われているらしいですが、
それと似た仕組みで、すぴブレに高度な処理をすることが出来ます。

すぴブレ付属のマニュアルには
XSLT 変換を行い、結果をイベントとして実行する。
かなり複雑な処理が出来るが、上級者向け。
と書かれています、それ以外の説明は一切ありません。

実際にすぴブレの製作者であるGeraHa氏もゲームでは5つ?のXSLファイルしか使用していませんでした。
すぴブレを一度(特にLastじゃない方まで)クリアした方には記憶にあると思います、
ダンジョンに入る前のパーティを二つ選択するシステムです。
あれを改造して3パーティ選べるようにしたい!!って思い
改造に行き詰った方もいらっしゃるのでは無いでしょうか、はい、私もです。

私は結果的に3パーティを選択する物を作りましたが、あれはCallTrans無しで無理やり実装したもので
8倍イベントを書き実装しました、今度CallTransで挑戦してみたいと思います。
(ええ、トーナメントのあれの事ですよ・・)

さて、いきなりですが・・一つ簡単なXSLを書いてみましょう。
よろしければメモ帳を開き、流れにそってどうぞ。

まずは土台となる部分をメモ帳に5行をコピーします。
-----------------------------------------------------
<?xml version="1.0" encoding="Shift_JIS"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" version="1.0" encoding="Shift_JIS" indent="yes" />
<空白 ここに色々と書いていきます>
</xsl:stylesheet>
-----------------------------------------------------
基本的にこの5行は気にしないでください、ただXSLに必要な3行なだけです。

次に空白の中に以下の物を
-----------------------------------------------------
<xsl:template match="CallTrans">
<これも中にいろいろと書いていきます>
</xsl:template>
-----------------------------------------------------

今回は簡単なものを作ります、まず一つ目は
仕組みを知っていただくために、計算機を作ってみましょう。
さっきの<これも~いきます>の所に以下の物をコピー
しばらくはコピー作業が続くと思います、あと<こ~す>などの文はもちろん消しても結構です。

-----------------------------------------------------
<xsl:variable name="a" select="@num_a"/>
<xsl:variable name="b" select="@num_b"/>
-----------------------------------------------------

xsl:variableは変数です
XML上で
<CallTrans num_a="5" num_b="12" path=""/>
と書くと
このXSL上だけで使える変数として
aに5が、bに12が代入されます。
続いて以下の物をすぐ下にコピーすれば完成です。

-----------------------------------------------------
<xsl:element name="Event">
<xsl:element name="Param">
<xsl:attribute name="name">_temp_msg</xsl:attribute>
<xsl:attribute name="val"><xsl:value-of select="$a"/></xsl:attribute>
</xsl:element>
<xsl:element name="Param">
<xsl:attribute name="name">_temp_msg</xsl:attribute>
<xsl:attribute name="com">+</xsl:attribute>
<xsl:attribute name="val"><xsl:value-of select="$b"/></xsl:attribute>
</xsl:element>
<xsl:element name="Msg">
<xsl:attribute name="msg">=_temp_msg</xsl:attribute>
</xsl:element>

</xsl:element>
-----------------------------------------------------

Q.え、もう完成かよ!
A.はい、足し算しかできない計算機の完成です。

Q.何故インデントが無い?
A.理由は二つ、このブログでTabでインデント入れたいと思っても入らない
 XSL内で全角スペースを入れると機能しなくなるからです。
 見づらいかもしれませんがセルフサービスでお願いします。

Q.何書いてあるのかわからねぇ!
A.実はこれは見慣れた書き方で同じことができます。

この初見では意味不明な文をいつも見慣れているものに変換しますと・・・
<CallTrans num_a="5" num_b="12" path=""/>の内訳

<Event>
<Param name="_temp_msg" val="5"/>
<Param name="_temp_msg" com="+" val="12"/>
<Msg msg="=_temp_msg"/>
</Event>

こうなります。(上記はnum_a="5" num_b="12"とする場合の結果です。)

こういった感じに内部の処理を凝縮したようなイベントとなっています。

メモ帳で保存する場合は拡張子はxslで保存し好きなところ置いておきます。
名前も自由ですが、ここではtest.xslとしておき、
しかも保存場所はゲームの実行ファイルがあるフォルダとします。

これでxmlで
<CallTrans num_a="8" num_b="9" path="test.xsl"/>
と呼び出すだけで 17というメッセージが出力されます。
起動しない方はXSL内の全角スペースを全て消してください。

さて、残念ながらまだ続きますよ・・・
こんどはtest.xslの中身の解説です。

xsl:element
<xsl:element name="Event">

</xsl:element>

これは
<Event>

</Event>
と同じ意味です。

xsl:attribute

<xsl:element name="Param">
<xsl:attribute name="name">_temp_msg</xsl:attribute>
<xsl:attribute name="val"><xsl:value-of select="$a"/></xsl:attribute>
</xsl:element>

これは
<Param name="_temp_msg" val="5"/>
ここの部分です
<xsl:variable name="a" select="@num_a"/>←ここでした変数は
<xsl:attribute name="val"><xsl:value-of select="$a"/></xsl:attribute>

<xsl:value-of select="$a"/> 変数名の先頭に$をつけます そうすることで=aという結果になります

<xsl:attribute name="val">$a</xsl:attribute>
と書くと_temp_msgに$aがそのまま代入されます。

ちなみに結論を言えばすぴブレで使われているタグの殆どをCallTransだけで賄うことが出来ます。


一応入門編はここまでとしますが、まだまだ続くかもしれません。

質問等は遠慮せずにコメントや掲示板の方でどうぞ。

コメント
この記事へのコメント
コメントを投稿する
URL:
Comment:
Pass:
秘密: 管理者にだけ表示を許可する
 
トラックバック
この記事のトラックバックURL
http://stnsllethouse.blog.fc2.com/tb.php/110-34b4282b
この記事にトラックバックする(FC2ブログユーザー)
この記事へのトラックバック