#const WAIT_TIME      3         // ウェイト[10ms]
#const SPEED          5         // 移動スピード
#const CHARACTER_SIZE 1         // キャラクタの描画サイズ
#const BLANK          100       // マップスクロールが始まる位置
    x = 0 : y = ginfo_winy / 2  // キャラクタの位置
    scrollX = 0 : scrollY = 0   // 画面左上のマップ上での位置(=スクロール量)
    mapWidth = 300000              // マップの幅
    buffer 1, mapWidth, ginfo_winy, SCREEN_NORMAL
// ★メインループ★
repeat
    // 適当にマップを準備
    gsel 1
	color
	if C\100 = 0 :pos C,ginfo_winy-(i)-50:mes C
//-----折れ線グラフ描画-----//
	color 255
	line C,ginfo_winy-(i),(C-1),ginfo_winy-(j)
	color ,,255
	boxf C-2,ginfo_winy-(i)-2,C+2,ginfo_winy-(i)+2
	j=i
	i=rnd(30)
	c++
	await 1
    gsel 0
    gosub *moveCharacter    // キャラクタを動かす
    gosub *setScroll        // 描画する位置を決める
    gosub *draw             // いろんな描画処理
    wait WAIT_TIME
loop
// キャラクタを動かす
*moveCharacter
    stick key, 5 : speedX = SPEED * ((key >> 2 & 1) - (key & 1))
    x = limit(x + speedX, 0, mapWidth)
    return
// 描画する位置を決める
*setScroll
    // (x - scrollX)が画面上でのキャラクタの位置になる
    if x - scrollX < BLANK{
        // キャラクタがBLANKより左側に移動した場合、カメラを移動させる
        scrollX = limit(x - BLANK, 0, mapWidth - ginfo_winx)
    }
    if ginfo_winx - BLANK < x - scrollX {
        // キャラクタが(ginfo_winx - BLANK)より右側に移動した場合、カメラを移動させる
        scrollX = limit(x + BLANK - ginfo_winx, 0, mapWidth - ginfo_winx)
    }
    return
//いろんな描画処理
*draw
    redraw 0
    gosub *drawMap          // マップを描画する
    gosub *drawCharacter    // キャラクタを描画する
    redraw 1
    return
// マップを描画する
*drawMap
    pos 0, 0 : gcopy 1, scrollX, scrollY, ginfo_winx, ginfo_winy
    return
// キャラクタを描画する
*drawCharacter
    drawX = x - scrollX : drawY = y
    boxf drawX - CHARACTER_SIZE,250, drawX + CHARACTER_SIZE,ginfo_winy
    return
重いです、助けてください。
他のプログラムに組み込めるほど軽くしてください。