ORを取る意味はあまりないですね・・・
L,Rを取るのに&H300だと分かりにくいので、定数リテラルを使用して、
B=A AND (#L OR #R)
とか書いたりします。
ORでなく+でも結果は同じですけど、理屈で言うならORです。
これが真なら「どちらかが押さえている」となります。
同時押しかどうかを調べるなら、
B=(A AND (#L OR #R))==(#L OR #R)
ですね。書き方は他にもあると思いますが。
最初にされていたように座標で判定する場合、スプライトのドット座標ではなく、BGキャラ単位で判定するといいですよ。
BGCOORD 0,X+8,Y+8,1 OUT BGX,BGY
IF BGX==7 && BGY==5 THEN ~
やり方は色々あるし、どれが正しいというのもないので、作りやすいやり方法を見つけてください。
スプライトとBGの判定をするのは、BGGETを使うのが一番多いパターンだと思います。
ただこういうRPGっぽいのだと階段が複数あったりもするので、座標で判定するのも正しいやり方です。
BGGETを使うなら、キャラの原点が左上だとすると、
BGET = BGGET(0,X+8,Y+8,1) AND &HFFF
IF BGET==&H362 THEN ~
&H362が下りる階段のキャラ番号。
「AND &HFFF」するのは、取得できる値がキャラ番号+アトリビュート(回転反転など)なので、そのうちのキャラ番号だけを取るための処理です。
0ビット目が、C AND POW(2,0)
1ビット目が、C AND POW(2,1)
2ビット目が、C AND POW(2,2)・・・・
をつなげればいいんじゃないかな。
これをFOR文などで回しますが、桁数は
LOG(C,2)
からうまく取ってください。
BIN$、欲しいですね。たまにチェックとかで必要になります。
USEは、SLOT0をRUNした時の事前チェックと同じ動きではないでしょうか。
DIM/VARの働きは
1.シンボル登録 2.型の決定 3.代入
の3つだと思いますが、事前チェック(=USE)では1のみを行い、他は実行時、という仕様だと認識しています。
変数の登録だけをして型や内容を決めないのは、DEFでも起こりますね。
DEF A OUT B
END
これは実行時にエラーが出ます。中に「B=0」などと記述しなければなりません。かといって「DIM B」などと書くと、今度は重複エラー。シンボルだけ登録されている状態です。
これは以前にハカセから、「DEFは出力先の変数の型が確定するのが最初に代入した時だったはずなので、型が定まらない状態という事でエラーになっている可能性があります」との回答を頂きました。
ていうかそもそも皆さん、そんなにコードの途中でDIM/VARを書かれるんですか??
そして移動予定座標の4隅を判定。
4隅とも障害物でなければ、実際の座標を新座標に置き換える。
IF (BGGET(0,X+XX,Y+YY,1) AND &HFFF)!=416 && (BGGET(0,X+XX+15,Y+YY,1) AND &HFFF)!=416 && (BGGET(0,X+XX,Y+YY+15,1) AND &HFFF)!=416 && (BGGET(0,X+XX+15,Y+YY+15,1) AND &HFFF)!=416 THEN
X=X+XX
Y=Y+YY
ENDIF