誰でも自由に使用・改造できるスクリプトです。
変数名は重複などないよう適切に設定を。


トルク分配スクリプト V0.01(2007/12/01)

Val

EngineFE(default=0,min=-50000,max=10000,step=2500)
EngineFW(default=0,min=-50000,max=10000,step=2500)
EngineRE(default=0,min=-50000,max=10000,step=2500)
EngineRW(default=0,min=-50000,max=10000,step=2500)

//minとmaxは少なくともEngineの4倍は確保するように~

Body

W:Wheel(angle=90,brake=Brake,power=-EngineFW,name=FW){}

//powerの符号は適当に調べておいてください
//他省略。これを参考に適当に……

Script

REA=_abs(_wy(RE))
RWA=_abs(_wy(RW))
FEA=_abs(_wy(FE))
FWA=_abs(_wy(FW))
R=(_abs(_wy(RE))+_abs(_wy(RW)))
F=(_abs(_wy(FE))+_abs(_wy(FW)))
ALL=R+F//全回転数
RRF=R/ALL//リア回転数の割合
ENGINES=ENGINE*4
engine2F=engineS*RRF
engine2R=engineS-engine2F
RZ=REA/(REA+RWA)
RZ2=1-RZ
FZ=FEA/(FEA+FWA)
FZ2=1-FZ
engineFE=engine2F*FZ2
engineFW=engine2F*FZ
engineRE=engine2R*RZ2
engineRW=engine2R*RZ


4WD車簡易制御システム V0.1(2008/1/24)

Val

ENGINE(default=0,min=-1000,max=1000,step=500,disp=1)
RENGINE(default=0,min=-5000,max=12000,step=0,disp=1)
LENGINE(default=0,min=-5000,max=12000,step=0,disp=1)
HANDLE(default=180,min=160,max=200,step=5,disp=1)
RUDDER(default=0,min=-20,max=20,step=5,disp=1)
FWING(default=-165,min=-165,max=-150,step=5,disp=1)
RWING(default=-160,min=-160,max=-145,step=5,disp=1)
MBRAKE(default=0,max=10,step=5,disp=1)
BRAKE(default=10,max=140,disp=1)
HBRAKE(default=10,max=180,disp=1)

//ENGINEはkeyで直接操作する変数.これに色々加えてR,LENGINEに突っ込む.
//RENGINE、LENGINEはそのまんま右車輪、左車輪のこと.
//HANDLEもそのまんまの意味.モデルによってdefaultが違うと思うので適宜調整して.
//RUDDERはHANDLEに連動して動くR,LENGINEに入れる変数.
//HANDLEを直接入れても良かったが上の理由から面倒なので別に用意した.
//FWING、RWINGはそれぞれフロント,リア用ウイング.
//前輪、後輪それぞれの間に配置する.用途はダウンフォースとエアブレーキ.
//MBRAKEはENGINEと似たようなもの.これに色々加えてBRAKE,HBRAKEに突っ込む.
//BRAKE,HBRAKEもほぼ同じだがBRAKEは前輪用,HBRAKEは後輪用.
//HBRAKEを少し効きやすく変数を大きくすると車体が安定する.

Key

0:ENGINE(step=100)
1:ENGINE(step=-100)
2:Handle(step=-2),RUDDER(step=-2)
3:Handle(step=2),RUDDER(step=2)
7:MBRAKE(step=2),FWING(step=3),RWING(step=3)


Body

N:Chip(Angle=FWING){
}
W:RudderF(Angle=HANDLE){
E:Wheel(Angle=-95,Power=LENGINE,Brake=BRAKE,Option=1,Effect=3){
}
}

//これはテスト用に作ったモデルの一部をコピペしているだけなので後は各自で調整してください.

Script

これはLuaで作ったのでLua{}の中に入れてください.

function engine()--エンジン--
RENGINE=ENGINE*(4+math.abs(_VZ(0))*0.1+_AX(0)*2-RUDDER*0.1)
LENGINE=ENGINE*(4+math.abs(_VZ(0))*0.1+_AX(0)*2+RUDDER*0.1)
end

()の中にあるのを順番に説明すると
4は最初にエンジンが出す出力の係数.この場合はENGINEがmax=1000となっているので、4000が出る.
この係数は各自車体の重さによって決めてください.大体,4〜8がお勧め.
次のmath.abs(_VZ(0))*0.1は速度によって出力を変化させるもの.
_VZ(0)はコアチップの前後方向の速度を返す.math.abs()はカッコの中の絶対値を返します.
これで速度が上がるにつれ出力が上がるようになる.
係数の0.1を大きくすると出力の上がり方も大きくなるが余り大きくすると制御しづらくなる.
_AX(0)*2は車体の傾斜によって出力を変化させるもの.
_AX(0)はコアチップのX回転軸回りの回転角度を返す.
これによって,上り坂では出力が上がり上りやすくなる.
RUDDER*0.1はハンドルの切れ角に応じて左右のエンジンに出力差を出すもの.
左右のエンジンでは+と-を変えることに注意.
係数は大きくすれば曲がりやすくなるが,ここら辺は好みなので自由に.

function brake()--ブレーキ--
BRAKE=MBRAKE*(3+math.abs(_VZ(0))*0.2)
HBRAKE=MBRAKE*(4+math.abs(_VZ(0))*0.2)

ここは上のエンジンと同じようなことをしているので割愛.
後輪のHBRAKEを少し大きくしておくと安定する.

if _KEY(8)==1 then--ハンドブレーキ--
HBRAKE=250
end

key8(Sキー)を押すと後輪のハンドブレーキのみ作動する.
何故かmaxより大きな数を入れても表示は変わらないが作動する.

end
function disp()--表示--
out(0,"名前")--モデルの名前を入れよう--
out(1,"FPS ",_FPS()," CHIPS ",_CHIPS()," WEIGHT ",_WEIGHT())

FPS,Chip数,重量を表示する

vel=-_VZ(0)*3.6
out(2," Vel=",vel,"km/h")--速度表示--
end
function main()
engine()
brake()
disp()
end

とまぁ,こんな感じだけどこれはあくまで”簡易”だから
速度を上げてったりジャンプやヘアピンとか難しいコースには対応できないかもね.
これには搭載しなかったけどTRCやABS,可変ウイングによる姿勢制御に4輪独立制御とか.
そもそも,このエンジン制御にも欠陥があるしね.バックで坂道上ると…?
ま、これを参考に車作ってください.
(´・ω・`)

自動車用ライトモジュール ver0.2(2008/10/23)

Val

ブレーキランプ
ブレーキランプ用変数 BLAMPがRGBカラー用で2がエフェクト用.

BLAMP(default=#660000,disp=0)
BLAMP2(default=#34F3,disp=0)

ヘッドライト
ブレーキランプとほぼ同じ HL_MODEはモード切替用.

HLIGHT(default=#666600,disp=1)
HLIGHT2(default=#15A0,disp=1)
HL_MODE(default=0,min=0,max=1,step=0,disp=1)

ウインカー
上に同じだが左右用があるのと点滅させるためのTIMERがある.

RWINKER(default=#FF662B,disp=1)
LWINKER(default=#FF662B,disp=1)
RWINKER2(default=#15A0,disp=1)
LWINKER2(default=#15A0,disp=1)
RWK_mode(max=1)
LWK_mode(max=1)
TIMER(max=50)

Body

N:Cowl(angle=-90,color=HLIGHT,Effect=HLIGHT2){
}
S:Cowl(angle=-90,color=BLAMP,Effect=BLAMP2){
W:Cowl(color=LWINKER,Effect=LWINKER2){
}
E:Cowl(color=RWINKER,Effect=RWINKER2){
}
}

これは動作テスト用のものなので,これを参考に自分のモデルに加えること.

Script

Luaで書いたのでLua{}に入れること

function disp()--画面表示--
if HL_MODE==1 then
out(3,"LIGHT: ON")
else
out(3,"LIGHT: OFF")
end
out(4," WINKER")
if (LWK_MODE==0) and (RWK_MODE==0) then
out(5,"L ● ● R")
end
if (LWK_MODE==1) and (RWK_MODE==0) then
out(5,"L ○ ● R")
end
if (LWK_MODE==0) and (RWK_MODE==1) then
out(5,"L ● ○ R")
end
if (LWK_MODE==1) and (RWK_MODE==1) then
out(5,"L ○ ○ R")
end
end

画面に今のヘッドライト及びウインカーの状態を表示させるもの.
正直ウインカーに関してはもうちょっとマシな表示方法があると思う….

function brake()--ブレーキランプ--
if _KEY(7)==1 then
BLAMP2=effect(0,15,1,15)
BLAMP=rgb(255,0,0)
else
BLAMP2=effect(0,4,15,3)
BLAMP=rgb(160,0,0)
end
end

ブレーキをかけたとき(この場合,_KEY(7)つまりAキーを押したとき)ブレーキが光る

function light()--ヘッドライト--
local k=_KEY(14)
if(k>0)and(key14==0) then
if(HL_MODE==0) then
HL_MODE=1
else
HL_MODE=0
end
end
if(HL_MODE==0) then
HLIGHT = rgb(66,66,66)
HLIGHT2 = effect(0,5,10,4)
else
HLIGHT = rgb(240,240,255)
HLIGHT2 = effect(0,15,1,15)
end
key14=k
end

ヘッドライト 一回Wキーを押すと点灯しもう一度押すと消える.
詳しくはRigid Chips リファレンスマニュアルの
http://www.eonet.ne.jp/~owhari/rc/reference/rc_rf_script_c301.htm
を参照のこと

function timer()--タイマー--
TIMER=TIMER+1
if (TIMER==50) then
TIMER=0
end
end

ウィンカーを点滅させる為のもの
50まで1刻みで増えていき,50になると0からまたスタートする

function wk_mode()--ウインカーモード切替--
local k=_KEY(11)
if(k>0)and(key11==0) then
if(RWK_MODE==0) then
RWK_MODE=1
else
RWK_MODE=0
end
end
key11=k
local j=_KEY(10)
if(j>0)and(key10==0) then
if(LWK_MODE==0) then
LWK_MODE=1
else
LWK_MODE=0
end
end
key10=j
end

ヘッドライトとほぼ同じ.ウィンカー自体を点滅させるのは下のwk()関数

function wk()--ウィンカー--
if(RWK_MODE==1) or (LWK_MODE==1) then
timer()
else
TIMER=0
end
if(RWK_MODE==1) and (TIMER<25) then
RWINKER=rgb(255,102,43)
RWINKER2= effect(0,15,1,15)
else
RWINKER=rgb(200,82,23)
RWINKER2= effect(0,5,10,4)
end
if(LWK_MODE==1) and (TIMER<25) then
LWINKER=rgb(255,102,43)
LWINKER2= effect(0,15,1,15)
else
LWINKER=rgb(200,82,23)
LWINKER2= effect(0,5,10,4)
end
end

実際にウィンカーを点滅させるのはココ.
TIMERが25以下のときでウィンカーのモード切替がなされたときに光る.
TIMER()をウィンカーが点滅させるときだけ呼び出しているため,タイミングによって
押した瞬間に光らない,ということは無い

function rgb(r,g,b)--RGB変換--
return math.floor(r) * 65536 + math.floor(g) * 256 + math.floor(b)
end

RGBのカラーを10進数に変換させるもの

function effect(p,q,s,r)--エフェクト変換--
return math.floor(p)* 4096+math.floor(q)*256+math.floor(s)*16+math.floor(r)
end

上と同じエフェクトを10進数に変換させるもの
ホントは直接数字を変数に代入してもいいんだけど上手く使えばグラデーションとか
ゆっくり光を強くしたりとか面白いことに使えるのであえて使ってみた

function main()
brake()
light()
wk_mode()
wk()
disp()
end

補足
このスクリプトは4WD車簡易制御システムとの併用も考慮して作ってある.
なのでこのスクリプトのdisp(),brake()の中身を4WD車の同じ関数内に加えて,
残りの関数をそのまま加えればおk

追加の方法

編集モードで以下5行の行頭の~をはずしてここと上の間に追加

*タイトル

***Val

***Body

***Script

#hr


出来れば日付を入れるのが望ましい。
まかり間違ってもここに上書きしないように。