RigidChips Wiki

簡易リファレンス

最終更新:

匿名ユーザー

- view
だれでも歓迎! 編集

モデル構造

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

Val{}

変数を宣言する。ここで宣言した変数は、Body{}内でチップのパラメータに使用したり、Scriptにおいてグローバル変数として用いることが出来る。(省略不可)
変数の作成上限は256個である。

Key{}

キーを押したときに、Val{}で宣言した変数を変化させる、キーアサインについて記述する。(省略不可)

Body{}

モデルの構造を記述する。(省略不可)
Coreを複数記述することもできる。

Script{}

スクリプトを記述する。これによって、自動制御やデータの表示など、高度な処理を行うことが出来る。(省略可)

Lua{}

ver1.5系で組み込まれたスクリプト言語Luaを使用したスクリプトを記述する。 この要素が記述されている場合、 Script{} は無視される。(省略可)

Val{}内の記述

変数名(...)

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

()内で設定できる値

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

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

Body{}内の記述

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

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

チップタイプ

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

構造系チップ

  • コア
    • モデルの元になる。Body直下にしか記述できない。
      core コア モデルの中心
  • チップ系
    • これを中心にモデルを構成していく。
    • 重さ、空気抵抗、摩擦抵抗はCoreと同じ。
      chip チップ Xジョイント相当。angleで角度を指定
      rudder ラダー Yジョイント相当、angleで角度を指定
      trim トリム Zジョイント相当、angleで角度を指定
  • フレーム系
    • 軽く空気抵抗を受けない。
    • 重さはCoreの半分、空気抵抗無し、摩擦抵抗中
      frame フレーム チップのフレーム版
      option=1で見た目と当たり判定を消すことができる
      rudderf ラダーフレーム ラダーのフレーム版
      trimf トリムフレーム トリムのフレーム版
  • ウェイト
    • 重いチップ。
    • 重さはCoreの4倍、空気抵抗はCoreと同じ、摩擦抵抗大
      weight ウェイト optionで重量、耐久力、燃料を8倍まで増やせる

動力系チップ

  • ジェット
    • ローカルY軸方向に推力を発生させる。
    • 空気抵抗は無し、摩擦抵抗低
      jet ジェット powerで出力を指定
      effect(1~4)でスモーク機能
      option(0~2)で形態を変化させる
  • ホイール系
    • 回転する。
    • ホイールのpower = トルク * ( 角速度[rad/sec] + 100 ) * 0.6
      wheel ホイール powerで出力を指定
      option(1,2)で径を変更
      effect(0~10)で太さの変更(見た目のみ)
      rlw リアクションレスホイール wheelと同じ。自重からの反動を持たない

その他系チップ

  • アーム
    • 射撃する。
      arm アーム optionで出力を指定
      powerがoptionを上回ると発射
      optionに比例しチャージ時間と反動が増加する
      optionをマイナスにすることで発射炎だけを出すことができる
  • カウル
    • 一切の当たり判定、空気抵抗を受けない
      cowl カウル option(0~5)で形状を変更できる
      effect(0~#FFFF)透明度、発光度、スペキュラの強度、スペキュラの変更ができる

チップに設定できる設定値

color カラー指定、R,G,B16進又は10進で記述する。例:(color=#FF0000)(赤)
angle 曲げ角度指定、各ジョイントの動きはこれを使う
spring 指定部分がangleの角度に戻ろうとする力を設定する。
(推奨値は0〜1、デフォルトは1、spring=1:戻る spring=0:ふにゃふにゃ)
damper 指定部分の外力に対する硬さを設定する。
(推奨値は0〜0.5、デフォルトは0.5、damper=1:ガチガチ damper=0:しなる)
name チップに名前を付ける。
この名前は変数としてチップ番号が代入され、_X(ABC),_VY(ABC)のようにチップ番号として使える(ver1.01以降)
power jetチップ,wheel系チップ、armチップのみ。詳細はチップごとの説明を参照
brake 動力部にブレーキをかける
option frame系チップ、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) を使います。

math.pi //関数ではなく変数なので()は不要
math.sqrt(値) //√
math.sin(値)
math.cos(値)
math.tan(値)
math.asin(値)
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) //0〜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)
_AX(チップ番号) //角度(ラジアン)
_AY(チップ番号)
_AZ(チップ番号) //Ver1.5B5以前。Ver1.5B5以降でそれぞれ動作が異なる。Ver1.5B5はバグ有り

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

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

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

_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

_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)は同等

タグ:

+ タグ編集
  • タグ:

このサイトはreCAPTCHAによって保護されており、Googleの プライバシーポリシー利用規約 が適用されます。

目安箱バナー