QUOTE(belzebub @ Apr 27 2012, 12:11 AM)

ah okay, yeah it was some heavy stuff to go through :/ was so happy when the first fumens rolled out lol xD
i tried to read the code of fumen encoding...
seems not so hard? or problem about reading comments in Japanese?
CODE
function encode(focusset){ // ★ データ出力 // output data
var tx=document.getElementById("tx");
var out=document.getElementById("out");
var url=document.getElementById("url");
var submit=document.getElementById("submit");
var view=document.getElementById("view");
pushframe(frame);
encc=0;
fldrepaddr=-1;
for(i=0;i<220;i++)encf[i]=0;
for(e=0;encc<enclim&&e<=framemax;e++){
// フィールド出力 // output field blocks
for(j=0;j<220;j++)encf[j]=af[e*220+j]+8-encf[j];
fc=0;
for(j=0;j<219;j++){
fc++;
if(encf[j]!=encf[j+1]){
tmp=encf[j]*220+(fc-1);
enc[encc++]=tmp%64;tmp=Math.floor(tmp/64);
enc[encc++]=tmp%64;tmp=Math.floor(tmp/64);
fc=0;
}
}
fc++;
tmp=encf[j]*220+(fc-1);
enc[encc++]=tmp%64;tmp=Math.floor(tmp/64);
enc[encc++]=tmp%64;tmp=Math.floor(tmp/64);
fc=0;
if(enc[encc-2]+enc[encc-1]*64==1979){
if(fldrepaddr<0){
fldrepaddr=encc++;enc[fldrepaddr]=0;
}else{
if(enc[fldrepaddr]<63){enc[fldrepaddr]++;encc-=2;}else{fldrepaddr=encc++;enc[fldrepaddr]=0;}
}
}else{
if(fldrepaddr>=0)fldrepaddr=-1;
}
// タイプ,角度,座標出力 // output piece type, rotation, position
cmstrrep=(e>0)?ac[e-1]:'';
refreshquiz(e,1,0);
cmstrrep=escape(cmstrrep).substring(0,4095);
tmpstr=escape(ac[e]).substring(0,4095);
tmplen=tmpstr.length;
if(tmplen>4095)tmplen=4095;
tmp=ap[e*3+0]+ap[e*3+1]*8+ap[e*3+2]*32+au[e]*7040+am[e]*14080+(e==0)*ct*28160+(tmpstr!=cmstrrep)*56320+ad[e]*112640;
enc[encc++]=tmp%64;tmp=Math.floor(tmp/64);
enc[encc++]=tmp%64;tmp=Math.floor(tmp/64);
enc[encc++]=tmp%64;tmp=Math.floor(tmp/64);
// コメント出力 // output comments
if(tmpstr!=cmstrrep){
tmp=tmplen;
enc[encc++]=tmp%64;tmp=Math.floor(tmp/64);
enc[encc++]=tmp%64;tmp=Math.floor(tmp/64);
for(i=0;i<tmplen;i+=4){
tmp=(((ins=asctbl.indexOf(tmpstr.charAt(i+0)))>=0?ins:0)%96);
tmp+=(((ins=asctbl.indexOf(tmpstr.charAt(i+1)))>=0?ins:0)%96)*96;
tmp+=(((ins=asctbl.indexOf(tmpstr.charAt(i+2)))>=0?ins:0)%96)*9216;
tmp+=(((ins=asctbl.indexOf(tmpstr.charAt(i+3)))>=0?ins:0)%96)*884736;
enc[encc++]=tmp%64;tmp=Math.floor(tmp/64);
enc[encc++]=tmp%64;tmp=Math.floor(tmp/64);
enc[encc++]=tmp%64;tmp=Math.floor(tmp/64);
enc[encc++]=tmp%64;tmp=Math.floor(tmp/64);
enc[encc++]=tmp%64;tmp=Math.floor(tmp/64);
}
}
// フィールド記憶 // field memory? seems this is how it reduces length with normal game progress
for(j=0;j<220;j++)encf[j]=af[e*220+j];
if(!ad[e]){ // ミノ接着 // mino locking
// ブロック配置 // set up the blocks
if(ap[e*3+0]>0){
for(j=0;j<4;j++)encf[ap[e*3+2]+b[ap[e*3+0]*32+ap[e*3+1]*8+j*2+1]*10+b[ap[e*3+0]*32+ap[e*3+1]*8+j*2]-11]=ap[e*3+0];
}
// フィールドずらし消去 // line clear
for(i=20,k=20;k>=0;k--){
chk=0;for(j=0;j<10;j++)chk+=(encf[k*10+j]>0);
if(chk<10){
for(j=0;j<10;j++)encf[i*10+j]=encf[k*10+j];
i--;
}
}
for(;i>=0;i--)for(j=0;j<10;j++)encf[i*10+j]=0;
// せり上がり //garbage
if(au[e]){for(i=0;i<210;i++)encf[i]=encf[i+10];for(i=210;i<220;i++)encf[i]=0;}
// ミラー発動 //mirror
if(am[e])for(i=0;i<21;i++)for(j=0;j<5;j++){tmp=encf[i*10+j];encf[i*10+j]=encf[i*10+9-j];encf[i*10+9-j]=tmp;}
}
}
encstr='v110@';
for(i=0;i<encc;i++){
encstr=encstr+enctbl.charAt(enc[i]);
if(i%47==41)encstr=encstr+"?";
}
tx.value=encstr;
tmp=location.href.indexOf('?');if(tmp<0)tmp=location.href.length;
tmp2=location.href.indexOf('#');if(tmp2<0)tmp2=location.href.length;
if(tmp2<tmp)tmp=tmp2;
url.value=location.href.substring(0,tmp)+'?'+encstr;
if(submit!=null){submit.disabled=false;}
view.value=location.href.substring(0,tmp)+'?m'+encstr.substring(1);
out.style.color='black';
out.style.backgroundColor="white";
refreshquiz(frame,0,1);
keybuttonenable(p[0]>0);
if(focusset){
url.focus();
}
}
//declaration
f=new Array(220);encf=new Array(220);af=new Array(220*(framelim+1)); // 仮想フィールド // frames
p=new Array(3);ap=new Array(3*(framelim+1)); // ピース種類,角度,座標 // piece type, rotation, position
pcustom=new Array(-1,-1,-1,-1); // カスタムピース座標 // custom piece
pce=0; // カスタムピース作成色 // color of custom piece
au=new Array(framelim); // せり上がり // raise garbage or not
am=new Array(framelim); // 反転スイッチ // mirror or not
ac=new Array(framelim); // コメント // comments
ad=new Array(framelim); // 接着 // lock or not =w=
//and that's all?