う〜ん…
確かにこういうものは、
妥協して使っている内に不便さに気づかなくなることがよくありますね。
HSPは「命令」と「関数」に分かれていて、
なおかつ、「関数」には「戻り値」が必要なんですよね〜
ちょっとだけ不便かなと思いますけど、まぁ許容範囲内です。
マクロを使えばどうにかなりますし、僕の場合は、
自分独自の書式を、HSP形式に変換するコンパイラもどきを自作して使っています。
個人的には、「#define」が標準で複数行可能だと楽だな〜って思いますけどね。
使いどころは、たとえばこんなとき
repeat Xnum
Xcnt = cnt
repeat Ynum
Ycnt = cnt
;ここに処理
loop
loop
上記のスクリプトをマクロ化すると、
;マクロ定義
#define XYRepeat(%1,%2) Xnum = %1 : Ynum = %2 : repeat Xnum : Xcnt = cnt : repeat Ynum : Ycnt = cnt
#define XYLoop loop : loop
;使用例
XYRepeat 2, 3
mes "今の座標は (" + Xcnt + "," + Ycnt + ") です。"
XYLoop
このように、マップの調査や書き換えなどにとても便利なマクロになります。
これは関数や命令では不可能な部分ですよね。
しかし、「#define XYRepeat(%1,%2) Xnum = %1 : Ynum = %2 : repeat Xnum : Xcnt = cnt : repeat Ynum : Ycnt = cnt」
では、後からみたら、何のこっちゃ?ってなります。
「:」のところで改行して、やっと意味がわかると思います。
僕の書式だと、
#マクロ定義開始 XYRepeat(Xnum,Ynum)
repeat Xnum
Xcnt = cnt
repeat Ynum
Ycnt = cnt
#マクロ定義終了
こんな感じで書くと、
「#define XYRepeat(%1,%2) Xnum = %1 : Ynum = %2 : repeat Xnum : Xcnt = cnt : repeat Ynum : Ycnt = cnt」
に変換してくれるんですけどね〜
オブジェクト指向も、擬似的にですが対応しているので、そこまで問題ではないし…
記述に不満を感じたら、独自にコンパイラもどき(正式な名称があるのかも)を作るといいですよ〜
とはいえ、標準実装は魅力的ですよね〜
かといって、現在バグなしで使えているのに、仕様変更でバグなんて発生したらいやですよね〜
そこんとこはジレンマですね〜
「守ることと戦うこと ジレンマは終わらない」ですよね〜(元ネタわかる人いるかにゃ?)