R-BASIC (Robot BASIC) ドキュメント

← RBS 総合ヘルプ・プレイヤーズガイド (player_guide.md)

Robot Building Simulator (RBS) の自律ロボット制御用スクリプト言語 R-BASIC のマニュアルです。


📚 ドキュメント構成

  1. 言語仕様書 (rbasic_spec.md)
  2. R-BASIC の完全な言語仕様、文法、演算子優先順位、組み込み定数、センシング関数、物理アクション命令、リソース制限を網羅しています。
  3. 入門・実践チュートリアル (rbasic_tutorial.md)
  4. 初めてスクリプトを書く人向けに、パトロールから資材運搬、自律移動(find / go)、変数・メモリー配列によるマルチタスク、マーカー連携、座標指定ナビゲーション(target_at / move_to)までをステップ形式で解説しています。

⚡ クイックチートシート (Quick Reference)

物理アクション命令 (1 Tick 消費)

命令 動作
get 正面の資材スタックから材料を 1 個拾う
put 手持ちの材料を正面の建築指示に投入、または地面に置く
step (または move) 前方に 1 歩進む(1段の階段・段差昇降対応)
turn <方向式> 向きを変える(定数・変数・式を指定可能。例: turn NORTH + 1)
go find(...) でロックしたターゲットへ最短経路で 1 歩進む
wait その場で何もしないで 1 Tick 待機

制御構文

構文 動作
*label または label: ジャンプ先ラベルの定義
goto *label 指定ラベルへ無条件ジャンプ
if <条件> then <文> [else <文>] 条件に応じて1文を実行(then 必須、else は省略可能)
gosub *label サブルーチン呼び出し(最大128段)
return サブルーチンから復帰
end プログラム終了(ロボットを待機・スリープ状態にする)

状態変数・センシング関数 (0 Tick / 即時評価)

式・関数 戻り値・内容
carrying 手に持っている材料種別 (NONE, LIGHT, BALANCED, HEAVY, TENSILE)
units 手持ち材料のユニット数 (0〜8)
pos_x, pos_y, pos_z 現在座標 (X, Y, Z)
dir 現在の方角 (NORTH, EAST, SOUTH, WEST)
assigned_mat UIで設定された担当材料種別
assigned_part UIで設定された担当部材種別 (PILLAR, FLOOR, STAIR, WALL)
check(dir) 指定方向のセル種別 (EMPTY, MATERIAL, ORDER, CONSTRUCTION, MARKER)
material(dir) 指定方向の材料種別
order(dir) 指定方向の予定部材種別
marker(dir) 指定方向のマーカー形状 (MK_RED_CONE など)
find(target) 対象を表す定数・変数・式を評価して探索し、ロック(成功時 1、失敗時 0)
has_target ナビゲーション目標が設定済みなら 1、未設定なら 0
target_x, target_y, target_z 対象物のセル座標(未設定時は -1)
dest_x, dest_y, dest_z ロボットが立つ作業位置・移動先のセル座標(未設定時は -1)
go_result 直前の go の結果 (GO_NONE, GO_MOVED, GO_ARRIVED, GO_FAILED)
target_at(x, y, z) 指定セルの対象物(材料・指示・施工中・マーカー)の作業位置を目標設定(成功時 1、失敗時 0)
move_to(x, y, z) 歩行・到達可能な指定セルそのものを移動先に目標設定(成功時 1、失敗時 0)

メモリ・変数・ログ

構文 説明
<変数名> = <式> ローカル変数への代入(最大128個、初期値0)
mem[<式>] = <式> メモリー配列への書き込み(インデックス 0〜63)
mem[<式>] メモリー配列からの読み込み
print <式> ログ出力およびロボット頭上にフキダシ表示(タグ付き定数はシンボル名に変換、文字列・数値連結対応)

定数シンボル

定数は上位バイトにカテゴリを持つため、下位値が同じ LIGHT、FLOOR、SOUTH、BACK は互いに異なる値です。加減算は可能ですが、命令が値を使う時点でカテゴリと範囲を検査します。PRINT 文で出力する際は、対応するシンボル名(例: "HEAVY", "NORTH")として自動的に文字列変換されます。