// [RCD] Val { A_AAG1_11(default=106, min=-10000000000) A_AAG1_12(default=-106, min=-10000000000) A_AAG1_21(default=106, min=-10000000000) A_AAG1_22(default=-106, min=-10000000000) A_AAG1_31(default=106, min=-10000000000) A_AAG1_32(default=-106, min=-10000000000) A_AAG1_41(default=106, min=-10000000000) A_AAG1_42(default=-106, min=-10000000000) A_AILERON(default=0, min=-10000000000) A_BLADE_PITCH(default=55, min=-10000000000) A_CORE_H(default=180, min=-10000000000) A_ELEVATOR(default=-90, min=-10000000000) A_MAIN_GEAR_1(default=85, min=-10000000000) A_NOSE_GEAR_1(default=-10, min=-10000000000) A_RUDDER(default=0, min=-10000000000) B_TAIL(default=0, min=-10000000000) B_WHEEL(default=0, min=-10000000000) COL_TEAM(default=#FF0000, min=-100000000) C_BODY_1(default=#203A0A, min=-10000000000) C_BODY_2(default=#40701A, min=-10000000000) C_ENGINE(default=#301010, min=-10000000000) C_GLASS(default=#FFFFFF, min=-10000000000) DP_MAIN_GEAR(default=0.3, min=-10000000000) EF_GLASS(default=#00B000, min=-10000000000) EF_TRANSPARENT(default=#00FFFF, min=-10000000000) P_ENGINE(default=0, min=-10000000000) SP_MAIN_GEAR(default=0.1, min=-10000000000) S_AAG1_1(default=-106, min=-10000000000) S_AAG1_2(default=-106, min=-10000000000) S_AAG1_3(default=-106, min=-10000000000) S_AAG1_4(default=-106, min=-10000000000) S_AAG2_1(default=-106, min=-10000000000) S_AAG2_2(default=-106, min=-10000000000) } Key { } Body { Core() { N:Frame(angle=135, option=1) { N:Chip(angle=-135, option=1, color=0, name=BASE) { S:Trim(angle=90) { S:TrimF() { S:Cowl(angle=145, color=#FF0000, effect=EF_TRANSPARENT) { S:Cowl(angle=-149, color=#FF00FF, effect=EF_TRANSPARENT) { E:Cowl(angle=90, color=#FFFF00, effect=EF_TRANSPARENT) { N:Cowl(angle=150, color=#FFFF00, effect=EF_TRANSPARENT) { N:Cowl(angle=-150, color=#FFFF00, effect=EF_TRANSPARENT) { N:Cowl(angle=-175, color=#0000FF, effect=EF_TRANSPARENT) { W:Cowl(angle=-86, color=C_BODY_1) { N:Cowl(angle=6, color=C_BODY_1) { N:Cowl(angle=4, color=C_BODY_1) { W:Cowl(angle=150, option=4, color=C_BODY_1) { } } W:Cowl(angle=135, color=C_BODY_1) { } } S:Cowl(angle=8, color=C_BODY_1) { W:Cowl(angle=105, color=C_BODY_1) { } S:Cowl(angle=6, color=C_BODY_1) { } } W:Cowl(angle=120, color=C_BODY_1) { } } } } } } } } S:Cowl(angle=-145, color=#FF0000, effect=EF_TRANSPARENT) { S:Cowl(angle=149, color=#FF00FF, effect=EF_TRANSPARENT) { E:Cowl(angle=-90, color=#FFFF00, effect=EF_TRANSPARENT) { N:Cowl(angle=-150, color=#FFFF00, effect=EF_TRANSPARENT) { N:Cowl(angle=150, color=#FFFF00, effect=EF_TRANSPARENT) { N:Cowl(angle=175, color=#0000FF, effect=EF_TRANSPARENT) { W:Cowl(angle=86, color=C_BODY_1) { N:Cowl(angle=-6, color=C_BODY_1) { N:Cowl(angle=-4, color=C_BODY_1) { W:Cowl(angle=-150, option=4, color=C_BODY_1) { } } W:Cowl(angle=-135, color=C_BODY_1) { } } S:Cowl(angle=-8, color=C_BODY_1) { W:Cowl(angle=-105, color=C_BODY_1) { } S:Cowl(angle=-6, color=C_BODY_1) { } E:Cowl(angle=-96, color=C_BODY_1) { } } W:Cowl(angle=-120, color=C_BODY_1) { } } } } } } } } E:Cowl(angle=80, color=#00FFFF, effect=EF_TRANSPARENT) { E:Cowl(angle=-160, color=#00FFFF, effect=EF_TRANSPARENT) { E:Cowl(angle=170, color=#00FFFF, effect=EF_TRANSPARENT) { N:Cowl(angle=175, color=#00FFFF, effect=EF_TRANSPARENT) { W:Cowl(angle=90, color=#00FFFF, effect=EF_TRANSPARENT) { E:Cowl(angle=-30, color=C_BODY_1) { N:Cowl(angle=3, option=5, color=C_BODY_1) { } S:Cowl(option=4, color=C_BODY_1) { } S:Cowl(angle=90, option=4, color=0) { } } E:Cowl(angle=30, color=C_BODY_1) { N:Cowl(angle=-3, option=5, color=C_BODY_1) { } S:Cowl(option=4, color=C_BODY_1) { } S:Cowl(angle=-90, option=4, color=0) { } } N:Cowl(color=#00FFFF, effect=EF_TRANSPARENT) { N:Cowl(color=#00FFFF, effect=EF_TRANSPARENT) { E:Cowl(angle=18, option=3, color=C_BODY_1) { } E:Cowl(angle=-18, option=3, color=C_BODY_1) { } } E:Cowl(angle=25, option=5, color=C_BODY_1) { } E:Cowl(angle=-25, option=5, color=C_BODY_1) { } } } } } } } S:TrimF() { S:Trim(color=C_BODY_1) { S:Chip(angle=A_RUDDER, color=COL_TEAM) { E:Rudder(angle=-5, color=COL_TEAM) { } N:RudderF(angle=-5, option=1) { W:RudderF(angle=-70, spring=0.1, damper=0.1) { } } W:Rudder(angle=-170, color=C_BODY_2) { } } S:RudderF(angle=A_ELEVATOR, option=1) { N:Chip(angle=-90, color=C_BODY_2) { N:Rudder(angle=-160, color=C_BODY_2) { } N:Cowl(option=5, color=C_BODY_2) { } S:Rudder(angle=90, color=C_BODY_2) { } } N:Chip(angle=90, color=C_BODY_2) { N:Rudder(angle=-160, color=C_BODY_2) { } N:Cowl(option=5, color=C_BODY_2) { } } } E:Cowl(angle=90, color=#FF0000, effect=EF_TRANSPARENT) { N:Cowl(angle=-130, color=#FF0000, effect=EF_TRANSPARENT) { W:Cowl(angle=-90, color=C_BODY_1) { N:Cowl(option=5, color=COL_TEAM) { } } } } } } } } N:Trim() { W:Frame(angle=90) { W:Chip(angle=-94, color=C_BODY_2) { W:Frame(angle=A_MAIN_GEAR_1) { W:Wheel(brake=B_WHEEL) { } } W:Cowl(color=C_BODY_2) { W:Cowl(color=COL_TEAM) { W:Cowl(color=C_BODY_2) { } } } S:RudderF(angle=90) { W:Arm(power=S_AAG1_1, option=50000, color=0) { } } S:RudderF(angle=12, color=C_BODY_2) { W:Trim(angle=A_AILERON, color=C_BODY_2) { W:Chip(color=COL_TEAM) { W:Chip(color=C_BODY_2) { } } } } } } E:Frame(angle=90) { E:Chip(angle=-94, color=C_BODY_2) { E:Frame(angle=A_MAIN_GEAR_1) { E:Wheel(brake=B_WHEEL) { } } E:Cowl(color=C_BODY_2) { E:Cowl(color=COL_TEAM) { E:Cowl(color=C_BODY_2) { } } } S:RudderF(angle=-90) { E:Arm(power=S_AAG1_1, option=50000, color=0) { } } S:RudderF(angle=-12, color=C_BODY_2) { E:Trim(angle=A_AILERON, color=C_BODY_2) { E:Chip(color=COL_TEAM) { E:Chip(color=C_BODY_2) { } } } } } } S:Cowl(angle=-140, color=#FFFF00, effect=EF_TRANSPARENT) { S:Cowl(angle=125, color=#FFFF00, effect=EF_TRANSPARENT) { S:Cowl(angle=152, color=C_GLASS, effect=EF_GLASS) { N:Cowl(angle=-46, color=C_GLASS, effect=EF_GLASS) { N:Cowl(angle=-6, option=5, color=C_GLASS, effect=EF_GLASS) { } W:Cowl(angle=-94, color=C_GLASS, effect=EF_GLASS) { N:Cowl(angle=-10, option=3, color=C_GLASS, effect=EF_GLASS) { } } E:Cowl(angle=-94, color=C_GLASS, effect=EF_GLASS) { N:Cowl(angle=-10, option=4, color=C_GLASS, effect=EF_GLASS) { } } } W:Cowl(angle=-94, color=C_GLASS, effect=EF_GLASS) { } E:Cowl(angle=-94, color=C_GLASS, effect=EF_GLASS) { } S:Cowl(color=C_BODY_1) { } N:Cowl(angle=179, option=1) { S:Cowl(angle=51, option=1) { E:Cowl(angle=90, option=1) { } W:Cowl(angle=90, option=1) { } } } } } } N:Trim() { N:RLW(angle=90, power=-P_ENGINE, color=COL_TEAM, name=N_NM611E) { W:Trim(angle=-A_BLADE_PITCH, color=C_ENGINE) { } E:Trim(angle=-A_BLADE_PITCH, color=C_ENGINE) { } } N:Cowl(angle=88, color=C_ENGINE) { S:Cowl(angle=-120, color=COL_TEAM) { W:Cowl(angle=-110, option=3, color=C_ENGINE) { } E:Cowl(angle=-110, option=4, color=C_ENGINE) { } } N:Cowl(angle=-120, color=COL_TEAM) { W:Cowl(angle=-110, option=4, color=C_ENGINE) { } E:Cowl(angle=-110, option=3, color=C_ENGINE) { } } } N:Cowl(angle=-168, color=C_BODY_1) { N:Cowl(angle=-8, color=C_BODY_1) { W:Cowl(angle=-87, color=C_BODY_1) { N:Cowl(angle=-4, color=C_BODY_1) { } } E:Cowl(angle=-87, color=C_BODY_1) { N:Cowl(color=C_BODY_1) { } } N:Cowl(angle=-90, color=0, effect=#0000) { } } W:Cowl(angle=-87, color=C_BODY_1) { S:Cowl(angle=-90) { } } E:Cowl(angle=-87, color=C_BODY_1) { S:Cowl(angle=-90, color=C_ENGINE) { } } } S:Cowl(angle=90, color=EF_TRANSPARENT, effect=EF_TRANSPARENT) { S:Cowl(angle=-90, color=#FF0000, effect=EF_TRANSPARENT) { W:Cowl(angle=115, color=EF_TRANSPARENT, effect=EF_TRANSPARENT) { W:Cowl(angle=115, color=EF_TRANSPARENT, effect=EF_TRANSPARENT) { W:Cowl(angle=45, color=C_BODY_1) { E:Cowl(angle=95, color=C_BODY_1) { N:Cowl(angle=6, color=C_BODY_1) { } S:Cowl(angle=4, color=C_BODY_1) { S:Cowl(angle=15, option=5, color=C_BODY_1) { } } } N:Cowl(color=C_BODY_1) { } S:Cowl(color=C_BODY_1) { } } } } E:Cowl(angle=115, color=EF_TRANSPARENT, effect=EF_TRANSPARENT) { E:Cowl(angle=115, color=EF_TRANSPARENT, effect=EF_TRANSPARENT) { E:Cowl(angle=45, color=C_BODY_1) { W:Cowl(angle=95, color=C_BODY_1) { N:Cowl(angle=6, color=C_BODY_1) { N:Cowl(angle=90, color=C_ENGINE) { } } S:Cowl(angle=4, color=C_BODY_1) { S:Cowl(angle=15, option=5, color=C_BODY_1) { } } } N:Cowl(color=C_BODY_1) { } S:Cowl(angle=4, color=C_BODY_1) { } } } } } } N:Frame(angle=106) { N:Arm(angle=-106, power=S_AAG1_1, option=50000, color=0) { } } } } } } } } Lua { --$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ --操作方法(標準) SKAある人は勝手に汁 --上下左右 ピッチ+ロール --Z/C ヨー X/S スロットル F 射撃 G ギア V ブレーキ D ゆっくりうごく --B ゆっくりモードを固定。再びBで解除。 Q 後ろを見るHAT対応しなくてゴメンネ --おまけ:X+Sでエンジンカット --以上。 --一応各機能のSKAでの対応キー --Option1:ゆっくり Option2:ブレーキ Option3:ゆっくり固定 ModeChange:後ろを見る --$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ USE_ANALOG = false;--アナログ使う人はこれをtrueにしる。 pcall(require, "shared/sharedkeyassign.lua"); if not SharedKeyAssign then--SKAもってないpoor boyのために私の設定を押し付ける SharedKeyAssign = {}; SharedKeyAssign.PitchUp = 1; SharedKeyAssign.PitchDown = 0; SharedKeyAssign.RollLeft = 2; SharedKeyAssign.RollRight = 3; SharedKeyAssign.YawLeft = 4; SharedKeyAssign.YawRight = 6; SharedKeyAssign.PowerUp = 5; SharedKeyAssign.PowerDown = 8; SharedKeyAssign.Gear = 13; SharedKeyAssign.ModeChange = 14; SharedKeyAssign.Fire = 12; SharedKeyAssign.Shift = 16; SharedKeyAssign.Option1 = 9; SharedKeyAssign.Option2 = 10; SharedKeyAssign.Option3 = 11; SharedKeyAssign.Option4 = 15; SKA = SharedKeyAssign; end SKA = SharedKeyAssign; SKA.Slow = SKA.Slow or SKA.Option1; SKA.Brake = SKA.Brake or SKA.Option2; SKA.ToggleSlow = SKA.ToggleSlow or SKA.Option3; --ここかららいぶらり --変数が上限、下限からはみ出ていたら、その範囲に拘束する。VALのmax,minの代わりにもどうぞ。 --data:拘束する変数 --min:変数の最小値。dataがこれ以下だったらこの値を返す。 --max:変数の最大値。dataがこれ以上だったらこの値を返す。 --return:minからmaxまでに制限されたdataの値を返す。 function limit(data,min,max) return math.max(min,math.min(max,data)); end --変数を指定した値に向けて動かす。VALのstepの代わりに使える。 --data:動かす変数 --dest:目標値。これに向かって変数は値を変えていく --step:一回の動作量 function step2(data,dest,step) if data>dest then data=data-step; if datadest then data=dest; end end return data, data == dest; end --ここまでらいぶらり --定数とか MaxEnginePower = 360 * 1000; gearStatus = {}; gearStatus[-1] = "Up"; gearStatus[1] = "Down"; --ここまで定数 --初期化。OnInitは信用ならん function Init() _ZOOM(58); gearMode = 1;--最初は降りた状態 motorKanonPos = 1; wingKanonPos = 1; wingLastFire = 0; isSlowMode = false; isToggleSlow = false; pilotDir = 1; end function OnFrame() if not init then--初期化はこうやると安全 init = true; Init(); end local input = {}; Input(input); Wing(input.pitch, input.roll, input.yaw); Engine(input.throttle, input.isThrottleStart, input.isEngineCut); Gear(); Sight(); Weapon(input.isFire); Display(); end --機体の前進速度(m/s)を返す function GetPlaneSpeed() return _VZ(BASE) * -1; end --入力を受けて引数のテーブルに入れる function Input(input) --ここから入力 local pitch, yaw, roll = 0, 0, 0; local throttle, isThrottleStart, isEngineCut = 0, 0, false; local speedRatio = 1; local isFire = false; local isChangePilotDir = false; local speed = GetPlaneSpeed() * 3.6;--飛行速度 local speedFactor = limit(120/speed, 0.3, 1);--高速での舵角を抑える働き。 if speed == 0 then speed = 0.001; elseif speed < 0 then speedFactor = 1; end -- if _KEYDOWN(SKA.Slow) > 0 then トグルズームはきわめて不人気>< -- isSlowMode = not isSlowMode;--こいつだけグローバルを直接書き換えがダサいが・・ -- end if _KEY(SKA.Slow) > 0 then isSlowMode = true; speedRatio = 0.4; else isSlowMode = false; end if _KEYDOWN(SKA.ToggleSlow) > 0 then isToggleSlow = not isToggleSlow; end if isToggleSlow then speedRatio = 0.4; end if SKA.UseAnalog then pitch = pitch + _ANALOG(SKA.AnalogPitch) / 1000 * SKA.AnalogPitchSign; roll = roll + _ANALOG(SKA.AnalogRoll) / 1000 * SKA.AnalogRollSign; yaw = yaw + _ANALOG(SKA.AnalogYaw) / 1000 * SKA.AnalogYawSign; end pitch = pitch + _KEY(SKA.PitchUp) - _KEY(SKA.PitchDown); yaw = yaw + _KEY(SKA.YawLeft) - _KEY(SKA.YawRight); roll = roll + _KEY(SKA.RollLeft) - _KEY(SKA.RollRight); pitch = limit(pitch, -1, 1); roll = limit(roll, -1, 1); yaw = limit(yaw, -1, 1); pitch = pitch * speedRatio * speedFactor; roll = roll * speedRatio * speedFactor; yaw = yaw * speedRatio * speedFactor; --プチ制御 if math.abs(pitch) <= 0.1 then--0.1はアナログのごみ対策。 -- pitch = _WX(BASE) * 0.5 * speedFactor; 勝手に曲がるのでオミット end if math.abs(roll) <= 0.1 then -- roll = _WZ(BASE) * -0.4 * speedFactor; end if _KEY(SKA.Fire) > 0 then--機銃撃つと機首下がるんで補正。 pitch = pitch - 0.0; end --ここまでプチ制御 throttle = _KEY(SKA.PowerUp) - _KEY(SKA.PowerDown); isThrottleStart = (_KEYDOWN(SKA.PowerUp) - _KEYDOWN(SKA.PowerDown)) ~= 0; isEngineCut = (_KEY(SKA.PowerUp) > 0 and _KEY(SKA.PowerDown) > 0) if _KEYDOWN(SKA.Gear) > 0 then gearMode = -gearMode;--これでワンタッチ切り替え end isFire = _KEY(SKA.Fire) > 0; isChangePilotDir = _KEYDOWN(SKA.ModeChange) > 0; input.pitch, input.roll, input.yaw = pitch, roll, yaw; input.throttle, input.isThrottleStart, input.isEngineCut = throttle, isThrottleStart, isEngineCut; input.isFire = isFire; input.isChangePilotDir = isChangePilotDir; ---↑ここまで入力 end --3舵の入力値を受けて舵を動かす function Wing(pitch, roll, yaw) --↓ここから舵 A_ELEVATOR = step2(A_ELEVATOR , (pitch) * -15 - 90, 5);-- -90はエレベタの元の角度 A_RUDDER = step2(A_RUDDER , (yaw) * -25, 5); A_AILERON = step2(A_AILERON , (roll) * 16, 5); --↑ここまで舵 end --エンジン制御 function Engine(throttle, isThrottleStart, isEngineCut) local speed = GetPlaneSpeed() * 3.6; local nowPower = P_ENGINE; local addedPower = P_ENGINE + throttle * (MaxEnginePower/100) * -3;--3%ずつうごく。 --↓ここからエンジン・ぺら if not isThrottleStart then if nowPower * addedPower <= 0 then--掛けてマイナス>正負が逆>出力0をまたぐ のでいったん停止 P_ENGINE = 0; else P_ENGINE = addedPower; end else--KEYDOWNに反応あれば別。問答無用で出力を動かす P_ENGINE = addedPower; end if isEngineCut then P_ENGINE = 0; end P_ENGINE = limit(P_ENGINE, -MaxEnginePower, MaxEnginePower); A_BLADE_PITCH = 48 + (72 - 48) * (speed/300);--0km/hで48deg 300km/hで72degになるようにする。 --↑ここまでエンジン・ぺら end --ギアの出し入れ function Gear() --↓ここからギア if gearMode == 1 then--降りている A_MAIN_GEAR_1 = step2(A_MAIN_GEAR_1, 85, 3); B_WHEEL = _KEY(SKA.Brake) * 100; B_TAIL = 0; elseif gearMode == -1 then--あがっている A_MAIN_GEAR_1 = step2(A_MAIN_GEAR_1, 180, 3); B_WHEEL = 100; B_TAIL = 100; end --↑ここまでギア end --照準描画。引数は色のテーブル function Sight(cols) cols = cols or {}; --↓ここから照準 local xx, xy, xz = _XX(BASE), _XY(BASE), _XZ(BASE) local yx, yy, yz = _YX(BASE), _YY(BASE), _YZ(BASE) local zx, zy, zz = _ZX(BASE), _ZY(BASE), _ZZ(BASE) local x, y, z = _X(BASE), _Y(BASE), _Z(BASE); _SETCOLOR(cols[1] or 255 * 256 * 256 + 64 * 256 + 64); x = x + yx * -0.6 * math.sin(math.rad(90)); y = y + yy * -0.6 * math.sin(math.rad(90)); z = z + yz * -0.6 * math.sin(math.rad(90)); _MOVE3D(x, y, z); _LINE3D(x + zx * -1000, y + zy * -1000, z + zz * -1000); x = x + zx * -50; y = y + zy * -50; z = z + zz * -50; local xSize, ySize = 2, 2; _SETCOLOR(cols[2] or 255 * 256 * 256 + 160 * 256 + 16) _MOVE3D(x + xx * xSize + yx * ySize, y + xy * xSize + yy * ySize, z + xz * xSize + yz * ySize); xSize = -xSize; _LINE3D(x + xx * xSize + yx * ySize, y + xy * xSize + yy * ySize, z + xz * xSize + yz * ySize); ySize = -ySize; _LINE3D(x + xx * xSize + yx * ySize, y + xy * xSize + yy * ySize, z + xz * xSize + yz * ySize); xSize = -xSize; _LINE3D(x + xx * xSize + yx * ySize, y + xy * xSize + yy * ySize, z + xz * xSize + yz * ySize); ySize = -ySize; _LINE3D(x + xx * xSize + yx * ySize, y + xy * xSize + yy * ySize, z + xz * xSize + yz * ySize); --↑ここまで照準 end --武装発射。モータカノンと主翼がごっちゃなってるので気をつけて function Weapon(isFire) --↓ここから武装 S_AAG1_1 = 0; if _KEY(SKA.Fire) > 0 then S_AAG1_1 = 5000000000000; end --↑ここまで武装 end function PilotView(isChange) if isChange then pilotDir = math.mod((pilotDir + 1), 2); end A_CORE_H = step2(A_CORE_H, pilotDir * 180, 15); if isSlowMode or isToggleSlow then--どこまで言っても切り分けてもらえないズームwww local zoom = _ZOOM(0); zoom = step2(zoom, 40, 3); _ZOOM(zoom); else local zoom = _ZOOM(0); zoom = step2(zoom, 58, 3); _ZOOM(zoom); end end --画面表示。 function Display() local speed = GetPlaneSpeed() * 3.6; --↓ここから画面表示 out(0, string.format("FPS = %d", _FPS())); out(1, string.format("Speed = %dkm/h(GSP = %dkm/h)", speed, speed*_FPS()/_BASE())); out(2, string.format("Alt = %dm", _Y(BASE))); out(3, string.format("Engine = %d%%", P_ENGINE*-100/(MaxEnginePower))); out(4, string.format("Gear = %s", gearStatus[gearMode])); if isSlowMode or isToggleSlow then out(5, "Slow Mode"); end --↑ここまで表示 end}