上とA以外のものが押されていても上とAを押せばとにかく実行したい、というときはANDを使って
IF (BUTTON(2) AND 17) THEN ~
のようにすれば余計なものがいっぱい押されていてもきちんとTHEN以降が実行されます。
&B10010101 (149) 左上、A、Yを同時に押す
&B00010001 (17) #UP OR #A
-----------------
&B00010001 (17) 上記のANDの結果
1 OR 16 は結局17になるので、どちらで書いても構いませんよ。
①IF BUTTON(2)==17 THEN ~
②IF BUTTON(2)==(#UP OR #A) THEN ~
見たときのわかりやすさが違う程度でどちらも同じです。わかりやすい表記を好むなら②、短いほうがいいなら①、このへんは好みの問題と言えます。
あと②だと例えばAボタンをXボタンに変えたいとき、#Aを#Xとするだけでいいというのもあります。①風に書くなら65(1 OR 64)ですね。
画像のプログラムについてひとつ言うなら、画面の描画やボタン入力を伴う永久ループを回すときは VSYNC 1 をループ末端(画像ではNEXT)の手前に入れてくださいね。
足し算をするのは複数のボタンを同時に押したとき、それぞれの値をすべて反映させるためです。
ビットとは:
数の単位です。1bitで0と1の2通りを表せます(二進法)。
ちなみに8bitで1byte(バイト)となり、0~255の256通り(2の8乗)の数を表せます。ゲームでよく最大値が255になっているのはこういう理由です。
ORとは:
論理和。C = A OR B のとき、AとBの両方が0のときはC=0、ABどちらかまたは両方が1のときC=1となります。
ビット演算は他にAND、XORがあり、ANDは論理積、ビットごとの掛け算をします。つまり両方が1のときだけ答えが1となります。特定のビットが0か1か調べたり、マスクをかける(特定の部分以外を0にする)のに使います。
XORは排他的論理和というなんかムツカシイ言葉ですが、これはABが同じ値のときは0、違うときは1を返します。
見てみました。(変数名を小文字で表記)
DEF NORTS0 nrt OUT hog0
VAR hog0
(以下略)
DEFで受け渡し用にしている変数名はローカル変数宣言できません。VARで宣言すべきなのはFORで使っているCLとLOP0です。
VAR hog0を消してもこのままだと戻り値未設定なのでDEF終了時にエラーが出ます。どこかでhog0に戻り値を入れておきましょう。