簡易リファレンス

詳細なリファレンスは、Rigid Chips モデル展示館さんのものを参照の事。
特に指定がなければ比重は0.7

モデル構造

Rigid Chipsでは、モデルの内容はテキストファイルで記述される。
その中身は下記の5つのブロックから成り、各々の{}の中に設定値が書き込まれている。
コメントアウトは//。ただし、luaブロックの中だけは--。
現在バグで、scriptブロックかluaブロックの後のコメントアウトは
ハングアップ等含むエラーとなるので注意。(修正は困難)

Val{}
変数を宣言する。ここで宣言した変数は、Body{}内でチップのパラメータに使用したり、Scriptにおいてグローバル変数として用いることが出来る。(省略不可)
Key{}
キーを押したときに、Val{}で宣言した変数を変化させる、キーアサインについて記述する。(省略不可)
Body{}
モデルの構造を記述する。(省略不可)
Script{}
スクリプトを記述する。これによって、自動制御やデータの表示など、高度な処理を行うことが出来る。(省略可)
Lua{}
ver1.5系で組み込まれたスクリプト言語Luaを使用したスクリプトを記述する。
この要素が記述されている場合、 Script{} は無視される。(省略可)

Val{}内の記述

変数名(...)

変数名は、大文字小文字は区別されません。 (ただしlua内で用いる場合はすべて大文字にします。)

()内で設定できる値

default初期値省略時:0
min最小値省略時:0
max最大値省略時:floatの最大値
stepdefault値に近づこうとする値省略時:0
disp0:変数の内容の表示しない。
0以外:表示する。
(ver1.03以降)
省略時:0以外

例:default=10で現在値が15でstep=1の場合 15,14,13…11,10,10と変化していく。
ただし Key{},Script{},Lua{}内で値が更新されてる間は変化しない。
ただし 更新されていても変化量が0の場合(key{a:0(step=0)} script{a=a}等)変化しない

Key{}内の記述

キー番号:変数名(step=???)

キーが押されている間、変数にstepで指定された値が加算されます。
変数はカンマで区切って複数記述できます。
キーの割り当ては Setting - Configure Input または こちら を参照

Body{}内の記述

方角名:チップタイプ名(...) {...}

方角名 = "N", "E", "W", "S"
{}内には、子になるチップ(そのチップに接続するチップ)を記述します。 子が無くても{}は省略できません。

チップタイプ

Body{}内に記述出来るチップの種類です。
特別、指定が無いチップはangleはChip()と同様にXジョイント相当になる。

  • 構造系チップ 特に但し書きがなければ比重は0.7
コア - モデルの元になる。Body直下にしか記述できない。
重さ:中。空気抵抗:中。摩擦抵抗:小。angle等は指定不可。
燃料2,000,000(Ver 1.5B24)。
coreコア
チップ系 - 基本的にこれでモデルを建築していく。
重さ:中。空気抵抗:中。摩擦抵抗:小。
燃料1,000,000(Ver 1.5B24)。
chipチップXジョイント相当。angleで角度を指定
rudderラダーYジョイント相当、angleで角度を指定
trimトリムZジョイント相当、angleで角度を指定
フレーム系 - 軽く空気抵抗を受けない。
重さ:軽。空気抵抗無し。摩擦抵抗:中。option=1でゴースト化(透明。接触判定無し)
燃料500,000(Ver 1.5B24)。
frameフレームチップのフレーム版
rudderfフレームラダーラダーのフレーム版
trimfフレームトリムトリムのフレーム版
ウェイト - 重いチップ。
重さ:重。空気抵抗:中。摩擦抵抗:大。比重が4倍(2.8)。
燃料は6,000,000で、この燃料が優先的に消費される(→切り離す燃料タンク用)。
また、Optionで重量と燃料を一括で8倍まで上げることが出来る(Ver 1.5B24)。
weightウェイト
カウル - 飾りチップ。接触判定等がなく処理速度もパネルより早くなる。
重さ:0。接触判定等無し。optionで形が変わる
cowlカウルカウルにはカウルしか付ける事が出来ない。
  • 動力系チップ
ジェット - チップY軸方向に推力を発生させる。
powerで推力を指定。effectでスモーク機能、optionで1(水素風船), 2(空気風船)
jetジェットエンジン
6[power] = 1[N]
ホイール系 - 回るチップ。
powerで出力を指定。optionで大きさを変更。effectで太さ変更(接触判定変わらず)
リムとホイールで2chip分、name でホイール側、name - 1 でリム側を指定出来る。
wheelホイール
rlw無反動ホイール自重からの反動がないホイール
ホイールのpower = トルク × ( 角速度 + 100 ) × 0.6
  • 武装系チップ
アーム - 射撃武器。
optionに弾の強さを入力。さらにそれ以上のpowerが設定されることで、弾が発射される。
弾の強さの分だけ威力と当たり判定が大きくなるが、その分充電時間がかかり、反動も大きくなる。
充電速度は150000/秒。
armアーム
  • Weightチップ(ver1.5B1以降)
  • Cowlチップ(ver1.5B1以降)
  • Wheelのoptionで大きさを変更(ver1.5B1以降)
  • Jetのeffectでスモーク機能(ver1.5B4以降)
  • Wheelのeffectで太さ変更(ver1.5B5以降)
  • Armチップ(ver1.5B8以降)
  • フレーム系のoptionでゴースト化(ver1.5B8以降)
  • Jetのoptionで風船化(ver1.5B10以降)

()内で設定できる値

colorカラー指定、R,G,B16進で指定する。 例(赤に設定):color=#FF0000
angle曲げ角度指定、各ジョイントの動きはこれを使う
spring指定部分がangleの角度に戻ろうとする力を設定する。
(推奨値は0〜1、デフォルトは1)
damper指定部分の外力に対する硬さを設定する。
(推奨値は0〜0.5、デフォルトは0.5、damper=1:ガチガチ damper=0:しなる)
nameチップに名前を付ける。
この名前は,関数の引数として、_X(ABC),_VY(ABC)のようにチップ番号として使える(ver1.01以降)
powerJetチップ,Wheel系チップ、ARMチップのみ。詳細はチップごとの説明を参照
brake動力部にブレーキをかける
optionframe系チップ、Cowlチップ,Wheel系チップ、Jetチップ、ARMチップ、Weightチップのみ。
変数は指定できない。詳細はチップごとの説明を参照。
(ver1.5B1以降, Jetチップはver1.5B10以降、WeightチップはVer1.5B24以降)
effect見た目を変える属性。Jetチップ,Wheel系チップのみ。詳細はチップごとの説明を参照。
(それぞれver1.5B4, 1.5B5以降)
user1シナリオ等で使用(変数指定可能)
user2シナリオ等で使用(変数指定不可)

script{}内の記述

スクリプトはフレーム毎に呼び出されます。

script内で使える命令

IF 条件式 {...}	//〜の条件が成立した場合{}内の命令を実行する
GOTO xxxx		//LABEL xxxxの場所へジャンプする
LABEL xxxx	//GOTO xxxxのジャンプ先を定義する
PRINT X,xxxx	//X行目にxxxxを表示する(Xは0〜9)
		  コンマで区切って、数値、""で囲まれた文字列を指定できる。
		  (Xは0〜100)(ver1.5B1以降)
変数名 = ...	//変数への代入

IF文は、入れ子にすることはできません。(できないことはないが、バグがある。)
Val{}で宣言していない変数を使用した場合は、ローカル変数になります。
関数は単独で記述すると正常に動作しないことがあるため、値を取得する必要がない関数でも、変数に代入する形で使用する必要があります。
例 : dummy = _BYE(1)

各種演算子

+	加算
-	減算
*	乗算
/	除算
= 	等しい
!= <>	等しくない
>	より大きい
<	より小さい
>=	以上
<=	以下
&	条件式のAND
|	条件式のOR

算術関数(script)

_ABS(値)		//絶対値
_MOD(値1,値2)	//値1を値2で割った余り
_INT(値)		//整数部を返す
_FIX(値)		//整数部を返す
_FLOOR(値)	//切り捨て
_CEIL(値)		//切り上げ
_ROUND(値)	//四捨五入 (Ver1.5b4以降)
_SGN(値)		//符号を返す。値が負なら-1を、正なら1を、0なら0を返す
_RND()		//乱数0〜1
_SQRT(値)		//平方根
_POW(値1,値2)	//べき乗 (値1)の(値2)乗
_EXP(値)		//eの(値)乗
_LEN3(a,b,c)	//sqrt(a*a+b*b+c*c)
_LEN2(a,b)	//sqrt(a*a+b*b)
_PI()		//円周率
_TODEG(ラジアン)	//ラジアン→度へ変換
_TORAD(度)	//度→ラジアンへ変換
_SIN(値)
_COS(値)
_TAN(値)
_ASIN(値)
_ACOS(値)
_ATAN(値)
_ATAN2(値1,値2)
_LOG(値)
_LOG10(値)

Lua{}内の記述

function main() 〜 end がフレーム毎に呼び出されます。
次の関数も使用可能です。

  • OnInit 初期化時・モデル読み込み時に呼び出される。
  • OnReset リセット時に呼び出される。
  • OnFrame 各フレーム毎に呼び出される。この関数がある場合は、mainは呼ばれない。

Luaでは、 PRINT の代わりに out(X,xxxx) を使います。

算術関数(Lua)

LuaではRigid Chipsの算術関数は使えません。 代わりに、Luaの算術関数を使います。

math.pi		//関数ではなく変数なので()は不要
math.sqrt(値)	//√
math.sin(値)
math.cos(値)
math.tan(値)
math.sin(値)
math.acos(値)
math.atan(値)
math.atan2(値1,値2)
math.abs(値)	//絶対値
math.mod(値1,値2)	//値1を値2で割った余り
math.pow(値1,値2)	//べき乗 (値1)の(値2)乗, x^y とも書ける
math.exp(値)
math.floor(値)	//切り捨て
math.ceil(値)	//切り上げ
math.log(値)
math.log10(値)
math.max(x, y, ...)	//最大値
math.min(x, y, ...)	//最小値
math.frexp(値)		// r, e = math.frexp(x); x = r * 2^e
math.ldexp(値1,値2)	// x = math.ldexp(r, e); frexpの逆関数
math.random()		//乱数0〜1未満 _RND()相当
math.random(n)		//1〜nの整数の乱数
math.random(x,y)		//x〜yの整数の乱数
math.randomseed(値)	//乱数の初期化
math.deg(値)		//ラジアン→度へ変換
math.rad(値)		//度→ラジアンへ変換

大抵の物は揃っているが、 _INT(),_FIX(),_ROUND(),_SGN(),_LEN2(),_LEN3() に相当する物がないので、 それらが必要な場合は自分で関数を定義しましょう。

math.int = function (x) if x < 0 then return math.ceil(x) else return math.floor(x) end end
math.fix = math.int
math.round = function (x) return int(x + 0.5*sgn(x)) end
math.sgn = function (x) if x < 0 then return -1 elseif x == 0 then return 0 else return 1 end end
math.len2 = function (a, b) return math.sqrt(a*a+b*b) end
math.len3 = function (a, b, c) return math.sqrt(a*a+b*b+c*c) end

Script, Lua内で使える関数

一般情報取得関数

_DT()		//内部でのシミュレーション計算における単位時間
_FPS()		//Frame Per Second、1秒間に実際に描画されたフレーム数
_TICKS()		//描画フレーム数(1フレーム(1/30秒)毎に1ずつ増加する)
_BASE()		//FPSの上限の設定値 (30または15)(Ver1.5B系のみ)
_SETTICKS()	//_TICKS()の値を設定し直す
_CHIPS()		//全体のチップの数(wheel系は中にリムが入っているので2つでカウント)
_WEIGHT()		//全体の重さ(kg)
_WIDTH()		//画面の幅
_HEIGHT()		//画面の高さ
_FACE()		//地形データのポリゴン数
_KEY(キー番号)	//押されているかのチェック(押されてれば1なければ0)
_KEYDOWN(キー番号)	//キーが押された時に1が返る(Ver1.5B系のみ)
_KEYUP(キー番号)	//キーが離された時に1が返る(Ver1.5B系のみ)

_ANALOG(0)	//ジョイスティックX軸の値(-1000から1000)
_ANALOG(1)	//ジョイスティックY軸の値(-1000から1000)
_ANALOG(2)	//ジョイスティックスロットル軸の値(-1000から1000)
_ANALOG(3)	//(Ver1.5B系のみ)
_ANALOG(4)	//(Ver1.5B系のみ)
_ANALOG(5)	//(Ver1.5B系のみ)
_HAT(0)		//ジョイスティックのハットスイッチの値

_MX()		//マウスのx座標取得(画面左端を基準としたピクセル数)(Ver1.5B系のみ)
_MY()		//マウスのy座標取得(画面上端を基準としたピクセル数)(Ver1.5B系のみ)
_ML()		//マウスの左ボタン状態取得(Ver1.5B系のみ)
_MR()		//マウスの右ボタン状態取得(Ver1.5B系のみ)
_MM()		//マウスの中ボタン状態取得(Ver1.5B系のみ)

ビューへの描画関数

すべてVer1.5B系のみ

_SETCOLOR(カラー)	//ライン色の設定(例 #FF0000)
_MOVE3D(x,y,z)	//3Dライン描画の始点の設定
_LINE3D(x,y,z)	//3Dライン描画の終点の設定
_MOVE2D(x,y)	//2次元ラインの始点設定
_LINE2D(x,y)	//2次元ラインの終点設定&描画

2次元座標は、画面中央を (0,0) とし、上端が y=1、下端が y=-1とした正規化座標系。 (x座標は右側が大きくなるが、左端、右端の座標は画面の縦横比によって変化する。)

チップ属性取得関数

チップ番号の代わりに、 name= で指定した名前を使うことが出来ます。

_X(チップ番号)	//位置		西が+、東が-
_Y(チップ番号)			上が+、下が-
_Z(チップ番号)			南が+、北が-

_EX(チップ番号)	//オイラー角度(ラジアン) (Ver1.5B系のみ)
_EY(チップ番号)	//基本的に_AX,_AY_AZと同じだが、AZの範囲と符号のバグを修正し、高速化したもの
_EZ(チップ番号)	
_RX(チップ番号,参照チップ番号)	//相対オイラー角(ラジアン) (Ver1.5B系のみ)
_RY(チップ番号,参照チップ番号)	//チップ番号が調べたいチップ
_RZ(チップ番号,参照チップ番号)	//参照チップ番号が比較元チップ 例 _RY(3,0)
//以下の三つはVer1.5B6以降では非推奨。それぞれ_EX(),_EY(),_EZ()を使われたし
_AX(チップ番号)	//角度(ラジアン)
_AY(チップ番号)
_AZ(チップ番号)	//Ver1.5B5以前。Ver1.5B5以降でそれぞれ動作が異なる。Ver1.5B5はバグ有り

_LX(チップ番号)	//角運動量
_LY(チップ番号)
_LZ(チップ番号)
_WX(チップ番号)	//角速度
_WY(チップ番号)
_WZ(チップ番号)

_VEL(チップ番号)	//並進速度の絶対値 (Script専用、Luaでは使用不可)
_VX(チップ番号)	//並進速度
_VY(チップ番号)	//単位は m/s
_VZ(チップ番号)
_FX(チップ番号)	//並進運動量
_FY(チップ番号)
_FZ(チップ番号)

_H(チップ番号)	//地面からの高さ。地面から10m以上離れている場合は-100000がかえってくる

// 以降すべてVer1.5B系のみ
_GX(チップ番号)	//重心座標(そのチップが属している塊の重心を返す)
_GY(チップ番号)
_GZ(チップ番号)

_XX(チップ番号)	//X軸ベクトル(各チップの回転行列(3x3)を1行ずつとりだしたもの)
_XY(チップ番号)
_XZ(チップ番号)
_YX(チップ番号)	//Y軸ベクトル
_YY(チップ番号)
_YZ(チップ番号)
_ZX(チップ番号)	//Z軸ベクトル
_ZY(チップ番号)
_ZZ(チップ番号)

_QX(チップ番号)	//クォータニオン
_QY(チップ番号)
_QZ(チップ番号)
_QW(チップ番号)

_I(チップ番号,列番号,行番号) 
		//チップの慣性テンソル(3x3)の値取得、列番号・行番号は(0,1,2)

_TYPE(チップ番号)	//チップのタイプ
_PARENT(チップ番号)	//接続元チップ番号
_TOP(チップ番号)	//属する系の元チップ番号
_DIR(チップ番号)	//チップの接続方向

_ANGLE(チップ番号)	//チップの各種設定値
_POWER(チップ番号)
_SPRING(チップ番号)
_DAMPER(チップ番号)
_BRAKE(チップ番号)
_COLOR(チップ番号)
_OPTION(チップ番号)
_EFFECT(チップ番号)
_USER1(チップ番号)
_USER2(チップ番号)

_M(チップ番号)	//チップの質量
_E(チップ番号)	//ARMエネルギーのチャージ量
_T(チップ番号)	//チップの耐久力, ARM弾が当たると減少, 0〜10000, -1は破壊済みチップ

チップへの特殊命令

_BYE(チップ番号)	//チップを切り離す
_SPLIT(チップ番号)	//チップを分離する._BYE()の動力付き版(Ver1.5B系のみ)
		//cowlチップのみを切り離すと、cowlチップはそのまま空中に静止する

オブジェクト属性取得関数

すべてVer1.5B系のみ

_OX(オブジェクト番号)	//ボールの位置
_OY(オブジェクト番号)
_OZ(オブジェクト番号)

_MOBJ(オブジェクト番号)	//オブジェクトの質量
_IOBJ(オブジェクト番号,列番号,行番号)
			//オブジェクトの慣性テンソル(3x3)の値取得、列番号・行番号は(0,1,2)

CCDカメラ属性取得関数

Coreチップのカメラの画像を取得することが出来ます。
(x,y)座標は、左上が(0,0)、右下が(63,63)

_CCD(x,y)	     //CCDカメラの色情報(x,y)15ビットRGB整数値
_RED(x,y)	     //CCDカメラの赤情報(x,y)0〜1実数値
_GREEN(x,y)   //CCDカメラの緑情報(x,y)0〜1実数値
_BLUE(x,y)    //CCDカメラの青情報(x,y)0〜1実数値
_ZOOM(視野角)

ネットワーク関連

ネットワークによるマルチプレイを使用するとき、各プレイヤの情報を取得できます。
すべてVer1.5B系のみ

_PLAYERS()	//ネットワークプレイヤの人数
_PLAYERHOSTID()	//ホストのID
_PLAYERMYID()	//自分のID

//以降、nは 0 〜 _PLAYERS()-1
_PLAYERID(n)	//n番目のプレイヤのID
_PLAYERCHIPS(n)	//n番目のプレイヤのチップ数
_PLAYERARMS(n)	//n番目のプレイヤのARMチップ数
_PLAYERCOLOR(n)	//n番目のプレイヤのマーカ色
_PLAYERCRUSHES(n)	//n番目のプレイヤの破壊された回数  (破壊=Coreの耐久度<0)
_PLAYERINITS(n)	//n番目のプレイヤの初期化回数
_PLAYERRESETS(n)	//n番目のプレイヤのリセット回数
_PLAYERYFORCES(n)	//n番目のプレイヤの強制上向き力の回数
_PLAYERX(n)	//n番目のプレイヤのCoreの位置x
_PLAYERY(n)	//n番目のプレイヤのCoreの位置y
_PLAYERZ(n)	//n番目のプレイヤのCoreの位置z
		//他人のCoreの位置にはそれぞれ±5mほどの雑音が乗せてある
_PLAYERNAME(n)	//n番目のプレイヤの名前 (Luaでは文字列が返る)
_PLAYERNAME2(n,i)	//n番目のプレイヤの名前2 (Script専用、Luaでは使用不可)

Scriptでは文字列を扱えない都合上、_PLAYERNAME(n) では 4byte分の数値が返る。 4byte以上の名前がほしい場合は、_PLAYERNAME2(n,i) を使う。 4byte分の数値をprint文によって文字として表示する場合は、$を付けて次のようにする。

print 0,$_PLAYERNAME(0)	//最初の4Byteのみ
print 0,$_PLAYERNAME2(0,0),$_PLAYERNAME2(0,1),$_PLAYERNAME2(0,2)
		// _PLAYERNAME2(0,0)と$_PLAYERNAME(0)は同等