// Fannel Ver3 val{ jp1_1(default=0,min=-200000,max=200000,step=0,disp=0) jp2_1(default=0,min=-200000,max=200000,step=0,disp=0) jp3_1(default=0,min=-200000,max=200000,step=0,disp=0) jp4_1(default=0,min=-200000,max=200000,step=0,disp=0) jp5_1(default=0,min=-200000,max=200000,step=0,disp=0) jp6_1(default=0,min=-200000,max=200000,step=0,disp=0) jp7_1(default=0,min=-200000,max=200000,step=0,disp=0) jp8_1(default=0,min=-200000,max=200000,step=0,disp=0) beam_1(default=0,min=0,max=100000,step=0,disp=0) col_1(default=#0000FF,step=0,disp=0) dmp_1(default=0.3,disp=0) spr_1(default=0.3,disp=0) jp1_2(default=0,min=-200000,max=200000,step=0,disp=0) jp2_2(default=0,min=-200000,max=200000,step=0,disp=0) jp3_2(default=0,min=-200000,max=200000,step=0,disp=0) jp4_2(default=0,min=-200000,max=200000,step=0,disp=0) jp5_2(default=0,min=-200000,max=200000,step=0,disp=0) jp6_2(default=0,min=-200000,max=200000,step=0,disp=0) jp7_2(default=0,min=-200000,max=200000,step=0,disp=0) jp8_2(default=0,min=-200000,max=200000,step=0,disp=0) beam_2(default=0,min=0,max=100000,step=0,disp=0) col_2(default=#FF0000,step=0,disp=0) dmp_2(default=0.3,disp=0) spr_2(default=0.3,disp=0) } /////////////////////////////////////////////////////////////////////////////// key{ } /////////////////////////////////////////////////////////////////////////////// body{ core(name=c_1,color=col_1){ n:arm(power=beam_1,option=25000,spring=spr_1,damper=dmp_1,color=col_1){ s:trimf(angle=90,spring=spr_1,damper=dmp_1,color=col_1){ w:jet(power=jp3_1,spring=spr_1,damper=dmp_1,color=col_1){ e:trimf(angle=90,spring=spr_1,damper=dmp_1,color=col_1){ n:jet(power=jp7_1,spring=spr_1,damper=dmp_1,color=col_1){} s:jet(power=jp8_1,spring=spr_1,damper=dmp_1,color=col_1){} } } e:jet(power=jp4_1,spring=spr_1,damper=dmp_1,color=col_1){} } } s:arm(spring=spr_1,damper=dmp_1,color=col_1){} w:jet(power=jp1_1,spring=spr_1,damper=dmp_1,color=col_1){ e:trimf(angle=90,spring=spr_1,damper=dmp_1,color=col_1){ n:jet(power=jp5_1,spring=spr_1,damper=dmp_1,color=col_1){} s:jet(power=jp6_1,spring=spr_1,damper=dmp_1,color=col_1){} } } e:jet(power=jp2_1,spring=spr_1,damper=dmp_1,color=col_1){} } //----------------------------------------------------------------------------- core(name=c_2,color=col_2){ n:arm(power=beam_2,option=75000,spring=spr_2,damper=dmp_2,color=col_2){ s:trimf(angle=90,spring=spr_2,damper=dmp_2,color=col_2){ w:jet(power=jp3_2,spring=spr_2,damper=dmp_2,color=col_2){ e:trimf(angle=90,spring=spr_2,damper=dmp_2,color=col_2){ n:jet(power=jp7_2,spring=spr_2,damper=dmp_2,color=col_2){} s:jet(power=jp8_2,spring=spr_2,damper=dmp_2,color=col_2){} } } e:jet(power=jp4_2,spring=spr_2,damper=dmp_2,color=col_2){} } } s:arm(spring=spr_2,damper=dmp_2,color=col_2){} w:jet(power=jp1_2,spring=spr_2,damper=dmp_2,color=col_2){ e:trimf(angle=90,spring=spr_2,damper=dmp_2,color=col_2){ n:jet(power=jp5_2,spring=spr_2,damper=dmp_2,color=col_2){} s:jet(power=jp6_2,spring=spr_2,damper=dmp_2,color=col_2){} } } e:jet(power=jp2_2,spring=spr_2,damper=dmp_2,color=col_2){} } //----------------------------------------------------------------------------- } /////////////////////////////////////////////////////////////////////////////// Lua{ baseh=_Y(c_1) c_1,c_2=C_1,C_2 mass={};hp={} tgtx={};tgty={};tgtz={} gx0={};gy0={};gz0={} gx1={};gy1={};gz1={} gvx={};gvy={};gvz={};gv={} tgtx[c_1],tgty[c_1],tgtz[c_1]=0,baseh,0 tgtx[c_2],tgty[c_2],tgtz[c_2]=0,baseh,0 gx0[c_1],gy0[c_1],gz0[c_1]=0,baseh,0 gx0[c_2],gy0[c_2],gz0[c_2]=0,baseh,0 gx1[c_1],gy1[c_1],gz1[c_1]=0,baseh,0 gx1[c_2],gy1[c_2],gz1[c_2]=0,baseh,0 attack=0 -- time ----------------------------------------------------------------------- function time(t) local hh=math.floor(t/108000) local mm=math.mod(math.floor(t/1800),60) local ss=math.mod(math.floor(t/30),60) local ms=math.mod(math.floor(t/30*100),100) local str=string.format("Time : %d'%02d\"%02d.%02d",hh,mm,ss,ms) return str end -- 角度補正 ------------------------------------------------------------------- function angle_hosei(a) while a> math.pi do a=a-math.pi*2 end while a<-math.pi do a=a+math.pi*2 end return a end -- 出力リミッタ --------------------------------------------------------------- function limiter(jp,limit) jp=math.min(limit,math.max(-limit,jp)) return jp end -- GETWPOS -------------------------------------------------------------------- function getwpos(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 -- GETLPOS -------------------------------------------------------------------- function getlpos(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 gvel(cn) gx1[cn],gy1[cn],gz1[cn]=_GX(cn),_GY(cn),_GZ(cn) gvx[cn],gx0[cn]=(gx1[cn]-gx0[cn])*30,gx1[cn] gvy[cn],gy0[cn]=(gy1[cn]-gy0[cn])*30,gy1[cn] gvz[cn],gz0[cn]=(gz1[cn]-gz0[cn])*30,gz1[cn] gv[cn]=math.sqrt(gvx[cn]^2+gvy[cn]^2+gvz[cn]^2)*3.6 end -- ジェット出力並進制御 ------------------------------------------------------- function jetlshift(lx,ly,lz,p,cn) local jp={} local br,t lx,ly,lz=getlpos(lx,ly,lz,cn) local vx,vy,vz=getlpos(gvx[cn],gvy[cn],gvz[cn],cn) if math.abs(ly)<15 then br=0.2 else br=0 end t=p*(ly-vy*br) for i=1,2 do jp[i]=t end if math.abs(lx)<15 then br=0.2 else br=0 end t=p*(lx-vx*br) for i=3,4 do jp[i]=t end if math.abs(lz)<15 then br=0.2 else br=0 end t=p*(lz-vz*br)*0.5 for i=5,8 do jp[i]=t end for i=1,8 do jp[i]=limiter(jp[i],100000) end return jp[1],jp[2],jp[3],jp[4],jp[5],jp[6],jp[7],jp[8] end -- ジェット出力回転制御 ------------------------------------------------------- function jetlroll(rx,ry,rz,p,cn) local jp={} local br=0.2 jp[1]=p*(rz-_WZ(cn)*br)*0.5 jp[2]=-jp[1] jp[3]=jp[1] jp[4]=jp[2] jp[5]=p*(rx-_WX(cn)*br) jp[6]=-jp[5] jp[7]=-p*(ry-_WY(cn)*br) jp[8]=-jp[7] for i=1,8 do jp[i]=limiter(jp[i],100000) end return jp[1],jp[2],jp[3],jp[4],jp[5],jp[6],jp[7],jp[8] end -- 重力補正 ------------------------------------------------------------------- function gravity_hosei(cn) local jp={} local g=mass[cn]*9.80665*3 jp[1],jp[2],jp[3],jp[4],jp[5],jp[6],jp[7],jp[8]=jetlshift(0,1,0,g,cn) return jp[1],jp[2],jp[3],jp[4],jp[5],jp[6],jp[7],jp[8] end -- 並進目標 ----------------------------------------------------------------- function target_p(cn,ct,r) local lx,ly,lz,dst local s=0 if(s==0) then if(math.random(100)<7) then tgtx[cn]=math.random()*2*r-r tgty[cn]=math.random()*2*r-r tgtz[cn]=math.random()*2*r-r end local k=0.5 lx=tgtx[cn]+gx1[ct]+gvx[ct]*k ly=tgty[cn]+gy1[ct]+gvy[ct]*k lz=tgtz[cn]+gz1[ct]+gvz[ct]*k if(ly=0) then k=(-b-math.sqrt(d))/2/a else k=0 end lx=lx+vx*k ly=ly+vy*k lz=lz+vz*k local rx=math.atan2(ly,math.sqrt(lx^2+lz^2))-_AX(cn) local ry=math.atan2(-lx,-lz)-_AY(cn) local rz=-_EZ(cn) rx=angle_hosei(rx) ry=angle_hosei(ry) return rx,ry,rz end -- ファンネル制御 ------------------------------------------------------------- function fannel(cn,ct) local jp={} local js={} local tx,ty,tz local beam=0 js[1],js[2],js[3],js[4],js[5],js[6],js[7],js[8]=gravity_hosei(cn) for i=1,8 do jp[i]=js[i] end local lx,ly,lz,dst=target_p(cn,ct,40) js[1],js[2],js[3],js[4],js[5],js[6],js[7],js[8]=jetlshift(lx,ly,lz,80000,cn) for i=1,8 do jp[i]=jp[i]+js[i] end local rx,ry,rz=target_r(cn,ct) js[1],js[2],js[3],js[4],js[5],js[6],js[7],js[8]=jetlroll(rx,ry,rz,40000,cn) for i=1,8 do jp[i]=jp[i]+js[i] end local a=math.rad(10) if(math.abs(rx)150) then beam=1000000 end return jp[1],jp[2],jp[3],jp[4],jp[5],jp[6],jp[7],jp[8],beam end -- 質量・HP計算・破壊チェック ------------------------------------------------- function mass_cal(s,e) local m,h=_M(s),_T(s) local n=h for i=s+1,e do if(_T(i)>0) then m=m+_M(i) h=h+_T(i) end n=math.min(n,_T(i)) end if(n<=0) then m,h=_M(s),0 for i=e,s,-1 do n=_BYE(i) end else h=h*n/10000 end return m,h end -- メイン --------------------------------------------------------------------- function main() mass[c_1],hp[c_1]=mass_cal(c_1,c_2-1) mass[c_2],hp[c_2]=mass_cal(c_2,_CHIPS()-1) gvel(c_1) gvel(c_2) JP1_1,JP2_1,JP3_1,JP4_1,JP5_1,JP6_1,JP7_1,JP8_1,BEAM_1=fannel(c_1,c_2) JP1_2,JP2_2,JP3_2,JP4_2,JP5_2,JP6_2,JP7_2,JP8_2,BEAM_2=fannel(c_2,c_1) if(attack==0) then math.randomseed(_TICKS()) else attack=attack+1 end if(_KEY(7)>0) then attack=1 end if(_KEY(8)>0) then attack=0 end local str=time(_TICKS()) out(0,string.format("FPS=%.2f, Chips=%d, Screen=%dx%d, %s",_FPS(),_CHIPS(),_WIDTH(),_HEIGHT(),str)) out(1,string.format("HP=%06d, Speed=%06.2fkm/h",hp[c_1],gv[c_1])) out(2,string.format("HP=%06d, Speed=%06.2fkm/h",hp[c_2],gv[c_2])) out(3,"A:Attack, S:Stop") end }