<aside> ⚠️ 現在開発中の WWA Script に関する情報がご覧になれます。 不安定版 WWA Wing でご利用になれますが、将来的に予告なく仕様が変更される可能性があります。

</aside>

<aside> 💁‍♀️

不安定版は下記からダウンロードができます。 https://wwawing.com/downloads/

</aside>

WWA Script

物体・背景パーツのメッセージに <script> タグを記述するとその後の項目がWWA Script として記述できます。

マップデータの外部にスクリプトを置くこともできます。詳しくは「外部スクリプト対応」の項目をご覧ください。

テストプレイサイト

World Wide Adventure Wing

現状で暫定的にテストサイトのフォーム欄にスクリプトを書き、Xキーを押すことでスクリプト実行をお試しいただけます。

スクリプトで使用可能な値

詳細な説明は以下を参照してください

マクロで利用可能な値

値の名前
v[N] (0 ≤ N ≤ 255, N は整数) ユーザ変数
v["..."] (”…” の部分は二重引用符で囲われた文字列) 名前付きユーザ変数
HP プレイヤーの生命力
HPMAX プレイヤーの生命力最大値
0 は無制限を意味します。
AT プレイヤーの攻撃力
DF プレイヤーの防御力
GD プレイヤーの所持金
STEP プレイヤーの移動回数
TIME ゲーム開始からのプレイ時間 (ミリ秒)
PX プレイヤーがいるX座標
PY プレイヤーがいるY座標
CX プレイヤーがいる画面の一番左上のX座標
CY プレイヤーがいる画面の一番左上のY座標
m[N][M] 座標 (N, M) にある背景パーツ番号
o[N][M] 座標 (N, M) にある物体パーツ番号
ITEM[N] N = 0 の場合: 値を代入するとその物体パーツをアイテムボックス内の空き位置に配置します。値の読み取りはできません。
1 ≤ N ≤ 12 の場合: アイテムボックス内にある物体パーツ番号。
空の場合は 0 となります。
X メッセージを出したパーツが存在する X 座標
イベント実行時は PX と同じ値
Y メッセージを出したパーツが存在する Y 座標
イベント実行時は PY と同じ値
ID メッセージを出したパーツの番号
イベント実行時は -1
TYPE メッセージを出したパーツの種類
0 で物体、1 で背景
イベント実行時は -1
PDIR
⚠️ 2023-07-08 現在、ジャンプゲート移動後のステップ動作との相性の問題で代入しても向きが設定されないことがあります。 プレイヤーが向いている方向
2: 下, 4: 左, 6: 右, 8: 上
テンキーを意識するとわかりやすいです。
LOOPLIMIT for文内で繰り返し実行できる上限回数
ITEM_ID CALL_GET_ITEM() CALL_USE_ITEM() CALL_GET_ITEM_FULL()
内でのみ使えます。直前に取得・使用したアイテムのIDを得ることができます。
その他の関数で呼ばれた場合は -1を得ます。
ITEM_POS CALL_GET_ITEM() CALL_USE_ITEM() CALL_GET_ITEM_FULL()
内でのみ使えます。取得・使用したアイテムの位置 (1 ≤ ITEM_POS ≤ 12)を得ることができます。
アイテムがいっぱいで取得できなかったときや、その他の関数で呼ばれた場合は -1を得ます。
SORT_A ソート関数 SORT() から呼び出される比較関数内で使える変数の1要素目。
比較関数以外では使えません。
SORT_B ソート関数 SORT() から呼び出される比較関数内で使える変数の2要素目
比較関数以外では使えません。

スクリプトで使用可能な関数

関数名 説明 不安定版対応
RAND(V) 0 以上 V 未満の乱数値を返す
(言い換えると 0 以上 V - 1以下の乱数)を返す
JUMPGATE(X, Y, DIR) 座標(X,Y)にジャンプする
DIR の方向に向く (任意パラメータ)
DIR の指定値
2 もしくは "down": 下
4 もしくは "left": 左
5 : 無指定と同じ
6 もしくは "right": 右
8 もしくは "up" : 上
文字列が指定できる以外は の仕様に準拠します。
MESSAGE(STR) 引数で与えた文字列をメッセージとして表示
MSG(X) 引数で与えた文字列をメッセージとして表示
💡文字列中に \n を書くことで改行できます。
MSG(”ここで→\n←改行されます”)
`SOUND(X, loopPlaying, bgmDelayDurationMs)
MUSIC(X, loopPlaying, bgmDelayDurationMs)`

使用する音源は./audio/sound-list.json に記載してください。 上記ファイルに記載のない音源は、各パーツの「サウンド番号」や $sound マクロに記載された音源のみ利用できます。 |

引数 X は文字列のサウンドIDでも可(ただし、 $sound では対応していません ) 引数 loopPlayingtrue の場合、ループ再生します。 引数 loopPlayingfalse の場合、ループ再生しません。 引数 loopPlaying が与えられないもしくは undefined の場合、サウンドIDの示すサウンドがBGMであればループ再生します。BGMでなければループ再生しません。 引数 bgmDelayDurationMs が与えられている場合、サウンドIDの示すサウンドがBGMの場合に限り、指定ミリ秒遅らせて再生を開始します。 引数に文字列を入れることで別途 ./audio/sound-list.json で定義した音源を鳴らすことができます。 | 済

https://github.com/WWAWing/WWAWing/pull/832 | | BGM_STOP() STOP_BGM() | BGMが再生中の場合、停止させます。ループ再生されている効果音は停止されないので注意してください。 | 済 | | SOUND_STOP(X) STOP_SOUND(X) | 引数 X をサウンドIDとし、それが示すサウンドが再生中の場合、停止させます(BGMであるかどうかは問いません)。 | 済 | | ALL_SOUND_STOP() STOP_ALL_SOUND() ALL_SOUND_STOP({}) STOP_ALL_SOUND({}) ALL_SOUND_STOP({includeBgm: true}) STOP_ALL_SOUND({includeBgm: true}) | 全ての再生中のサウンドを停止させます(BGMであるかどうかは問いません)。 | 済 | | ALL_SOUND_STOP({includeBgm: false}) STOP_ALL_SOUND({includeBgm: false}) | 全ての再生中のサウンド(BGMを除く)を停止させます。 | | | CHANGE_SOUND_DECISION(X) | システムサウンドの決定音を引数 X のサウンドIDのものに変更します。(初期値は 1 です。) | 済 | | CHANGE_SOUND_ATTACK(X) | システムサウンドの戦闘中の攻撃音を引数 X のサウンドIDのものに変更します。(初期値は 3 です。) | 済 | | GET_BGM() | 再生中のBGMのサウンドIDを取得します。再生されていない場合は 0 を返します。 サウンドが読み込まれていない場合でも、本来再生されるべきサウンドIDを取得します。 | 済 | | COLOR(X, R, G, B) | | 済 | | EFFITEM(X) | | 済 | | CHANGE_BOM_IMG(SRC_X, SRC_Y) CHANGE_BOM_IMAGE(SRC_X, SRC_Y) | | 済 | | CHANGE_CLICK_IMG(SRC_X, SRC_Y) CHANGE_CLICK_IMAGE(SRC_X, SRC_Y) | | 済 | | CHANGE_FRAME_IMG(SRC_X, SRC_Y) CHANGE_FRAME_IMAGE(SRC_X, SRC_Y) | | 済 | | CHANGE_YESNO_IMG(SRC_X, SRC_Y) CHANGE_YESNO_IMAGE(SRC_X, SRC_Y) | | 済 | | NO_GAMEOVER(VALUE) | $no_gameover=2, NO_GAMEOVER(2) は「マクロで0以下のHPを代入した時にゲームオーバーにしない」です。本来 WWA Script による HP 代入もゲームオーバーにしない対象に含まれるべきだと思いますが、現在はなっていません。 将来的には対象にすべきですが、破壊的変更に相当するため、変更の際はアナウンスします。 | 済 | | DEL_PLAYER(X) | | 済 | | ABLE_CHANGE_SPEED(x) xはtrue/false ⚠️まつゆきメモ2023-07-08: 正式リリース時に名前が変わる可能性が高いです。 正式な名前が決定した後でも現在の関数名のままご利用いただけるようにする予定です。 | | 済 | | SET_SPEED(x) | | 済 | | CHANGE_GAMEOVER_POS(x, y) | | 済 | | SAVE(x) | | 済 | | LOG(x) | | 済 | | HIDE_STATUS(KIND, HIDE) | | 済 | | PARTS(ID1, ID2, TYPE, THISS_SIGHT) | | 済 | | FACE(X_DEST,Y_DEST,SRC_X,SRC_Y,W ,H) | | 済 | | PARTS_MOVE(NUM) | | 済 | | EFFECT(WAIT_TIME,*X1,Y1,X2,Y2,X3,Y3,X4,Y4)* | | 済 | | CHANGE_PLAYER_IMAGE(SRC_X,SRC_Y) | | 済 | | HAS_ITEM(X) | X番のアイテムを持っているならTRUE | 済 | | REMOVE_ITEM(X, IS_ALL) | 所持している物体番号X番のアイテムを削除する IS_ALL=0 X番のアイテムを1つだけ削除する IS_ALL=1 X番のアイテムを全て削除する | 済 | | GET_UNIXTIME() | 現在のUNIXTIMEを取得する | 済 | | GET_DATE_YEAR() | 現在の年を取得する | 済 | | GET_DATE_MONTH() | 現在の月を取得する | 済 | | GET_DATE_DAY() | 現在の日を取得する | 済 | | GET_DATE_HOUR() | 現在の時を取得する | 済 | | GET_DATE_MINUTES() | 現在の分を取得する | 済 | | GET_DATE_SECONDS() | 現在の秒を取得する | 済 | | GET_DATE_MILLISECONDS() | 現在のミリ秒を取得する | 済 | | GET_DATE_WEEKDAY() | 現在の曜日を取得する 返却値の数字の仕様は以下参照 https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Date/getDay | 済 | | GET_DATE_WEEKDAY_JA() GET_DATE_WEEKDAY_JA_LONG() GET_DATE_WEEKDAY_EN() GET_DATE_WEEKDAY_EN_LONG() | 現在の曜日を取得する JA は , , ... のように日本語の1文字で取得 JA_LONG は 日曜日, 月曜日, … 土曜日 のように日本語の3文字で取得 EN は Sun, Mon, … Sat のように英語の3文字で取得 EN_LONG は Sunday, Monday, … Saturday のように英単語で取得 | 済 | | CHANGE_SYSMSG() | システムメッセージを変更する 第一引数はシステムメッセージコード (参照), 第二引数はメッセージ。 システムメッセージコードを名前で与える場合は文字列として与えてください。 例: CHANGE_SYSMSG(”NO_ITEM”, “アイテムがない!”) リセットする場合は第二引数を与えないでください。 | 済 | | SHOW_USER_DEF_VAR() | ユーザー定義変数の一覧をコンソール出力する | 済 | | ABS(x) | 絶対値を返す | 済 | | GET_GAMEOVER_POS_X() | 現在のゲームオーバー座標のX座標の値を返す | 済 | | GET_GAMEOVER_POS_Y() | 現在のゲームオーバー座標のY座標の値を返す | 済 | | ABORT_BATTLE() | ダメージカスタマイズ関数内で使うと、戦闘を即座に打ち切る それ以外の場合には何も起きない v4.1.0-unstable.based-on.3.12.11.p.1 以降は、 ABORT_BATTLE() が呼ばれるとそれ以降のWWA Script の処理は実行されない (EXIT() 相当)。 | 済 |

| DIV(a,b) | ab で割ります。 歴史的経緯により、WWA Script の / 演算子は小数点以下が切り捨てられるため、実数値を求めたい場合はこちらの関数をご利用ください。 | 済 |

スクリプト例

// 変数0番に100を代入します
v[0]=100;
// 生命力に1000を代入します
HP=1000;
// 攻撃力に0から100までの乱数を代入します
AT=RAND(100);
// 防御力に現在のプレイヤーX座標を入れます
DF=PX;
// 所持金に現在の歩数を入れます
GD=STEP;
// 現在の所持金を表示します
MSG("今の所持金は"+GD+"ゴールドです。");
// 座標(10, 20)にジャンプします
JUMPGATE(10, 20);
// 座標(10, 20)に物体パーツ1番を設置します
o[10][20] = 1;
// 座標(30, 50)に背景パーツ2番を設置します
o[30][50] = 2;
// 物体パーツ10番のアイテムを取得します
ITEM[0] = 10;

// 20番のアイテムを持っているときだけ扉を開きます
if(HAS_ITEM(20)) {
    REMOVE_ITEM(20);
    o[PX][PY-1] = 0;
    MSG("扉が開いた!")
}
else {
    MSG("鍵がないと扉は開かないようだ...")
}

if-else if-elseステート

// HPが1000以上なら変数0に乱数の0から1000までを代入する
if(HP > 1000) {
  v[0] = RAND(1000);
}
else if(HP > 100) {
  v[0] = RAND(100);
}
else {
  v[0] = 0
}

if(v[0] > 20) {
	if(v[1] > 30) {
    v[2] = 20;
  }
}

forステート