// For orzLake Round val{ steerl(default=180,min=150,max=210,step=5,disp=0) steerr(default=180,min=150,max=210,step=5,disp=0) brkfl(default=0,min=0,max=1000,step=10,disp=0) brkfr(default=0,min=0,max=1000,step=10,disp=0) brkrl(default=0,min=0,max=1000,step=10,disp=0) brkrr(default=0,min=0,max=1000,step=10,disp=0) pow (default=0,min=-10000,max=300000,step=1000000,disp=1) powfl(default=0,min=-40000,max=2000000,step=0,disp=1) powfr(default=0,min=-40000,max=2000000,step=0,disp=1) powrl(default=0,min=-20000,max=1000000,step=0,disp=1) powrr(default=0,min=-20000,max=1000000,step=0,disp=1) trqfl(default=1,min=0,max=1,step=0,disp=1) trqfr(default=1,min=0,max=1,step=0,disp=1) trqrl(default=1,min=0,max=1,step=0,disp=1) trqrr(default=1,min=0,max=1,step=0,disp=1) dmpf(default=0.5,disp=0) sprf(default=0.5,disp=0) dmpr(default=0.5,disp=0) sprr(default=0.5,disp=0) dmp(default=0.5,disp=0) spr(default=0.5,disp=0) col(default=#99ccff,disp=0) } key{ 0:pow(step= 1100) 1:pow(step=-1000) 4:brkfl(step=50),brkfr(step=50),brkrl(step=50),brkrr(step=50) 5:pow(step= 1100) 6:pow(step=-1000) } body{ core(color=col){ w:trimf(spring=spr,damper=dmp,color=col){ w:chip(angle=-90,spring=spr,damper=dmp,color=col){ n:rudderf(angle=15,spring=sprf,damper=dmpf,color=col){ n:chip(angle=steerl,spring=spr,damper=dmp,color=col){ s:wheel(power=-powfl,brake=brkfl,effect=2.5,name=nwfl,spring=spr,damper=dmp,color=col){ } s:trim(angle=-95,spring=spr,damper=dmp,color=col){ } } } s:rudder(angle=-15,spring=sprr,damper=dmpr,color=col){ s:wheel(power=powrl,brake=brkrl,effect=3,name=nwrl,spring=spr,damper=dmp,color=col){ } s:rudder(angle=28,spring=spr,damper=dmp,color=col){ e:chip(angle=-95,spring=spr,damper=dmp,color=col){ } } } } } e:trimf(spring=spr,damper=dmp,color=col){ e:chip(angle=-90,spring=spr,damper=dmp,color=col){ n:rudderf(angle=-15,spring=sprf,damper=dmpf,color=col){ n:chip(angle=steerr,spring=spr,damper=dmp,color=col){ s:wheel(power=powfr,brake=brkfr,effect=2.5,name=nwfr,spring=spr,damper=dmp,color=col){ } s:trim(angle=95,spring=spr,damper=dmp,color=col){ } } } s:rudder(angle=15,spring=sprr,damper=dmpr,color=col){ s:wheel(power=-powrr,brake=brkrr,effect=3,name=nwrr,spring=spr,damper=dmp,color=col){ } s:rudder(angle=-28,spring=spr,damper=dmp,color=col){ w:chip(angle=-95,spring=spr,damper=dmp,color=col){ } } } } } } } Lua{ tgn=0 tgx,tgy,tgz={},{},{} tgs={} tgx[tgn]= -367.89; tgy[tgn]= 31.02; tgz[tgn]= -236.11; tgs[tgn]=3001; tgn=tgn+1 -- 000 tgx[tgn]= -260.60; tgy[tgn]= 31.02; tgz[tgn]= -410.70; tgs[tgn]=3001; tgn=tgn+1 -- 001 tgx[tgn]= -193.26; tgy[tgn]= 31.02; tgz[tgn]= -465.97; tgs[tgn]=3001; tgn=tgn+1 -- 002 tgx[tgn]= -80.77; tgy[tgn]= 30.18; tgz[tgn]= -502.90; tgs[tgn]=3001; tgn=tgn+1 -- 003 tgx[tgn]= 79.26; tgy[tgn]= 28.73; tgz[tgn]= -568.66; tgs[tgn]=3001; tgn=tgn+1 -- 004 tgx[tgn]= 205.89; tgy[tgn]= 28.72; tgz[tgn]= -566.75; tgs[tgn]=3001; tgn=tgn+1 -- 005 tgx[tgn]= 487.22; tgy[tgn]= 17.47; tgz[tgn]= -553.55; tgs[tgn]=3001; tgn=tgn+1 -- 006 tgx[tgn]= 651.39; tgy[tgn]= 17.47; tgz[tgn]= -535.29; tgs[tgn]=3001; tgn=tgn+1 -- 007 tgx[tgn]= 747.20; tgy[tgn]= 17.48; tgz[tgn]= -496.34; tgs[tgn]=3001; tgn=tgn+1 -- 008 tgx[tgn]= 921.41; tgy[tgn]= 17.72; tgz[tgn]= -311.23; tgs[tgn]=3001; tgn=tgn+1 -- 009 tgx[tgn]= 990.38; tgy[tgn]= 17.73; tgz[tgn]= -195.75; tgs[tgn]=3001; tgn=tgn+1 -- 010 tgx[tgn]= 1010.80; tgy[tgn]= 18.22; tgz[tgn]= -27.92; tgs[tgn]=3001; tgn=tgn+1 -- 011 tgx[tgn]= 1011.89; tgy[tgn]= 18.23; tgz[tgn]= 134.88; tgs[tgn]=3001; tgn=tgn+1 -- 012 tgx[tgn]= 995.73; tgy[tgn]= 19.15; tgz[tgn]= 192.11; tgs[tgn]=3001; tgn=tgn+1 -- 013 tgx[tgn]= 923.42; tgy[tgn]= 19.23; tgz[tgn]= 336.74; tgs[tgn]=3001; tgn=tgn+1 -- 014 tgx[tgn]= 889.42; tgy[tgn]= 19.22; tgz[tgn]= 400.36; tgs[tgn]=3001; tgn=tgn+1 -- 015 tgx[tgn]= 757.01 tgy[tgn]= 19.23; tgz[tgn]= 510.44; tgs[tgn]=3001; tgn=tgn+1 -- 016 tgx[tgn]= 663.11; tgy[tgn]= 20.22; tgz[tgn]= 586.66; tgs[tgn]=3001; tgn=tgn+1 -- 017 tgx[tgn]= 580.69; tgy[tgn]= 20.23; tgz[tgn]= 689.50; tgs[tgn]=3001; tgn=tgn+1 -- 018 tgx[tgn]= 513.93; tgy[tgn]= 20.23; tgz[tgn]= 801.21; tgs[tgn]=3001; tgn=tgn+1 -- 019 tgx[tgn]= 515.63; tgy[tgn]= 20.23; tgz[tgn]= 942.09; tgs[tgn]=3001; tgn=tgn+1 -- 020 tgx[tgn]= 569.96; tgy[tgn]= 20.23; tgz[tgn]= 1036.56; tgs[tgn]=3001; tgn=tgn+1 -- 021 tgx[tgn]= 602.23; tgy[tgn]= 20.23; tgz[tgn]= 1111.21; tgs[tgn]=3001; tgn=tgn+1 -- 022 tgx[tgn]= 611.23; tgy[tgn]= 20.22; tgz[tgn]= 1151.84; tgs[tgn]=3001; tgn=tgn+1 -- 023 tgx[tgn]= 549.00; tgy[tgn]= 20.23; tgz[tgn]= 1241.78; tgs[tgn]=3001; tgn=tgn+1 -- 024 --tgx[tgn]= 560.17; tgy[tgn]= 20.23; tgz[tgn]= 1237.49; tgs[tgn]=3001; tgn=tgn+1 -- 024 tgx[tgn]= 361.45; tgy[tgn]= 20.23; tgz[tgn]= 1289.48; tgs[tgn]=3001; tgn=tgn+1 -- 025 tgx[tgn]= 306.84; tgy[tgn]= 20.23; tgz[tgn]= 1289.57; tgs[tgn]=3001; tgn=tgn+1 -- 026 tgx[tgn]= 247.66; tgy[tgn]= 20.23; tgz[tgn]= 1275.66; tgs[tgn]=3001; tgn=tgn+1 -- 027 tgx[tgn]= 13.04; tgy[tgn]= 20.23; tgz[tgn]= 1162.09; tgs[tgn]=3001; tgn=tgn+1 -- 028 tgx[tgn]= -283.27; tgy[tgn]= 20.23; tgz[tgn]= 925.42; tgs[tgn]=3001; tgn=tgn+1 -- 029 tgx[tgn]= -465.84; tgy[tgn]= 32.65; tgz[tgn]= 760.84; tgs[tgn]=3001; tgn=tgn+1 -- 030 tgx[tgn]= -583.92 tgy[tgn]= 40.23; tgz[tgn]= 585.09; tgs[tgn]=3001; tgn=tgn+1 -- 031 tgx[tgn]= -655.52; tgy[tgn]= 37.72; tgz[tgn]= 390.06; tgs[tgn]=3001; tgn=tgn+1 -- 032 tgx[tgn]= -637.46; tgy[tgn]= 30.35; tgz[tgn]= 181.58; tgs[tgn]=3001; tgn=tgn+1 -- 033 tgx[tgn]= -610.81; tgy[tgn]= 30.84; tgz[tgn]= 123.00; tgs[tgn]=3001; tgn=tgn+1 -- 034 tgx[tgn]= -425.27; tgy[tgn]= 31.02; tgz[tgn]= -157.81; tgs[tgn]=3001; tgn=tgn+1 -- 035 dst0=99999999 check=0 auto=0 line=0 pow0=0 CL_R,CL_G,CL_B=0,0,0 CC_R,CC_G,CC_B=1,2,3 BRKFL,BRKFR,BRKRL,BRKRR=0,0,0,0 -- COLOR CHANGE --------------------------------------------------------------- function col_change(r,g,b,rc,gc,bc) if(r==0) then rc=math.floor(math.random()*15)+1 elseif(r==255) then rc=-math.floor(math.random()*15)-1 end if(g==0) then gc=math.floor(math.random()*15)+1 elseif(g==255) then gc=-math.floor(math.random()*15)-1 end if(b==0) then bc=math.floor(math.random()*15)+1 elseif(b==255) then bc=-math.floor(math.random()*15)-1 end r=math.min(255,math.max(0,r+rc)) g=math.min(255,math.max(0,g+gc)) b=math.min(255,math.max(0,b+bc)) return r*65536+g*256+b,r,g,b,rc,gc,bc end -- GETWVEC -------------------------------------------------------------------- function getwvec(lx,ly,lz,cn) local wx=_XX(cn)*lx+_YX(cn)*ly+_ZX(cn)*lz local wy=_XY(cn)*lx+_YY(cn)*ly+_ZY(cn)*lz local wz=_XZ(cn)*lx+_YZ(cn)*ly+_ZZ(cn)*lz return wx,wy,wz end -- GETLVEC -------------------------------------------------------------------- function getlvec(wx,wy,wz,cn) local lx=_XX(cn)*wx+_XY(cn)*wy+_XZ(cn)*wz local ly=_YX(cn)*wx+_YY(cn)*wy+_YZ(cn)*wz local lz=_ZX(cn)*wx+_ZY(cn)*wy+_ZZ(cn)*wz return lx,ly,lz end ------------------------------------------------------------------------------- function main() local t=math.randomseed(1) if(_KEY(14)>0) then t=_SPLIT(C_0) end local vel=-_VZ(C_0) local sp=math.sqrt(_VX(C_0)^2+_VY(C_0)^2+_VZ(C_0)^2)*3.6 local wfl=-_WY(NWFL) local wfr= _WY(NWFR) local wrl= _WY(NWRL) local wrr=-_WY(NWRR) local trq=7 local brk=0 if(_KEYDOWN(10)>0) then if(line==0) then line=1 else line=0 end end if(_KEYDOWN(13)>0) then if(auto==0) then auto=1 else auto=0 end end if(_KEY(14)>0)or(_KEYDOWN(7)>0) then check=math.mod(check+tgn-1,tgn) end if(_KEYDOWN(15)>0) then check=0 end if(_KEY(16)>0)or(_KEYDOWN(9)>0) then check=math.mod(check+1,tgn) end -- Search if(_KEYDOWN(8)>0) then local n,d=0,1000000 local i,l for i=0,tgn-1 do l=math.sqrt((_X(C_0)-tgx[i])^2+(_Y(C_0)-tgy[i])^2+(_Z(C_0)-tgz[i])^2) if(l0) then local lx,ly,lz,dst while true do lx=tgx[check]-_X(C_0) ly=tgy[check]-_Y(C_0) lz=tgz[check]-_Z(C_0) dst=math.sqrt(lx^2+ly^2+lz^2) if(dst*3.53300) then pow0=pow0*1.01+1200 else pow0=pow0*1.01+10 end local maxsp=tgs[check] local lim=math.min((550-sp)*maxsp,math.max(-(550-sp)*50,pow0)) if(lim>0)and(pow0>lim) then pow0=(pow0-500)*0.95 if(pow0-lim>15000) then brk=1 -- BRKFL=BRKFL+50 -- BRKFR=BRKFR+50 BRKRL=BRKRL+50 BRKRR=BRKRR+50 TRQRL=0 TRQRR=0 end elseif(lim<0)and(pow0-1)and(vel<1) then if(vel>=0) then vel=1 else vel=-1 end end local rfl=wfl/vel local rfr=wfr/vel local rrl=wrl/vel local rrr=wrr/vel -- STEERING t=math.min(5,16/math.sqrt(math.abs(vel))) if(_KEY(2)>0) then STEERL=STEERL+t STEERR=STEERR-t end if(_KEY(3)>0) then STEERL=STEERL-t STEERR=STEERR+t end -- ABS if(_KEY(4)~=0) then local v=math.abs(vel)*0.3 if(rfl<2) then BRKFL=BRKFL*0.1 else BRKFL=BRKFL+v end if(rfr<2) then BRKFR=BRKFR*0.1 else BRKFR=BRKFR+v end if(rrl<2) then BRKRL=BRKRL*0.1 else BRKRL=BRKRL+v end if(rrr<2) then BRKRR=BRKRR*0.1 else BRKRR=BRKRR+v end BRKFL=BRKFL*0.5 BRKFR=BRKFR*0.5 elseif(brk>0) then local v=math.abs(vel)*0.3 if(rrl<2) then BRKRL=BRKRL*0.1 else BRKRL=BRKRL+v end if(rrr<2) then BRKRR=BRKRR*0.1 else BRKRR=BRKRR+v end end -- TRC t=trq if(sp>20)and((rfl>t)or(rfr>t)or(rrl>t)or(rrr>t)) then TRQFL=math.max(0.01,TRQFL*0.95) TRQFR=math.max(0.01,TRQFR*0.95) TRQRL=math.max(0.01,TRQRL*0.95) TRQRR=math.max(0.01,TRQRR*0.95) elseif(sp>20)and((rfl<-1)or(rfr<-1)or(rrl<-1)or(rrr<-1)) then TRQFL,TRQFR,TRQRL,TRQRR=0,0,0,0 elseif(_H(NWFL)>1.8)or(_H(NWFR)>1.8)or(_H(NWRL)>1.8)or(_H(NWRR)>1.8) then TRQFL,TRQFR,TRQRL,TRQRR=0,0,0,0 elseif(_H(NWFL)<0)or(_H(NWFR)<0)or(_H(NWRL)<0)or(_H(NWRR)<0) then TRQFL,TRQFR,TRQRL,TRQRR=0,0,0,0 elseif(math.abs(_EZ(C_0))>1.5) then TRQFL,TRQFR,TRQRL,TRQRR=0,0,0,0 else TRQFL=math.max(0.01,TRQFL*1.06+0.05) TRQFR=math.max(0.01,TRQFR*1.06+0.05) TRQRL=math.max(0.01,TRQRL*1.06+0.05) TRQRR=math.max(0.01,TRQRR*1.06+0.05) end -- POWCAL if(_KEY(0)>0)or(_KEY(1)>0) then POW=math.min(5000,math.max(-5000,POW)) end if(_KEY(5)>0)and(_H(NWFL)<0.35)and(_H(NWFR)<0.35) then POW=POW*(1+sp/80) POW=math.min(100000,math.max(-100000,POW)) end POWFL=POW*TRQFL*1.2 POWFR=POW*TRQFR*1.2 POWRL=POW*TRQRL POWRR=POW*TRQRR -- COLOR COL,CL_R,CL_G,CL_B,CC_R,CC_G,CC_B=col_change(CL_R,CL_G,CL_B,CC_R,CC_G,CC_B) out(0,string.format("FPS=%.2f, Chips=%d, Weight=%.2f[kg]",_FPS(),_CHIPS(),_WEIGHT())) out(1,string.format("Speed=%.2f[km/h], Vz=%.2f[m/s]",sp,vel)) -- out(2,string.format("F-Speed=%.2f[km/h], Vz=%.2f[m/s]",sp*_FPS()/30,vel*_FPS()/30)) out(3,string.format("X=%+.2f, Y=%+.2f, Z=%+.2f",_X(C_0),_Y(C_0),_Z(C_0))) out(4,string.format("TGT-No.%03d [Q<D>>E, 0:W, Search:S]",check)) -- out(5,string.format("TX=%+.2f, TY=%+.2f, TZ=%+.2f",tgx[check],tgy[check],tgz[check])) if(line>0) then out(6,"LINE[V] : ON") _SETCOLOR(COL) _MOVE3D(_GX(0),_GY(0),_GZ(0)) _LINE3D(tgx[check],tgy[check],tgz[check]) else out(6,"LINE[V] : OFF") end if(auto>0) then out(7,"AUTO[G] : ON") else out(7,"AUTO[G] : OFF") end -- out(7,"WFL=",wfl,", WFR=",wfr,", WRL=",wrl,", WRR=",wrr) -- out(8,"RFL=",rfl,", RFR=",rfr,", RRL=",rrl,", RRR=",rrr) end }