btransはどこから反応するか。

タイトル通り。bexec系命令の一部、btransは、スプライトをボタンにした時、スプライトの透明部分はボタンから排除すると言う宣言的命令です。
実際にどの程度の透明度(不透明度)までを透明とみなすのか、調査してみました。

結論を先に

不透明度が0〜14までの間ならば、それは透明とみなしてボタンとはみなさない
表にしてみる。

反応
不透明度 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
不透明度(16進数) 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
透明度 255 254 253 252 251 250 249 248 247 246 245 244 243 242 241 240
透明度(16進数) FF FE FD FC FB FA F9 F8 F7 F6 F5 F4 F3 F2 F1 F0 ※色指定に使う

つまり、マスク画像の色が#FFFFFFから#F0F0F0までは透明扱いされる訳です。
なお、btrans命令はマスク画像による色指定のみを見るので、mspやamspで指定するスプライトの不透明度がいくらであっても関係がないです。
これを利用して、マスク画像によって矩形以外の形のボタンを作り、そのスプライトの不透明度を0にしてからボタン化すると、不可視のボタンが作成できます。

検証スクリプト

まず、マスク画像を作成します。

一番左端が#FFFFFFで、そこから1ドットにつき1段階黒に近づいていき、左から256番目のドット以降は全て#000000になります。
それを作成したスクリプトはこちら。

*define
game
*start
for %0=0 to 15
	if %0<10 itoa $0,%0
	if %0=10 mov $0,"a"
	if %0=11 mov $0,"b"
	if %0=12 mov $0,"c"
	if %0=13 mov $0,"d"
	if %0=14 mov $0,"e"
	if %0=15 mov $0,"f"
	for %1=0 to 15
		if %1<10 itoa $1,%1
		if %1=10 mov $1,"a"
		if %1=11 mov $1,"b"
		if %1=12 mov $1,"c"
		if %1=13 mov $1,"d"
		if %1=14 mov $1,"e"
		if %1=15 mov $1,"f"
		
		mov %3,255-%0*16-%1
		mov $3,":c;>1,480,#"+$0+$1+$0+$1+$0+$1
		lsp %3,$3,%3,0
	next
next
print 1
getscreenshot 640,480
savescreenshot "mask.bmp"
end

作成されたbmppngに変換するのはお好みで。
そして、それを使った検証スクリプトは以下。

*define
game
*start
lsp 0,":mmask.bmp;>256,480,#000000",0,0
print 1

movemousecursor 0,0

mov %50,0

*loop
itoa2 $50,%50
lsph 100,":s/36,36,0;#FFFFFF"+$50,400,0
movemousecursor %50,0
bclear
btrans
bsp 0,"P100","C100",""
btime 100
bexec $0,%0
getspmode %25,100
if %25=0 mesbox $50,"表示されなくなった最初の数値":jumpf
inc %50
if %50>255 jumpf
goto *loop
~
click
end

このスクリプトによって、不透明度が15の時に初めてボタンとしてみなされることがわかる。