2005/12/20 更新

このファイルはWEBでプレイできるアドヴェンチャーゲーム(ノベルゲーム)システムMaHooのシナリオファイルのコマンド説明です。

ファイル

シナリオファイルはXMLで記述します。
文字コードはUnicode(UTF-8)です。
Unicode以外で正しく動作するかはFlashPlayer次第で、筆者は確認しておりません。
テキストエディタで編集できますが、XMLエディタを使うと楽に編集できるかと思います。

デフォルトではstart.xmlが読み込まれます。
別のファイルを指定するには mahoo.swf?file=****.xml で指定します。

XMLであるため、コマンドはXML要素(element)、パラメータはXML属性(attribute)の形式となっています。
  <cut name="first"> ・・・ </cut>
青文字の部分が要素、赤文字の部分が属性です。
  <img src="test.jpg"/>
このような内部要素のないものを空要素タグと呼びます。
  <cut [name="カット名"]>
このように[ ]に囲まれている属性は省略できることをあらわします。

コマンド一覧

scene   cut   img   bg   char   bgm   text   textarea   font   select   option   go   change   sleep   click   onclick   set   array   rand   if   elseif   while   break   continue

scene

<scene></scene>

シナリオファイルはシーンごとに複数のファイルに分けて記述します。
1つのファイル内に1つのscene要素を記述します。
sceneは複数のcut要素をもちます。

cut

<cut [name="カット名"]></cut>

cutがシナリオの基本単位となります。
cutではimg,bgm要素が先に実行され素材がロードされます。

img

<img layer="レイヤー番号" src="画像ファイル名" [x="画像の横位置"] [y="画像の縦位置"] [alpha="半透明度"] [blend="番号|名称"] />

画像をロードして指定レイヤーに表示します。
画像にはJPEG,GIF,PNGを使用できます。
レイヤー番号には0~63が使用できます。0が一番奥になります。
画像の位置が指定されていない場合は中央下に配置されます。
alphaでロード後の半透明度を指定できます。
指定されていない場合は100になります。
フェードインを使うときや、画像をすぐに表示したくない場合は0にする必要があります。
srcの指定がない場合はそのレイヤーの画像が消去されます。

blendには次の番号または名称を指定できます。
指定がない場合は"normal"になります。

番号名称説明
1"normal" 画像は、背景の前に表示されます。画像のピクセル値により、 背景のピクセル値が無効になります。画像が透明な部分では、背景が表示されます。
3"multiply" 画像のカラーの値と背景色の値とを乗算した後、0xFF で除算して正規化して、 色を暗くします。
4"screen" 画像の色の補数 (逆) と背景色の補数を乗算して、ブリーチ効果を得ます。
5"lighten" 画像のカラーと背景のカラーの明るい方 (値が大きい方) を選択します。
6"darken" 画像のカラーと背景のカラーの暗い方 (値が小さい方) を選択します。
7"difference" 画像のカラーとその背景のカラーとを比較し、 明るい方のカラーから暗い方のカラーを減算します。
8"add" 結果の上限を 0xFF として、画像のカラーの値をその背景のカラーの値に加算します。
9"subtract" 結果の下限を 0 として、画像のカラーの値をその背景のカラーの値から減算します。
10"invert" 背景を反転します。
11"alpha" 画像の各ピクセルのアルファ値を背景に適用します。
12"erase" 画像のアルファ値に基づいて背景を消去します。
13"overlay" 背景の暗さに基づいて、色を調整します。 背景が 50% グレーより明るい場合、画像と背景の色が網がけされ、明るくなります。 背景が 50% グレーより暗い場合、色が乗算され、暗くなります。
14"hardlight" 画像の暗さに応じて、色を調整します。 画像が 50% のグレーよりも暗い場合、画像と背景の色が網がけされ、明るくなります。 画像が 50% のグレーよりも暗い場合、色の値が乗算され、暗くなります。

bg

<bg src="画像ファイル名" [x="画像の横位置"] [y="画像の縦位置"] [alpha="半透明度"] [blend="番号|名称"] />

背景画像をロードして表示します。
システム的にはimgのレイヤー0への画像読み込みです。

char

<char src="画像ファイル名" [x="画像の横位置"] [y="画像の縦位置"] [alpha="半透明度"] [blend="番号|名称"] />

キャラクター画像をロードして背景画像の上に重ねて表示します。
システム的にはimgのレイヤー1への画像読み込みです。

bgm

<bgm src="サウンドファイル名" />

サウンドファイルをロードして再生を開始します。
サウンドファイルにはMP3,WAVを使用できます。
cutに1つ指定できます。複数指定された場合は最後に指定されたものが有効になります。

<bgm ctrl="stop|start" />

サウンドを停止(stop)、停止したサウンドを開始(start)することができます。

text

<text [pause="false|true"] [stream="true|false"> 表示する文章 </text>

文章を表示します。
pause属性でテキスト表示後にクリックするまで停止するかどうかを指定できます。
省略した場合はクリックするまで停止します。
stream属性でテキストを1文字ずつ表示するかどうかを指定できます。
省略した場合は1文字ずつ表示します。
文章中には変数を含めることができます。文章中の変数は$をつけて指定します。

例) <text>選択されたのは$selectedです。</text>

変数は変数の内容に置き換えられて表示されます。

textarea

<textarea [visible="true|false"] [x="横位置"] [y="縦位置"] [width="横幅"] [height="縦幅"] [color="色"] [alpha="半透明度"] />

文章を表示する領域を設定します。
以下のものを必要なものだけ設定できます。
visible表示するかどうか(true:表示 false:非表示)
x表示横位置
y表示縦位置
width領域横幅
height領域縦幅
color領域の色
alpha領域の半透明度(0~100)

例) <textarea x="20" y="360" width="600" height="100" color="0x0000ff" alpha="50"/>

font

<font [size="数値"] [leading="数値"] [spacing="数値"] [bold="true|false"] [shadow="true|false"] />

表示する文字の設定をします。
以下のものを必要なものだけ設定できます。
size文字の大きさ
leading行間の垂直の行送り
spacing文字間のスペース
bold文字を太くするかどうか
shadow文字を影付きにするかどうか

select

<select [x="横位置"] [y="縦位置"] [color="色"] [alpha="半透明度"] [scolor="色"] [salpha="半透明度"] ></selet>

選択メニューを表示します。
メニュー項目はoption 要素で指定します。
selectは複数のoption要素をもちます。
選ばれたメニュー項目は変数selectedに格納されます。

属性には以下のものを必要なものだけ設定できます。
x表示横位置
y表示縦位置
colorメニューの色
alphaメニューの半透明度(0~100)
scolor選択されている項目の色
salpha選択されている項目の半透明度(0~100)

color,alpha,scolor,asalphaを設定するとデフォルト値として設定され、次のselectに反映されます。

option

<option [goto="カット名"]> メニュー項目 </option>

メニューの項目を指定します。
goto属性が指定されている場合、この項目が選ばれたとき指定されたカット名のcutに実行が移されます。

go

<go to="カット名" />

指定されたカット名のcutに実行が移されます。
シナリオファイルを超えての移動はできません。

change

<change src="シナリオファイル名" />

指定されたシナリオが読み込まれ実行が移されます。
変数はクリアされません。

sleep

<sleep sec="秒数" />

指定秒数進行をストップします。
秒数には実数を指定できます。ただし1/15秒以下にはなりません。

例)<sleep sec="0.5" />

click

<click />

クリックされるまで進行をストップします。

cut内でonclickが指定されている場合、クリックされたonclick要素が実行されます。
複数のonclickの領域が重なっていた場合、先に定義されたonclick要素だけが実行されます。

onclick

<onclick x="左位置" y="上位置" width="横幅" height="縦幅"></onclick>

クリックされる領域を定義します。
この領域がクリックされると内部要素が実行されます。
有効範囲は定義されたcut内で、いくつでも定義できます。
onclickは定義を行うだけです。クリック待ちはclickで行います。

set

<set name="変数名" value="値|式" />

変数に値を代入します。
変数名はアルファベット、数字、アンダーバーだけで指定します。

例)<set name="flag" value="1" />
例)<set name="name" value="西野園" />

valueには式を指定できます。
使える演算子は次の通りです。
+加算、文字列の連結
-減算
*乗算
/除算
%剰余
[ ]配列のインデックス指定
( )演算の優先順位指定
and論理積
or論理和
not否定
文字列と数値の+は文字列の連結になります。

例)<set name="flag" value="flag+1" />
例)<set name="name" value="name+萌絵" />
例)<set name="a[1]" value="b[flag]" />

array

<array name="変数名" [value="初期値"] />

配列変数にを作成します。
valueにカンマで区切った初期を指定できます。
変数名はアルファベット、数字、アンダーバーだけで指定します。

例)<array name="tbl" />
例)<array name="week" value="日,月,火,水,木,金,土"/>

rand

<rand name="変数名" [min="最小値"] [max="最大値"] />

変数にminからmaxまでのランダムな整数を代入します。
変数名はアルファベット、数字、アンダーバーだけで指定します。
min,maxが指定されていない場合は0~100の整数になります。

例)<rand name="rand" />

if

<if condition="条件式"></if>

条件式が成り立っているなら内部要素を実行します。
内部要素にcut内で使用できる全ての要素が指定できます。

条件式は 式 比較演算子 式 の形式で指定すると左右の式が比較されます。
比較演算子がない場合は式の結果が0の場合は不成立、0以外の場合は成立となります。

例) <if condition="selected==メニュー項目">
例) <if condition="flag}=1">
例) <if condition="flag">

比較演算子には次のものが指定できます。
XMLでは<が使えないのでかなり特殊な仕様となっております(^^;

== 等しい
!= 等しくない
} より大きい
{ より小さい
}= 以上
{= 以下

elseif

<elseif condition="条件式"></elseif>

直前のif要素が不成立で条件式が成り立っているなら内部要素を実行します。
条件式に関してはifを参照してください。

else

<else></else>

直前のifまたはelseif要素が不成立なら内部要素を実行します。

while

<while condition="条件式"></while>

条件が成り立っているなら内部要素を繰り返し実行します。
条件式に関してはifを参照してください。

break

<break/>

while要素から抜けます。
break以降の要素は実行されません。

continue

<contine/>

while要素を始から(条件判断から)実行します。
continue以降の要素は実行されません。