そのソースコードだとエラーになって動かないのですが、どのようなタイミングでaが0になるのでしょうか?
以下推測して書きますが、たとえば次のようなコードだと、
モジュール"内"のaの中身は最初だけ0で、以降は50になっているのがわかります。
*l
Test 50
wait 10
goto *l
#module
#deffunc Test int x
if (b == 0) {
a=0
b = 1
} else {
a=x
}
mes a
return
#global
ところが次のようなコードだと、モジュール"外"のaの中身はずっと0であるのがわかります。
*l
Test 50
mes a
wait 10
goto *l
#module
#deffunc Test int x
if (b == 0) {
a=0
b = 1
} else {
a=x
}
return
#global
このように同じ変数名でも、モジュール外とモジュール内では別の変数として扱われます。
困っている理由はそこが原因だと推測しましたが、いかがでしょうか?