//4WD Val { AB(default=0, max=90, step=5) BRAKE(default=0, max=80, step=80) DA1(default=0.15, max=1) ENGINE(default=0, min=-5500, max=5500, step=2500) FLW(default=180, min=135, max=225, step=1) FRW(default=180, min=135, max=225, step=1) HANDLE(default=0, min=-30, max=30, step=5) HBRAKE(default=0, max=100, step=100, disp=0) JAG1(default=180, min=150, max=180, step=3) JAG2(default=180, min=120, max=180, step=6) JET(default=0, max=450000) RAS(default=40, min=25, max=40, step=1) RW(default=15, min=-65, max=65, step=1) RW2(default=30, max=50, step=1) RWD(default=0, min=-500000, max=500000, step=100000) SP1(default=0.08, max=1) VRS(default=0, min=-30, max=30, step=2) VRU(default=0, min=-30, max=30, step=2) } Key { 7:Brake(step=30), HBrake(step=20) 8:HBrake(step=20) } Body { Core(color=0) { N:Frame(angle=jag1, option=1) { N:Jet(angle=jag2, power=-jet) { } } S:Frame(angle=-rw) { W:Chip(angle=-rw2) { } E:Chip(angle=-rw2) { } } W:Frame(spring=1, damper=1) { E:Trim(angle=ab, spring=0.4, damper=0) { } W:Frame(angle=-95, spring=1, damper=1) { N:RudderF(angle=15, spring=sp1, damper=da1) { N:Frame(spring=1, damper=0.7) { N:Wheel(angle=-Handle, power=-Engine, brake=Brake, spring=1, damper=1) { } E:RudderF(angle=flw, option=1, spring=1, damper=1) { W:Chip(angle=-100) { } } } } S:Rudder(angle=-ras, spring=sp1, damper=da1) { S:Wheel(power=-Engine, brake=HBrake, spring=1, damper=1) { } } } } E:Frame(spring=1, damper=1) { W:Trim(angle=ab, spring=0.4, damper=0) { } E:Frame(angle=-95, spring=1, damper=1) { N:RudderF(angle=-15, spring=sp1, damper=da1) { N:Frame(spring=1, damper=0.7) { N:Wheel(angle=Handle, power=Engine, brake=Brake, spring=1, damper=1) { } W:RudderF(angle=frw, option=1, spring=1, damper=1) { E:Chip(angle=-100) { } } } } S:Rudder(angle=ras, spring=sp1, damper=da1) { S:Wheel(power=Engine, brake=HBrake, spring=1, damper=1) { } } } } N:Cowl(angle=-178, color=0) { N:Cowl(angle=178) { } } S:RLW(angle=180, power=rwd, brake=2000, color=0) { } } } Script { } Lua {main=function() rol=ekey(rol,_KEY(2),_KEY(3),1,0.15) up=ekey(up,_KEY(0)*1.1,_KEY(1)*1.1,1,0.125) rud=ekey(rud,_KEY(4),_KEY(6),1,0.075) local vx,vy,vz=D3(0) local wx,wy,wz=deg(D4(0,0,0,0.3,"Y",0)),deg(D4(0,0.3,0,0,"Z",1)),deg(D4(0,0,0.3,0,"X",2)) if _KEYDOWN(10)==1 then asw=1-asw set=-vz*3.6 end local upto=SBC(0,wx*wg2,(-up*wg2)*1.8,0.8,1.3,1.05*wg2,23,1*wg2) local rolto=SBC(1,wz*wg2,(-rol*wg2)*1.6,0.8,2.5,1*wg2,20,1*wg2) if asw==1 then wg1=math.min(15,wg1+1.1) wg2=math.min(1,wg2+0.125) BRAKE=30 HBRAKE=20 JAG1=JAG1-3 JAG2=JAG2-6 RAS=RAS-1 set=math.min(350,math.max(0,set+(_KEY(5)*3)-(_KEY(8)*10))) JET=SBC(2,set-(-vz*3.6),0,30,160,25,20000,1) AB=0-SBC(3,(set-(-vz*3.6)),0,0.5,2.8,1,20,1) RW=(15-wg1)+(upto*0.7) FLW=180-(wg1*1.2)-rolto-(upto*0.5) FRW=180+(wg1*1.2)-rolto+(upto*0.5) RW2=(30-(wg1*1.2)) HANDLE=HANDLE+(_KEY(6))-(_KEY(4)) SP1=1 DA1=1 vsw=1 out(2,set," ",-vz*3.6) if vsw==1 then v_s=math.min(1,v_s+0.1) elseif vsw==0 then v_s=math.max(0,v_s-0.1) end RWD=(SBC(5,(wy*v_s),rud*5*vsw,1.2,43,2*v_s,40,1*v_s))*500 elseif asw==0 then vsw=0 wg1=math.max(0,wg1-1.1) wg2=math.max(0,wg2-0.125) v_s=math.max(0,v_s-0.1) vsw=0 ENGINE=ENGINE+(_KEY(1)*500)-(_KEY(0)*500) JET=0 HANDLE=HANDLE+(_KEY(3))-(_KEY(2)) SP1=0.085 DA1=0.16 set=0 end end function SBC(s1b,s2b,s3b,n1,q1,q2,s4b,s5b) if not K_fs then K_fs={} end if K_fs[s1b]==nil then K_fs[s1b]=0 ss={} _G["ss"..s1b]={} _G["ss"..s1b][s1b]=0 _G["ss"..s1b][s1b+1]=0 _G["ss"..s1b][s1b+2]=0 _G["ss"..s1b][s1b+3]=0 _G["ss"..s1b][s1b+4]=0 end _G["ss"..s1b][s1b]=((s3b+s2b)*n1) _G["ss"..s1b][s1b+1]=(_G["ss"..s1b][s1b]-_G["ss"..s1b][s1b+3])+_G["ss"..s1b][s1b] if s4b~=nil then _G["ss"..s1b][s1b+2]=min(s4b,max(-s4b,(_G["ss"..s1b][s1b+2]+_G["ss"..s1b][s1b])*s5b)) elseif s4b==nil then _G["ss"..s1b][s1b+2]=(_G["ss"..s1b][s1b+2]+_G["ss"..s1b][s1b])*s5b end _G["ss"..s1b][s1b+3]=_G["ss"..s1b][s1b] return (_G["ss"..s1b][s1b]+(_G["ss"..s1b][s1b+1]*q1)+(_G["ss"..s1b][s1b+2]*q2)) end function D3(n) if not xz_n then xz_n,yz_n,zz_n={},{},{} end if xz_n[n]==nil or yz_n[n]==nil or zz_n[n]==nil then xz_n[n],yz_n[n],zz_n[n]=_X(n),_Y(n),_Z(n) end local x1,x2,x3=(_X(n)-xz_n[n])*_XX(n),(_Y(n)-yz_n[n])*_XY(n),(_Z(n)-zz_n[n])*_XZ(n) local y1,y2,y3=(_X(n)-xz_n[n])*_YX(n),(_Y(n)-yz_n[n])*_YY(n),(_Z(n)-zz_n[n])*_YZ(n) local z1,z2,z3=(_X(n)-xz_n[n])*_ZX(n),(_Y(n)-yz_n[n])*_ZY(n),(_Z(n)-zz_n[n])*_ZZ(n) local x=((x1+x2+x3)*30) local y=((y1+y2+y3)*30) local z=((z1+z2+z3)*30) xz_n[n],yz_n[n],zz_n[n]=_X(n),_Y(n),_Z(n) return x,y,z end function ekey(v,k1,k2,max,st) v=v+(((k1-k2)*max)-v)*st return v end function D4(n,lx,ly,lz,st,No) local xx1,xx2,xx3=_XX(n)*-lx,_XY(n)*-lx,_XZ(n)*-lx local yy1,yy2,yy3=_YX(n)*-ly,_YY(n)*-ly,_YZ(n)*-ly local zz1,zz2,zz3=_ZX(n)*-lz,_ZY(n)*-lz,_ZZ(n)*-lz local xx=_X(n)+((xx1-yy1-zz1)) local yy=_Y(n)+((xx2-yy2-zz2)) local zz=_Z(n)+((xx3-yy3-zz3)) if not xz_n4 then xz_n4,yz_n4,zz_n4={},{},{} end if not xz_n4[n] then xz_n4[n],yz_n4[n],zz_n4[n]={},{},{} end if not xz_n4[n][No] then xz_n4[n][No], yz_n4[n][No],zz_n4[n][No]=xx,yy,zz end local x1,x2,x3=(xx-xz_n4[n][No])*_XX(n),(yy-yz_n4[n][No])*_XY(n),(zz-zz_n4[n][No])*_XZ(n) local y1,y2,y3=(xx-xz_n4[n][No])*_YX(n),(yy-yz_n4[n][No])*_YY(n),(zz-zz_n4[n][No])*_YZ(n) local z1,z2,z3=(xx-xz_n4[n][No])*_ZX(n),(yy-yz_n4[n][No])*_ZY(n),(zz-zz_n4[n][No])*_ZZ(n) local x=((x1+x2+x3)*(_BASE()/35)) local y=((y1+y2+y3)*(_BASE()/35)) local z=((z1+z2+z3)*(_BASE()/35)) xz_n4[n][No],yz_n4[n][No],zz_n4[n][No]=xx,yy,zz local xx1,xx2,xx3=_XX(n)*lx,_XY(n)*lx,_XZ(n)*lx local yy1,yy2,yy3=_YX(n)*ly,_YY(n)*ly,_YZ(n)*ly local zz1,zz2,zz3=_ZX(n)*lz,_ZY(n)*lz,_ZZ(n)*lz local xx=_X(n)+((xx1-yy1-zz1)) local yy=_Y(n)+((xx2-yy2-zz2)) local zz=_Z(n)+((xx3-yy3-zz3)) if not xz_n4t then xz_n4t,yz_n4t,zz_n4t={},{},{} end if not xz_n4t[n] then xz_n4t[n],yz_n4t[n],zz_n4t[n]={},{},{} end if not xz_n4t[n][No] then xz_n4t[n][No], yz_n4t[n][No],zz_n4t[n][No]=xx,yy,zz end local x1,x2,x3=(xx-xz_n4t[n][No])*_XX(n),(yy-yz_n4t[n][No])*_XY(n),(zz-zz_n4t[n][No])*_XZ(n) local y1,y2,y3=(xx-xz_n4t[n][No])*_YX(n),(yy-yz_n4t[n][No])*_YY(n),(zz-zz_n4t[n][No])*_YZ(n) local z1,z2,z3=(xx-xz_n4t[n][No])*_ZX(n),(yy-yz_n4t[n][No])*_ZY(n),(zz-zz_n4t[n][No])*_ZZ(n) local x2=((x1+x2+x3)*(_BASE()/35)) local y2=((y1+y2+y3)*(_BASE()/35)) local z2=((z1+z2+z3)*(_BASE()/35)) xz_n4t[n][No],yz_n4t[n][No],zz_n4t[n][No]=xx,yy,zz if st=="X"then return x-x2 elseif st=="Y"then return y-y2 elseif st=="Z"then return z-z2 end end function vl(ag,limit,s_sw,mx,my,mz,lx,ly,lz) if _G["off_time"..ag]==nil then _G["off_time"..ag]=0 in_sw={} end _G["v_p"..ag.._G["off_time"..ag]]={mx,my,mz,lx,ly,lz} _G["ti_m"..ag.._G["off_time"..ag]]={_TICKS()+limit} if s_sw>0 then in_sw[_G["off_time"..ag]]=1 elseif s_sw==0 then in_sw[_G["off_time"..ag]]=0 end if _G["ti_m"..ag.._G["off_time"..ag]][1]==_TICKS() then _G["ti_m"..ag.._G["off_time"..ag]]=nil end _G["off_time"..ag]=_G["off_time"..ag]+1 if _G["off_time"..ag]==limit+1 then _G["off_time"..ag]=0 end for li=0,limit do if _G["ti_m"..ag..li]~=nil then if _TICKS()>2 then if in_sw[li]>0 then _MOVE3D(_G["v_p"..ag..li][1],_G["v_p"..ag..li][2],_G["v_p"..ag..li][3]) _LINE3D(_G["v_p"..ag..li][4],_G["v_p"..ag..li][5],_G["v_p"..ag..li][6]) end end end end end function _VZ(n) if not yz_n1 then xz_n1,yz_n1,zz_n1={},{},{} end if yz_n1[n]==nil then xz_n1[n],yz_n1[n],zz_n1[n]=_X(n),_Y(n),_Z(n) end local y1,y2,y3=(_X(n)-xz_n1[n])*_ZX(n),(_Y(n)-yz_n1[n])*_ZY(n),(_Z(n)-zz_n1[n])*_ZZ(n) local y=((y1+y2+y3)*30) xz_n1[n],yz_n1[n],zz_n1[n]=_X(n),_Y(n),_Z(n) return y end color=function(r,g,b) return math.min(255,math.floor(r))*65536+math.min(255,math.floor(g))*256+math.min(255,math.floor(b)) end function setn() wg1=0 wg2=0 asw=0 set=0 vsw=0 v_s=0 abs=math.abs sin=math.sin cos=math.cos rad=math.rad deg=math.deg max=math.max min=math.min mod=math.mod abs=math.abs floor=math.floor sqrt=math.sqrt atan2=math.atan2 atan=math.atan set=table.setn up,rol,rud=0,0,0 end setn() --[[///////////////////////////////// 実はわりと古いモデルなので、制御や作りはあんまり良くない。 通常は走行モード。4wd.txtと同じ。 Vで飛行モードで、XSで指定速度変更、ZCでラダー。 4wdの空力はお世辞にも良いと言えず、飛行中の走行モード変形は確実に墜落します。 なので変形は陸上、及び低速での低空で。 制御の仕様上、水中対策してないので、水中はほぼ確実に暴走状態になります。 あとラダー操作にはかなりクセがあります。低速では酷いロールが出たり。 ]]}