これは難解なスクリプトだぜ!

某質問を見て、ちょっと気になったのですが、もう解決済みになっていたのでここでコソコソと言及してみる。
主に4レス目にて提示されていたスクリプトについて。
ぶっちゃけわけわからん。まず引数に関する説明が何にも無い。しかも簡単にトレースしていくと、何も無いところから引数を取り出している…。意見を求めようと思ったら、随所にコメントを付けるべきですね。質問に答えている方も困っていました。
さて、一通りトレースしてみた所、何気に再帰関数となっていました。しかも引数さえちゃんとしてれば、たぶん機能するであろう形で。
しかしこれじゃあ、ユニットを一つ選択するごとにForEachでユニットリストを作り直すことになるので、お世辞にも優れたスクリプトとは言い難い。
Whileによるループで組むべきですね。
そして一番無駄な行為だったのは、ローカル変数宣言した変数を、別の関数で初期化しようとしていたところですね。
ローカル変数なら、宣言した関数が終了した時点で消えてなくなるので、初期化は必要ないです。
言うだけってのもちょっとアレなので、僕なりにアレンジしたものも一応公開。
一度も動かしてないので、動作保証は一切無し。Escapeしたユニットにヘックス座標データが残っているのかもわかりませんが、一応晒しておきます。長くなるので、「続きを読む」記法で。
最後に、こんな所でコソコソ言うことしかできなくて、ごめんなさい。

出撃:

Local 一覧 待機数 残り 仮出撃
Local 待機ユニット数 = 0

ForEach UnitID In ユニット一覧(HP)
	If (Party() = 味方) And (Status() = 待機) And (IsAvailable(UnitID,母艦) = 0) Then
		一覧[UnitID] = Nickname(UnitID)
		Incr 待機ユニット数
	EndIf
Next

待機数 = 待機ユニット数 + 5

If 待機数 > 50 Then
	残り = 待機数 \ 10
ElseIf 待機数 > 30 Then
	残り = 待機数 \ 5
ElseIf 待機数 > 20 Then
	残り = 待機数 \ 4
ElseIf 待機数 > 10 Then
	残り = 待機数 \ 3
Else
	残り = 待機数
EndIf

Do While (残り > 0)

	# 出撃位置決定処理

	Ask 一覧 "残り出撃数$(残り)" 連続表示 キャンセル可

	If 選択 = "" Then
		残り = 0
	Else
		Launch 選択 <決定したX座標> <決定したY座標>
		Set 仮出撃[選択]
		Unset 一覧[選択]
		Incr 残り -1
	EndIf
Loop

Ask 出撃しますか? キャンセル可
出撃する
考え直す
End

If 選択 = 1 Then
	ForEach UnitID In 仮出撃
		Escape UnitID
		Launch UnitID X(UnitID) Y(UnitID)
	Next
Else
	ForEach UnitID In 仮出撃
		一覧[UnitID] = Nickname(UnitID)
	Next
EndIf

Return