バッファを2つ余分に使用しますが
これでどうでしょうか?
screen 0, 640, 480, 0; // 描画先スクリーン
color 128, 128, 128: boxf; // わかりやすくするため、背景を灰色で塗り潰す
buffer 1, 100, 100, 0; // コピー元バッファ
gradf 0, 0, 100, 100, 1, 0xFF8080, 0xFF0000; // ピンクから赤へのグラデーション
buffer 2, 100, 100, 0; // 処理用バッファ1 ここで描いた円が最終的にコピーするときの円形
color 255, 255, 255: boxf; // 背景を白で塗りつぶし、黒い円を描画する
color 0, 0, 0: circle 0, 0, 100, 100, 1;
buffer 3, 100, 100, 0; // 処理用バッファ2
// 一旦ここにコピーする
pos 0, 0;
gcopy 1, 0, 0, 100, 100;
// 処理用バッファ1を黒透過でコピーする
gmode 2: pos 0, 0;
gcopy 2, 0, 0, 100, 100;
// 描画先ウィンドウへ処理用バッファ2から白透過でコピーする
gsel 0;
pos 270, 190; // 中心にコピーする場合の座標
color 255, 255, 255: gmode 4, , , 256; // これで白透過になる
gcopy 3, 0, 0, 100, 100;
stop;
余計なバッファを使わず、計算で1ドットずつコピーする場合は
コピーする円の中心座標とそれぞれのドットの座標の距離を計算して
算出した距離が円の半径よりも大きければ無視、
半径以下ならコピーという形で実現できるかと思います。