// cube x8 val{ jpowu_1(default=0,min=-10000000,max=10000000,step=0,disp=0) jpowf_1(default=0,min=-10000000,max=10000000,step=0,disp=0) jpowl_1(default=0,min=-10000000,max=10000000,step=0,disp=0) col_1(default=#FFFFFF,disp=0) jpowu_2(default=0,min=-10000000,max=10000000,step=0,disp=0) jpowf_2(default=0,min=-10000000,max=10000000,step=0,disp=0) jpowl_2(default=0,min=-10000000,max=10000000,step=0,disp=0) col_2(default=#0000FF,disp=0) jpowu_3(default=0,min=-10000000,max=10000000,step=0,disp=0) jpowf_3(default=0,min=-10000000,max=10000000,step=0,disp=0) jpowl_3(default=0,min=-10000000,max=10000000,step=0,disp=0) col_3(default=#00FF00,disp=0) jpowu_4(default=0,min=-10000000,max=10000000,step=0,disp=0) jpowf_4(default=0,min=-10000000,max=10000000,step=0,disp=0) jpowl_4(default=0,min=-10000000,max=10000000,step=0,disp=0) col_4(default=#FF0000,disp=0) jpowu_5(default=0,min=-10000000,max=10000000,step=0,disp=0) jpowf_5(default=0,min=-10000000,max=10000000,step=0,disp=0) jpowl_5(default=0,min=-10000000,max=10000000,step=0,disp=0) col_5(default=#00FFFF,disp=0) jpowu_6(default=0,min=-10000000,max=10000000,step=0,disp=0) jpowf_6(default=0,min=-10000000,max=10000000,step=0,disp=0) jpowl_6(default=0,min=-10000000,max=10000000,step=0,disp=0) col_6(default=#FF00FF,disp=0) jpowu_7(default=0,min=-10000000,max=10000000,step=0,disp=0) jpowf_7(default=0,min=-10000000,max=10000000,step=0,disp=0) jpowl_7(default=0,min=-10000000,max=10000000,step=0,disp=0) col_7(default=#FFFF00,disp=0) jpowu_8(default=0,min=-10000000,max=10000000,step=0,disp=0) jpowf_8(default=0,min=-10000000,max=10000000,step=0,disp=0) jpowl_8(default=0,min=-10000000,max=10000000,step=0,disp=0) col_8(default=#000000,disp=0) spr(default=0.9,disp=0) dmp(default=0.9,disp=0) flag(default=0,min=0,max=2,step=2,disp=0) } key{ 0:flag(step=1) 1:flag(step=1) 2:flag(step=1) 3:flag(step=1) } body{ core(name=c_0,color=col_1){ n:jet(name=c_1,power=jpowu_1,color=col_1,angle=90){ n:jet(angle=90,power=jpowf_1,color=col_1,spring=spr,damper=dmp){ } w:jet(angle=90,power=jpowl_1,color=col_1,spring=spr,damper=dmp){ } e:jet(angle=90,power=-jpowl_1,color=col_1,spring=spr,damper=dmp){ } s:jet(angle=90,power=-jpowf_1,color=col_1,spring=spr,damper=dmp){ s:jet(angle=90,power=-jpowu_1,color=col_1,spring=spr,damper=dmp){ } } } w:jet(name=c_2,power=jpowu_2,color=col_2,angle=90){ n:jet(angle=90,power=jpowf_2,color=col_2,spring=spr,damper=dmp){ } w:jet(angle=90,power=jpowl_2,color=col_2,spring=spr,damper=dmp){ } e:jet(angle=90,power=-jpowl_2,color=col_2,spring=spr,damper=dmp){ } s:jet(angle=90,power=-jpowf_2,color=col_2,spring=spr,damper=dmp){ s:jet(angle=90,power=-jpowu_2,color=col_2,spring=spr,damper=dmp){ } } } e:jet(name=c_3,power=jpowu_3,color=col_3,angle=90){ n:jet(angle=90,power=jpowf_3,color=col_3,spring=spr,damper=dmp){ } w:jet(angle=90,power=jpowl_3,color=col_3,spring=spr,damper=dmp){ } e:jet(angle=90,power=-jpowl_3,color=col_3,spring=spr,damper=dmp){ } s:jet(angle=90,power=-jpowf_3,color=col_3,spring=spr,damper=dmp){ s:jet(angle=90,power=-jpowu_3,color=col_3,spring=spr,damper=dmp){ } } } s:jet(name=c_4,power=jpowu_4,color=col_4,angle=90){ n:jet(angle=90,power=jpowf_4,color=col_4,spring=spr,damper=dmp){ } w:jet(angle=90,power=jpowl_4,color=col_4,spring=spr,damper=dmp){ } e:jet(angle=90,power=-jpowl_4,color=col_4,spring=spr,damper=dmp){ } s:jet(angle=90,power=-jpowf_4,color=col_4,spring=spr,damper=dmp){ s:jet(angle=90,power=-jpowu_4,color=col_4,spring=spr,damper=dmp){ } } } n:jet(name=c_5,power=jpowu_5,color=col_5,angle=90){ n:jet(angle=90,power=jpowf_5,color=col_5,spring=spr,damper=dmp){ } w:jet(angle=90,power=jpowl_5,color=col_5,spring=spr,damper=dmp){ } e:jet(angle=90,power=-jpowl_5,color=col_5,spring=spr,damper=dmp){ } s:jet(angle=90,power=-jpowf_5,color=col_5,spring=spr,damper=dmp){ s:jet(angle=90,power=-jpowu_5,color=col_5,spring=spr,damper=dmp){ } } } w:jet(name=c_6,power=jpowu_6,color=col_6,angle=90){ n:jet(angle=90,power=jpowf_6,color=col_6,spring=spr,damper=dmp){ } w:jet(angle=90,power=jpowl_6,color=col_6,spring=spr,damper=dmp){ } e:jet(angle=90,power=-jpowl_6,color=col_6,spring=spr,damper=dmp){ } s:jet(angle=90,power=-jpowf_6,color=col_6,spring=spr,damper=dmp){ s:jet(angle=90,power=-jpowu_6,color=col_6,spring=spr,damper=dmp){ } } } e:jet(name=c_7,power=jpowu_7,color=col_7,angle=90){ n:jet(angle=90,power=jpowf_7,color=col_7,spring=spr,damper=dmp){ } w:jet(angle=90,power=jpowl_7,color=col_7,spring=spr,damper=dmp){ } e:jet(angle=90,power=-jpowl_7,color=col_7,spring=spr,damper=dmp){ } s:jet(angle=90,power=-jpowf_7,color=col_7,spring=spr,damper=dmp){ s:jet(angle=90,power=-jpowu_7,color=col_7,spring=spr,damper=dmp){ } } } s:jet(name=c_8,power=jpowu_8,color=col_8,angle=90){ n:jet(angle=90,power=jpowf_8,color=col_8,spring=spr,damper=dmp){ } w:jet(angle=90,power=jpowl_8,color=col_8,spring=spr,damper=dmp){ } e:jet(angle=90,power=-jpowl_8,color=col_8,spring=spr,damper=dmp){ } s:jet(angle=90,power=-jpowf_8,color=col_8,spring=spr,damper=dmp){ s:jet(angle=90,power=-jpowu_8,color=col_8,spring=spr,damper=dmp){ } } } } } /////////////////////////////////////////////////////////////////////////////// Lua{ mode=0; cstep=6 c_0 = 0; c_1 = 1; c_2 = c_1+cstep; c_3 = c_2+cstep; c_4 = c_3+cstep; c_5 = c_4+cstep; c_6 = c_5+cstep; c_7 = c_6+cstep; c_8 = c_7+cstep; tgtx={}; tgty={}; tgtz={}; tgtx[c_1]=0; tgty[c_1]=0; tgtz[c_1]=0; tgtx[c_2]=0; tgty[c_2]=0; tgtz[c_2]=0; tgtx[c_3]=0; tgty[c_3]=0; tgtz[c_3]=0; tgtx[c_4]=0; tgty[c_4]=0; tgtz[c_4]=0; tgtx[c_5]=0; tgty[c_5]=0; tgtz[c_5]=0; tgtx[c_6]=0; tgty[c_6]=0; tgtz[c_6]=0; tgtx[c_7]=0; tgty[c_7]=0; tgtz[c_7]=0; tgtx[c_8]=0; tgty[c_8]=0; tgtz[c_8]=0; -- len3 ------------------------------------------------------------------------ function math.len3(x,y,z) local l l=math.sqrt(x^2+y^2+z^2) return l end -- GETLPOS --------------------------------------------------------------------- function getlpos(lx,ly,lz,cn) local x,y,z -- Y軸回転を差し引く(-AYだけ回転させる) z=lz*math.cos(_AY(cn))+lx*math.sin(_AY(cn)) x=lx*math.cos(_AY(cn))-lz*math.sin(_AY(cn)) lz=z lx=x -- X軸回転を差し引く(-AXだけ回転させる) z=lz*math.cos(_AX(cn))-ly*math.sin(_AX(cn)) y=ly*math.cos(_AX(cn))+lz*math.sin(_AX(cn)) lz=z ly=y -- Z軸回転を差し引く(-AZだけ回転させる) y=ly*math.cos(_EZ(cn))-lx*math.sin(_EZ(cn)) x=lx*math.cos(_EZ(cn))+ly*math.sin(_EZ(cn)) ly=y lx=x return lx,ly,lz end -- 重心位置 -------------------------------------------------------------------- function gpos(cn) local gx=0 local gy=0 local gz=0 local c for i=0,cstep-1,1 do c=cn+i gx=gx+_X(c) gy=gy+_Y(c) gz=gz+_Z(c) end gx=gx/cstep gy=gy/cstep gz=gz/cstep return gx,gy,gz end -- 重心速度 -------------------------------------------------------------------- function gvel(cn) local gx,gy,gz local c1,c2,c3,c4,c5 c1=cn+1 c2=cn+2 c3=cn+3 c4=cn+4 c5=cn+5 gx=(_VX(cn)+_VX(c1)+_VY(c2)-_VY(c3)+_VX(c4)+_VX(c5))/6 gy=(_VY(cn)+_VZ(c1)-_VX(c2)+_VX(c3)-_VZ(c4)-_VY(c5))/6 gz=(_VZ(cn)-_VY(c1)+_VZ(c2)+_VZ(c3)+_VY(c4)-_VZ(c5))/6 return gx,gy,gz end -- 速度(慣性)補正 ------------------------------------------------------------ function vel_hosei(lx,ly,lz,cn) local a=0.25 local b=1 local vx,vy,vz vx,vy,vz=gvel(cn) lx=lx-vx*math.abs(vx)*math.max(0,b-a*math.abs(lx)) ly=ly-vy*math.abs(vy)*math.max(0,b-a*math.abs(ly)) lz=lz-vz*math.abs(vz)*math.max(0,b-a*math.abs(lz)) return lx,ly,lz end -- 重力補正 -------------------------------------------------------------------- function gravity_hosei(cn) local lx,ly,lz lx=0 ly=1.1 lz=0 lx,ly,lz=getlpos(lx,ly,lz,cn) return lx,ly,lz end -- ターゲット座標 -------------------------------------------------------------- function target(cn) local t local lx,ly,lz,dst local gx,gy,gz local vx,vy,vz gx,gy,gz=gpos(cn) if(mode==1)or((mode==2)and(cn==c_1)) then while true do lx=tgtx[cn]-gx ly=tgty[cn]-gy lz=tgtz[cn]-gz dst=math.len3(lx,ly,lz) if(dst>50) then break end tgtx[cn]=math.floor(math.random(801))-400 tgty[cn]=math.floor(math.random(151))+50 tgtz[cn]=math.floor(math.random(801))-400 end elseif(mode==2) then if(cn==c_1) then t=c_8 else t=cn-cstep end tgtx[cn],tgty[cn],tgtz[cn]=gpos(t) elseif(mode==3) then if(cn==c_1) then lx=tgtx[cn]-gx ly=tgty[cn]-gy lz=tgtz[cn]-gz dst=math.len3(lx,ly,lz) else dst=101 end if(dst>100) then lx,ly,lz=gpos(c_1) tgtx[cn]=tgtx[c_1] tgty[cn]=tgty[c_1] tgtz[cn]=tgtz[c_1] end elseif(mode==4) then vx,vy,vz=gvel(cn) tgtx[cn]=_X(c_0) tgty[cn]=_Y(c_0)+2+math.sqrt(vx^2+vy^2+vz^2)/10 tgtz[cn]=_Z(c_0) elseif(mode==5) then vx,vy,vz=gvel(cn) tgtx[cn]=_OX() tgty[cn]=_OY()+2+math.sqrt(vx^2+vy^2+vz^2)/10 tgtz[cn]=_OZ() elseif(mode==6) then local c,cx,cy,cz c=(cn-1)/cstep*45+_TICKS() c=math.rad(math.mod(c,360))*3 cx,cy,cz=_OX(),_OY(),_OZ() lx,ly,lz=_X(c_0),_Y(c_0),_Z(c_0) vx,vy,vz=gvel(cn) t=math.sqrt(vx^2+vy^2+vz^2)/10 tgtx[cn]=cx+3*math.sin(c) tgty[cn]=cy+t tgtz[cn]=cz+3*math.cos(c) else local cx,cy,cz cx,cy,cz=_X(c_0),_Y(c_0),_Z(c_0) while true do lx=tgtx[cn]-gx ly=tgty[cn]-gy lz=tgtz[cn]-gz dst=math.len3(lx,ly,lz) if(dst>3) then break end tgtx[cn]=math.floor(math.random(21))-10+cx tgty[cn]=math.floor(math.random(5))+cy tgtz[cn]=math.floor(math.random(21))-10+cz end end lx=tgtx[cn]-gx ly=tgty[cn]-gy lz=tgtz[cn]-gz return lx,ly,lz end -- ジェット出力 ---------------------------------------------------------------- function jet_power(cn) local lx,ly,lz,dst,pow local jpowu,jpowd,jpowf,jpowb,jpowl,jpowr local r,c lx,ly,lz=target(cn) lx,ly,lz=getlpos(lx,ly,lz,cn) dst=math.len3(lx,ly,lz) if(mode==0) then pow=0 elseif(mode<3) then if(_H(cn)>=0) then pow=50000 else pow=1000000 end else -- 速度(慣性)補正 lx,ly,lz=vel_hosei(lx,ly,lz,cn) pow=math.min(dst*dst*5000,1000000) end r=math.sqrt(lx*lx+lz*lz) c=math.atan2(r,ly) jpowu= pow*math.cos(c) r=math.sqrt(lx*lx+ly*ly) c=math.atan2(r,lz) jpowf=-pow*math.cos(c) r=math.sqrt(ly*ly+lz*lz) c=math.atan2(r,lx) jpowl= pow*math.cos(c) -- 重力補正 if(mode>0) then lx,ly,lz=gravity_hosei(cn) pow=5000 r=math.sqrt(lx*lx+lz*lz) c=math.atan2(r,ly) jpowu=jpowu+pow*math.cos(c) r=math.sqrt(lx*lx+ly*ly) c=math.atan2(r,lz) jpowf=jpowf-pow*math.cos(c) r=math.sqrt(ly*ly+lz*lz) c=math.atan2(r,lx) jpowl=jpowl+pow*math.cos(c) end return jpowu,jpowf,jpowl end -- メイン ---------------------------------------------------------------------- function main() local t,c local gx,gy,gz if(init==nil) then for i=7,0,-1 do c=c_1+i*cstep t=_SPLIT(c) end end if(FLAG==1) then if(_KEY(0)>0)or(_KEY(3)>0) then mode=math.mod(mode+1,8) else mode=math.mod(mode+7,8) end end JPOWU_1,JPOWF_1,JPOWL_1=jet_power(c_1) JPOWU_2,JPOWF_2,JPOWL_2=jet_power(c_2) JPOWU_3,JPOWF_3,JPOWL_3=jet_power(c_3) JPOWU_4,JPOWF_4,JPOWL_4=jet_power(c_4) JPOWU_5,JPOWF_5,JPOWL_5=jet_power(c_5) JPOWU_6,JPOWF_6,JPOWL_6=jet_power(c_6) JPOWU_7,JPOWF_7,JPOWL_7=jet_power(c_7) JPOWU_8,JPOWF_8,JPOWL_8=jet_power(c_8) gx,gy,gz=gpos(c_1) vel=math.len3(_VX(c_1),_VY(c_1),_VZ(c_1)) out(0,"FPS=",_FPS(),", VEL=",vel*3.6,"km/h") out(1,"MODE=",mode) out(2,"X=",gx,", Y=",gy,", Z=",gz) end }