//© Casper Schuirink / OC Graphics // //function search (startpoint, endpoint) { // inittime = getTimer(); // var points = new Array(); // var sb = 0; // points[sb] = startpoint; // var st = 1; // var n; // var c; // var p; // var tn; // var i; // var v; // var index = new Array(); // for (v in table) { // index[v] = table[v]; // } // while (sb != st) { // n = points[sb]; // tn = n-1; // if (!index[tn]) { // index[tn] = n; // points[st] = tn; // if (tn == endpoint) { // final = new Array(); // final[0] = tn; // c = 1; // p = tn; // while (index[p] != startpoint) { // p = index[p]; // final[c] = p; // c++; // } // final.reverse(); // _parent.message = "It took "+(getTimer()-inittime)+" miliseconds to find this path."; // trail.play(); // return; // } // st++; // } // // tn = n+1; // if (!index[tn]) { // index[tn] = n; // points[st] = tn; // if (tn == endpoint) { // final = new Array(); // final[0] = tn; // c = 1; // p = tn; // while (index[p] != startpoint) { // p = index[p]; // final[c] = p; // c++; // } // final.reverse(); // _parent.message = "It took "+(getTimer()-inittime)+" miliseconds to find this path."; // trail.play(); // return; // } // st++; // } // // tn = n+100; // if (!index[tn]) { // index[tn] = n; // points[st] = tn; // if (tn == endpoint) { // final = new Array(); // final[0] = tn; // c = 1; // p = tn; // while (index[p] != startpoint) { // p = index[p]; // final[c] = p; // c++; // } // final.reverse(); // _parent.message = "It took "+(getTimer()-inittime)+" miliseconds to find this path."; // trail.play(); // return; // } // st++; // } // // tn = n-100; // if (!index[tn]) { // index[tn] = n; // points[st] = tn; // if (tn == endpoint) { // final = new Array(); // final[0] = tn; // c = 1; // p = tn; // while (index[p] != startpoint) { // p = index[p]; // final[c] = p; // c++; // } // final.reverse(); // _parent.message = "It took "+(getTimer()-inittime)+" miliseconds to find this path."; // trail.play(); // return; // } // st++; // } // // tn = n+99; // if (!index[tn]) { // index[tn] = n; // points[st] = tn; // if (tn == endpoint) { // final = new Array(); // final[0] = tn; // c = 1; // p = tn; // while (index[p] != startpoint) { // p = index[p]; // final[c] = p; // c++; // } // final.reverse(); // _parent.message = "It took "+(getTimer()-inittime)+" miliseconds to find this path."; // trail.play(); // return; // } // st++; // } // // tn = n+101; // if (!index[tn]) { // index[tn] = n; // points[st] = tn; // if (tn == endpoint) { // final = new Array(); // final[0] = tn; // c = 1; // p = tn; // while (index[p] != startpoint) { // p = index[p]; // final[c] = p; // c++; // } // final.reverse(); // _parent.message = "It took "+(getTimer()-inittime)+" miliseconds to find this path."; // trail.play(); // return; // } // st++; // } // // tn = n-99; // if (!index[tn]) { // index[tn] = n; // points[st] = tn; // if (tn == endpoint) { // final = new Array(); // final[0] = tn; // c = 1; // p = tn; // while (index[p] != startpoint) { // p = index[p]; // final[c] = p; // c++; // } // final.reverse(); // _parent.message = "It took "+(getTimer()-inittime)+" miliseconds to find this path."; // trail.play(); // return; // } // st++; // } // // tn = n-101; // if (!index[tn]) { // index[tn] = n; // points[st] = tn; // if (tn == endpoint) { // final = new Array(); // final[0] = tn; // c = 1; // p = tn; // while (index[p] != startpoint) { // p = index[p]; // final[c] = p; // c++; // } // final.reverse(); // _parent.message = "It took "+(getTimer()-inittime)+" miliseconds to find this path."; // trail.play(); // return; // } // st++; // } // // sb++; // } // trail.gotoAndStop(1); // _parent.message = "Sorry, no path exists!"; //} // //*********************** //***start_of_bytecode*** //*********************** // constants inittime, points, Array, startpoint, table, endpoint, final, reverse, _parent, message, 'It took ', ' miliseconds to find this path.', trail, 'play', 'gotoAndStop', 'Sorry, no path exists!', myfunction, loaded, Movieclip, prototype, search function search(startpoint, endpoint) push inittime // gettimer // setvariable //inittime=getTimer() push points, 0, Array // new // varequals //var points=new Array() push points // getvariable //points=?[Object] push 0, startpoint // getvariable //startpoint=? setmember //points[sb]=startpoint //######### Alternate for..in loop. Very 'illegal' stuff going on here :) push table // getvariable //table=?[Object] setregister r:1 //r:1=table[Object](reference) pop push table //table enumerate //list table[Object] contents start10: setregister r:0 //store top value push null equals branchiftrue out10 push r:0, r:1, r:0 // getmember //table[r:0]=? (r:1[r:0]=?) varequals // var ####=#### (var r:0=r:1[r:0]) branch start10 // out10: //######### end of for..in loop push 0 // setregister r:0 //sb=0 (r:0=0) pop push 1 // setregister r:2 //st=1 (r:2=1) pop // ########### while-loop here ############ start9: push r:0, r:2 //sb|st equals //sb==st (r:0==r:2) yes:jump to out3|no:continue with list branchiftrue failure push points // getvariable //points=?[Object] push r:0 //sb getmember //points[sb]=? (points[r:0]=?) setregister r:1 //n=points[sb] (r:1=points[r:0]) pop //// //// //// //// ////eerste push r:1 //n decrement //-- setregister r:3 //tn=n-- (r:3=r:1--) pop // ########### if-statement here ########### push r:3 //eval(tn)=? (eval(r:3)=?) getvariable // //eval(tn)==true (eval(r:3)==true) yes:jump to out1|no:continue with list branchiftrue skip2 push r:3, r:1 //tn|n varequals //var eval(tn)=n (var eval(r:3)=r:1) push points // getvariable //points=?[Object] push r:2, r:3 //st setmember //points[st]=tn (points[r:2]=r:3) // ########### if-statement here ########### **************************************** push endpoint // getvariable // getvariable // branchiftrue calcpath // ######################################### **************************************** push r:2 //st increment //++ setregister r:2 //st++ (r:2++) pop skip2: // ######################################### //// //// //// ////tweede push r:1 //n increment //-- setregister r:3 //tn=n++ (r:3=r:1++) pop // ########### if-statement here ########### push r:3 // getvariable // branchiftrue skip4 // push r:3, r:1 // varequals // push points // getvariable // push r:2, r:3 // setmember // // ########### if-statement here ########### **************************************** push endpoint // getvariable // getvariable // branchiftrue calcpath // ######################################### **************************************** push r:2 // increment // setregister r:2 // pop skip4: // ######################################### //// //// //// ////derde push r:1, 100 // add //n+100 setregister r:3 //tn=n+100 pop // ########### if-statement here ########### push r:3 // getvariable // branchiftrue skip6 push r:3, r:1 // varequals // push points // getvariable // push r:2, r:3 // setmember // // ########### if-statement here ########### **************************************** push endpoint // getvariable // getvariable // branchiftrue calcpath push r:2 // increment // setregister r:2 // pop skip6: // ######################################### //// //// //// ////vierde push r:1, 100 // subtract //n-100 setregister r:3 //tn=n-100 pop // ########### if-statement here ########### push r:3 // getvariable // branchiftrue skip8 push r:3, r:1 // varequals // push points // getvariable // push r:2, r:3 // setmember // // ########### if-statement here ########### **************************************** push endpoint // getvariable // getvariable // branchiftrue calcpath // ######################################### **************************************** push r:2 // increment // setregister r:2 // pop skip8: // ######################################### //// //// //// ////vijfde push r:1, 99 // add //n+99 setregister r:3 //tn=n+99 pop // ########### if-statement here ########### push r:3 // getvariable // branchiftrue skip10 push r:3, r:1 // varequals // push points // getvariable // push r:2, r:3 // setmember // // ########### if-statement here ########### **************************************** push endpoint // getvariable // getvariable // branchiftrue calcpath // ######################################### **************************************** push r:2 // increment // setregister r:2 // pop skip10: // ######################################### //// //// //// ////zesde push r:1, 101 // add //n+101 setregister r:3 //tn=n+101 pop // ########### if-statement here ########### push r:3 // getvariable // branchiftrue skip12 push r:3, r:1 // varequals // push points // getvariable // push r:2, r:3 // setmember // // ########### if-statement here ########### **************************************** push endpoint // getvariable // getvariable // branchiftrue calcpath // ######################################### **************************************** push r:2 // increment // setregister r:2 // pop skip12: // ######################################### //// //// //// ////zevende push r:1, 99 // subtract //n-99 setregister r:3 //tn=n-99 pop // ########### if-statement here ########### push r:3 // getvariable // branchiftrue skip14 push r:3, r:1 // varequals // push points // getvariable // push r:2, r:3 // setmember // // ########### if-statement here ########### **************************************** push endpoint // getvariable // getvariable // branchiftrue calcpath // ######################################### **************************************** push r:2 // increment // setregister r:2 // pop skip14: // ######################################### //// //// //// ////achtste push r:1, 101 // subtract //n-101 setregister r:3 //tn=n-101 pop // ########### if-statement here ########### push r:3 // getvariable // branchiftrue skip16 push r:3, r:1 // varequals // push points // getvariable // push r:2, r:3 // setmember // // ########### if-statement here ########### **************************************** push endpoint // getvariable // getvariable // branchiftrue calcpath // ######################################### **************************************** push r:2 // increment // setregister r:2 // pop skip16: // ######################################### //// //// //// //// ////// ######################################### push r:0 //sb increment //++ setregister r:0 //sb++ (r:0++) pop branch start9 out9: // ######################################### calcpath: push r:0, 0 // initarray // setregister r:0 // pop push r:0, 0, endpoint getvariable // setmember // push 1 // setregister r:1 // pop push endpoint getvariable // setregister r:2 // pop // ########### while-loop here ############ start2: push r:2 // getvariable // push startpoint // getvariable // equals // branchiftrue out2 push r:2 // getvariable // setregister r:2 // pop push r:0, r:1, r:2 // setmember // push r:1 // increment // setregister r:1 // pop branch start2 out2: // ######################################### push r:0, reverse // callmethod // pop // push final, r:0 // setvariable // push _parent // getvariable // push message, 'It took ' // gettimer // push inittime // getvariable // subtract // add // push ' milisecondes to find this path.' // add // setmember // push trail // getvariable // push 'play' // callmethod // pop // push undef // return // //###################################################################### failure: push 1,1,trail //1|1 getvariable //trail=? push 'gotoAndStop' // callmethod //trail.gotoAndStop(1) pop // push _parent // getvariable //_parent=? push message, 'Sorry, no path exists!' // setmember //_parent.message='Sorry, no path exists!' end //**************************************************************************** //signal to the parent movieclip that the function is loaded and can be prototyped for easy access. push myfunction, loaded // setvariable //myfunction="loaded" push MovieClip getvariable push prototype getmember push search push search getvariable setmember // push null // dup // setregister r:0 // dup // setregister r:1 // dup // setregister r:2 // dup // setregister r:3