angrylion wrote:
Prince of Persia (NES) password generator for Windows. Source code included. Enjoy and comment...
http://w14.easy-share.com/1701000098.html
This is what i now have thus far as JavaScript: (no, it doesn't seem to work due to some glitch on my behalf.)
If anyone can figure out why the following JavaScript I wrote doesn't do anything please post the corrections in this thread. (Firebug says nothing is wrong with it for some reason.)
Code:
<html><head><title>PRINCE OF PERSIA PASSWORD PROGRAM</title></head><body><h1>PRINCE OF PERSIA PASSWORD PROGRAM</h1>
<script type="text/javascript">
var var_Password=new Array();
var_Password[0]=0; /*$0766 in RAM, when a player enters it*/
var_Password[1]=0; /*$0767 in RAM, when a player enters it*/
var_Password[2]=0; /*$0768 in RAM, when a player enters it*/
var_Password[3]=0; /*$0769 in RAM, when a player enters it*/
var_Password[4]=0; /*$076A in RAM, when a player enters it*/
var_Password[5]=0; /*$076B in RAM, when a player enters it*/
var_Password[6]=0; /*$076C in RAM, when a player enters it*/
var_Password[7]=0; /*$076D in RAM, when a player enters it*/
var var_Invalidity=0; /*$0764 in RAM*/
var var_Level=0; /*$0070 in RAM*/
var var_TimeTens=0; /*$04C5 in RAM*/
var var_TimeOnes=0; /*$04C6 in RAM*/
var var_Byte4BF=0;
var var_Byte17=0;
var var_Byte18=0;
var var_a=0;
var var_x=0;
var var_c=0; /*carry flag*/
/*former char Byte76A is Password[4] now, former char Byte76C is Password[6] now*/
main();
function main()
{
var var_Choice=prompt('Enter g if you'd like to generate a new password./nEnter a to analyze an existing password./n','');
/*flushall();*/
if (var_Choice=='a')
PasswordChecker();
if (var_Choice=='g')
PasswordGenerator();
if (var_Choice=='s') /*'level function' is basic when generating a pass*/
BuildORTable(); /*so here a bit of 'hidden' investigation, which will be useful*/
/*if I ever decide to rewrite this prog to output all passes possible, not just one*/
prompt('Press enter to quit./n','');
/*getch();*/
return 0;
}
function PasswordChecker()
{
var var_InputString=new Array(); /*one extra byte needed due to fgets*/
var_i=0;
var var_string=prompt('Please enter your password to test:/n','');
var_InputString(0)=ord(substr(var_string,0,1);)
var_InputString(1)=ord(substr(var_string,1,1);)
var_InputString(2)=ord(substr(var_string,2,1);)
var_InputString(3)=ord(substr(var_string,3,1);)
var_InputString(4)=ord(substr(var_string,4,1);)
var_InputString(5)=ord(substr(var_string,5,1);)
var_InputString(6)=ord(substr(var_string,6,1);)
var_InputString(7)=ord(substr(var_string,7,1);)
for(var_i=0;var_i<8;var_i++)
{
if((var_InputString[var_i]>57)||(var_InputString[var_i]<48))
{
document.write('This string contains non-digits.<br>');
return;
}
else
var_Password[var_i]=var_InputString[var_i]-48; /*ascii to digit*/
}
sub_BB4F(var_Password);
if (var_Invalidity==1)
{
document.write('This password is invalid.<br>');
return;
}
document.write('Level: '+var_Level);
document.write(' Time: '+TimeTens+''+TimeOnes);
if (var_Level==15)
document.write('Level 15 doesn't exist. So-called level 15 passwords are programming mistakes and cause system hang.<br>');
if (var_Level==16)
document.write('Level 16 doesn't exist. So-called level 16 passwords are programming mistakes and lead you to a buggy screen where Prince can't move.<br>');
return;
}
function sub_BB4F(var_Password) /*var_BB4F*/
{
var_a=0;
var_x=0;
while(var_x<8)
{
var_a=var_a+var_Password[var_x];
var_x++;
}
if(var_a==0)
{
var_Invalidity=1; /*var_BBC0*/
return;
}
var_Byte17=var_Password[4]; /*var_BB63*/
var_Byte18=var_Password[6];
var_Password[4]=0;
var_Password[6]=0;
sub_BB21(); /*var_BB72,calculates and writes 1st checksum to Password[4], 2nd checksum to Password[6]*/
if (var_Password[4]!=var_Byte17)
{
var_Invalidity=1;
return;
}
if (var_Password[6]!=var_Byte18) /*var_BB7C*/
{
var_Invalidity=1;
return;
}
var_Invalidity=0;//var_BB85
var_a=var_Password[7];
sub_BBEA();
var_a=var_a&3; /*var_BB8E*/
var_a=var_a*4;
var_Password[7]=var_a;
var_a=var_Password[1];
sub_BBE0(); /*var_BB98*/
var_a=var_a|var_Password[7];
var_Level=var_a+1; /*+1 is my insertion*/
/*if (Level!=1)//I chose to omit this var_BBA2-var_BBA4 code b/c it's unknown what byte at var_06EE means*/
var_a=var_Password[0];
sub_BBE0(); /*var_BBAA*/
var_TimeTens=var_a;
var_a=var_Password[3];
sub_BBEA();
var_TimeOnes=var_a;
return; /*var_BBBF*/
}
function SEC_SBC_6502(var_operand)
{
var_c=1;
if((var_a-var_operand)>=0)
var_a=var_a-var_operand;
else
{
var_a=var_a-var_operand+256;
var_c=0;
};
}
function ADC_6502_simplified(var_operand)
{
if((var_a+var_operand)<256)
var_a=var_a+var_operand;
else var_a=var_a+var_operand-256;
}
function sub_BB21()
{
var_x=0;
BB23:
var_a=var_Password[4];
var_a=var_a+var_Password[var_x];
if(var_a<10)
{
BB46:
var_Password[4]=var_a; /*var_BB46*/
var_x++;
if (var_x!=8)
goto BB23;
else return; /*var_BB4E*/
}
else
/*var_BB2E*/
{
Byte4BF=a;
a=Password[6];
a++;//we came here b/c c=1
if (a<10)
goto BB3D;
else
SEC_SBC_6502(10);//can we get here? I doubt...
BB3D: var_Password[6]=a;
a=Byte4BF;
SEC_SBC_6502(10);//var_BB44, no danger of negative result
goto BB46;
}
}
function sub_BBE0()
{
SEC_SBC_6502(var_Password[2]);
if (var_c==1)
return;
ADC_6502_simplified(10);
return;
}
function sub_BBEA()
{
SEC_SBC_6502(var_Password[5]);
if(var_c==1)
return;
ADC_6502_simplified(10);
return;
}
function PasswordGenerator()
{
var var_DesiredLevel=0;
var var_DesiredTimeTens=0;
var var_DesiredTimeOnes=0;
var_GeneratedPass=new Array();
var_GeneratedPass[0]=0;
var_GeneratedPass[1]=0;
var_GeneratedPass[2]=0;
var_GeneratedPass[3]=0;
var_GeneratedPass[4]=0;
var_GeneratedPass[5]=0;
var_GeneratedPass[6]=0;
var_GeneratedPass[7]=0;
var_InputLevel=new Array();
var_InputLevel[0]=0; /*one extra char needed b/c of fgets*/
var_InputLevel[1]=0; /*one extra char needed b/c of fgets*/
var_InputLevel[2]=0; /*one extra char needed b/c of fgets*/
var_InputTime=new Array();
var_InputTime[0]=0;
var_InputTime[1]=0;
var_InputTime[2]=0;
var_i=0;
var var_level=prompt('Enter a desired level: ','');
var_InputLevel[0]=ord(substr(var_level,0,1));
var_InputLevel[1]=ord(substr(var_level,1,1));
var var_time=('Enter remaining time: ','');
var_InputTime[0]=ord(substr(var_time,0,1));
var_InputTime[1]=ord(substr(var_time,1,1));
if((var_InputLevel[0]==32)||(var_InputLevel[0]==10))/*our defence against user's folly comes first*/
var_InputLevel[0]=48;
if((var_InputTime[0]==32)||(var_InputTime[0]==10))
var_InputTime[0]=48;
if((var_InputLevel[1]==32)||(var_InputLevel[1]==10))
{
var_InputLevel[1]=var_InputLevel[0];
var_InputLevel[0]=48;
}
if((var_InputTime[1]==32)||(var_InputTime[1]==10))
{
var_InputTime[1]=var_InputTime[0];
var_InputTime[0]=48;
}
for(var_i=0;var_i<2;var_i++)/*then comes a real check*/
{
if ((var_InputLevel[var_i]>57)||(var_InputLevel[var_i]<48)||(var_InputTime[var_i]>57)||(var_InputTime[var_i]<48))
{
document.write('Your data contains non-digits.<br>');
return;
}
};
if((atoi(var_InputLevel)>0)&&(atoi(var_InputLevel)<15))
var_DesiredLevel=atoi(var_InputLevel);
else
{
document.write('Your level is out of 1-14 range.<br>');
return;
};
var_DesiredTimeTens=var_InputTime[0]-48; /*0 mins is also possible:11111112*/
var_DesiredTimeOnes=var_InputTime[1]-48; /*99 mins is also possible:99097030*/
var_SimplifiedLevelGenerator(var_GeneratedPass, var_DesiredLevel);
var_GeneratedPass[0]=var_DesiredTimeTens;
var_GeneratedPass[3]=var_DesiredTimeOnes; /*now 6 digits are filled*/
for(var_i=0;var_i<8;var_i++)
var_Password[var_i]=var_GeneratedPass[var_i];
var_Password[4]=0;
var_Password[6]=0;
sub_BB21(); /*calculates checksums for us*/
var_GeneratedPass[4]=var_Password[4];
var_GeneratedPass[6]=var_Password[6]; /*now all 8 digits are stored*/
for(var_i=0;var_i<8;var_i++) /*let's check our password*/
var_Password[var_i]=var_GeneratedPass[var_i];
sub_BB4F(var_Password);
if(var_Invalidity==1)
{
document.write('This passgen miserably failed due to bugs.<br>');
return;
}
document.write('Your password is generated and confirmed to be correct: <br>');
for(var_i=0;var_i<8;var_i++)
{
document.write(var_GeneratedPass[var_i]);
}
document.write('<br>');
return;
}
function BuildORTable()
{
/*our goal's to find all n2res/n8res combos for the given level*/
var_x=0;
var_y=0;
var var_current_result=0;
var var_n2results=new Array();
var_n2results[0]=0; /*SBC(N2-N3)*/
var_n2results[1]=1;
var_n2results[2]=2;
var_n2results[3]=3;
var_n2results[4]=4;
var_n2results[5]=5;
var_n2results[6]=6;
var_n2results[7]=7;
var_n2results[8]=8;
var_n2results[9]=9;
var_n8results[0]=0;
var_n8results[1]=4;
var_n8results[2]=8;
var_n8results[3]=12;
for(var_x=0;var_x<10;var_x++)
{
for(var_y=0;var_y<4;var_y++)
{
var_current_result=var_n2result[var_x]|var_n8result[var_y];
if(var_current_result<14)
document.write(var_current_result+1)+': '+var_n2result[var_x]+' '+var_n8result[var_y])+'<br>');
}
}
document.write('Now smaller results: <br>');
for(var_x=0;var_x<10;var_x++)
/*seek what sBC(N8-N6) should amount to*/
{
for(var_y=0;var_y<4;var_y++)
{
var_current_result=(var_x&3)*var_4;
if(var_current_result==var_n8result[var_y])
document.write(var_n2result[var_y].': '.var_x.'<br>');
}
}
return 0;
}
function BuildParticularLevelsArray(var_DesiredLevel)
{
return 0;
}
function SimplifiedLevelGenerator(var_PassToFill,var_Level)//finds just one 2nd,3rd,6th,8th digit combo
{
var_x=0;
var_y=0;
var var_n2result=0;
var var_n8result=0;
var var_current_result=0;
var var_n2results=new Array();
var_n2results[0]=0; /*SBC(N2-N3)*/
var_n2results[1]=1;
var_n2results[2]=2;
var_n2results[3]=3;
var_n2results[4]=4;
var_n2results[5]=5;
var_n2results[6]=6;
var_n2results[7]=7;
var_n2results[8]=8;
var_n2results[9]=9;
var_n8results[0]=0;
var_n8results[1]=4;
var_n8results[2]=8;
var_n8results[3]=12;
var var_n8minorresult=0; //SBC(N8-N6)
for(var_x=0;var_x<10;var_x++)
{
for(var_y=0;var_y<4;var_y++)
{
var_current_result=var_n2results[var_x]|var_n8results[var_y];
if(var_current_result==(var_Level-1))
/*level x is internally stored in x-1 presentation*/
{
var_n2result=var_n2results[var_x];
var_n8result=var_n8results[var_y];
break;
};
}
}
for(var_x=0;var_x<10;var_x++)
{
if ((var_x&3)*4==var_n8result)
{
var_n8minorresult=var_x;
break;
}
}
var_PassToFill[2]=0;
var_PassToFill[1]=var_n2result;
var_PassToFill[5]=0;
var_PassToFill[7]=var_n8minorresult;
}
function getinput(var_box,var_default){
return prompt(var_box, var_default);
}
function atoi(var_string){
return ParseInt(var_string);
}
function ord(var_string ) {
return var_string.charCodeAt(0);
}
</script>
</body></html>