スクリプトを書いていらっしゃる方が沢山来ていただいているようで、スクリプターとしては嬉しい限りです。
それに加え、スクリプトの質問をされる方も多くなってきました。
書き方のことで質問された方もいるので、いい機会に勝手ながらアドバイスをさせてもらいます。
※久しぶりに開発者よりの日記です。興味ない方ごめんなさいorz
-
最近のスクリプトを見てお気付きの方もいらっしゃると思いますが、menu・gotoなど、ラベルを使う命令を一切排除しています。
これは去年の1月からしているNo more "goto" Good bye "goto"運動(AthenaDevさんにて命名?)によるもので、スクリプトの見直し・整形を行いました。
実際に見てみると、最新のAthenaデフォルトではsampleスクリプトを除き、gotoは使われていないと思います。
なぜgotoやmenuがいけないのか、答えはswitch、selectなどで綺麗に簡潔に代用できるからです。
実際に昔のスクリプトと改修後のスクリプトを見てみると、
lou_fild01.gat,175,173,4scriptクエン ホ819,{
if(Lou_que1 == 4) goto L_OK2;
if(Lou_que1 == 3) goto L_OK1;
mes "[クエン ホ]";
mes "ここは危険だ。帰れよ。";
close2;
warp "lou_fild01.gat",200,174;
end;
L_OK1:
emotion 18;
mes "[クエン ホ]";
mes "どうだい、素敵だろ~。";
mes "落ち込んだり元気がなくなると";
mes "ここに来るんだ。";
mes "ここからじっと景色を眺めてると";
mes "落ち着くんだよ。";
next;
~~~~~略~~~~~
L_OK2:
mes "[クエン ホ]";
mes "どうする?";
next;
menu "叫ぶ",-,"帰る",L_CANCEL;
mes "[クエン ホ]";
mes "おし、叫んでみて!";
next;
input @annouce$;
announce "「"+strcharinfo(0)+"」の叫び : "+@annouce$,0x01;
mes "["+strcharinfo(0)+"]";
mes @annouce$;
next;
mes "[クエン ホ]";
mes "どう?すっきりした?";
mes "また叫びたくなったら来なよ。";
close;
L_CANCEL:
mes "[クエン ホ]";
mes "うん、じゃあまたね。";
close2;
warp "lou_fild01.gat",200,174;
end;
}
改修前の龍乃城NPC、クエン ホです。
まだフラグが少ないNPCなので何とか目で追っていけますが、もしもクエストフラグが何十にも及ぶと大変ですね。
一方改修後は
lou_fild01.gat,175,173,4scriptクエン ホ819,{
switch(LOU_1QUE) {
default: //3,4以外のとき
mes "[クエン ホ]";
mes "ここは危険だ。帰れよ。";
close2;
warp "lou_fild01.gat",200,174;
end;
case 3:
emotion 18;
mes "[クエン ホ]";
mes "どうだい、素敵だろ~。";
mes "落ち込んだり元気がなくなると";
mes "ここに来るんだ。";
mes "ここからじっと景色を眺めてると";
mes "落ち着くんだよ。";
next;
~~~~~略~~~~~
case 4:
mes "[クエン ホ]";
mes "どうする?";
next;
if(select("叫ぶ","帰る")==2) {
mes "[クエン ホ]";
mes "うん、じゃあまたね。";
close2;
warp "lou_fild01.gat",200,174;
end;
}
mes "[クエン ホ]";
mes "おし、叫んでみて!";
break;
}
next;
input '@word$;
announce "「"+strcharinfo(0)+"」の叫び : " +'@word$,1,0x9BFD00;
mes "["+strcharinfo(0)+"]";
mes '@word$;
next;
if(LOU_1QUE == 3) {
mes "[クエン ホ]";
mes "どう?すっきりしたかな?へへ。";
mes "ここには、好きに来ていいよ。";
mes "今日は本当にありがとう!";
set LOU_1QUE,4;
}
else {
mes "[クエン ホ]";
mes "どう?すっきりした?";
mes "また叫びたくなったら来なよ。";
}
close;
}
フラグの状況と進行具合が目で追って分かりやすいです。
breakなどによる共通部分の処理も気軽に出来る点も魅力です。
またラベルを使っていないので、衝突を意識する必要もありません。
この大改修でほとんどのスクリプトが見やすくなり、また後から手を加える人にとって大変ありがたい偉業となりました。
スクリプトを書く際少なくとも私はこの点に注意し、見た目的に分かりやすく美しく、を追求しています。
まだまだ未熟な部分もありますが・・・orz
「スクリプトなんて動けばいいじゃん」と思う方もいらっしゃるかもしれません。
ですがプログラムも然り、それを見る人・手を加える人がいる限り整合の必要性があります。
いきなりswitchやselectなんて・・・という方、私も最初はそうでしたorz
が、いざやってみるとゴチャゴチャしていた物がキレイになっていく感じで意外とハマり、無駄な処理・不要な部分という物が見えてきます。
それを排除していくことでより一層綺麗に仕上がると思います。
スクリプトを作ってる方、まずはgoto・menuの排除に挑戦してみてはいかがでしょうか。